[SCM] hdf5 branch, master, updated. upstream/1.8.8-41-ga81877f

Francesco Paolo Lovergine frankie at debian.org
Mon Feb 13 13:46:36 UTC 2012


The following commit has been merged in the master branch:
commit 4b2a5e7685af9b78dd0288b5fce61a9ce1d8635b
Author: Francesco Paolo Lovergine <frankie at debian.org>
Date:   Mon Feb 13 12:47:49 2012 +0100

    Syncing against 1.8.8 upstream version.

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8798106..cb4450e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -165,6 +165,18 @@ STRING (REGEX REPLACE ".*#define[ \t]+H5_VERS_SUBRELEASE[ \t]+\"([0-9A-Za-z.]*)\
 #MESSAGE (STATUS "VERSION: ${H5_VERS_MAJOR}.${H5_VERS_MINOR}.${H5_VERS_RELEASE}-${H5_VERS_SUBRELEASE}")
 
 #-----------------------------------------------------------------------------
+# parse the full soversion number from config/lt_vers.am and include in H5_SOVERS_INFO
+#-----------------------------------------------------------------------------
+FILE (READ ${HDF5_SOURCE_DIR}/config/lt_vers.am _lt_vers_am_contents)
+STRING (REGEX REPLACE ".*LT_VERS_INTERFACE[ \t]+=[ \t]+([0-9]*).*$"
+    "\\1" H5_SOVERS_MAJOR ${_lt_vers_am_contents})
+STRING (REGEX REPLACE ".*LT_VERS_REVISION[ \t]+=[ \t]+([0-9]*).*$"
+    "\\1" H5_SOVERS_MINOR ${_lt_vers_am_contents})
+STRING (REGEX REPLACE ".*LT_VERS_AGE[ \t]+=[ \t]+([0-9]*).*$"
+    "\\1" H5_SOVERS_RELEASE ${_lt_vers_am_contents})
+MESSAGE (STATUS "SOVERSION: ${H5_SOVERS_MAJOR}.${H5_SOVERS_MINOR}.${H5_SOVERS_RELEASE}")
+
+#-----------------------------------------------------------------------------
 # Basic HDF5 stuff here
 #-----------------------------------------------------------------------------
 SET (HDF5_PACKAGE "hdf5")
@@ -172,7 +184,12 @@ SET (HDF5_PACKAGE_NAME "HDF5")
 SET (HDF5_PACKAGE_VERSION "${H5_VERS_MAJOR}.${H5_VERS_MINOR}.${H5_VERS_RELEASE}")
 SET (HDF5_PACKAGE_VERSION_MAJOR "${H5_VERS_MAJOR}.${H5_VERS_MINOR}")
 SET (HDF5_PACKAGE_VERSION_MINOR "${H5_VERS_RELEASE}")
-SET (HDF5_PACKAGE_VERSION_STRING "${HDF5_PACKAGE_VERSION}-${H5_VERS_SUBRELEASE}")
+IF (NOT "${H5_VERS_SUBRELEASE}" STREQUAL "")
+  SET (HDF5_PACKAGE_VERSION_STRING "${HDF5_PACKAGE_VERSION}-${H5_VERS_SUBRELEASE}")
+ELSE (NOT "${H5_VERS_SUBRELEASE}" STREQUAL "")
+  SET (HDF5_PACKAGE_VERSION_STRING "${HDF5_PACKAGE_VERSION}")
+ENDIF (NOT "${H5_VERS_SUBRELEASE}" STREQUAL "")
+SET (HDF5_PACKAGE_SOVERSION "${H5_SOVERS_MAJOR}.${H5_SOVERS_MINOR}.${H5_SOVERS_RELEASE}")
 SET (HDF5_PACKAGE_STRING "${HDF5_PACKAGE_NAME} ${HDF5_PACKAGE_VERSION_STRING}")
 SET (HDF5_PACKAGE_TARNAME "hdf5")
 SET (HDF5_PACKAGE_URL "http://www.hdfgroup.org")
@@ -243,11 +260,15 @@ ENDIF (WIN32 AND NOT CYGWIN)
 #-----------------------------------------------------------------------------
 OPTION (BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
 SET (LIB_TYPE STATIC)
+SET (H5_ENABLE_SHARED_LIB NO)
+SET (H5_ENABLE_STATIC_LIB NO)
 IF (BUILD_SHARED_LIBS)
   SET (LIB_TYPE SHARED)
   SET (H5_BUILT_AS_DYNAMIC_LIB 1)
+  SET (H5_ENABLE_SHARED_LIB YES)
 ELSE (BUILD_SHARED_LIBS)
   SET (H5_BUILT_AS_STATIC_LIB 1)
+  SET (H5_ENABLE_STATIC_LIB YES)
   IF (NOT WIN32)
     # should this be a user setting : Everyone uses it anyway ?
     ADD_DEFINITIONS (-DPIC)
@@ -266,6 +287,17 @@ IF (BUILD_STATIC_EXECS)
 ENDIF (BUILD_STATIC_EXECS)
 
 #-----------------------------------------------------------------------------
+# Option to Build Static PIC
+#-----------------------------------------------------------------------------
+OPTION (BUILD_STATIC_PIC "Build Static PIC" OFF)
+IF (BUILD_STATIC_PIC)
+  IF (NOT WIN32)
+    SET (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
+    SET (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIC")
+  ENDIF (NOT WIN32)
+ENDIF (BUILD_STATIC_PIC)
+
+#-----------------------------------------------------------------------------
 # Option to use code coverage
 #-----------------------------------------------------------------------------
 OPTION (HDF5_ENABLE_COVERAGE "Enable code coverage for Libraries and Programs" OFF)
@@ -354,10 +386,22 @@ ENDIF (CMAKE_BUILD_TYPE MATCHES Debug)
 # Compiler specific flags : Shouldn't there be compiler tests for these
 #-----------------------------------------------------------------------------
 IF (CMAKE_COMPILER_IS_GNUCC)
+  IF (CMAKE_BUILD_TYPE MATCHES Debug)
+    SET (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS} -std=c99 -finline-functions -fno-common")
+  ELSE (CMAKE_BUILD_TYPE MATCHES Debug)
   SET (CMAKE_C_FLAGS "${CMAKE_ANSI_CFLAGS} ${CMAKE_C_FLAGS} -std=c99 -fomit-frame-pointer -finline-functions -fno-common")
+  ENDIF (CMAKE_BUILD_TYPE MATCHES Debug)
 ENDIF (CMAKE_COMPILER_IS_GNUCC)
 
 #-----------------------------------------------------------------------------
+# Option to embed library info into executables
+#-----------------------------------------------------------------------------
+OPTION (HDF5_ENABLE_EMBEDDED_LIBINFO "embed library info into executables" ON)
+IF (HDF5_ENABLE_EMBEDDED_LIBINFO)
+  SET (H5_HAVE_EMBEDDED_LIBINFO 1)
+ENDIF (HDF5_ENABLE_EMBEDDED_LIBINFO)
+
+#-----------------------------------------------------------------------------
 # Option to allow the user to disable compiler warnings
 #-----------------------------------------------------------------------------
 OPTION (HDF5_DISABLE_COMPILER_WARNINGS "Disable compiler warnings" OFF)
@@ -448,6 +492,7 @@ MACRO (HDF5_SETUP_FILTERS FILTER)
   OPTION (HDF5_USE_FILTER_${FILTER} "Use the ${FILTER} Filter" ON)
   IF (HDF5_USE_FILTER_${FILTER})
     SET (H5_HAVE_FILTER_${FILTER} 1)
+    SET (FILTERS "${FILTERS} ${FILTER}")
   ENDIF (HDF5_USE_FILTER_${FILTER})
   # MESSAGE (STATUS "Filter ${FILTER} is ${HDF5_USE_FILTER_${FILTER}}")
 ENDMACRO (HDF5_SETUP_FILTERS)
@@ -508,6 +553,9 @@ IF (HDF5_ENABLE_Z_LIB_SUPPORT)
     SET (H5_HAVE_ZLIB_H 1)
     SET (H5_HAVE_LIBZ 1)
   ENDIF (NOT H5_ZLIB_HEADER)
+  IF (H5_HAVE_FILTER_DEFLATE)
+    SET (EXTERNAL_FILTERS "${EXTERNAL_FILTERS} DEFLATE")
+  ENDIF (H5_HAVE_FILTER_DEFLATE)
   SET (LINK_LIBS ${LINK_LIBS} ${ZLIB_LIBRARIES})
   INCLUDE_DIRECTORIES (${ZLIB_INCLUDE_DIRS})
   MESSAGE (STATUS "Filter ZLIB is ON")
@@ -516,7 +564,6 @@ ENDIF (HDF5_ENABLE_Z_LIB_SUPPORT)
 #-----------------------------------------------------------------------------
 # Option for SzLib support
 #-----------------------------------------------------------------------------
-SET (CMAKE_MODULE_PATH ${HDF5_RESOURCES_DIR} ${CMAKE_MODULE_PATH})
 OPTION (HDF5_ENABLE_SZIP_SUPPORT "Use SZip Filter" OFF)
 IF (HDF5_ENABLE_SZIP_SUPPORT)
   OPTION (HDF5_ENABLE_SZIP_ENCODING "Use SZip Encoding" OFF)
@@ -542,8 +589,12 @@ IF (HDF5_ENABLE_SZIP_SUPPORT)
   SET (LINK_LIBS ${LINK_LIBS} ${SZIP_LIBRARIES})
   INCLUDE_DIRECTORIES (${SZIP_INCLUDE_DIRS})
   MESSAGE (STATUS "Filter SZIP is ON")
+  IF (H5_HAVE_FILTER_SZIP)
+    SET (EXTERNAL_FILTERS "${EXTERNAL_FILTERS} DECODE")
+  ENDIF (H5_HAVE_FILTER_SZIP)
   IF (HDF5_ENABLE_SZIP_ENCODING)
     SET (H5_HAVE_SZIP_ENCODER 1)
+    SET (EXTERNAL_FILTERS "${EXTERNAL_FILTERS} ENCODE")
   ENDIF (HDF5_ENABLE_SZIP_ENCODING)
 ENDIF (HDF5_ENABLE_SZIP_SUPPORT)
 
@@ -553,6 +604,7 @@ ENDIF (HDF5_ENABLE_SZIP_SUPPORT)
 OPTION (HDF5_PACKAGE_EXTLIBS "CPACK - include external libraries" OFF)
 IF (NOT HDF5_EXTERNALLY_CONFIGURED)
   IF (HDF5_PACKAGE_EXTLIBS)
+    SET (HDF5_NO_PACKAGES OFF CACHE BOOL "CPACK - Disable packaging" FORCE)
     IF (HDF5_ENABLE_Z_LIB_SUPPORT AND ZLIB_FOUND)
       PACKAGE_ZLIB_LIBRARY (${HDF5_ALLOW_EXTERNAL_SUPPORT} ${LIB_TYPE})
     ENDIF (HDF5_ENABLE_Z_LIB_SUPPORT AND ZLIB_FOUND)
@@ -575,22 +627,18 @@ IF (WIN32 AND NOT CYGWIN)
     ENDIF (HDF5_ENABLE_PARALLEL)
     SET (H5_HAVE_THREADSAFE 1)
     IF (H5_HAVE_IOEO)
-    MESSAGE (STATUS " **** Windows Threads only available in WINVER>=0x600 (Vista or Windows 7)**** ")
+      MESSAGE (STATUS " **** Windows Threads only available in WINVER>=0x600 (Vista or Windows 7)**** ")
       SET (H5_HAVE_WIN_THREADS 1)
+    ELSE (H5_HAVE_IOEO)
+      IF (NOT H5_HAVE_PTHREAD_H)
+        SET (H5_HAVE_THREADSAFE 0)
+        MESSAGE (FATAL " **** Threadsafe option requires thread library **** ")
+      ENDIF (NOT H5_HAVE_PTHREAD_H)
     ENDIF (H5_HAVE_IOEO)
   ENDIF (HDF5_ENABLE_THREADSAFE)
 ENDIF (WIN32 AND NOT CYGWIN)
 
 #-----------------------------------------------------------------------------
-# Option to use PACKED BITS SUPPORT
-#-----------------------------------------------------------------------------
-OPTION (HDF5_USE_H5DUMP_PACKED_BITS "Use the PACKED BITS feature in h5dump" OFF)
-SET (H5_HAVE_H5DUMP_PACKED_BITS 0)
-IF (HDF5_USE_H5DUMP_PACKED_BITS)
-  SET (H5_HAVE_H5DUMP_PACKED_BITS 1)
-ENDIF (HDF5_USE_H5DUMP_PACKED_BITS)
-
-#-----------------------------------------------------------------------------
 # Add the HDF5 Library Target to the build
 #-----------------------------------------------------------------------------
 ADD_SUBDIRECTORY (${HDF5_SOURCE_DIR}/src ${PROJECT_BINARY_DIR}/src)
@@ -660,6 +708,7 @@ SET (H5_FC_FUNC_ "H5_FC_FUNC_(name,NAME) name ## _")
 IF (EXISTS "${HDF5_SOURCE_DIR}/fortran" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/fortran")
   OPTION (HDF5_BUILD_FORTRAN "Build FORTRAN support" OFF)
   IF (HDF5_BUILD_FORTRAN)
+    OPTION (HDF5_ENABLE_F2003 "Enable FORTRAN 2003 Standard" OFF)
     INCLUDE (${HDF5_RESOURCES_DIR}/HDF5UseFortran.cmake)
     ADD_SUBDIRECTORY (${HDF5_SOURCE_DIR}/fortran ${PROJECT_BINARY_DIR}/fortran)
     IF (HDF5_BUILD_HL_LIB)
@@ -733,52 +782,14 @@ IF (NOT HDF5_INSTALL_NO_DEVELOPMENT)
 ENDIF (NOT HDF5_INSTALL_NO_DEVELOPMENT)
 
 #-----------------------------------------------------------------------------
-# Option for external libraries
-#-----------------------------------------------------------------------------
-IF (NOT HDF5_EXTERNALLY_CONFIGURED)
-  IF (HDF5_PACKAGE_EXTLIBS)
-    IF (HDF5_ENABLE_Z_LIB_SUPPORT AND ZLIB_FOUND)
-      INSTALL (
-          FILES ${ZLIB_INCLUDE_DIR}/zlib.h
-          DESTINATION ${HDF5_INSTALL_INCLUDE_DIR}
-          COMPONENT headers
-      )
-    ENDIF (HDF5_ENABLE_Z_LIB_SUPPORT AND ZLIB_FOUND)
-    IF (HDF5_ENABLE_SZIP_SUPPORT AND SZIP_FOUND)
-      INSTALL (
-          FILES ${SZIP_INCLUDE_DIR}/szlib.h ${SZIP_INCLUDE_DIR}/szip_adpt.h ${SZIP_INCLUDE_DIR}/ricehdf.h
-          DESTINATION ${HDF5_INSTALL_INCLUDE_DIR}
-          COMPONENT headers
-      )
-    ENDIF (HDF5_ENABLE_SZIP_SUPPORT AND SZIP_FOUND)
-    INSTALL (
-        FILES ${EXTERNAL_HEADER_LIST}
-        DESTINATION ${HDF5_INSTALL_INCLUDE_DIR}
-        COMPONENT headers
-    )
-    INSTALL(
-        FILES ${EXTERNAL_LIBRARY_LIST}
-        DESTINATION ${HDF5_INSTALL_LIB_DIR}
-        COMPONENT libraries
-    )
-    IF (WIN32 AND BUILD_SHARED_LIBS)
-      INSTALL(
-          FILES ${EXTERNAL_LIBRARYDLL_LIST}
-          DESTINATION ${HDF5_INSTALL_BIN_DIR}
-          COMPONENT libraries
-      )
-    ENDIF (WIN32 AND BUILD_SHARED_LIBS)
-  ENDIF (HDF5_PACKAGE_EXTLIBS)
-ENDIF (NOT HDF5_EXTERNALLY_CONFIGURED)
-
-#-----------------------------------------------------------------------------
 # Add Target(s) to CMake Install for import into other projects
 #-----------------------------------------------------------------------------
 IF (NOT HDF5_EXTERNALLY_CONFIGURED)
   INSTALL (
       EXPORT ${HDF5_EXPORTED_TARGETS}
-      DESTINATION ${HDF5_INSTALL_DATA_DIR}/cmake/hdf5-${HDF5_PACKAGE_VERSION}
+      DESTINATION ${HDF5_INSTALL_DATA_DIR}/cmake/hdf5
       FILE hdf5-targets.cmake
+      COMPONENT configinstall
   )
 ENDIF (NOT HDF5_EXTERNALLY_CONFIGURED)
 
@@ -818,7 +829,8 @@ IF (NOT HDF5_EXTERNALLY_CONFIGURED)
   )
   INSTALL (
       FILES ${HDF5_BINARY_DIR}/CMakeFiles/hdf5-config.cmake
-      DESTINATION ${HDF5_INSTALL_DATA_DIR}/cmake/hdf5-${HDF5_PACKAGE_VERSION}
+      DESTINATION ${HDF5_INSTALL_DATA_DIR}/cmake/hdf5
+      COMPONENT configinstall
   )
 ENDIF (NOT HDF5_EXTERNALLY_CONFIGURED)
 
@@ -832,11 +844,25 @@ IF (NOT HDF5_EXTERNALLY_CONFIGURED)
   )
   INSTALL (
       FILES ${HDF5_BINARY_DIR}/CMakeFiles/hdf5-config-version.cmake
-      DESTINATION ${HDF5_INSTALL_DATA_DIR}/cmake/hdf5-${HDF5_PACKAGE_VERSION}
+      DESTINATION ${HDF5_INSTALL_DATA_DIR}/cmake/hdf5
+      COMPONENT configinstall
   )
 ENDIF (NOT HDF5_EXTERNALLY_CONFIGURED)
 
 #-----------------------------------------------------------------------------
+# Configure the libhdf5.settings file for the lib info
+#-----------------------------------------------------------------------------
+IF (H5_WORDS_BIGENDIAN)
+  SET (BYTESEX big-endian)
+ELSE (H5_WORDS_BIGENDIAN)
+  SET (BYTESEX little-endian)
+ENDIF (H5_WORDS_BIGENDIAN)
+CONFIGURE_FILE (
+    ${HDF5_RESOURCES_DIR}/libhdf5.settings.cmake.in 
+    ${HDF5_BINARY_DIR}/libhdf5.settings @ONLY
+)
+
+#-----------------------------------------------------------------------------
 # Add Document File(s) to CMake Install
 #-----------------------------------------------------------------------------
 IF (NOT HDF5_EXTERNALLY_CONFIGURED)
@@ -851,6 +877,7 @@ IF (NOT HDF5_EXTERNALLY_CONFIGURED)
   IF (EXISTS "${HDF5_SOURCE_DIR}/release_docs" AND IS_DIRECTORY "${HDF5_SOURCE_DIR}/release_docs")
     SET (release_files
         ${HDF5_SOURCE_DIR}/release_docs/CMake.txt
+        ${HDF5_SOURCE_DIR}/release_docs/Using_CMake.txt
         ${HDF5_SOURCE_DIR}/release_docs/COPYING
         ${HDF5_SOURCE_DIR}/release_docs/HISTORY-1_8.txt
         ${HDF5_SOURCE_DIR}/release_docs/INSTALL
@@ -872,7 +899,7 @@ IF (NOT HDF5_EXTERNALLY_CONFIGURED)
     IF (HDF5_ENABLE_PARALLEL)
       SET (release_files
           ${release_files}
-          ${HDF5_SOURCE_DIR}/release_docs/INSTALL_parallel.txt
+          ${HDF5_SOURCE_DIR}/release_docs/INSTALL_parallel
       )
     ENDIF (HDF5_ENABLE_PARALLEL)
     INSTALL (
@@ -886,7 +913,7 @@ ENDIF (NOT HDF5_EXTERNALLY_CONFIGURED)
 #-----------------------------------------------------------------------------
 # Set the cpack variables
 #-----------------------------------------------------------------------------
-IF (NOT HDF5_EXTERNALLY_CONFIGURED)
+IF (NOT HDF5_EXTERNALLY_CONFIGURED AND NOT HDF5_NO_PACKAGES)
   SET (CPACK_PACKAGE_VENDOR "HDF Group")
   SET (CPACK_PACKAGE_NAME "${HDF5_PACKAGE_NAME}")
   SET (CPACK_PACKAGE_INSTALL_DIRECTORY "${HDF5_PACKAGE_NAME}")
@@ -900,8 +927,6 @@ IF (NOT HDF5_EXTERNALLY_CONFIGURED)
     SET (CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/release_docs/RELEASE.txt")
   ENDIF (EXISTS "${HDF5_SOURCE_DIR}/release_docs")
   SET (CPACK_PACKAGE_RELOCATABLE TRUE)
-  #only needed for cmake 2.8.3
-  SET (CPACK_MONOLITHIC_INSTALL 1)  
   IF (WIN32)
     SET (CPACK_NSIS_CONTACT "help at hdfgroup.org")
     SET (CPACK_NSIS_MODIFY_PATH ON)
@@ -909,10 +934,29 @@ IF (NOT HDF5_EXTERNALLY_CONFIGURED)
   ELSE (WIN32)
     SET (CPACK_RPM_COMPONENT_INSTALL ON)
   ENDIF (WIN32)
+  SET (CPACK_MONOLITHIC_INSTALL ON)
   
-  INCLUDE (CPack)
   INCLUDE(InstallRequiredSystemLibraries)
 
+  SET (CPACK_INSTALL_CMAKE_PROJECTS "${HDF5_BINARY_DIR};HDF5;ALL;/")
+  
+  IF (HDF5_PACKAGE_EXTLIBS)
+    IF (HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
+      IF (ZLIB_FOUND AND ZLIB_USE_EXTERNAL)
+        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};ZLIB;libraries;/")
+        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};ZLIB;headers;/")
+        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${ZLIB_INCLUDE_DIR_GEN};ZLIB;configinstall;/")
+      ENDIF (ZLIB_FOUND AND ZLIB_USE_EXTERNAL)
+      IF (SZIP_FOUND AND SZIP_USE_EXTERNAL)
+        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};SZIP;libraries;/")
+        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};SZIP;headers;/")
+        SET (CPACK_INSTALL_CMAKE_PROJECTS "${CPACK_INSTALL_CMAKE_PROJECTS};${SZIP_INCLUDE_DIR_GEN};SZIP;configinstall;/")
+      ENDIF (SZIP_FOUND AND SZIP_USE_EXTERNAL)
+    ENDIF (HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "SVN" OR HDF5_ALLOW_EXTERNAL_SUPPORT MATCHES "TGZ")
+  ENDIF (HDF5_PACKAGE_EXTLIBS)
+  
+  INCLUDE (CPack)
+
   #---------------------------------------------------------------------------
   # Now list the cpack commands
   #---------------------------------------------------------------------------
@@ -934,6 +978,11 @@ IF (NOT HDF5_EXTERNALLY_CONFIGURED)
       DISPLAY_NAME "HDF5 Documents"
       GROUP Documents
   )
+  CPACK_ADD_COMPONENT (configinstall 
+      DISPLAY_NAME "HDF5 CMake files" 
+      DEPENDS libraries
+      GROUP Development
+  )
   
   IF (HDF5_BUILD_FORTRAN)
     CPACK_ADD_COMPONENT (fortlibraries 
@@ -1012,4 +1061,4 @@ IF (NOT HDF5_EXTERNALLY_CONFIGURED)
     )
   ENDIF (HDF5_BUILD_HL_LIB)
   
-ENDIF (NOT HDF5_EXTERNALLY_CONFIGURED)
+ENDIF (NOT HDF5_EXTERNALLY_CONFIGURED AND NOT HDF5_NO_PACKAGES)
diff --git a/CTestConfig.cmake b/CTestConfig.cmake
index d3ea7a3..655f76d 100644
--- a/CTestConfig.cmake
+++ b/CTestConfig.cmake
@@ -4,15 +4,14 @@
 ## # The following are required to uses Dart and the Cdash dashboard
 ##   ENABLE_TESTING()
 ##   INCLUDE(CTest)
+SET (CTEST_PROJECT_NAME "HDF5")
 
 SET (CTEST_DROP_METHOD "http")
 IF (CDASH_LOCAL)
-  SET (CTEST_PROJECT_NAME "HDF5.1.8")
   SET (CTEST_NIGHTLY_START_TIME "20:00:00 CST")
   SET (CTEST_DROP_SITE "nei.hdfgroup.uiuc.edu")
   SET (CTEST_DROP_LOCATION "/cdash/submit.php?project=HDF5.1.8")
 ELSE (CDASH_LOCAL)
-  SET (CTEST_PROJECT_NAME "HDF518")
   SET (CTEST_NIGHTLY_START_TIME "00:00:00 EST")
   SET (CTEST_DROP_SITE "cdash.hdfgroup.uiuc.edu")
   SET (CTEST_DROP_LOCATION "/submit.php?project=HDF518")
@@ -22,10 +21,6 @@ SET (CTEST_DROP_SITE_CDASH TRUE)
 SET (UPDATE_TYPE svn)
 SET (VALGRIND_COMMAND "/usr/bin/valgrind")
 SET (VALGRIND_COMMAND_OPTIONS "-v --tool=memcheck --leak-check=full --track-fds=yes --num-callers=50 --show-reachable=yes --track-origins=yes --malloc-fill=0xff --free-fill=0xfe")
-SET (MEMORYCHECK_COMMAND "/usr/bin/valgrind")
-SET (MEMORYCHECKCOMMAND "/usr/bin/valgrind")
-SET (CTEST_MEMORYCHECK_COMMAND_OPTIONS "-v --tool=memcheck --leak-check=full --track-fds=yes --num-callers=50 --show-reachable=yes --track-origins=yes --malloc-fill=0xff --free-fill=0xfe")
-SET (CTEST_MEMORYCHECKCOMMAND_OPTIONS "-v --tool=memcheck --leak-check=full --track-fds=yes --num-callers=50 --show-reachable=yes --track-origins=yes --malloc-fill=0xff --free-fill=0xfe")
 
 SET (CTEST_TESTING_TIMEOUT 3600) 
 SET (DART_TESTING_TIMEOUT 3600) 
diff --git a/MANIFEST b/MANIFEST
index 5212b9a..d82c0eb 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -64,6 +64,7 @@
 ./bin/mkdirs
 ./bin/mkinstalldirs
 ./bin/newer
+./bin/output_filter.sh
 ./bin/reconfigure      _DO_NOT_DISTRIBUTE_
 ./bin/release
 ./bin/runtest        _DO_NOT_DISTRIBUTE_
@@ -98,7 +99,6 @@
 ./config/linux-gnulibc1
 ./config/linux-gnulibc2
 ./config/lt_vers.am
-./config/mpich
 ./config/nec-superux14.1
 ./config/Makefile.am.blank
 ./config/pgi-fflags
@@ -145,10 +145,14 @@
 ./fortran/Makefile.am
 ./fortran/Makefile.in
 
+./fortran/robodoc.rc
+
 ./fortran/examples/Makefile.am
 ./fortran/examples/Makefile.in
 ./fortran/examples/attrexample.f90
 ./fortran/examples/compound.f90
+./fortran/examples/compound_fortran2003.f90
+./fortran/examples/compound_complex_fortran2003.f90
 ./fortran/examples/dsetexample.f90
 ./fortran/examples/fileexample.f90
 ./fortran/examples/groupexample.f90
@@ -164,17 +168,28 @@
 ./fortran/examples/rwdsetexample.f90
 ./fortran/examples/selectele.f90
 ./fortran/examples/testh5fc.sh.in
+./fortran/examples/nested_derived_type.f90
+./fortran/examples/rwdset_fortran2003.f90
+
 
 ./fortran/src/H5_f.c
 ./fortran/src/H5_ff.f90
+./fortran/src/H5_ff_F90.f90
+./fortran/src/H5_ff_F03.f90
 ./fortran/src/H5_DBLE_InterfaceInclude.f90
 ./fortran/src/H5_DBLE_InterfaceExclude.f90
 ./fortran/src/H5Af.c
 ./fortran/src/H5Aff.f90
+./fortran/src/H5Aff_F90.f90
+./fortran/src/H5Aff_F03.f90
 ./fortran/src/H5Df.c
 ./fortran/src/H5Dff.f90
+./fortran/src/H5Dff_F90.f90
+./fortran/src/H5Dff_F03.f90
 ./fortran/src/H5Ef.c
 ./fortran/src/H5Eff.f90
+./fortran/src/H5Eff_F90.f90
+./fortran/src/H5Eff_F03.f90
 ./fortran/src/H5FDmpiof.c
 ./fortran/src/H5FDmpioff.f90
 ./fortran/src/H5Ff.c
@@ -185,16 +200,26 @@
 ./fortran/src/H5Iff.f90
 ./fortran/src/H5Lf.c
 ./fortran/src/H5Lff.f90
+./fortran/src/H5Lff_F90.f90
+./fortran/src/H5Lff_F03.f90
 ./fortran/src/H5Of.c
 ./fortran/src/H5Off.f90
+./fortran/src/H5Off_F90.f90
+./fortran/src/H5Off_F03.f90
 ./fortran/src/H5Pf.c
 ./fortran/src/H5Pff.f90
+./fortran/src/H5Pff_F90.f90
+./fortran/src/H5Pff_F03.f90
 ./fortran/src/H5Rf.c
 ./fortran/src/H5Rff.f90
+./fortran/src/H5Rff_F90.f90
+./fortran/src/H5Rff_F03.f90
 ./fortran/src/H5Sf.c
 ./fortran/src/H5Sff.f90
 ./fortran/src/H5Tf.c
 ./fortran/src/H5Tff.f90
+./fortran/src/H5Tff_F90.f90
+./fortran/src/H5Tff_F03.f90
 ./fortran/src/H5Zf.c
 ./fortran/src/H5Zff.f90
 ./fortran/src/H5f90.h
@@ -213,6 +238,7 @@
 ./fortran/src/README_DEVELOPEMENT   _DO_NOT_DISTRIBUTE_
 ./fortran/src/h5fc.in
 ./fortran/src/hdf5_fortrandll.def
+./fortran/src/phdf5_fortrandll.def
 
 ./fortran/test/Makefile.am
 ./fortran/test/Makefile.in
@@ -220,22 +246,27 @@
 ./fortran/test/fflush2.f90
 ./fortran/test/fortranlib_test.f90
 ./fortran/test/fortranlib_test_1_8.f90
+./fortran/test/fortranlib_test_F03.f90
 ./fortran/test/t.c
 ./fortran/test/t.h
 ./fortran/test/tf.f90
 ./fortran/test/tH5A.f90
 ./fortran/test/tH5A_1_8.f90
 ./fortran/test/tH5D.f90
+./fortran/test/tH5E_F03.f90
 ./fortran/test/tH5E.f90
 ./fortran/test/tH5F.f90
 ./fortran/test/tH5G.f90
 ./fortran/test/tH5G_1_8.f90
 ./fortran/test/tH5I.f90
+./fortran/test/tH5L_F03.f90
 ./fortran/test/tH5O.f90
+./fortran/test/tH5P_F03.f90
 ./fortran/test/tH5P.f90
 ./fortran/test/tH5R.f90
 ./fortran/test/tH5S.f90
 ./fortran/test/tH5Sselect.f90
+./fortran/test/tH5T_F03.f90
 ./fortran/test/tH5T.f90
 ./fortran/test/tH5VL.f90
 ./fortran/test/tH5Z.f90
@@ -417,6 +448,7 @@
 ./release_docs/CMake.txt
 ./release_docs/INSTALL_parallel
 ./release_docs/RELEASE.txt
+./release_docs/Using_CMake.txt
 
 ./src/.indent.pro      _DO_NOT_DISTRIBUTE_
 ./src/hdf5.lnt        _DO_NOT_DISTRIBUTE_
@@ -507,6 +539,7 @@
 ./src/H5Eterm.h
 ./src/H5F.c
 ./src/H5Faccum.c
+./src/H5Fcwfs.c
 ./src/H5Fdbg.c
 ./src/H5Fefc.c
 ./src/H5Ffake.c
@@ -608,6 +641,7 @@
 ./src/H5HGpkg.h
 ./src/H5HGprivate.h
 ./src/H5HGpublic.h
+./src/H5HGquery.c
 ./src/H5HL.c
 ./src/H5HLcache.c
 ./src/H5HLdbg.c
@@ -810,6 +844,7 @@
 ./test/external.c
 ./test/error_test.c
 ./test/err_compat.c
+./test/filter_error.h5
 ./test/links_env.c
 ./test/family_v16_00000.h5
 ./test/family_v16_00001.h5
@@ -859,6 +894,8 @@
 ./test/mf.c
 ./test/mount.c
 ./test/mtime.c
+./test/multi_file_v16-r.h5
+./test/multi_file_v16-s.h5
 ./test/noencoder.h5
 ./test/ntypes.c
 ./test/ohdr.c
@@ -918,7 +955,6 @@
 ./test/tvltypes.c
 ./test/unlink.c
 ./test/vfd.c
-./test/vms_data.h5
 ./test/test_filters_le.hdf5
 ./test/test_filters_be.hdf5
 ./test/gen_filters.c
@@ -971,45 +1007,47 @@
 ./tools/h5import/h5import.c
 ./tools/h5import/h5importtest.c
 ./tools/h5import/h5importtestutil.sh
-./tools/h5import/testfiles/binfp32.conf
+
+# testfiles for h5import
+./tools/h5import/testfiles/binin32.h5
+./tools/h5import/testfiles/binin16.h5
+./tools/h5import/testfiles/txtfp32.txt
+./tools/h5import/testfiles/txtstr.conf
+./tools/h5import/testfiles/txtfp32.conf
+./tools/h5import/testfiles/binin8w.conf
+./tools/h5import/testfiles/binin8.h5
+./tools/h5import/testfiles/txtfp64.conf
+./tools/h5import/testfiles/binuin32.conf
+./tools/h5import/testfiles/txtuin32.txt
+./tools/h5import/testfiles/binuin16.conf
+./tools/h5import/testfiles/txtstr.h5
+./tools/h5import/testfiles/txtfp32.h5
+./tools/h5import/testfiles/txtin32.h5
+./tools/h5import/testfiles/txtin16.h5
+./tools/h5import/testfiles/binin8w.h5
+./tools/h5import/testfiles/txtin32.txt
 ./tools/h5import/testfiles/binfp64.conf
-./tools/h5import/testfiles/binin16.conf
-./tools/h5import/testfiles/binin32.conf
 ./tools/h5import/testfiles/binin8.conf
-./tools/h5import/testfiles/binuin16.conf
-./tools/h5import/testfiles/binuin32.conf
-./tools/h5import/testfiles/fp1.txt
-./tools/h5import/testfiles/fp2.txt
-./tools/h5import/testfiles/in1.txt
-./tools/h5import/testfiles/textfp32.conf
-./tools/h5import/testfiles/textfp64.conf
-./tools/h5import/testfiles/textin16.conf
-./tools/h5import/testfiles/textin32.conf
-./tools/h5import/testfiles/textin8.conf
-./tools/h5import/testfiles/textuin16.conf
-./tools/h5import/testfiles/textuin32.conf
-./tools/h5import/testfiles/test1.h5
-./tools/h5import/testfiles/test2.h5
-./tools/h5import/testfiles/test3.h5
-./tools/h5import/testfiles/test4.h5
-./tools/h5import/testfiles/test5.h5
-./tools/h5import/testfiles/test6.h5
-./tools/h5import/testfiles/test7.h5
-./tools/h5import/testfiles/test8.h5
-./tools/h5import/testfiles/test9.h5
-./tools/h5import/testfiles/test10.h5
-./tools/h5import/testfiles/test11.h5
-./tools/h5import/testfiles/test12.h5
-./tools/h5import/testfiles/test13.h5
-./tools/h5import/testfiles/test14.h5
-./tools/h5import/testfiles/test15.h5
-./tools/h5import/testfiles/textstr.conf
-./tools/h5import/testfiles/str.txt
+./tools/h5import/testfiles/txtin8.conf
+./tools/h5import/testfiles/binfp64.h5
+./tools/h5import/testfiles/txtstr.txt
+./tools/h5import/testfiles/txtin32.conf
+./tools/h5import/testfiles/txtin16.conf
+./tools/h5import/testfiles/txtin8.h5
+./tools/h5import/testfiles/txtuin32.conf
+./tools/h5import/testfiles/txtuin16.conf
+./tools/h5import/testfiles/binin32.conf
+./tools/h5import/testfiles/binin16.conf
+./tools/h5import/testfiles/txtfp64.h5
+./tools/h5import/testfiles/txtin16.txt
+./tools/h5import/testfiles/txtfp64.txt
+./tools/h5import/testfiles/binuin32.h5
+./tools/h5import/testfiles/binuin16.h5
+./tools/h5import/testfiles/txtuin32.h5
+./tools/h5import/testfiles/txtuin16.h5
 ./tools/h5import/testfiles/textpfe.conf
-./tools/h5import/testfiles/in64.txt
-./tools/h5import/testfiles/in32.txt
-./tools/h5import/testfiles/in16.txt
-
+./tools/h5import/testfiles/textpfe64.txt
+./tools/h5import/testfiles/textpfe.h5
 
 # h5diff sources
 ./tools/h5diff/Makefile.am
@@ -1134,6 +1172,7 @@
 ./tools/testfiles/filter_fail.h5
 ./tools/testfiles/filter_fail.ddl
 ./tools/testfiles/packedbits.ddl
+./tools/testfiles/h5dump-help.txt
 ./tools/testfiles/tall-1.ddl
 ./tools/testfiles/tall-2.ddl
 ./tools/testfiles/tall-3.ddl
@@ -1325,7 +1364,6 @@
 ./tools/testfiles/tbigdims.h5
 ./tools/testfiles/thyperslab.h5
 # h5dump packed bits validation
-./tools/testfiles/tnofilename-with-packed-bits.ddl
 ./tools/testfiles/tpbitsLengthPositive.ddl
 ./tools/testfiles/tpbitsMaxExceeded.ddl
 ./tools/testfiles/tpbitsSigned.ddl
@@ -1396,7 +1434,8 @@
 ./tools/testfiles/tfpformat.h5
 # h5dump h5repack validation
 ./tools/testfiles/h5repack_filters.h5.ddl
-
+./tools/testfiles/zerodim.ddl
+./tools/testfiles/zerodim.h5
 
 # Expected output from h5ls tests
 ./tools/testfiles/nosuchfile.ls
@@ -1556,6 +1595,7 @@
 ./tools/h5diff/testfiles/h5diff_26.txt
 ./tools/h5diff/testfiles/h5diff_27.txt
 ./tools/h5diff/testfiles/h5diff_28.txt
+./tools/h5diff/testfiles/h5diff_30.txt
 ./tools/h5diff/testfiles/h5diff_50.txt
 ./tools/h5diff/testfiles/h5diff_51.txt
 ./tools/h5diff/testfiles/h5diff_52.txt
@@ -1592,6 +1632,15 @@
 ./tools/h5diff/testfiles/h5diff_627.txt
 ./tools/h5diff/testfiles/h5diff_628.txt
 ./tools/h5diff/testfiles/h5diff_629.txt
+./tools/h5diff/testfiles/h5diff_630.txt
+./tools/h5diff/testfiles/h5diff_631.txt
+./tools/h5diff/testfiles/h5diff_640.txt
+./tools/h5diff/testfiles/h5diff_641.txt
+./tools/h5diff/testfiles/h5diff_642.txt
+./tools/h5diff/testfiles/h5diff_643.txt
+./tools/h5diff/testfiles/h5diff_644.txt
+./tools/h5diff/testfiles/h5diff_645.txt
+./tools/h5diff/testfiles/h5diff_646.txt
 ./tools/h5diff/testfiles/h5diff_70.txt
 ./tools/h5diff/testfiles/h5diff_700.txt
 ./tools/h5diff/testfiles/h5diff_701.txt
@@ -1624,6 +1673,10 @@
 ./tools/h5diff/testfiles/h5diff_205.txt
 ./tools/h5diff/testfiles/h5diff_206.txt
 ./tools/h5diff/testfiles/h5diff_207.txt
+./tools/h5diff/testfiles/h5diff_208.txt
+./tools/h5diff/testfiles/h5diff_220.txt
+./tools/h5diff/testfiles/h5diff_221.txt
+./tools/h5diff/testfiles/h5diff_222.txt
 ./tools/h5diff/testfiles/h5diff_300.txt
 ./tools/h5diff/testfiles/h5diff_400.txt
 ./tools/h5diff/testfiles/h5diff_401.txt
@@ -1686,6 +1739,7 @@
 ./tools/h5diff/testfiles/h5diff_517.txt
 ./tools/h5diff/testfiles/h5diff_518.txt
 ./tools/h5diff/testfiles/h5diff_530.txt
+./tools/h5diff/testfiles/h5diff_540.txt
 
 ./tools/h5diff/testfiles/h5diff_attr1.h5
 ./tools/h5diff/testfiles/h5diff_attr2.h5
@@ -1720,8 +1774,13 @@
 ./tools/h5diff/testfiles/h5diff_exclude2-1.h5
 ./tools/h5diff/testfiles/h5diff_exclude2-2.h5
 ./tools/h5diff/testfiles/h5diff_comp_vl_strs.h5
-
-
+./tools/h5diff/testfiles/h5diff_dset_zero_dim_size1.h5
+./tools/h5diff/testfiles/h5diff_dset_zero_dim_size2.h5
+./tools/h5diff/testfiles/h5diff_enum_invalid_values.h5
+./tools/h5diff/testfiles/compounds_array_vlen1.h5
+./tools/h5diff/testfiles/compounds_array_vlen2.h5
+./tools/h5diff/testfiles/non_comparables1.h5
+./tools/h5diff/testfiles/non_comparables2.h5
 
 
 #test files for h5repack
@@ -1740,6 +1799,7 @@
 ./tools/h5repack/testfiles/h5repack_filters.h5
 ./tools/h5repack/testfiles/h5repack_soffset.h5
 ./tools/h5repack/testfiles/h5repack_attr.h5
+./tools/h5repack/testfiles/h5repack_attr_refs.h5
 ./tools/h5repack/testfiles/h5repack_early.h5
 ./tools/h5repack/testfiles/h5repack_layout.h5
 ./tools/h5repack/testfiles/h5repack_layouto.h5
@@ -1760,13 +1820,16 @@
 ./tools/h5jam/getub.c
 
 # test files for jam
+./tools/h5jam/testfiles/h5jam-help.txt
+./tools/h5jam/testfiles/h5unjam-help.txt
 ./tools/h5jam/testfiles/twithub.h5
+./tools/h5jam/testfiles/twithub513.h5
 ./tools/h5jam/testfiles/u10.txt
 ./tools/h5jam/testfiles/tall.h5
 ./tools/h5jam/testfiles/u511.txt
 ./tools/h5jam/testfiles/u512.txt
-./tools/h5jam/testfiles/twithub513.h5
 ./tools/h5jam/testfiles/u513.txt
+./tools/h5jam/testfiles/h5jam-ub-nohdf5.txt
 
 # test files for h5copy
 ./tools/h5copy/testfiles/h5copytst.h5
@@ -1901,8 +1964,11 @@
 ./hl/fortran/Makefile.in
 ./hl/fortran/examples/Makefile.am
 ./hl/fortran/examples/Makefile.in
+./hl/fortran/examples/ex_ds1.f90
 ./hl/fortran/examples/exlite.f90
 ./hl/fortran/examples/run-hlfortran-ex.sh.in
+./hl/fortran/src/H5DSfc.c
+./hl/fortran/src/H5DSff.f90
 ./hl/fortran/src/H5IMcc.c
 ./hl/fortran/src/H5IMcc.h
 ./hl/fortran/src/H5IMfc.c
@@ -1916,6 +1982,7 @@
 ./hl/fortran/src/Makefile.in
 ./hl/fortran/test/Makefile.am
 ./hl/fortran/test/Makefile.in
+./hl/fortran/test/tstds.f90
 ./hl/fortran/test/tstimage.f90
 ./hl/fortran/test/tstlite.f90
 ./hl/fortran/test/tsttable.f90
@@ -2009,6 +2076,7 @@
 ./config/cmake/mccacheinit.cmake
 ./config/cmake/CTest.cmake
 ./config/cmake/grepTest.cmake
+./config/cmake/prunTest.cmake
 ./config/cmake/runTest.cmake
 ./config/cmake/userblockTest.cmake
 ./config/cmake/vfdTest.cmake
@@ -2016,6 +2084,7 @@
 ./config/cmake/ConfigureChecks.cmake
 ./config/cmake/CPack.cmake
 ./config/cmake/NSIS.template.in
+./config/cmake/NSIS.InstallOptions.ini.in
 ./CMakeLists.txt
 ./CTestConfig.cmake
 ./c++/CMakeLists.txt
diff --git a/Makefile.am b/Makefile.am
old mode 100755
new mode 100644
diff --git a/Makefile.in b/Makefile.in
index 1d25e4f..9060c86 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -205,6 +205,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -225,10 +226,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -272,7 +275,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/README.txt b/README.txt
index a44ec1f..7fc0952 100644
--- a/README.txt
+++ b/README.txt
@@ -1,4 +1,4 @@
-HDF5 version 1.8.7 released on Tue May 10 09:24:43 CDT 2011
+HDF5 version 1.8.8 released on 2011-11-15
 Please refer to the release_docs/INSTALL file for installation instructions.
 ------------------------------------------------------------------------------
 
diff --git a/bin/output_filter.sh b/bin/output_filter.sh
new file mode 100644
index 0000000..58f1c48
--- /dev/null
+++ b/bin/output_filter.sh
@@ -0,0 +1,101 @@
+## Copyright by The HDF Group.
+## All rights reserved.
+##
+## This file is part of HDF5.  The full HDF5 copyright notice, including
+## terms governing use, modification, and redistribution, is contained in
+## the files COPYING and Copyright.html.  COPYING can be found at the root
+## of the source code distribution tree; Copyright.html can be found at the
+## root level of an installed copy of the electronic HDF5 document set and
+## is linked from the top-level documents page.  It can also be found at
+## http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have
+## access to either file, you may request a copy from help at hdfgroup.org.
+
+# This contains function definitions of output filtering.
+# This file should only be sourced in by another shell script.
+#
+# Programmer: Albert Cheng
+# Created Date: 2011/5/3
+
+
+# Some systems will dump some messages to stdout for various reasons.
+# Remove them from the stdout result file.
+# $1 is the file name of the file to be filtered.
+# Cases of filter needed:
+# 1. Sandia Red-Storm
+#    yod always prints these two lines at the beginning.
+#    LibLustre: NAL NID: 0004a605 (5)
+#    Lustre: OBD class driver Build Version: 1, info at clusterfs.com
+# 2. LANL Lambda
+#    mpijob mirun -np always add an extra line at the end like:
+#    P4 procgroup file is /users/acheng/.lsbatch/host10524.l82
+STDOUT_FILTER() {
+    result_file=$1
+    tmp_file=/tmp/h5test_tmp_$$
+    # Filter Sandia Red-Storm yod messages.
+    cp $result_file $tmp_file
+    sed -e '/^LibLustre:/d' -e '/^Lustre:/d' \
+	< $tmp_file > $result_file
+    # Filter LANL Lambda mpirun message.
+    cp $result_file $tmp_file
+    sed -e '/^P4 procgroup file is/d' \
+	< $tmp_file > $result_file
+    # cleanup
+    rm -f $tmp_file
+}
+
+
+# Some systems will dump some messages to stderr for various reasons.
+# Remove them from the stderr result file.
+# $1 is the file name of the file to be filtered.
+# Cases of filter needed:
+# 1. MPE:
+# In parallel mode and if MPE library is used, it prints the following
+# two message lines whether the MPE tracing is used or not.
+#    Writing logfile.
+#    Finished writing logfile.
+# 2. LANL MPI:
+# The LANL MPI will print some messages like the following,
+#    LA-MPI: *** mpirun (1.5.10)
+#    LA-MPI: *** 3 process(es) on 2 host(s): 2*fln21 1*fln22
+#    LA-MPI: *** libmpi (1.5.10)
+#    LA-MPI: *** Copyright 2001-2004, ACL, Los Alamos National Laboratory
+# 3. h5diff debug output:
+#    Debug output all have prefix "h5diff debug: ".
+# 4. AIX system prints messages like these when it is aborting:
+#    ERROR: 0031-300  Forcing all remote tasks to exit due to exit code 1 in task 0
+#    ERROR: 0031-250  task 4: Terminated
+#    ERROR: 0031-250  task 3: Terminated
+#    ERROR: 0031-250  task 2: Terminated
+#    ERROR: 0031-250  task 1: Terminated
+# 5. LLNL Blue-Gene mpirun prints messages like there when it exit non-zero:
+#    <Apr 12 15:01:49.075658> BE_MPI (ERROR): The error message in the job record is as follows:
+#    <Apr 12 15:01:49.075736> BE_MPI (ERROR):   "killed by exit(1) on node 0"
+STDERR_FILTER() {
+    result_file=$1
+    tmp_file=/tmp/h5test_tmp_$$
+    # Filter LLNL Blue-Gene error messages in both serial and parallel modes
+    # since mpirun is used in both modes.
+    cp $result_file $tmp_file
+    sed -e '/ BE_MPI (ERROR): /d' \
+	< $tmp_file > $result_file
+    # Filter MPE messages
+    if test -n "$pmode"; then
+	cp $result_file $tmp_file
+	sed -e '/^Writing logfile./d' -e '/^Finished writing logfile./d' \
+	    < $tmp_file > $result_file
+    fi
+    # Filter LANL MPI messages
+    # and LLNL srun messages
+    # and AIX error messages
+    if test -n "$pmode"; then
+	cp $result_file $tmp_file
+	sed -e '/^LA-MPI:/d' -e '/^srun:/d' -e '/^ERROR:/d' \
+	    < $tmp_file > $result_file
+    fi
+    # Filter h5diff debug output
+	cp $result_file $tmp_file
+	sed -e '/^h5diff debug: /d' \
+	    < $tmp_file > $result_file
+    # clean up temporary files.
+    rm -f $tmp_file
+}
diff --git a/bin/release b/bin/release
index 0d547df..b7b4d2c 100755
--- a/bin/release
+++ b/bin/release
@@ -97,6 +97,7 @@ VERS_OLD=
 test "$VERS" || exit 1
 verbose=yes
 check=yes
+release_date=`date +%F`
 today=`date +%Y%m%d`
 pmode='no'
 tmpdir="../#release_tmp.$$"	# tmp work directory
@@ -211,7 +212,7 @@ cp -p Makefile.dist Makefile
 # Update README.txt and release_docs/RELEASE.txt with release information in
 # line 1.
 for f in README.txt release_docs/RELEASE.txt; do
-    echo "HDF5 version $VERS released on `date`" >$f.x
+    echo "HDF5 version $VERS released on $release_date" >$f.x
     sed -e 1d $f >>$f.x
     mv $f.x $f
     # Make sure new files are of the right access mode
diff --git a/bin/trace b/bin/trace
index 951d349..579b564 100755
--- a/bin/trace
+++ b/bin/trace
@@ -36,7 +36,9 @@ $Source = "";
                "H5D_fill_time_t"            => "Df",
                "H5D_fill_value_t"           => "DF",
 	       "H5FD_mpio_chunk_opt_t"      => "Dh",
+               "H5D_mpio_actual_io_mode_t"  => "Di",
                "H5D_layout_t"               => "Dl",
+               "H5D_mpio_actual_chunk_opt_mode_t" => "Do",
                "H5D_space_status_t"         => "Ds",
                "H5FD_mpio_xfer_t"           => "Dt",
                "herr_t"                     => "e",
@@ -84,6 +86,8 @@ $Source = "";
                "H5T_sign_t"                 => "Ts",
                "H5T_class_t"                => "Tt",
                "H5T_str_t"                  => "Tz",
+               "unsigned long"              => "Ul",
+               "unsigned long long"         => "UL",
                "void"                       => "x",
                "FILE"                       => "x",
                "H5A_operator_t"             => "x",
@@ -214,6 +218,9 @@ sub rewrite_func ($$$$$) {
     my %names;
 
     for $arg (@args) {
+      if($arg=~/\w*\.{3}\w*/){
+        next;
+      }
       unless ($arg=~/^(([a-z_A-Z]\w*\s+)+\**)
 	      ([a-z_A-Z]\w*)(\[.*?\])?
 	      (\s*\/\*\s*(in|out|in_out)\s*\*\/)?\s*$/x) {
diff --git a/c++/Makefile.in b/c++/Makefile.in
index 49be051..0263607 100644
--- a/c++/Makefile.in
+++ b/c++/Makefile.in
@@ -178,6 +178,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -198,10 +199,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -245,7 +248,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/c++/examples/Makefile.in b/c++/examples/Makefile.in
index 32eece2..2f35cf9 100644
--- a/c++/examples/Makefile.in
+++ b/c++/examples/Makefile.in
@@ -145,6 +145,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -165,10 +166,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -212,7 +215,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/c++/src/Makefile.in b/c++/src/Makefile.in
index c42d638..91cbcef 100644
--- a/c++/src/Makefile.in
+++ b/c++/src/Makefile.in
@@ -211,6 +211,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -231,10 +232,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -278,7 +281,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
@@ -429,7 +431,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
 # Add libtool shared library version numbers to the HDF5 library
 # See libtool versioning documentation online.
 LT_VERS_INTERFACE = 7
-LT_VERS_REVISION = 1
+LT_VERS_REVISION = 2
 LT_VERS_AGE = 0
 
 # Include src directory
diff --git a/c++/test/CMakeLists.txt b/c++/test/CMakeLists.txt
index b6e645a..84c3920 100644
--- a/c++/test/CMakeLists.txt
+++ b/c++/test/CMakeLists.txt
@@ -43,6 +43,13 @@ TARGET_LINK_LIBRARIES (cpp_testhdf5
     ${HDF5_TEST_LIB_TARGET}
 )
 
+ADD_CUSTOM_COMMAND (
+    TARGET     cpp_testhdf5
+    POST_BUILD
+    COMMAND    ${CMAKE_COMMAND}
+    ARGS       -E copy_if_different ${HDF5_CPP_TEST_SOURCE_DIR}/th5s.h5 ${PROJECT_BINARY_DIR}/th5s.h5
+)
+
 ADD_TEST (NAME cpp_testhdf5 COMMAND $<TARGET_FILE:cpp_testhdf5>)
 
 IF (HDF5_TEST_VFD)
diff --git a/c++/test/Makefile.in b/c++/test/Makefile.in
index 62ef709..f7e4958 100644
--- a/c++/test/Makefile.in
+++ b/c++/test/Makefile.in
@@ -177,6 +177,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -197,10 +198,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -244,7 +247,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/config/cmake/CTestCustom.cmake b/config/cmake/CTestCustom.cmake
index 1ae77bc..786008f 100755
--- a/config/cmake/CTestCustom.cmake
+++ b/config/cmake/CTestCustom.cmake
@@ -20,8 +20,16 @@ SET (CTEST_CUSTOM_MEMCHECK_IGNORE
     error_test       #uses runTest.cmake
     err_compat       #uses runTest.cmake
     links_env        #uses runTest.cmake
+    testlibinfo      #uses grepTest.cmake
+    h5test-clear-testhdf5-objects
     h5test-clear-objects
-    h5perform-clear-objects
+    h5test-clear-cache-objects
+    h5test-clear-cache_api-objects
+    h5test-clear-ttsafe-objects
+    h5test-clear-err_compat-objects
+    h5test-clear-error_test-objects
+    h5test-clear-links_env-objects
+    PERFORM_h5perform-clear-objects
     hl_test-clear-objects
     hl_fortran_test-clear-objects
     ######### tools/h5copy #########
@@ -41,22 +49,6 @@ SET (CTEST_CUSTOM_MEMCHECK_IGNORE
     H5DUMP-XML-clearall-objects
     ######### tools/h5import #########
     H5IMPORT-clear-objects
-    H5IMPORT-ASCII_F32-clear-objects
-    H5IMPORT-ASCII_UI16-clear-objects
-    H5IMPORT-ASCII_UI32-clear-objects
-    H5IMPORT-ASCII_I8-clear-objects
-    H5IMPORT-ASCII_I16-clear-objects
-    H5IMPORT-ASCII_I32-clear-objects
-    H5IMPORT-ASCII_F64_R1-clear-objects
-    H5IMPORT-BINARY_I8_EOF-clear-objects
-    H5IMPORT-STR-clear-objects
-    H5IMPORT-BINARY_UI32-clear-objects
-    H5IMPORT-BINARY_UI16-clear-objects
-    H5IMPORT-BINARY_I32-clear-objects
-    H5IMPORT-BINARY_I8-clear-objects
-    H5IMPORT-BINARY_I16-clear-objects
-    H5IMPORT-BINARY_F64-clear-objects
-    H5IMPORT-ASCII_F64-clear-objects
     ######### tools/h5jam #########
     H5JAM-SETUP-N_twithub_u10_c-clear-objects
     H5JAM-SETUP-N_twithub_u10_c
@@ -222,40 +214,40 @@ SET (CTEST_CUSTOM_MEMCHECK_IGNORE
     H5MKGRP_CMP-clear-h5mkgrp_version
     H5MKGRP-clear-h5mkgrp_single
     H5MKGRP-h5mkgrp_single                              #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_single                         #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_single                         #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_single-v
     H5MKGRP-h5mkgrp_single-v                            #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_single-v                       #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_single-v                       #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_single-p
     H5MKGRP-h5mkgrp_single-p                            #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_single-p                       #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_single-p                       #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_single_latest-l
     H5MKGRP-h5mkgrp_single_latest-l                     #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_single_latest-l                #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_single_latest-l                #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_several
     H5MKGRP-h5mkgrp_several                             #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_several                        #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_several                        #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_several-v
     H5MKGRP-h5mkgrp_several-v                           #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_several-v                      #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_several-v                      #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_several-p
     H5MKGRP-h5mkgrp_several-p                           #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_several-p                      #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_several-p                      #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_several_latest-l
     H5MKGRP-h5mkgrp_several_latest-l                    #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_several_latest-l               #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_several_latest-l               #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_nested-p
     H5MKGRP-h5mkgrp_nested-p                            #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_nested-p                       #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_nested-p                       #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_nested_latest-lp
     H5MKGRP-h5mkgrp_nested_latest-lp                    #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_nested_latest-lp               #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_nested_latest-lp               #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_nested_mult-p
     H5MKGRP-h5mkgrp_nested_mult-p                       #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_nested_mult-p                  #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_nested_mult-p                  #uses runTest.cmake
     H5MKGRP-clear-h5mkgrp_nested_mult_latest-lp
     H5MKGRP-h5mkgrp_nested_mult_latest-lp               #uses runTest.cmake
-    H5MKGRP-H5LS-h5mkgrp_nested_mult_latest-lp          #uses runTest.cmake
+    H5MKGRP-h5ls-h5mkgrp_nested_mult_latest-lp          #uses runTest.cmake
     ######### examples #########
     EXAMPLES-clear-objects
     cpp_ex-clear-objects
diff --git a/config/cmake/ConfigureChecks.cmake b/config/cmake/ConfigureChecks.cmake
index a7f9228..be03e52 100644
--- a/config/cmake/ConfigureChecks.cmake
+++ b/config/cmake/ConfigureChecks.cmake
@@ -10,6 +10,7 @@ INCLUDE (${CMAKE_ROOT}/Modules/CheckSymbolExists.cmake)
 INCLUDE (${CMAKE_ROOT}/Modules/CheckTypeSize.cmake)
 INCLUDE (${CMAKE_ROOT}/Modules/CheckVariableExists.cmake)
 INCLUDE (${CMAKE_ROOT}/Modules/CheckFortranFunctionExists.cmake)
+INCLUDE (${CMAKE_ROOT}/Modules/TestBigEndian.cmake)
 
 #-----------------------------------------------------------------------------
 # Always SET this for now IF we are on an OS X box
@@ -128,8 +129,12 @@ ENDMACRO (CHECK_LIBRARY_EXISTS_CONCAT)
 
 SET (WINDOWS)
 IF (WIN32)
+  SET (H5_HAVE_WIN32_API 1)
   IF (NOT UNIX AND NOT CYGWIN AND NOT MINGW)
     SET (WINDOWS 1)
+    IF (MSVC_IDE)
+      SET (H5_HAVE_VISUAL_STUDIO 1)
+    ENDIF (MSVC_IDE)
   ENDIF (NOT UNIX AND NOT CYGWIN AND NOT MINGW)
 ENDIF (WIN32)
 
@@ -146,19 +151,14 @@ ENDIF (WIN32)
 #
 IF (WINDOWS)
   SET (H5_HAVE_WINDOWS 1)
-#  SET (H5_WINDOWS_USE_STDIO 0)
   # ----------------------------------------------------------------------
   # Set the flag to indicate that the machine has window style pathname,
   # that is, "drive-letter:\" (e.g. "C:") or "drive-letter:/" (e.g. "C:/").
   # (This flag should be _unset_ for all machines, except for Windows)
-  #
   SET (H5_HAVE_WINDOW_PATH 1)
-  SET (WINDOWS_MAX_BUF (1024 * 1024 * 1024))
-  SET (H5_DEFAULT_VFD H5FD_WINDOWS)
   SET (LINK_LIBS ${LINK_LIBS} "kernel32")
-ELSE (WINDOWS)
-  SET (H5_DEFAULT_VFD H5FD_SEC2)
 ENDIF (WINDOWS)
+SET (H5_DEFAULT_VFD H5FD_SEC2)
 
 IF (WINDOWS)
   SET (H5_HAVE_IO_H 1)
@@ -222,6 +222,9 @@ SET (USE_INCLUDES "")
 IF (WINDOWS)
   SET (USE_INCLUDES ${USE_INCLUDES} "windows.h")
 ENDIF (WINDOWS)
+
+TEST_BIG_ENDIAN(H5_WORDS_BIGENDIAN)
+
 #-----------------------------------------------------------------------------
 # Check IF header file exists and add it to the list.
 #-----------------------------------------------------------------------------
@@ -258,6 +261,7 @@ ELSE (CMAKE_SYSTEM_NAME MATCHES "OSF")
 ENDIF (CMAKE_SYSTEM_NAME MATCHES "OSF")
 CHECK_INCLUDE_FILE_CONCAT ("sys/time.h"      H5_HAVE_SYS_TIME_H)
 CHECK_INCLUDE_FILE_CONCAT ("time.h"          H5_HAVE_TIME_H)
+CHECK_INCLUDE_FILE_CONCAT ("mach/mach_time.h" H5_HAVE_MACH_MACH_TIME_H)
 CHECK_INCLUDE_FILE_CONCAT ("sys/timeb.h"     H5_HAVE_SYS_TIMEB_H)
 CHECK_INCLUDE_FILE_CONCAT ("sys/types.h"     H5_HAVE_SYS_TYPES_H)
 CHECK_INCLUDE_FILE_CONCAT ("unistd.h"        H5_HAVE_UNISTD_H)
@@ -291,16 +295,43 @@ ENDIF (H5_HAVE_STDINT_H AND CMAKE_CXX_COMPILER_LOADED)
 SET (LINUX_LFS 0)
 
 SET (HDF5_EXTRA_FLAGS)
-IF (CMAKE_SYSTEM MATCHES "Linux-([3-9]\\.[0-9]|2\\.[4-9])\\.")
+#IF (CMAKE_SYSTEM MATCHES "Linux-([3-9]\\.[0-9]|2\\.[4-9])\\.")
+IF (NOT WINDOWS)
   # Linux Specific flags
   SET (HDF5_EXTRA_FLAGS -D_POSIX_SOURCE -D_BSD_SOURCE)
   OPTION (HDF5_ENABLE_LARGE_FILE "Enable support for large (64-bit) files on Linux." ON)
   IF (HDF5_ENABLE_LARGE_FILE)
-    SET (LARGEFILE 1)
-    SET (HDF5_EXTRA_FLAGS ${HDF5_EXTRA_FLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE)
+    SET (msg "Performing TEST_LFS_WORKS")
+    TRY_RUN (TEST_LFS_WORKS_RUN   TEST_LFS_WORKS_COMPILE
+        ${HDF5_BINARY_DIR}/CMake
+        ${HDF5_RESOURCES_DIR}/HDF5Tests.c
+        CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=-DTEST_LFS_WORKS
+        OUTPUT_VARIABLE OUTPUT
+    )
+    IF (TEST_LFS_WORKS_COMPILE)
+      IF (TEST_LFS_WORKS_RUN  MATCHES 0)
+        SET (TEST_LFS_WORKS 1 CACHE INTERNAL ${msg})
+        SET (LARGEFILE 1)
+        SET (HDF5_EXTRA_FLAGS ${HDF5_EXTRA_FLAGS} -D_FILE_OFFSET_BITS=64 -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE)
+        MESSAGE (STATUS "${msg}... yes")
+      ELSE (TEST_LFS_WORKS_RUN  MATCHES 0)
+        SET (TEST_LFS_WORKS "" CACHE INTERNAL ${msg})
+        MESSAGE (STATUS "${msg}... no")
+        FILE (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
+              "Test TEST_LFS_WORKS Run failed with the following output and exit code:\n ${OUTPUT}\n"
+        )
+      ENDIF (TEST_LFS_WORKS_RUN  MATCHES 0)
+    ELSE (TEST_LFS_WORKS_COMPILE )
+      SET (TEST_LFS_WORKS "" CACHE INTERNAL ${msg})
+      MESSAGE (STATUS "${msg}... no")
+      FILE (APPEND ${CMAKE_BINARY_DIR}/CMakeFiles/CMakeError.log
+          "Test TEST_LFS_WORKS Compile failed with the following output:\n ${OUTPUT}\n"
+      )
+    ENDIF (TEST_LFS_WORKS_COMPILE)
   ENDIF (HDF5_ENABLE_LARGE_FILE)
   SET (CMAKE_REQUIRED_DEFINITIONS ${CMAKE_REQUIRED_DEFINITIONS} ${HDF5_EXTRA_FLAGS})
-ENDIF (CMAKE_SYSTEM MATCHES "Linux-([3-9]\\.[0-9]|2\\.[4-9])\\.")
+ENDIF (NOT WINDOWS)
+#ENDIF (CMAKE_SYSTEM MATCHES "Linux-([3-9]\\.[0-9]|2\\.[4-9])\\.")
 
 ADD_DEFINITIONS (${HDF5_EXTRA_FLAGS})
 
@@ -586,7 +617,7 @@ ENDIF (NOT WINDOWS)
 #-----------------------------------------------------------------------------
 # Check if InitOnceExecuteOnce is available
 #-----------------------------------------------------------------------------
-IF (WINDOWS)
+IF (WINDOWS AND NOT HDF5_NO_IOEO_TEST)
   MESSAGE (STATUS "Checking for InitOnceExecuteOnce:")
   IF("${H5_HAVE_IOEO}" MATCHES "^${H5_HAVE_IOEO}$")
     IF (LARGEFILE)
@@ -644,8 +675,8 @@ IF (WINDOWS)
         "Return value: ${HAVE_IOEO_EXITCODE}\n")
     ENDIF("${HAVE_IOEO_EXITCODE}" EQUAL 0)
   ENDIF("${H5_HAVE_IOEO}" MATCHES "^${H5_HAVE_IOEO}$")
-ENDIF (WINDOWS)
-	
+ENDIF (WINDOWS AND NOT HDF5_NO_IOEO_TEST)
+  
 
 #-----------------------------------------------------------------------------
 # Option to see if GPFS is available on this filesystem --enable-gpfs
diff --git a/config/cmake/FindHDF5.cmake b/config/cmake/FindHDF5.cmake
index 03820e9..33532b0 100644
--- a/config/cmake/FindHDF5.cmake
+++ b/config/cmake/FindHDF5.cmake
@@ -63,8 +63,8 @@ FIND_PATH (HDF5_ROOT_DIR "hdf5-config.cmake"
     HINTS ${_HDF5_HINTS}
     PATHS ${_HDF5_PATHS}
     PATH_SUFFIXES
-        lib/cmake/hdf5-1.8.7
-        share/cmake/hdf5-1.8.7
+        lib/cmake/hdf5
+        share/cmake/hdf5
 )
 
 FIND_PATH (HDF5_INCLUDE_DIRS "H5public.h"
diff --git a/config/cmake/H5pubconf.h.in b/config/cmake/H5pubconf.h.in
index cd05639..70c6e50 100644
--- a/config/cmake/H5pubconf.h.in
+++ b/config/cmake/H5pubconf.h.in
@@ -6,12 +6,11 @@
 /* Define if the Windows virtual file driver should be compiled */
 #cmakedefine H5_HAVE_WINDOWS @H5_HAVE_WINDOWS@
 
-/* Define if the Windows virtual file driver should use buffered IO functions */
-/* #undef WINDOWS_USE_STDIO */
+/* Define if on the Windows platform and default WIN32 API */
+#cmakedefine H5_HAVE_WIN32_API @H5_HAVE_WIN32_API@
 
-/* Define the maximum write size for the Windows file driver.  Larger writes
-   will be split into many writes.  Safe values are 1 <= WINDOWS_MAX_BUF <= 2GB-1. */
-#cmakedefine WINDOWS_MAX_BUF (1024 * 1024 * 1024)
+/* Define if using a Windows compiler (i.e. Visual Studio) */
+#cmakedefine H5_HAVE_VISUAL_STUDIO @H5_HAVE_VISUAL_STUDIO@
 
 /* Defined if HDF5 was built with CMake AND build as a shared library */
 #cmakedefine H5_BUILT_AS_DYNAMIC_LIB @H5_BUILT_AS_DYNAMIC_LIB@
@@ -209,9 +208,6 @@
 /* Define to 1 if you have the <gpfs.h> header file. */
 #cmakedefine H5_HAVE_GPFS_H @H5_HAVE_GPFS_H@
 
-/* Define if h5dump packed bits feature is enabled */
-#cmakedefine H5_HAVE_H5DUMP_PACKED_BITS @H5_HAVE_H5DUMP_PACKED_BITS@
-
 /* Define if library will contain instrumentation to detect correct
    optimization operation */
 #cmakedefine H5_HAVE_INSTRUMENTED_LIBRARY @H5_HAVE_INSTRUMENTED_LIBRARY@
@@ -270,6 +266,9 @@
 /* Define to 1 if you have the `lstat' function. */
 #cmakedefine H5_HAVE_LSTAT @H5_HAVE_LSTAT@
 
+/* Define to 1 if you have the <mach/mach_time.h> header file. */
+#cmakedefine H5_HAVE_MACH_MACH_TIME_H @H5_HAVE_MACH_MACH_TIME_H@
+
 /* Define to 1 if you have the <memory.h> header file. */
 #cmakedefine H5_HAVE_MEMORY_H @H5_HAVE_MEMORY_H@
 
@@ -517,17 +516,10 @@
 /* Define if the metadata trace file code is to be compiled in */
 #cmakedefine H5_METADATA_TRACE_FILE @H5_METADATA_TRACE_FILE@
 
-/* Define if your system can handle complicated MPI derived datatype
-   correctly. */
-#cmakedefine H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS @H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS@
-
 /* Define if your system's `MPI_File_set_size' function works for files over
    2GB. */
 #cmakedefine H5_MPI_FILE_SET_SIZE_BIG @H5_MPI_FILE_SET_SIZE_BIG@
 
-/* Define if your system can handle special collective IO properly. */
-#cmakedefine H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS @H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS@
-
 /* Define if we can violate pointer alignment restrictions */
 #cmakedefine H5_NO_ALIGNMENT_RESTRICTIONS @H5_NO_ALIGNMENT_RESTRICTIONS@
 
@@ -762,6 +754,8 @@
 # endif
 #endif
 
+#cmakedefine WORDS_BIGENDIAN @H5_WORDS_BIGENDIANR@
+
 /* Number of bits in a file offset, on hosts where this is settable. */
 #cmakedefine _FILE_OFFSET_BITS
 
@@ -793,4 +787,4 @@
 #undef inline
 #endif
 
-#endif
\ No newline at end of file
+#endif
diff --git a/config/cmake/HDF5Macros.cmake b/config/cmake/HDF5Macros.cmake
index b9e37bb..3e6ee18 100644
--- a/config/cmake/HDF5Macros.cmake
+++ b/config/cmake/HDF5Macros.cmake
@@ -1,6 +1,6 @@
 #-------------------------------------------------------------------------------
 MACRO (H5_SET_LIB_OPTIONS libtarget libname libtype)
-  HDF_SET_LIB_OPTIONS (${libtarget} ${libname} ${libtype})
+  SET (LIB_OUT_NAME "${libname}")
   IF (${libtype} MATCHES "SHARED")
     IF (WIN32)
       SET (LIBHDF_VERSION ${HDF5_PACKAGE_VERSION_MAJOR})
@@ -8,8 +8,13 @@ MACRO (H5_SET_LIB_OPTIONS libtarget libname libtype)
       SET (LIBHDF_VERSION ${HDF5_PACKAGE_VERSION})
     ENDIF (WIN32)
     SET_TARGET_PROPERTIES (${libtarget} PROPERTIES VERSION ${LIBHDF_VERSION})
-    SET_TARGET_PROPERTIES (${libtarget} PROPERTIES SOVERSION ${LIBHDF_VERSION})
+    IF (WIN32)
+        SET (${LIB_OUT_NAME} "${LIB_OUT_NAME}-${HDF5_PACKAGE_SOVERSION}")
+    ELSE (WIN32)
+        SET_TARGET_PROPERTIES (${libtarget} PROPERTIES SOVERSION ${HDF5_PACKAGE_SOVERSION})
+    ENDIF (WIN32)
   ENDIF (${libtype} MATCHES "SHARED")
+  HDF_SET_LIB_OPTIONS (${libtarget} ${LIB_OUT_NAME} ${libtype})
 
   #-- Apple Specific install_name for libraries
   IF (APPLE)
diff --git a/config/cmake/HDF5Tests.c b/config/cmake/HDF5Tests.c
index f580bbc..4887454 100644
--- a/config/cmake/HDF5Tests.c
+++ b/config/cmake/HDF5Tests.c
@@ -336,6 +336,37 @@ int main()
 }
 #endif
 
+#ifdef TEST_LFS_WORKS
+/* Return 0 when LFS is available and 1 otherwise.  */
+#define _LARGEFILE_SOURCE
+#define _LARGEFILE64_SOURCE
+#define _LARGE_FILES
+#define _FILE_OFFSET_BITS 64
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <assert.h>
+#include <stdio.h>
+
+int main(int argc, char **argv)
+{
+  /* check that off_t can hold 2^63 - 1 and perform basic operations... */
+#define OFF_T_64 (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
+  if (OFF_T_64 % 2147483647 != 1)
+    return 1;
+
+  // stat breaks on SCO OpenServer
+  struct stat buf;
+  stat( argv[0], &buf );
+  if (!S_ISREG(buf.st_mode))
+    return 2;
+
+  FILE *file = fopen( argv[0], "r" );
+  off_t offset = ftello( file );
+  fseek( file, offset, SEEK_CUR );
+  fclose( file );
+  return 0;
+}
+#endif
 
 #ifdef GETTIMEOFDAY_GIVES_TZ
 #ifdef HAVE_SYS_TIME_H
@@ -380,14 +411,14 @@ int main ()
 typedef void (WINAPI *PGNSI)(LPSYSTEM_INFO);
 int main ()
 {
-	PGNSI pGNSI;
-	pGNSI = (PGNSI) GetProcAddress(
+  PGNSI pGNSI;
+  pGNSI = (PGNSI) GetProcAddress(
       GetModuleHandle(TEXT("kernel32.dll")), 
       "InitOnceExecuteOnce");
-	if(NULL == pGNSI)
-		return 1;
-	else
-		return 0;
+  if(NULL == pGNSI)
+    return 1;
+  else
+    return 0;
 }
 
 #endif /* HAVE_IOEO */
diff --git a/config/cmake/HDF5UseFortran.cmake b/config/cmake/HDF5UseFortran.cmake
index 1f429f5..c1c5acb 100644
--- a/config/cmake/HDF5UseFortran.cmake
+++ b/config/cmake/HDF5UseFortran.cmake
@@ -110,6 +110,15 @@ CHECK_FORTRAN_FEATURE(RealIsNotDouble
   FORTRAN_DEFAULT_REAL_NOT_DOUBLE
 )
 
+CHECK_FORTRAN_FEATURE(iso_c_binding
+  "
+       PROGRAM main
+            USE iso_c_binding
+       END PROGRAM
+  "
+  FORTRAN_HAVE_ISO_C_BINDING
+)
+
 #-----------------------------------------------------------------------------
 # Add debug information (intel Fortran : JB)
 #-----------------------------------------------------------------------------
diff --git a/config/cmake/HDFMacros.cmake b/config/cmake/HDFMacros.cmake
index d8efad0..f58b86e 100644
--- a/config/cmake/HDFMacros.cmake
+++ b/config/cmake/HDFMacros.cmake
@@ -15,7 +15,7 @@ MACRO (EXTERNAL_JPEG_LIBRARY compress_type jpeg_pic)
         INSTALL_COMMAND ""
         CMAKE_ARGS
             -DBUILD_SHARED_LIBS:BOOL=OFF
-            -DJPEG_EXTERNALLY_CONFIGURED:BOOL=ON
+            -DJPEG_EXTERNALLY_CONFIGURED:BOOL=OFF
             -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
             -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
             -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
@@ -29,7 +29,7 @@ MACRO (EXTERNAL_JPEG_LIBRARY compress_type jpeg_pic)
         INSTALL_COMMAND ""
         CMAKE_ARGS
             -DBUILD_SHARED_LIBS:BOOL=OFF
-            -DJPEG_EXTERNALLY_CONFIGURED:BOOL=ON
+            -DJPEG_EXTERNALLY_CONFIGURED:BOOL=OFF
             -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
             -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
             -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
@@ -48,13 +48,26 @@ MACRO (EXTERNAL_JPEG_LIBRARY compress_type jpeg_pic)
   ELSE (${BLDTYPE} MATCHES "Debug")
     SET (DBG_EXT "")
   ENDIF (${BLDTYPE} MATCHES "Debug")
-  SET (EXTERNAL_LIBRARY_LIST ${EXTERNAL_LIBRARY_LIST} ${JPEG_LIBRARY})
 
-  IF (WIN32 AND NOT MINGW)
-    SET (JPEG_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/libjpeg${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+  # Create imported target szip
+  ADD_LIBRARY(jpeg STATIC IMPORTED)
+  ADD_DEPENDENCIES (jpeg JPEG)
+
+   IF (WIN32 AND NOT MINGW)
+    SET_TARGET_PROPERTIES(jpeg PROPERTIES
+        IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/libjpeg${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+    )
   ELSE (WIN32 AND NOT MINGW)
-    SET (JPEG_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libjpeg${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+    SET_TARGET_PROPERTIES(jpeg PROPERTIES
+        IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libjpeg${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+        IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+    )
   ENDIF (WIN32 AND NOT MINGW)
+
+#  INCLUDE (${BINARY_DIR}/JPEG-targets.cmake)  
+  SET (JPEG_LIBRARY "jpeg")
+  
   SET (JPEG_INCLUDE_DIR_GEN "${BINARY_DIR}")
   SET (JPEG_INCLUDE_DIR "${SOURCE_DIR}/src")
   SET (JPEG_FOUND 1)
@@ -83,7 +96,7 @@ MACRO (EXTERNAL_SZIP_LIBRARY compress_type libtype encoding)
         INSTALL_COMMAND ""
         CMAKE_ARGS
             -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
-            -DSZIP_EXTERNALLY_CONFIGURED:BOOL=ON
+            -DSZIP_EXTERNALLY_CONFIGURED:BOOL=OFF
             -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
             -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
             -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
@@ -97,7 +110,7 @@ MACRO (EXTERNAL_SZIP_LIBRARY compress_type libtype encoding)
         INSTALL_COMMAND ""
         CMAKE_ARGS
             -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
-            -DSZIP_EXTERNALLY_CONFIGURED:BOOL=ON
+            -DSZIP_EXTERNALLY_CONFIGURED:BOOL=OFF
             -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
             -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
             -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
@@ -117,21 +130,39 @@ MACRO (EXTERNAL_SZIP_LIBRARY compress_type libtype encoding)
     SET (DBG_EXT "")
   ENDIF (${BLDTYPE} MATCHES "Debug")
 
+  # Create imported target szip
+  ADD_LIBRARY(szip ${libtype} IMPORTED)
+  ADD_DEPENDENCIES (szip SZIP)
+
   IF (${libtype} MATCHES "SHARED")
     IF (WIN32 AND NOT MINGW)
-      SET (SZIP_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}szip${DBG_EXT}${CMAKE_IMPORT_LIBRARY_SUFFIX}")
-      SET (EXTERNAL_LIBRARYDLL_LIST ${EXTERNAL_LIBRARYDLL_LIST} "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}szip${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+      SET_TARGET_PROPERTIES(szip PROPERTIES
+          IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}szip${DBG_EXT}${CMAKE_IMPORT_LIBRARY_SUFFIX}"
+          IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}szip${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+      )
     ELSE (WIN32 AND NOT MINGW)
-      SET (SZIP_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}szip${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+      SET_TARGET_PROPERTIES(szip PROPERTIES
+          IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}szip${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+          IMPORTED_SONAME "${CMAKE_SHARED_LIBRARY_PREFIX}szip${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}.2.1"
+          SOVERSION "2.1"
+      )
     ENDIF (WIN32 AND NOT MINGW)
   ELSE (${libtype} MATCHES "SHARED")
     IF (WIN32 AND NOT MINGW)
-      SET (SZIP_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/libszip${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+      SET_TARGET_PROPERTIES(szip PROPERTIES
+          IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/libszip${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+          IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+      )
     ELSE (WIN32 AND NOT MINGW)
-      SET (SZIP_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libszip${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+      SET_TARGET_PROPERTIES(szip PROPERTIES
+          IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libszip${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+          IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+      )
     ENDIF (WIN32 AND NOT MINGW)
   ENDIF (${libtype} MATCHES "SHARED")
-  SET (EXTERNAL_LIBRARY_LIST ${EXTERNAL_LIBRARY_LIST} ${SZIP_LIBRARY})
+
+#  INCLUDE (${BINARY_DIR}/SZIP-targets.cmake)  
+  SET (SZIP_LIBRARY "szip")
 
   SET (SZIP_INCLUDE_DIR_GEN "${BINARY_DIR}")
   SET (SZIP_INCLUDE_DIR "${SOURCE_DIR}/src")
@@ -161,7 +192,7 @@ MACRO (EXTERNAL_ZLIB_LIBRARY compress_type libtype)
         INSTALL_COMMAND ""
         CMAKE_ARGS
             -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
-            -DZLIB_EXTERNALLY_CONFIGURED:BOOL=ON
+            -DZLIB_EXTERNALLY_CONFIGURED:BOOL=OFF
             -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
             -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
             -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
@@ -175,7 +206,7 @@ MACRO (EXTERNAL_ZLIB_LIBRARY compress_type libtype)
         INSTALL_COMMAND ""
         CMAKE_ARGS
             -DBUILD_SHARED_LIBS:BOOL=${BUILD_SHARED_LIBS}
-            -DZLIB_EXTERNALLY_CONFIGURED:BOOL=ON
+            -DZLIB_EXTERNALLY_CONFIGURED:BOOL=OFF
             -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
             -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
             -DCMAKE_LIBRARY_OUTPUT_DIRECTORY:PATH=${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
@@ -194,29 +225,43 @@ MACRO (EXTERNAL_ZLIB_LIBRARY compress_type libtype)
   ELSE (${BLDTYPE} MATCHES "Debug")
     SET (DBG_EXT "")
   ENDIF (${BLDTYPE} MATCHES "Debug")
+
+  # Create imported target szip
+  ADD_LIBRARY(zlib ${libtype} IMPORTED)
+  ADD_DEPENDENCIES (zlib ZLIB)
   
   IF (${libtype} MATCHES "SHARED")
     IF (WIN32 AND NOT MINGW)
-      SET (ZLIB_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}zlib1${DBG_EXT}${CMAKE_IMPORT_LIBRARY_SUFFIX}")
-      SET (EXTERNAL_LIBRARYDLL_LIST ${EXTERNAL_LIBRARYDLL_LIST} "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}zlib1${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+      SET_TARGET_PROPERTIES(zlib PROPERTIES
+          IMPORTED_IMPLIB "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}zlib${DBG_EXT}${CMAKE_IMPORT_LIBRARY_SUFFIX}"
+          IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/${CMAKE_IMPORT_LIBRARY_PREFIX}zlib${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+      )
     ELSE (WIN32 AND NOT MINGW)
-      SET (ZLIB_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}z${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}")
+      SET_TARGET_PROPERTIES(zlib PROPERTIES
+          IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}z${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}"
+          IMPORTED_SONAME "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${CMAKE_SHARED_LIBRARY_PREFIX}z${DBG_EXT}${CMAKE_SHARED_LIBRARY_SUFFIX}.1.2"
+          SOVERSION "1.2"
+      )
     ENDIF (WIN32 AND NOT MINGW)
   ELSE (${libtype} MATCHES "SHARED")
     IF (WIN32 AND NOT MINGW)
-      IF (HDF_LEGACY_NAMING)
-        SET (ZLIB_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/zlib${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}")
-      ELSE (HDF_LEGACY_NAMING)
-        SET (ZLIB_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/libzlib${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}")
-      ENDIF (HDF_LEGACY_NAMING)
+      SET_TARGET_PROPERTIES(zlib PROPERTIES
+          IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/libzlib${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+          IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+      )
     ELSE (WIN32 AND NOT MINGW)
-      SET (ZLIB_LIBRARY "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libz${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}")
+      SET_TARGET_PROPERTIES(zlib PROPERTIES
+          IMPORTED_LOCATION "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/${BLDTYPE}/libz${DBG_EXT}${CMAKE_STATIC_LIBRARY_SUFFIX}"
+          IMPORTED_LINK_INTERFACE_LANGUAGES "C"
+      )
     ENDIF (WIN32 AND NOT MINGW)
   ENDIF (${libtype} MATCHES "SHARED")
-  SET (EXTERNAL_LIBRARY_LIST ${EXTERNAL_LIBRARY_LIST} ${ZLIB_LIBRARY})
+
+#  INCLUDE (${BINARY_DIR}/ZLIB-targets.cmake)  
+  SET (ZLIB_LIBRARY "zlib")
   
   SET (ZLIB_INCLUDE_DIR_GEN "${BINARY_DIR}")
-  SET (ZLIB_INCLUDE_DIR "${SOURCE_DIR}/src")
+  SET (ZLIB_INCLUDE_DIR "${SOURCE_DIR}")
   SET (ZLIB_FOUND 1)
   SET (ZLIB_LIBRARIES ${ZLIB_LIBRARY})
   SET (ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR_GEN} ${ZLIB_INCLUDE_DIR})
@@ -337,13 +382,19 @@ ENDMACRO (HDF_SET_LIB_OPTIONS)
 
 #-------------------------------------------------------------------------------
 MACRO (TARGET_FORTRAN_WIN_PROPERTIES target addlinkflags)
-  IF (WIN32)
-    IF (MSVC)
+  IF (WIN32 AND MSVC)
+    IF (BUILD_SHARED_LIBS)
       SET_TARGET_PROPERTIES (${target}
           PROPERTIES
               COMPILE_FLAGS "/dll"
               LINK_FLAGS "/SUBSYSTEM:CONSOLE ${addlinkflags}"
       ) 
-    ENDIF (MSVC)
-  ENDIF (WIN32)
+    ELSE (BUILD_SHARED_LIBS)
+      SET_TARGET_PROPERTIES (${target}
+          PROPERTIES
+              COMPILE_FLAGS "/MD"
+              LINK_FLAGS "/SUBSYSTEM:CONSOLE ${addlinkflags}"
+      ) 
+    ENDIF (BUILD_SHARED_LIBS)
+  ENDIF (WIN32 AND MSVC)
 ENDMACRO (TARGET_FORTRAN_WIN_PROPERTIES)
diff --git a/config/cmake/NSIS.InstallOptions.ini.in b/config/cmake/NSIS.InstallOptions.ini.in
new file mode 100644
index 0000000..83ca053
--- /dev/null
+++ b/config/cmake/NSIS.InstallOptions.ini.in
@@ -0,0 +1,37 @@
+[Settings]
+NumFields=5
+
+[Field 1]
+Type=label
+Text=By default @CPACK_PACKAGE_INSTALL_DIRECTORY@ does add its directory to the system PATH.
+Left=0
+Right=-1
+Top=0
+Bottom=20
+
+[Field 2]
+Type=radiobutton
+Text=Do not add @CPACK_PACKAGE_NAME@ to the system PATH
+Left=0
+Right=-1
+Top=30
+Bottom=40
+State=0
+
+[Field 3]
+Type=radiobutton
+Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for all users
+Left=0
+Right=-1
+Top=40
+Bottom=50
+State=1
+
+[Field 4]
+Type=radiobutton
+Text=Add @CPACK_PACKAGE_NAME@ to the system PATH for current user
+Left=0
+Right=-1
+Top=50
+Bottom=60
+State=0
diff --git a/config/cmake/cacheinit.cmake b/config/cmake/cacheinit.cmake
index 975a22a..1aa4aa2 100755
--- a/config/cmake/cacheinit.cmake
+++ b/config/cmake/cacheinit.cmake
@@ -14,6 +14,8 @@ SET (HDF5_BUILD_EXAMPLES ON CACHE BOOL "Build HDF5 Library Examples" FORCE)
 
 SET (HDF5_BUILD_FORTRAN ON CACHE BOOL "Build FORTRAN support" FORCE)
 
+SET (HDF5_ENABLE_F2003 OFF CACHE BOOL "Enable FORTRAN 2003 Standard" FORCE)
+
 SET (HDF5_BUILD_HL_LIB ON CACHE BOOL "Build HIGH Level HDF5 Library" FORCE)
 
 SET (HDF5_BUILD_TOOLS ON CACHE BOOL "Build HDF5 Tools" FORCE)
@@ -24,8 +26,6 @@ SET (HDF5_ENABLE_SZIP_SUPPORT ON CACHE BOOL "Use SZip Filter" FORCE)
 
 SET (HDF5_ENABLE_SZIP_ENCODING ON CACHE BOOL "Use SZip Encoding" FORCE)
 
-SET (HDF5_USE_H5DUMP_PACKED_BITS ON CACHE BOOL "Use the PACKED BITS feature in h5dump" FORCE)
-
 SET (HDF5_ENABLE_HSIZET ON CACHE BOOL "Enable datasets larger than memory" FORCE)
 
 SET (HDF5_ENABLE_DEPRECATED_SYMBOLS ON CACHE BOOL "Enable deprecated public API symbols" FORCE)
diff --git a/config/cmake/hdf5-config.cmake.build.in b/config/cmake/hdf5-config.cmake.build.in
index 47a119a..ccf5e67 100644
--- a/config/cmake/hdf5-config.cmake.build.in
+++ b/config/cmake/hdf5-config.cmake.build.in
@@ -8,13 +8,14 @@ GET_FILENAME_COMPONENT (SELF_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
 #-----------------------------------------------------------------------------
 SET (HDF5_ENABLE_PARALLEL @HDF5_ENABLE_PARALLEL@)
 SET (HDF5_BUILD_FORTRAN   @HDF5_BUILD_FORTRAN@)
+SET (HDF5_ENABLE_F2003    @HDF5_ENABLE_F2003@)
 SET (HDF5_BUILD_CPP_LIB   @HDF5_BUILD_CPP_LIB@)
 SET (HDF5_BUILD_TOOLS     @HDF5_BUILD_TOOLS@)
 SET (HDF5_BUILD_HL_LIB    @HDF5_BUILD_HL_LIB@)
 SET (HDF5_ENABLE_Z_LIB_SUPPORT @HDF5_ENABLE_Z_LIB_SUPPORT@)
 SET (HDF5_ENABLE_SZIP_SUPPORT  @HDF5_ENABLE_SZIP_SUPPORT@)
 SET (HDF5_ENABLE_SZIP_ENCODING @HDF5_ENABLE_SZIP_ENCODING@)
-SET (BUILD_SHARED_LIBS    @BUILD_SHARED_LIBS@)
+SET (HDF5_BUILD_SHARED_LIBS    @BUILD_SHARED_LIBS@)
 
 #-----------------------------------------------------------------------------
 # Directories
@@ -54,4 +55,5 @@ SET (HDF5_VERSION_MINOR  @HDF5_VERSION_MINOR@)
 #-----------------------------------------------------------------------------
 IF (NOT TARGET "hdf5")
   INCLUDE (${SELF_DIR}/hdf5-targets.cmake)
+  SET (HDF5_LIBRARIES "@HDF5_LIBRARIES_TO_EXPORT@")
 ENDIF (NOT TARGET "hdf5")
diff --git a/config/cmake/hdf5-config.cmake.install.in b/config/cmake/hdf5-config.cmake.install.in
index 8dcd86f..268d5ed 100644
--- a/config/cmake/hdf5-config.cmake.install.in
+++ b/config/cmake/hdf5-config.cmake.install.in
@@ -2,44 +2,49 @@
 # HDF5 Config file for compiling against hdf5 install directory
 #-----------------------------------------------------------------------------
 GET_FILENAME_COMPONENT (SELF_DIR "${CMAKE_CURRENT_LIST_FILE}" PATH)
+GET_FILENAME_COMPONENT(_IMPORT_PREFIX "${SELF_DIR}" PATH)
+GET_FILENAME_COMPONENT(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
+GET_FILENAME_COMPONENT(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH)
 
 #-----------------------------------------------------------------------------
 # User Options
 #-----------------------------------------------------------------------------
 SET (HDF5_ENABLE_PARALLEL @HDF5_ENABLE_PARALLEL@)
 SET (HDF5_BUILD_FORTRAN   @HDF5_BUILD_FORTRAN@)
+SET (HDF5_ENABLE_F2003    @HDF5_ENABLE_F2003@)
 SET (HDF5_BUILD_CPP_LIB   @HDF5_BUILD_CPP_LIB@)
 SET (HDF5_BUILD_TOOLS     @HDF5_BUILD_TOOLS@)
 SET (HDF5_BUILD_HL_LIB    @HDF5_BUILD_HL_LIB@)
 SET (HDF5_ENABLE_Z_LIB_SUPPORT @HDF5_ENABLE_Z_LIB_SUPPORT@)
 SET (HDF5_ENABLE_SZIP_SUPPORT  @HDF5_ENABLE_SZIP_SUPPORT@)
 SET (HDF5_ENABLE_SZIP_ENCODING @HDF5_ENABLE_SZIP_ENCODING@)
-SET (BUILD_SHARED_LIBS    @BUILD_SHARED_LIBS@)
+SET (HDF5_BUILD_SHARED_LIBS    @BUILD_SHARED_LIBS@)
+SET (HDF5_PACKAGE_EXTLIBS      @HDF5_PACKAGE_EXTLIBS@)
 
 #-----------------------------------------------------------------------------
 # Directories
 #-----------------------------------------------------------------------------
-SET (HDF5_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/include" )
+SET (HDF5_INCLUDE_DIR "${_IMPORT_PREFIX}/include" )
 
 IF (HDF5_BUILD_FORTRAN)
-  SET (HDF5_INCLUDE_DIR_FORTRAN "@CMAKE_INSTALL_PREFIX@/include/fortran" )
+  SET (HDF5_INCLUDE_DIR_FORTRAN "${_IMPORT_PREFIX}/include/fortran" )
 ENDIF (HDF5_BUILD_FORTRAN)
   
 IF (HDF5_BUILD_CPP_LIB)
-  SET (HDF5_INCLUDE_DIR_CPP "@CMAKE_INSTALL_PREFIX@/include/cpp" )
+  SET (HDF5_INCLUDE_DIR_CPP "${_IMPORT_PREFIX}/include/cpp" )
 ENDIF (HDF5_BUILD_CPP_LIB)
 
 IF (HDF5_BUILD_HL_LIB)
-  SET (HDF5_INCLUDE_DIR_HL "@CMAKE_INSTALL_PREFIX@/include/hl" )
+  SET (HDF5_INCLUDE_DIR_HL "${_IMPORT_PREFIX}/include/hl" )
 ENDIF (HDF5_BUILD_HL_LIB)
 
 IF (HDF5_BUILD_HL_LIB AND HDF5_BUILD_CPP_LIB)
-  SET (HDF5_INCLUDE_DIR_HL_CPP "@CMAKE_INSTALL_PREFIX@/include/hl/cpp" )
+  SET (HDF5_INCLUDE_DIR_HL_CPP "${_IMPORT_PREFIX}/include/hl/cpp" )
 ENDIF (HDF5_BUILD_HL_LIB AND HDF5_BUILD_CPP_LIB)
 
 IF (HDF5_BUILD_TOOLS)
-  SET (HDF5_INCLUDE_DIR_TOOLS "@CMAKE_INSTALL_PREFIX@/include/tools" )
-  SET (HDF5_TOOLS_DIR "@CMAKE_INSTALL_PREFIX@/bin/tools" )
+  SET (HDF5_INCLUDE_DIR_TOOLS "${_IMPORT_PREFIX}/include/tools" )
+  SET (HDF5_TOOLS_DIR "${_IMPORT_PREFIX}/bin/tools" )
 ENDIF (HDF5_BUILD_TOOLS)
 
 #-----------------------------------------------------------------------------
@@ -54,7 +59,14 @@ SET (HDF5_VERSION_MINOR  @HDF5_VERSION_MINOR@)
 # project which has already built hdf5 as a subproject
 #-----------------------------------------------------------------------------
 IF (NOT TARGET "hdf5")
+  IF (HDF5_ENABLE_Z_LIB_SUPPORT AND HDF5_PACKAGE_EXTLIBS AND NOT TARGET "zlib")
+    INCLUDE (${SELF_DIR}/../ZLIB/ZLIB-targets.cmake)
+  ENDIF (HDF5_ENABLE_Z_LIB_SUPPORT AND HDF5_PACKAGE_EXTLIBS AND NOT TARGET "zlib")
+  IF (HDF5_ENABLE_SZIP_SUPPORT AND HDF5_PACKAGE_EXTLIBS AND NOT TARGET "szip")
+    INCLUDE (${SELF_DIR}/../SZIP/SZIP-targets.cmake)
+  ENDIF (HDF5_ENABLE_SZIP_SUPPORT AND HDF5_PACKAGE_EXTLIBS AND NOT TARGET "szip")
   INCLUDE (${SELF_DIR}/hdf5-targets.cmake)
+  SET (HDF5_LIBRARIES "@HDF5_LIBRARIES_TO_EXPORT@")
 ENDIF (NOT TARGET "hdf5")
 
 #-----------------------------------------------------------------------------
@@ -64,16 +76,16 @@ ENDIF (NOT TARGET "hdf5")
 # To be continued (maybe) ...
 #
 # XXX_INCLUDE_DIRS         no, use one per library as in HDF5_FORTRAN_INCLUDE_DIR
-# XXX_LIBRARIES          	 not needed - see hdf5-targets.cmake
-# XXX_DEFINITIONS        	 Definitions to use when compiling code that uses XXX. This really shouldn't include options such as (-DHAS_JPEG) that a client source-code file uses to decide whether to #include <jpeg.h>
-# XXX_EXECUTABLE         	 Where to find the XXX tool.
-# XXX_YYY_EXECUTABLE     	 Where to find the YYY tool that comes with XXX.
+# XXX_LIBRARIES             not needed - see hdf5-targets.cmake
+# XXX_DEFINITIONS           Definitions to use when compiling code that uses XXX. This really shouldn't include options such as (-DHAS_JPEG) that a client source-code file uses to decide whether to #include <jpeg.h>
+# XXX_EXECUTABLE            Where to find the XXX tool.
+# XXX_YYY_EXECUTABLE        Where to find the YYY tool that comes with XXX.
 # XXX_LIBRARY_DIRS         Optionally, the final set of library directories listed in one variable for use by client code.  This should not be a cache entry.
-# XXX_ROOT_DIR           	 Where to find the base directory of XXX.
-# XXX_VERSION_YY		       Expect Version YY if true. Make sure at most one of these is ever true.
-# XXX_WRAP_YY		           If False, do not try to use the relevent CMake wrapping command.
-# XXX_YY_FOUND           	 If False, optional YY part of XXX sytem is not available.
-# XXX_FOUND              	 Set to false, or undefined, if we haven't found, or don't want to use XXX.
+# XXX_ROOT_DIR              Where to find the base directory of XXX.
+# XXX_VERSION_YY           Expect Version YY if true. Make sure at most one of these is ever true.
+# XXX_WRAP_YY               If False, do not try to use the relevent CMake wrapping command.
+# XXX_YY_FOUND              If False, optional YY part of XXX sytem is not available.
+# XXX_FOUND                 Set to false, or undefined, if we haven't found, or don't want to use XXX.
 # XXX_RUNTIME_LIBRARY_DIRS Optionally, the runtime library search path for use when running an executable linked to shared libraries.
 #                          The list should be used by user code to create the PATH on windows or LD_LIBRARY_PATH on unix.
 #                          This should not be a cache entry.
diff --git a/config/cmake/libhdf5.settings.cmake.in b/config/cmake/libhdf5.settings.cmake.in
index ba233e8..4027c55 100644
--- a/config/cmake/libhdf5.settings.cmake.in
+++ b/config/cmake/libhdf5.settings.cmake.in
@@ -1,68 +1,69 @@
-	    SUMMARY OF THE HDF5 CONFIGURATION
-	    =================================
+      SUMMARY OF THE HDF5 CONFIGURATION
+      =================================
 
 General Information:
 -------------------
-		   HDF5 Version: @H5_VERSION@
-		  Configured on: @CONFIG_DATE@
-		  Configured by: @CONFIG_USER@
-		 Configure mode: @CONFIG_MODE@
-		    Host system: @host_cpu at -@host_vendor at -@host_os@
-	      Uname information: @UNAME_INFO@
-		       Byte sex: @BYTESEX@
-		      Libraries: @STATIC_SHARED@
-	     Installation point: @prefix@
+                   HDF5 Version: @HDF5_PACKAGE_VERSION@
+                  Configured on: @CONFIG_DATE@
+                  Configured by: @CMAKE_GENERATOR@
+                 Configure mode: CMAKE @CMAKE_VERSION@
+                    Host system: @CMAKE_HOST_SYSTEM@
+              Uname information: @CMAKE_SYSTEM_NAME@
+                       Byte sex: @BYTESEX@
+                      Libraries: @BUILD_NAME_EXT@
+             Installation point: @CMAKE_INSTALL_PREFIX@
 
 Compiling Options:
 ------------------
-               Compilation Mode: @CONFIG_MODE@
-                     C Compiler: @CC_VERSION@
-                         CFLAGS: @CFLAGS@
+               Compilation Mode: @CMAKE_BUILD_TYPE@
+                     C Compiler: @CMAKE_C_COMPILER@
+                         CFLAGS: @CMAKE_C_FLAGS@
                       H5_CFLAGS: @H5_CFLAGS@
                       AM_CFLAGS: @AM_CFLAGS@
-                       CPPFLAGS: @CPPFLAGS@
+                       CPPFLAGS: @CMAKE_CXX_FLAGS@
                     H5_CPPFLAGS: @H5_CPPFLAGS@
                     AM_CPPFLAGS: @AM_CPPFLAGS@
-               Shared Libraries: @enable_shared@
-               Static Libraries: @enable_static@
-  Statically Linked Executables: @STATIC_EXEC@
-                        LDFLAGS: @LDFLAGS@
+               Shared Libraries: @H5_ENABLE_SHARED_LIB@
+               Static Libraries: @H5_ENABLE_STATIC_LIB@
+  Statically Linked Executables: @BUILD_STATIC_EXECS@
+                        LDFLAGS: @CMAKE_SHARED_LINKER_FLAGS@
                      AM_LDFLAGS: @AM_LDFLAGS@
- 	 	Extra libraries: @LIBS@
- 		       Archiver: @AR@
- 		 	 Ranlib: @RANLIB@
- 	      Debugged Packages: @DEBUG_PKG@
-		    API Tracing: @TRACE_API@
+                Extra libraries: @LINK_LIBS@
+                       Archiver: @CMAKE_AR@
+                         Ranlib: @CMAKE_RANLIB@
+              Debugged Packages: @DEBUG_PKG@
+                    API Tracing: @HDF5_ENABLE_TRACE@
 
 Languages:
 ----------
-                        Fortran: @HDF_FORTRAN@
- at BUILD_FORTRAN_CONDITIONAL_TRUE@               Fortran Compiler: @FC@
- at BUILD_FORTRAN_CONDITIONAL_TRUE@                  Fortran Flags: @FCFLAGS@
+                        Fortran: @HDF5_BUILD_FORTRAN@
+ at BUILD_FORTRAN_CONDITIONAL_TRUE@               Fortran Compiler: @CMAKE_Fortran_COMPILER@
+ at BUILD_FORTRAN_CONDITIONAL_TRUE@          Fortran 2003 Compiler: @HDF5_ENABLE_F2003@
+ at BUILD_FORTRAN_CONDITIONAL_TRUE@                  Fortran Flags: @CMAKE_Fortran_FLAGS@
 @BUILD_FORTRAN_CONDITIONAL_TRUE@               H5 Fortran Flags: @H5_FCFLAGS@
 @BUILD_FORTRAN_CONDITIONAL_TRUE@               AM Fortran Flags: @AM_FCFLAGS@
-                            C++: @HDF_CXX@
- at BUILD_CXX_CONDITIONAL_TRUE@                   C++ Compiler: @CXX@
- at BUILD_CXX_CONDITIONAL_TRUE@                      C++ Flags: @CXXFLAGS@
+                            C++: @HDF5_BUILD_CPP_LIB@
+ at BUILD_CXX_CONDITIONAL_TRUE@                   C++ Compiler: @CMAKE_CXX_COMPILER@
+ at BUILD_CXX_CONDITIONAL_TRUE@                      C++ Flags: @CMAKE_CXX_FLAGS@
 @BUILD_CXX_CONDITIONAL_TRUE@                   H5 C++ Flags: @H5_CXXFLAGS@
 @BUILD_CXX_CONDITIONAL_TRUE@                   AM C++ Flags: @AM_CXXFLAGS@
 
 Features:
 ---------
-                  Parallel HDF5: @PARALLEL@
-             High Level library: @HDF5_HL@
-                   Threadsafety: @THREADSAFE@
+                  Parallel HDF5: @HDF5_ENABLE_PARALLEL@
+             High Level library: @HDF5_BUILD_HL_LIB@
+                   Threadsafety: @HDF5_ENABLE_THREADSAFE@
             Default API Mapping: @DEFAULT_API_VERSION@
- With Deprecated Public Symbols: @DEPRECATED_SYMBOLS@
+ With Deprecated Public Symbols: @HDF5_ENABLE_DEPRECATED_SYMBOLS@
          I/O filters (external): @EXTERNAL_FILTERS@
          I/O filters (internal): @FILTERS@
-                            MPE: @MPE@
-                     Direct VFD: @DIRECT_VFD@
-                        dmalloc: @HAVE_DMALLOC@
-Clear file buffers before write: @CLEARFILEBUF@
-           Using memory checker: @USINGMEMCHECKER@
-         Function Stack Tracing: @CODESTACK@
-                           GPFS: @GPFS@
-      Strict File Format Checks: @STRICT_FORMAT_CHECKS@
-   Optimization Instrumentation: @INSTRUMENT@
-       Large File Support (LFS): @LARGEFILE@
+                            MPE: @H5_HAVE_LIBLMPE@
+                     Direct VFD: @H5_HAVE_DIRECT@
+                        dmalloc: @H5_HAVE_LIBDMALLOC@
+Clear file buffers before write: @HDF5_Enable_Clear_File_Buffers@
+           Using memory checker: @HDF5_ENABLE_USING_MEMCHECKER@
+         Function Stack Tracing: @HDF5_ENABLE_CODESTACK@
+                           GPFS: @HDF5_ENABLE_GPFS@
+      Strict File Format Checks: @HDF5_STRICT_FORMAT_CHECKS@
+   Optimization Instrumentation: @HDF5_Enable_Instrument@
+       Large File Support (LFS): @HDF5_ENABLE_LARGE_FILE@
diff --git a/config/cmake/mccacheinit.cmake b/config/cmake/mccacheinit.cmake
index f7313ba..10b2824 100755
--- a/config/cmake/mccacheinit.cmake
+++ b/config/cmake/mccacheinit.cmake
@@ -24,8 +24,6 @@ SET (HDF5_ENABLE_SZIP_SUPPORT ON CACHE BOOL "Use SZip Filter" FORCE)
 
 SET (HDF5_ENABLE_SZIP_ENCODING ON CACHE BOOL "Use SZip Encoding" FORCE)
 
-SET (HDF5_USE_H5DUMP_PACKED_BITS ON CACHE BOOL "Use the PACKED BITS feature in h5dump" FORCE)
-
 SET (HDF5_ENABLE_HSIZET ON CACHE BOOL "Enable datasets larger than memory" FORCE)
 
 SET (HDF5_ENABLE_DEPRECATED_SYMBOLS ON CACHE BOOL "Enable deprecated public API symbols" FORCE)
@@ -56,3 +54,5 @@ SET (SZIP_TGZ_NAME "SZip.tar.gz" CACHE STRING "Use SZip from compressed file" FO
 
 SET (CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build Debug" FORCE)
 
+SET (CTEST_BUILD_CONFIGURATION "Debug" CACHE STRING "Build Debug" FORCE)
+
diff --git a/config/cmake/prunTest.cmake b/config/cmake/prunTest.cmake
new file mode 100644
index 0000000..8bcf729
--- /dev/null
+++ b/config/cmake/prunTest.cmake
@@ -0,0 +1,121 @@
+# runTest.cmake executes a command and captures the output in a file. File is then compared
+# against a reference file. Exit status of command can also be compared.
+
+# arguments checking
+IF (NOT TEST_PROGRAM)
+  MESSAGE (FATAL_ERROR "Require TEST_PROGRAM to be defined")
+ENDIF (NOT TEST_PROGRAM)
+#IF (NOT TEST_ARGS)
+#  MESSAGE (STATUS "Require TEST_ARGS to be defined")
+#ENDIF (NOT TEST_ARGS)
+IF (NOT TEST_FOLDER)
+  MESSAGE ( FATAL_ERROR "Require TEST_FOLDER to be defined")
+ENDIF (NOT TEST_FOLDER)
+IF (NOT TEST_OUTPUT)
+  MESSAGE (FATAL_ERROR "Require TEST_OUTPUT to be defined")
+ENDIF (NOT TEST_OUTPUT)
+#IF (NOT TEST_EXPECT)
+#  MESSAGE (STATUS "Require TEST_EXPECT to be defined")
+#ENDIF (NOT TEST_EXPECT)
+#IF (NOT TEST_FILTER)
+#  MESSAGE (STATUS "Require TEST_FILTER to be defined")
+#ENDIF (NOT TEST_FILTER)
+IF (NOT TEST_SKIP_COMPARE AND NOT TEST_REFERENCE)
+  MESSAGE (FATAL_ERROR "Require TEST_REFERENCE to be defined")
+ENDIF (NOT TEST_SKIP_COMPARE AND NOT TEST_REFERENCE)
+
+SET (ERROR_APPEND 1)
+
+MESSAGE (STATUS "COMMAND: ${TEST_PROGRAM} ${TEST_ARGS}")
+
+IF (TEST_ENV_VAR)
+  SET (ENV{${TEST_ENV_VAR}} "${TEST_ENV_VALUE}") 
+ENDIF (TEST_ENV_VAR)
+
+# run the test program, capture the stdout/stderr and the result var
+EXECUTE_PROCESS (
+    COMMAND ${TEST_PROGRAM} ${TEST_ARGS}
+    WORKING_DIRECTORY ${TEST_FOLDER}
+    RESULT_VARIABLE TEST_RESULT
+    OUTPUT_FILE ${TEST_OUTPUT}
+    ERROR_FILE ${TEST_OUTPUT}.err
+    OUTPUT_VARIABLE TEST_ERROR
+    ERROR_VARIABLE TEST_ERROR
+)
+
+MESSAGE (STATUS "COMMAND Result: ${TEST_RESULT}")
+
+FILE (READ ${TEST_FOLDER}/${TEST_REFERENCE} TEST_STREAM)
+FILE (WRITE ${TEST_FOLDER}/P_${TEST_REFERENCE} "${TEST_STREAM}")
+
+IF (ERROR_APPEND)
+  FILE (READ ${TEST_FOLDER}/${TEST_OUTPUT}.err TEST_STREAM)
+  FILE (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}") 
+ENDIF (ERROR_APPEND)
+
+IF (TEST_APPEND)
+  FILE (APPEND ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_APPEND} ${TEST_ERROR}\n") 
+ENDIF (TEST_APPEND)
+
+MESSAGE (STATUS "COMMAND Error: ${TEST_ERROR}")
+
+IF (TEST_MASK)
+  FILE (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM)
+  STRING(REGEX REPLACE "Storage:[^\n]+\n" "Storage:   <details removed for portability>\n" TEST_STREAM "${TEST_STREAM}") 
+  FILE (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}")
+ENDIF (TEST_MASK)
+
+IF (TEST_MASK_MOD)
+  FILE (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM)
+  STRING(REGEX REPLACE "Modified:[^\n]+\n" "Modified:  XXXX-XX-XX XX:XX:XX XXX\n" TEST_STREAM "${TEST_STREAM}") 
+  FILE (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}")
+ENDIF (TEST_MASK_MOD)
+
+IF (TEST_MASK_ERROR)
+  FILE (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM)
+  STRING(REGEX REPLACE "thread [0-9]*:" "thread (IDs):" TEST_STREAM "${TEST_STREAM}") 
+  STRING(REGEX REPLACE ": ([^\n]*)[.]c " ": (file name) " TEST_STREAM "${TEST_STREAM}") 
+  STRING(REGEX REPLACE " line [0-9]*" " line (number)" TEST_STREAM "${TEST_STREAM}") 
+  STRING(REGEX REPLACE "v[1-9]*[.][0-9]*[.]" "version (number)." TEST_STREAM "${TEST_STREAM}") 
+  STRING(REGEX REPLACE "[1-9]*[.][0-9]*[.][0-9]*[^)]*" "version (number)" TEST_STREAM "${TEST_STREAM}") 
+  STRING(REGEX REPLACE "H5Eget_auto[1-2]*" "H5Eget_auto(1 or 2)" TEST_STREAM "${TEST_STREAM}") 
+  STRING(REGEX REPLACE "H5Eset_auto[1-2]*" "H5Eset_auto(1 or 2)" TEST_STREAM "${TEST_STREAM}") 
+  FILE (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}")
+ENDIF (TEST_MASK_ERROR)
+
+IF (TEST_FILTER)
+  FILE (READ ${TEST_FOLDER}/${TEST_OUTPUT} TEST_STREAM)
+  STRING(REGEX REPLACE "${TEST_FILTER}" "" TEST_STREAM "${TEST_STREAM}") 
+  FILE (WRITE ${TEST_FOLDER}/${TEST_OUTPUT} "${TEST_STREAM}")
+ENDIF (TEST_FILTER)
+
+#IF (TEST_REF_FILTER)
+#  MESSAGE (STATUS "TEST_REF_FILTER: ${TEST_APPEND}${TEST_REF_FILTER}")
+#  FILE (READ ${TEST_FOLDER}/P_${TEST_REFERENCE} TEST_STREAM)
+#  STRING(REGEX REPLACE "${TEST_APPEND}" "${TEST_REF_FILTER}" TEST_STREAM "${TEST_STREAM}") 
+#  FILE (WRITE ${TEST_FOLDER}/P_${TEST_REFERENCE} "${TEST_STREAM}")
+#ENDIF (TEST_REF_FILTER)
+
+IF (NOT TEST_SKIP_COMPARE)
+  IF (WIN32 AND NOT MINGW)
+    FILE (READ ${TEST_FOLDER}/P_${TEST_REFERENCE} TEST_STREAM)
+    FILE (WRITE ${TEST_FOLDER}/P_${TEST_REFERENCE} "${TEST_STREAM}")
+  ENDIF (WIN32 AND NOT MINGW)
+
+  # now compare the output with the reference
+  EXECUTE_PROCESS (
+      COMMAND ${CMAKE_COMMAND} -E compare_files ${TEST_FOLDER}/${TEST_OUTPUT} ${TEST_FOLDER}/P_${TEST_REFERENCE}
+      RESULT_VARIABLE TEST_RESULT
+  )
+
+  MESSAGE (STATUS "COMPARE Result: ${TEST_RESULT}")
+
+  # again, if return value is !=0 scream and shout
+  IF (NOT ${TEST_RESULT} STREQUAL 0)
+    MESSAGE (FATAL_ERROR "Failed: The output of ${TEST_PROGRAM} did not match P_${TEST_REFERENCE}")
+  ENDIF (NOT ${TEST_RESULT} STREQUAL 0)
+ENDIF (NOT TEST_SKIP_COMPARE)
+
+# everything went fine...
+MESSAGE ("Passed: The output of ${TEST_PROGRAM} matches P_${TEST_REFERENCE}")
+
diff --git a/config/i686-pc-cygwin b/config/i686-pc-cygwin
index a51adc3..9b1ab74 100644
--- a/config/i686-pc-cygwin
+++ b/config/i686-pc-cygwin
@@ -1,4 +1,4 @@
-#							-*- shell-script -*-
+#              -*- shell-script -*-
 #
 # Copyright by The HDF Group.
 # Copyright by the Board of Trustees of the University of Illinois.
@@ -39,9 +39,9 @@ fi
 if test "X-" = "X-$FC"; then
     case $CC_BASENAME in
         gcc*)
-            FC=g95
+            FC=gfortran
             FCLIBS=-lgcc
-            FC_BASENAME=g95
+            FC_BASENAME=gfortran
             ;;
         pgcc*)
             FC=pgf90
@@ -61,6 +61,9 @@ else
         # The PGI and Intel compilers are automatically detected below
         ifc*|ifort*|pgf90*)
             ;;
+        gfortran)
+            FCLIBS=-lgcc
+            ;;
         g95)
             FCLIBS=-lgcc
             ;;
diff --git a/config/ia64-linux-gnu b/config/ia64-linux-gnu
index 519d0fc..9f1b262 100644
--- a/config/ia64-linux-gnu
+++ b/config/ia64-linux-gnu
@@ -142,12 +142,3 @@ case $CXX_BASENAME in
 	PROFILE_CPPFLAGS=
 	;;
 esac
-
-# Check MPICH settings
-. $srcdir/config/mpich
-#Uncomment the next line if your system doesn't support MPI complex derived datatype.
-#hdf5_cv_mpi_complex_derived_datatype_works=${hdf5_cv_mpi_complex_derived_datatype_works='no'}
-#Comment out the following line if your system supports collective IO when some processes
-#don't have any contributions to IOs.
-hdf5_cv_mpi_special_collective_io_works=${hdf5_cv_mpi_special_collective_io_works='no'}
-
diff --git a/config/ibm-aix b/config/ibm-aix
index a94be4b..ff541bc 100644
--- a/config/ibm-aix
+++ b/config/ibm-aix
@@ -36,10 +36,7 @@ fi
 # Ask for more memory so that "make check" will pass. Not necessary for -q64
 # mode but it does no harm.
 if test "X-$enable_parallel" = "X-yes" -o X-$CC_BASENAME = X-mpcc_r; then
-    RUNPARALLEL=${RUNPARALLEL="env LDR_CNTRL=MAXDATA=0x20000000 at DSA MP_PROCS=\$\${NPROCS:=6} MP_TASKS_PER_NODE=\$\${NPROCS:=6} poe"}
-    RUNSERIAL=${RUNSERIAL="env LDR_CNTRL=MAXDATA=0x20000000 at DSA MP_PROCS=1 MP_TASKS_PER_NODE=1 poe"}
-else
-    RUNSERIAL=${RUNSERIAL="env LDR_CNTRL=MAXDATA=0x20000000 at DSA"}
+    RUNPARALLEL=${RUNPARALLEL="env MP_PROCS=\$\${NPROCS:=6} MP_TASKS_PER_NODE=\$\${NPROCS:=6} poe"}
 fi
 
 
@@ -142,11 +139,6 @@ if test "X-" = "X-$f9x_flags_set"; then
   f9x_flags_set=yes
 fi
 
-# With poe version 3.2.0.19 or lower(using lpp -l all | grep ppe.poe to check the version number, 
-# IBM MPI-IO implementation has a bug, 
-#it cannot generate correct MPI derived datatype. Please uncomment the following line:
-#hdf5_cv_mpi_complex_derived_datatype_works=${hdf5_cv_mpi_complex_derived_datatype_works='no'}
-
 # The default C++ compiler
 
 # Use AIX supplied C++ compiler by default.
diff --git a/config/irix6.x b/config/irix6.x
index 9bd9c4c..8179b86 100644
--- a/config/irix6.x
+++ b/config/irix6.x
@@ -171,26 +171,6 @@ hdf5_cv_ulong_to_fp_bottom_bit_accurate=${hdf5_cv_ulong_to_fp_bottom_bit_accurat
 hdf5_cv_ldouble_to_integer_accurate=${hdf5_cv_ldouble_to_integer_accurate='no'}
 hdf5_cv_integer_to_ldouble_accurate=${hdf5_cv_integer_to_ldouble_accurate='no'}
 
-# For IRIX 6.5, any version that is older than MIPSpro 7.3.1.3m, 
-# the MPI derived datatype is not working.
-# Versions 7.4.2m or newer work.
-# Up to version 7.4.4m, it cannot handle collective IO with non-contribution 
-# of some processes.
-# Fix $hdf5_cv_mpi_complex_derived_datatype_works if it is not set and is using cc.
-if [ -z "$hdf5_cv_mpi_complex_derived_datatype_works" -a $CC_BASENAME = cc ]; then
-    ccversion=`$CC -version 2>&1 | sed -e 's/.*Version //p'`
-    ccversion1=`echo $ccversion | cut -f1 -d.`
-    ccversion2=`echo $ccversion | cut -f2 -d.`
-    # Assume all versions 7.4.* or newer are okay
-    # and assume ccversion2 is never larger than 99.
-    ccversionval=`expr $ccversion1 \* 100 + $ccversion2`
-    hdf5_cv_mpi_special_collective_io_works='no'
-    if [ $ccversionval -lt 704 ]; then
-        hdf5_cv_mpi_complex_derived_datatype_works='no'
-#        hdf5_cv_mpi_special_collective_io_works='no'
-    fi
-fi
-
 # Set flag to generate alternate code for H5V_log2_gen, to avoid
 # problems with the MIPSpro compiler 7.30 and IRIX64 6.5 (ie. other
 # combinations might work, but haven't been tested)
diff --git a/config/linux-gnulibc1 b/config/linux-gnulibc1
index 8f04cf0..9dcc411 100644
--- a/config/linux-gnulibc1
+++ b/config/linux-gnulibc1
@@ -125,23 +125,6 @@ if test -z "$CXX"; then
   CXX_BASENAME=g++
 fi
 
-# Check MPICH settings
-. $srcdir/config/mpich
-
-# The ChaMPIon on NCSA tungsten doesn't work correctly for either of the following
-# cases:
-#     1. collective I/O when some processes don't have any contributions;
-#     2. complex derived MPI data type.
-if test $CC_BASENAME = cmpicc; then
-  hdf5_cv_mpi_special_collective_io_works=${hdf5_cv_mpi_special_collective_io_works='no'}
-  hdf5_cv_mpi_complex_derived_datatype_works=${hdf5_cv_mpi_complex_derived_datatype_works='no'}
-fi
-
-#Comment out the following line if your system supports collective IO when some processes
-#don't have any contributions to IOs.
-hdf5_cv_mpi_special_collective_io_works=${hdf5_cv_mpi_special_collective_io_works='no'}
-hdf5_cv_mpi_complex_derived_datatype_works=${hdf5_cv_mpi_complex_derived_datatype_works='no'}
-
 # compiler version strings
 case $CC in
     # whatever matches *pgcc* will also match *gcc*, so this one must come first
diff --git a/config/lt_vers.am b/config/lt_vers.am
index 9d3ea67..faa527e 100644
--- a/config/lt_vers.am
+++ b/config/lt_vers.am
@@ -17,7 +17,7 @@
 # Add libtool shared library version numbers to the HDF5 library
 # See libtool versioning documentation online.
 LT_VERS_INTERFACE = 7
-LT_VERS_REVISION = 1
+LT_VERS_REVISION = 2
 LT_VERS_AGE = 0
 
 ## If the API changes *at all*, increment LT_VERS_INTERFACE and
diff --git a/config/mpich b/config/mpich
deleted file mode 100644
index 575859e..0000000
--- a/config/mpich
+++ /dev/null
@@ -1,83 +0,0 @@
-#							-*- shell-script -*-
-#
-# Copyright by The HDF Group.
-# Copyright by the Board of Trustees of the University of Illinois.
-# All rights reserved.
-#
-# This file is part of HDF5.  The full HDF5 copyright notice, including
-# terms governing use, modification, and redistribution, is contained in
-# the files COPYING and Copyright.html.  COPYING can be found at the root
-# of the source code distribution tree; Copyright.html can be found at the
-# root level of an installed copy of the electronic HDF5 document set and
-# is linked from the top-level documents page.  It can also be found at
-# http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have
-# access to either file, you may request a copy from help at hdfgroup.org.
-
-# This file should be sourced into configure if the compiler is the
-# MPICH compiler script. It is careful not to do anything if the compiler
-# is not MPICH.
-
-# Check if mpicc can support complicated derived datatype correctly.
-# We know that mpich 1.2.4 and 1.2.5 do not support it correctly.  We assume
-# older versions do not work either.  We don't know of a way of testing its
-# correctness without the risk of hanging the configure process.  So, we
-# set the configure variable hdf5_cv_mpi_complex_derived_datatype_works to no.
-# Notice that this code works only if the mpicc compiler shows its $MPIVERSION
-# properly.  It is confirmed mpicc does that as far back as v1.2.3.
-
-# mpich2 do not support it correctly.  But mpich2 reports small version number
-# indistiguishable from mpich.  Some mpich2 reports blank, some reports 1.0.2.
-
-if [ -z "$hdf5_cv_mpi_complex_derived_datatype_works" ]; then
-    ccversion=`$CC -v 2>/dev/null`
-    # mpich compiler will give "mpicc for 1.2.x ..."
-    if echo "$ccversion" | grep '^mpicc for' > /dev/null ; then
-	# $CC is an MPICH compiler. Grab the version numbers.
-        ccversion=`echo $ccversion | cut -f3 -d' '`
-	case "$ccversion" in
-	    1.2.[0-5]*)
-		hdf5_cv_mpi_complex_derived_datatype_works='no'
-		;;
-	    1.0.2)
-		# mpich2 is recycling the version number, some report
-		# 1.0.2, some report blank.
-		hdf5_cv_mpi_complex_derived_datatype_works='no'
-		;;
-	    "")
-		# got blank ccversion.  Assume it is bad a mpich2.
-		hdf5_cv_mpi_complex_derived_datatype_works='no'
-		;;
-	    *)
-		# assume okay
-		;;
-	esac
-    fi
-fi
-
-if [ -z "$hdf5_cv_mpi_special_collective_io_works" ]; then
-    ccversion=`$CC -v 2>/dev/null`
-    # mpich compiler will give "mpicc for 1.2.x ..."
-    if echo "$ccversion" | grep '^mpicc for' > /dev/null ; then
-	# $CC is an MPICH compiler. Grab the version numbers.
-        ccversion=`echo $ccversion | cut -f3 -d' '`
-	case "$ccversion" in
-	    1.2.[0-6]*)
-		hdf5_cv_mpi_special_collective_io_works='no'
-		;;
-	    1.0.2)
-		# mpich2 is recycling the version number, some report
-		# 1.0.2, some report blank.
-		hdf5_cv_mpi_special_collective_io_works='no'
-		;;
-	    "")
-		# got blank ccversion.  Assume it is bad a mpich2.
-		hdf5_cv_mpi_special_collective_io_works='no'
-		;;
-	    *)
-		# assume okay
-		;;
-	esac
-    fi
-fi
-
-
diff --git a/config/x86_64-redstorm-linux-gnu b/config/x86_64-redstorm-linux-gnu
index 0cd2d73..76f9711 100644
--- a/config/x86_64-redstorm-linux-gnu
+++ b/config/x86_64-redstorm-linux-gnu
@@ -162,5 +162,3 @@ hdf5_cv_ullong_to_fp_cast_works=${hdf5_cv_ullong_to_fp_cast_works='yes'}
 hdf5_cv_ullong_to_ldouble_precision_works=${hdf5_cv_ullong_to_ldouble_precision_works='yes'}
 hdf5_cv_vsnprintf_works=${hdf5_cv_vsnprintf_works='yes'}
 hdf5_cv_fp_to_integer_overflow_works=${hdf5_cv_fp_to_integer_overflow_works='yes'}
-# mpich2 used has derived datatype errors.
-hdf5_cv_mpi_complex_derived_datatype_works=${hdf5_cv_mpi_complex_derived_datatype_works='no'}
diff --git a/configure b/configure
index ec1a6ba..133efd8 100755
--- a/configure
+++ b/configure
@@ -1,7 +1,7 @@
 #! /bin/sh
-# From configure.in Id: configure.in 20696 2011-05-02 15:36:18Z nfortne2 .
+# From configure.in Id: configure.in 21755 2011-11-14 17:47:13Z mamcgree .
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.68 for HDF5 1.8.7.
+# Generated by GNU Autoconf 2.68 for HDF5 1.8.8.
 #
 # Report bugs to <help at hdfgroup.org>.
 #
@@ -571,8 +571,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='HDF5'
 PACKAGE_TARNAME='hdf5'
-PACKAGE_VERSION='1.8.7'
-PACKAGE_STRING='HDF5 1.8.7'
+PACKAGE_VERSION='1.8.8'
+PACKAGE_STRING='HDF5 1.8.8'
 PACKAGE_BUGREPORT='help at hdfgroup.org'
 PACKAGE_URL=''
 
@@ -713,6 +713,8 @@ ac_ct_CXX
 CXXFLAGS
 FORTRAN_DEFAULT_REALisDBLE_F_FALSE
 FORTRAN_DEFAULT_REALisDBLE_F_TRUE
+FORTRAN_2003_CONDITIONAL_F_FALSE
+FORTRAN_2003_CONDITIONAL_F_TRUE
 FORTRAN_HAVE_SIZEOF_FALSE
 FORTRAN_HAVE_SIZEOF_TRUE
 FCLIBS
@@ -731,6 +733,7 @@ HSIZE_T
 HADDR_T
 R_INTEGER
 R_LARGE
+HAVE_FORTRAN_2003
 HDF5_INTERFACES
 am__fastdepCC_FALSE
 am__fastdepCC_TRUE
@@ -747,7 +750,6 @@ ac_ct_CC
 LDFLAGS
 CFLAGS
 CC
-PACKED_BITS
 UNAME_INFO
 enable_static
 enable_shared
@@ -762,7 +764,9 @@ GPFS
 HDF5_HL
 CXX
 HDF_CXX
+FC2003
 FC
+HDF_FORTRAN2003
 HDF_FORTRAN
 STATIC_EXEC
 MPE
@@ -860,6 +864,7 @@ enable_maintainer_mode
 enable_dependency_tracking
 enable_unsupported
 enable_fortran
+enable_fortran2003
 enable_cxx
 enable_shared
 enable_static
@@ -901,7 +906,6 @@ enable_deprecated_symbols
 with_default_api_version
 enable_strict_format_checks
 enable_embedded_libinfo
-enable_h5dump_packed_bits
 '
       ac_precious_vars='build_alias
 host_alias
@@ -1460,7 +1464,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures HDF5 1.8.7 to adapt to many kinds of systems.
+\`configure' configures HDF5 1.8.8 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1530,7 +1534,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of HDF5 1.8.7:";;
+     short | recursive ) echo "Configuration of HDF5 1.8.8:";;
    esac
   cat <<\_ACEOF
 
@@ -1545,7 +1549,9 @@ Optional Features:
   --disable-dependency-tracking  speeds up one-time build
   --enable-dependency-tracking   do not reject slow dependency extractors
   --enable-unsupported    Allow unsupported combinations of configure options
-  --enable-fortran        Compile the Fortran interface [default=no]
+  --enable-fortran        Compile the Fortran 77/90/95 interface [default=no]
+  --enable-fortran2003    Compile the Fortran 2003 interface, must also
+                          specify --enable-fortran [default=no]
   --enable-cxx            Compile the C++ interface [default=no]
   --enable-shared[=PKGS]  build shared libraries [default=yes]
   --enable-static[=PKGS]  build static libraries [default=yes]
@@ -1612,8 +1618,6 @@ Optional Features:
                           debug flag is enabled, no otherwise
   --enable-embedded-libinfo
                           Enable embedded library information [default=yes]
-  --enable-h5dump-packed-bits
-                          Enable h5dump packed bits feature [default=yes]
 
 Optional Packages:
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
@@ -1726,7 +1730,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-HDF5 configure 1.8.7
+HDF5 configure 1.8.8
 generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -2685,21 +2689,23 @@ rm -f conftest.val
 
 } # ac_fn_c_compute_int
 
-# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
-# ----------------------------------------------------
-# Tries to find if the field MEMBER exists in type AGGR, after including
-# INCLUDES, setting cache variable VAR accordingly.
-ac_fn_c_check_member ()
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
-$as_echo_n "checking for $2.$3... " >&6; }
-if eval \${$4+:} false; then :
+  as_decl_name=`echo $2|sed 's/ *(.*//'`
+  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-$5
+$4
 #ifdef FC_DUMMY_MAIN
 #ifndef FC_DUMMY_MAIN_EQ_F77
 #  ifdef __cplusplus
@@ -2711,15 +2717,43 @@ $5
 int
 main ()
 {
-static $2 ac_aggr;
-if (ac_aggr.$3)
-return 0;
+#ifndef $as_decl_name
+#ifdef __cplusplus
+  (void) $as_decl_use;
+#else
+  (void) $as_decl_name;
+#endif
+#endif
+
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$4=yes"
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
+
+# ac_fn_c_check_member LINENO AGGR MEMBER VAR INCLUDES
+# ----------------------------------------------------
+# Tries to find if the field MEMBER exists in type AGGR, after including
+# INCLUDES, setting cache variable VAR accordingly.
+ac_fn_c_check_member ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
+$as_echo_n "checking for $2.$3... " >&6; }
+if eval \${$4+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -2736,7 +2770,7 @@ int
 main ()
 {
 static $2 ac_aggr;
-if (sizeof ac_aggr.$3)
+if (ac_aggr.$3)
 return 0;
   ;
   return 0;
@@ -2745,36 +2779,9 @@ _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
   eval "$4=yes"
 else
-  eval "$4=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$4
-	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_member
-
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
-# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  as_decl_name=`echo $2|sed 's/ *(.*//'`
-  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-$4
+$5
 #ifdef FC_DUMMY_MAIN
 #ifndef FC_DUMMY_MAIN_EQ_F77
 #  ifdef __cplusplus
@@ -2786,36 +2793,33 @@ $4
 int
 main ()
 {
-#ifndef $as_decl_name
-#ifdef __cplusplus
-  (void) $as_decl_use;
-#else
-  (void) $as_decl_name;
-#endif
-#endif
-
+static $2 ac_aggr;
+if (sizeof ac_aggr.$3)
+return 0;
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
+  eval "$4=yes"
 else
-  eval "$3=no"
+  eval "$4=no"
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
-eval ac_res=\$$3
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$4
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
-} # ac_fn_c_check_decl
+} # ac_fn_c_check_member
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by HDF5 $as_me 1.8.7, which was
+It was created by HDF5 $as_me 1.8.8, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
@@ -3635,7 +3639,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='hdf5'
- VERSION='1.8.7'
+ VERSION='1.8.8'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -3842,7 +3846,9 @@ $as_echo "done" >&6; }
  MPE=no
  STATIC_EXEC=no
  HDF_FORTRAN=no
+ HDF_FORTRAN2003=no
  HDF_FORTRAN=no
+ HDF_FORTRAN2003=no
  HDF_CXX=no
  HDF_CXX=no
  HDF5_HL=yes
@@ -3857,7 +3863,6 @@ $as_echo "done" >&6; }
 
 
  UNAME_INFO=`uname -a`
- PACKED_BITS=yes
 
 
 
@@ -4992,15 +4997,42 @@ if test "${enable_fortran+set}" = set; then :
 fi
 
 
+if test "X$HDF_FORTRAN" = "Xyes"; then
+  echo "yes"
+else
+  echo "no"
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran 2003 interface enabled" >&5
+$as_echo_n "checking if Fortran 2003 interface enabled... " >&6; }
+# Check whether --enable-fortran2003 was given.
+if test "${enable_fortran2003+set}" = set; then :
+  enableval=$enable_fortran2003; HDF_FORTRAN2003=$enableval
+fi
+
+
+
+if test "X$HDF_FORTRAN2003" = "Xyes" && test "X$HDF_FORTRAN" = "Xno"; then
+  echo "no"
+  as_fn_error $? "--enable-fortran must be used with --enable-fortran2003" "$LINENO" 5
+else
+  echo "yes"
+fi
 
 HAVE_SIZEOF="no"
 FORTRAN_DEFAULT_REALisDBLE="no"
 
 if test "X$HDF_FORTRAN" = "Xyes"; then
-  echo "yes"
+
+   HDF_FORTRAN=yes
+
 
   HDF5_INTERFACES="$HDF5_INTERFACES fortran"
 
+        HAVE_FORTRAN_2003="no"
+  HAVE_F2003_REQUIREMENTS="no"
+
 
 
 
@@ -6256,8 +6288,6 @@ fi
 
 
 
-
-
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran default REAL is DOUBLE PRECISION" >&5
 $as_echo_n "checking if Fortran default REAL is DOUBLE PRECISION... " >&6; }
 
@@ -6303,16 +6333,56 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
   conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
 
-    ac_ext=c
+
+  if test "X$HDF_FORTRAN2003" = "Xyes"; then
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran compiler version compatible with Fortran 2003 HDF" >&5
+$as_echo_n "checking if Fortran compiler version compatible with Fortran 2003 HDF... " >&6; }
+    HAVE_FORTRAN_2003="no"
+
+    cat > conftest.$ac_ext <<_ACEOF
+      program main
+
+
+	USE iso_c_binding
+	IMPLICIT NONE
+	TYPE(C_PTR) :: ptr
+	TYPE(C_FUNPTR) :: funptr
+	CHARACTER(LEN=80, KIND=c_char), TARGET :: ichr
+
+	ptr = C_LOC(ichr(1:1))
+
+
+      end
+_ACEOF
+if ac_fn_fc_try_compile "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+        HAVE_F2003_REQUIREMENTS=yes
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+    if test "X$HAVE_F2003_REQUIREMENTS" = "Xno"; then
+          as_fn_error $? "Fortran compiler lacks required Fortran 2003 features; unsupported Fortran 2003 compiler, remove --enable-fortran2003" "$LINENO" 5
+    else
+      HAVE_FORTRAN_2003="yes"
+        fi
+
+  fi
+else
+  FC="no"
+fi
+
+ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-else
-  echo "no"
-  FC="no"
-fi
 
  if test "X$HAVE_SIZEOF" = "Xyes"; then
   FORTRAN_HAVE_SIZEOF_TRUE=
@@ -6322,6 +6392,14 @@ else
   FORTRAN_HAVE_SIZEOF_FALSE=
 fi
 
+ if test "X$HAVE_FORTRAN_2003" = "Xyes"; then
+  FORTRAN_2003_CONDITIONAL_F_TRUE=
+  FORTRAN_2003_CONDITIONAL_F_FALSE='#'
+else
+  FORTRAN_2003_CONDITIONAL_F_TRUE='#'
+  FORTRAN_2003_CONDITIONAL_F_FALSE=
+fi
+
  if test "X$FORTRAN_DEFAULT_REALisDBLE" = "Xyes"; then
   FORTRAN_DEFAULT_REALisDBLE_F_TRUE=
   FORTRAN_DEFAULT_REALisDBLE_F_FALSE='#'
@@ -7374,7 +7452,7 @@ $as_echo "none" >&6; }
             ;;
 esac
 
-if test "X$HDF_FORTRAN" = "Xyes"; then
+if test "X$HDF_FORTRAN" = "Xyes" ; then
     ac_ext=${ac_fc_srcext-f}
 ac_compile='$FC -c $FCFLAGS $ac_fcflags_srcext conftest.$ac_ext >&5'
 ac_link='$FC -o conftest$ac_exeext $FCFLAGS $LDFLAGS $ac_fcflags_srcext conftest.$ac_ext $LIBS >&5'
@@ -21693,7 +21771,7 @@ $as_echo "profile" >&6; }
     enable_production="user-defined"
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: user-defined" >&5
 $as_echo "user-defined" >&6; }
-    CONFIG_MODE="$X-enableval"
+    CONFIG_MODE="$enableval"
     ;;
 esac
 
@@ -22049,6 +22127,83 @@ else
 fi
 done
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5
+$as_echo_n "checking for library containing clock_gettime... " >&6; }
+if ${ac_cv_search_clock_gettime+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_func_search_save_LIBS=$LIBS
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char clock_gettime ();
+#ifdef FC_DUMMY_MAIN
+#ifndef FC_DUMMY_MAIN_EQ_F77
+#  ifdef __cplusplus
+     extern "C"
+#  endif
+   int FC_DUMMY_MAIN() { return 1; }
+#endif
+#endif
+int
+main ()
+{
+return clock_gettime ();
+  ;
+  return 0;
+}
+_ACEOF
+for ac_lib in '' rt posix4; do
+  if test -z "$ac_lib"; then
+    ac_res="none required"
+  else
+    ac_res=-l$ac_lib
+    LIBS="-l$ac_lib  $ac_func_search_save_LIBS"
+  fi
+  if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_search_clock_gettime=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext
+  if ${ac_cv_search_clock_gettime+:} false; then :
+  break
+fi
+done
+if ${ac_cv_search_clock_gettime+:} false; then :
+
+else
+  ac_cv_search_clock_gettime=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_clock_gettime" >&5
+$as_echo "$ac_cv_search_clock_gettime" >&6; }
+ac_res=$ac_cv_search_clock_gettime
+if test "$ac_res" != no; then :
+  test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+
+for ac_func in clock_gettime
+do :
+  ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime"
+if test "x$ac_cv_func_clock_gettime" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_CLOCK_GETTIME 1
+_ACEOF
+ have_clock_gettime="yes"
+else
+  have_clock_gettime="no"
+fi
+done
+
 
 for ac_header in sys/resource.h sys/time.h unistd.h sys/ioctl.h sys/stat.h
 do :
@@ -22102,6 +22257,19 @@ fi
 done
 
 
+for ac_header in mach/mach_time.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "mach/mach_time.h" "ac_cv_header_mach_mach_time_h" "$ac_includes_default"
+if test "x$ac_cv_header_mach_mach_time_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_MACH_MACH_TIME_H 1
+_ACEOF
+
+fi
+
+done
+
+
 case "`uname`" in
   CYGWIN*)
     for ac_header in io.h sys/timeb.h
@@ -22523,13 +22691,14 @@ case "$host_cpu-$host_vendor-$host_os" in
         AM_CPPFLAGS="-D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE $AM_CPPFLAGS"
     fi
 
-                                                            H5_CPPFLAGS="-D_POSIX_SOURCE $H5_CPPFLAGS"
+                                                                H5_CPPFLAGS="-D_POSIX_C_SOURCE=199506L $H5_CPPFLAGS"
 
-                    AM_CPPFLAGS="-D_BSD_SOURCE $AM_CPPFLAGS"
+                                    AM_CPPFLAGS="-D_BSD_SOURCE $AM_CPPFLAGS"
     ;;
 esac
 
-CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
+CPPFLAGS="$H5_CPPFLAGS $AM_CPPFLAGS $CPPFLAGS"
+CFLAGS="$H5_CFLAGS $AM_CFLAGS $CFLAGS"
 
 cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
@@ -25604,6 +25773,15 @@ $as_echo "#define HAVE_THREADSAFE 1" >>confdefs.h
 
 fi
 
+ac_fn_c_check_decl "$LINENO" "CLOCK_MONOTONIC" "ac_cv_have_decl_CLOCK_MONOTONIC" "#include <time.h>
+"
+if test "x$ac_cv_have_decl_CLOCK_MONOTONIC" = xyes; then :
+  have_clock_monotonic="yes"
+else
+  have_clock_monotonic="no"
+fi
+
+
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tm_gmtoff in struct tm" >&5
 $as_echo_n "checking for tm_gmtoff in struct tm... " >&6; }
@@ -28042,74 +28220,31 @@ $as_echo "yes" >&6; }
 $as_echo "no" >&6; }
   fi
 
-# Check whether --enable-mpi-size was given.
+                # Check whether --enable-mpi-size was given.
 if test "${enable_mpi_size+set}" = set; then :
   enableval=$enable_mpi_size; MPI_GET_SIZE=$enableval
 fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI_File_get_size is enabled" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI_File_get_size is enabled" >&5
 $as_echo_n "checking if MPI_File_get_size is enabled... " >&6; }
 
 
-case "X-$MPI_GET_SIZE" in
-  X-no)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+  case "X-$MPI_GET_SIZE" in
+    X-no)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-    MPI_GET_SIZE=no
-    ;;
-  X-yes|*)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+      MPI_GET_SIZE=no
+      ;;
+    X-yes|*)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
-    MPI_GET_SIZE=yes
+      MPI_GET_SIZE=yes
 
 $as_echo "#define HAVE_MPI_GET_SIZE 1" >>confdefs.h
 
-    ;;
-esac
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if irregular hyperslab optimization code works inside MPI-IO" >&5
-$as_echo_n "checking if irregular hyperslab optimization code works inside MPI-IO... " >&6; }
-
-if ${hdf5_cv_mpi_complex_derived_datatype_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  hdf5_cv_mpi_complex_derived_datatype_works=yes
-fi
-
-
-if test ${hdf5_cv_mpi_complex_derived_datatype_works} = "yes"; then
-
-$as_echo "#define MPI_COMPLEX_DERIVED_DATATYPE_WORKS 1" >>confdefs.h
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI-IO can do collective IO when one or more processes don't do IOs" >&5
-$as_echo_n "checking if MPI-IO can do collective IO when one or more processes don't do IOs... " >&6; }
-
-if ${hdf5_cv_mpi_special_collective_io_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  hdf5_cv_mpi_special_collective_io_works=yes
-fi
-
-
-if test ${hdf5_cv_mpi_special_collective_io_works} = "yes"; then
-
-$as_echo "#define MPI_SPECIAL_COLLECTIVE_IO_WORKS 1" >>confdefs.h
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
+      ;;
+  esac
 fi
 
 
@@ -29759,29 +29894,6 @@ $as_echo "no" >&6; }
     fi
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Whether to enable the h5dump packed bits feature" >&5
-$as_echo_n "checking Whether to enable the h5dump packed bits feature... " >&6; }
-# Check whether --enable-h5dump-packed-bits was given.
-if test "${enable_h5dump_packed_bits+set}" = set; then :
-  enableval=$enable_h5dump_packed_bits; enable_h5dump_packed_bits=$enableval
-else
-  enable_h5dump_packed_bits=yes
-fi
-
-
-   if test "${enable_h5dump_packed_bits}" = "yes"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE_H5DUMP_PACKED_BITS 1" >>confdefs.h
-
-   else
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-      PACKED_BITS=no
-    fi
-
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if alignment restrictions are strictly enforced" >&5
 $as_echo_n "checking if alignment restrictions are strictly enforced... " >&6; }
 if test "$cross_compiling" = yes; then :
@@ -30075,6 +30187,10 @@ if test -z "${FORTRAN_HAVE_SIZEOF_TRUE}" && test -z "${FORTRAN_HAVE_SIZEOF_FALSE
   as_fn_error $? "conditional \"FORTRAN_HAVE_SIZEOF\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
 fi
+if test -z "${FORTRAN_2003_CONDITIONAL_F_TRUE}" && test -z "${FORTRAN_2003_CONDITIONAL_F_FALSE}"; then
+  as_fn_error $? "conditional \"FORTRAN_2003_CONDITIONAL_F\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
 if test -z "${FORTRAN_DEFAULT_REALisDBLE_F_TRUE}" && test -z "${FORTRAN_DEFAULT_REALisDBLE_F_FALSE}"; then
   as_fn_error $? "conditional \"FORTRAN_DEFAULT_REALisDBLE_F\" was never defined.
 Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -30529,7 +30645,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by HDF5 $as_me 1.8.7, which was
+This file was extended by HDF5 $as_me 1.8.8, which was
 generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -30595,7 +30711,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-HDF5 config.status 1.8.7
+HDF5 config.status 1.8.8
 configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
@@ -33389,7 +33505,7 @@ Usage: $0 [OPTIONS]
 Report bugs to <bug-libtool at gnu.org>."
 
 lt_cl_version="\
-HDF5 config.lt 1.8.7
+HDF5 config.lt 1.8.8
 configured by $0, generated by GNU Autoconf 2.68.
 
 Copyright (C) 2010 Free Software Foundation, Inc.
diff --git a/configure.in b/configure.in
index 7973b56..a11eb49 100644
--- a/configure.in
+++ b/configure.in
@@ -16,7 +16,7 @@ dnl access to either file, you may request a copy from help at hdfgroup.org.
 dnl ----------------------------------------------------------------------
 dnl Initialize configure.
 dnl
-AC_REVISION($Id: configure.in 20696 2011-05-02 15:36:18Z nfortne2 $)
+AC_REVISION($Id: configure.in 21758 2011-11-15 15:47:24Z mamcgree $)
 AC_PREREQ([2.53])
 
 dnl AC_INIT takes the name of the package, the version number, and an
@@ -26,7 +26,7 @@ dnl
 dnl NOTE: Don't forget to change the version number here when we do a
 dnl release!!!
 dnl
-AC_INIT([HDF5], [1.8.7], [help at hdfgroup.org])
+AC_INIT([HDF5], [1.8.8], [help at hdfgroup.org])
 AC_CONFIG_SRCDIR([src/H5.c])
 AM_CONFIG_HEADER([src/H5config.h])
 
@@ -154,6 +154,7 @@ dnl EXTERNAL_FILTERS equals all external filters. Default none.
 dnl MPE: whether MPE option is enabled. Default no.
 dnl STATIC_EXEC: whether static-exec is enabled. Default no.
 dnl HDF_FORTRAN: whether Fortran is enabled. Default no.
+dnl HDF_FORTRAN2003: whether Fortran 2003 is enabled. Default no.
 dnl FC: Fortran compiler.
 dnl HDF_CXX: whether C++ is enabled. Default no.
 dnl CXX: C++ compiler.
@@ -169,13 +170,14 @@ dnl STATIC_SHARED: whether static and/or shared libraries are requested.
 dnl enable_shared: whether shared lib is enabled.
 dnl enable_static: whether static lib is enabled.
 dnl UNAME_INFO: System information.
-dnl PACKED_BITS: H5dump packed bits feature is enabled.
 
 AC_SUBST(EXTERNAL_FILTERS)
 AC_SUBST(MPE) MPE=no
 AC_SUBST(STATIC_EXEC) STATIC_EXEC=no
 AC_SUBST(HDF_FORTRAN) HDF_FORTRAN=no
+AC_SUBST(HDF_FORTRAN2003) HDF_FORTRAN2003=no
 AC_SUBST(FC) HDF_FORTRAN=no
+AC_SUBST(FC2003) HDF_FORTRAN2003=no
 AC_SUBST(HDF_CXX) HDF_CXX=no
 AC_SUBST(CXX) HDF_CXX=no
 AC_SUBST(HDF5_HL) HDF5_HL=yes
@@ -190,7 +192,6 @@ AC_SUBST(STATIC_SHARED)
 AC_SUBST(enable_shared)
 AC_SUBST(enable_static)
 AC_SUBST(UNAME_INFO) UNAME_INFO=`uname -a`
-AC_SUBST(PACKED_BITS) PACKED_BITS=yes
 
 dnl ----------------------------------------------------------------------
 dnl Some platforms have broken basename, and/or xargs programs. Check
@@ -371,19 +372,53 @@ AC_SUBST([HDF5_INTERFACES]) HDF5_INTERFACES=""
 AC_MSG_CHECKING([if Fortran interface enabled])
 AC_ARG_ENABLE([fortran],
               [AC_HELP_STRING([--enable-fortran],
-                              [Compile the Fortran interface [default=no]])],
+                              [Compile the Fortran 77/90/95 interface [default=no]])],
               [HDF_FORTRAN=$enableval])
 
+if test "X$HDF_FORTRAN" = "Xyes"; then
+  echo "yes"
+else
+  echo "no"
+fi
+
+
+dnl ----------------------------------------------------------------------
+dnl Check if they would like the Fortran 2003 interface compiled
+dnl
+AC_MSG_CHECKING([if Fortran 2003 interface enabled])
+AC_ARG_ENABLE([fortran2003],
+              [AC_HELP_STRING([--enable-fortran2003],
+                              [Compile the Fortran 2003 interface, must also specify --enable-fortran [default=no]])],
+              [HDF_FORTRAN2003=$enableval])
+
+dnl ----------------------------------------------------------------------
+dnl Check to make sure --enable-fortran is present if --enable-fortran2003 
+dnl was specified
+
+if test "X$HDF_FORTRAN2003" = "Xyes" && test "X$HDF_FORTRAN" = "Xno"; then
+  echo "no"
+  AC_MSG_ERROR([--enable-fortran must be used with --enable-fortran2003])
+else
+  echo "yes"
+fi
 
 HAVE_SIZEOF="no"
-FORTRAN_DEFAULT_REALisDBLE="no"	
+FORTRAN_DEFAULT_REALisDBLE="no"
 
 if test "X$HDF_FORTRAN" = "Xyes"; then
-  echo "yes"
 
+  AC_SUBST(FC) HDF_FORTRAN=yes
+  AC_SUBST([HAVE_FORTRAN_2003])
+		
   HDF5_INTERFACES="$HDF5_INTERFACES fortran"
 
   dnl --------------------------------------------------------------------
+  dnl Default for FORTRAN 2003 compliant compilers
+  dnl
+  HAVE_FORTRAN_2003="no"
+  HAVE_F2003_REQUIREMENTS="no"
+
+  dnl --------------------------------------------------------------------
   dnl HDF5 integer variables for the H5fortran_types.f90 file.
   dnl
   AC_SUBST([R_LARGE])
@@ -431,19 +466,19 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
   dnl --------------------------------------------------------------------
   dnl See if the compiler will support the "-I." option
   dnl
-dnl  AM_FCFLAGS_saved=$AM_FCFLAGS
-dnl  AM_FCFLAGS="${AM_FCFLAGS} -I."
+  dnl  AM_FCFLAGS_saved=$AM_FCFLAGS
+  dnl  AM_FCFLAGS="${AM_FCFLAGS} -I."
 
-dnl  AC_MSG_CHECKING(if compiler supports -I. option)
-dnl  AC_TRY_FCOMPILE([
-dnl      program conftest
-dnl      end
-dnl  ], AC_MSG_RESULT(yes),
-dnl     AC_MSG_RESULT(no)
-dnl     AM_FCFLAGS="$AM_FCFLAGS_saved")
+  dnl  AC_MSG_CHECKING(if compiler supports -I. option)
+  dnl  AC_TRY_FCOMPILE([
+  dnl      program conftest
+  dnl      end
+  dnl  ], AC_MSG_RESULT(yes),
+  dnl     AC_MSG_RESULT(no)
+  dnl     AM_FCFLAGS="$AM_FCFLAGS_saved")
 
-dnl --------------------------------------------------------------------
-dnl See if the fortran compiler supports the intrinsic function "SIZEOF"
+  dnl --------------------------------------------------------------------
+  dnl See if the fortran compiler supports the intrinsic function "SIZEOF"
 
   AC_MSG_CHECKING([if Fortran compiler supports intrinsic SIZEOF])
   AC_TRY_RUN([ 
@@ -454,10 +489,8 @@ dnl See if the fortran compiler supports the intrinsic function "SIZEOF"
      	HAVE_SIZEOF="yes"],
        AC_MSG_RESULT(no))
 
-
-dnl Check to see if -r8 was specified to determine if we need to
-dnl compile the DOUBLE PRECISION interfaces.
-
+  dnl Check to see if -r8 was specified to determine if we need to
+  dnl compile the DOUBLE PRECISION interfaces.
 
   AC_MSG_CHECKING([if Fortran default REAL is DOUBLE PRECISION])
   
@@ -486,14 +519,48 @@ dnl compile the DOUBLE PRECISION interfaces.
    AC_MSG_RESULT(no), 
    [AC_MSG_RESULT(yes) 
        FORTRAN_DEFAULT_REALisDBLE="yes"])
-  dnl Change back to the C language
-  AC_LANG_POP(Fortran)
+
+  if test "X$HDF_FORTRAN2003" = "Xyes"; then
+
+    dnl Checking if the compiler supports the required Fortran 2003 features and
+    dnl disable Fortran 2003 if it does not.
+
+    AC_MSG_CHECKING([if Fortran compiler version compatible with Fortran 2003 HDF])
+    HAVE_FORTRAN_2003="no"
+	
+    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[
+
+	USE iso_c_binding
+	IMPLICIT NONE
+	TYPE(C_PTR) :: ptr
+	TYPE(C_FUNPTR) :: funptr
+	CHARACTER(LEN=80, KIND=c_char), TARGET :: ichr
+
+	ptr = C_LOC(ichr(1:1))
+
+        ])], 
+        [AC_MSG_RESULT(yes) 
+        HAVE_F2003_REQUIREMENTS=[yes]],
+        [AC_MSG_RESULT(no)])
+
+    if test "X$HAVE_F2003_REQUIREMENTS" = "Xno"; then
+    dnl  echo $HAVE_FORTRAN_2003
+      AC_MSG_ERROR([Fortran compiler lacks required Fortran 2003 features; unsupported Fortran 2003 compiler, remove --enable-fortran2003])
+    else
+      HAVE_FORTRAN_2003="yes"
+    dnl  echo $HAVE_FORTRAN_2003
+    fi
+
+  fi
 else
-  echo "no"
   FC="no"
 fi
 
+dnl Change back to the C language
+AC_LANG_POP(Fortran)
+
 AM_CONDITIONAL([FORTRAN_HAVE_SIZEOF], [test "X$HAVE_SIZEOF" = "Xyes"])
+AM_CONDITIONAL([FORTRAN_2003_CONDITIONAL_F], [test "X$HAVE_FORTRAN_2003" = "Xyes"])
 AM_CONDITIONAL([FORTRAN_DEFAULT_REALisDBLE_F], [test "X$FORTRAN_DEFAULT_REALisDBLE" = "Xyes"])
 
 dnl ----------------------------------------------------------------------
@@ -782,7 +849,7 @@ dnl Furthermore, the name of the compiler might tell us how to run the
 dnl resulting executable. For `mpif90' the executable should be run with
 dnl `mpiexec' from the same directory as mpif90 if it exists.
 dnl
-if test "X$HDF_FORTRAN" = "Xyes"; then
+if test "X$HDF_FORTRAN" = "Xyes" ; then
   dnl Change to the Fortran 90 language
   AC_LANG_PUSH(Fortran)
 
@@ -1191,7 +1258,7 @@ case "X-$enable_production" in
   *)
     enable_production="user-defined"
     AC_MSG_RESULT([user-defined])
-    CONFIG_MODE="$X-enableval"
+    CONFIG_MODE="$enableval"
     ;;
 esac
 
@@ -1215,11 +1282,14 @@ AC_HEADER_STDC
 AC_HEADER_TIME
 
 dnl ----------------------------------------------------------------------
-dnl Check for these two functions before <sys/time.h> is checked for, otherwise
-dnl they are not detected correctly on Solaris [2.6].
+dnl Check for these two functions before the time headers are checked
+dnl for, otherwise they are not detected correctly on Solaris (the
+dnl configure test will fail due to multiply-defined symbols).
 dnl
 AC_CHECK_FUNCS(difftime)
 AC_CHECK_FUNCS(gettimeofday, [have_gettime="yes"], [have_gettime="no"])
+AC_SEARCH_LIBS([clock_gettime], [rt posix4])
+AC_CHECK_FUNCS([clock_gettime],[have_clock_gettime="yes"],[have_clock_gettime="no"])
 
 dnl Unix
 AC_CHECK_HEADERS([sys/resource.h sys/time.h unistd.h sys/ioctl.h sys/stat.h])
@@ -1227,6 +1297,9 @@ AC_CHECK_HEADERS([sys/socket.h sys/types.h])
 AC_CHECK_HEADERS([stddef.h setjmp.h features.h])
 AC_CHECK_HEADERS([stdint.h], [C9x=yes])
 
+dnl Darwin
+AC_CHECK_HEADERS([mach/mach_time.h])
+
 dnl Windows
 case "`uname`" in
   CYGWIN*)
@@ -1408,25 +1481,32 @@ case "$host_cpu-$host_vendor-$host_os" in
     dnl H5_CPPFLAGS because fdopen and HDfdopen fail without it. HDfdopen
     dnl is used only by H5_debug_mask which is used only when debugging in
     dnl H5_init_library (all in H5.c).  When the flag was removed this was
-    dnl the only compile failure noted;  however, defining the Macro 
-    dnl makes available the functionality from the POSIX.1 standard as well
-    dnl as all or the ISO C facilities, according to a discussion of 
-    dnl defining the _POSIX_SOURCE, _BSD_SOURCE, and _POSIX_C_SOURCE Macros
-    dnl and their interaction found at 
-    dnl http://www.gnu.org/s/libc/manual/html_node/Feature-Test-Macros.html.
-    H5_CPPFLAGS="-D_POSIX_SOURCE $H5_CPPFLAGS"
+    dnl the only compile failure noted.
+    dnl This was originally defined as _POSIX_SOURCE which was updated to
+    dnl _POSIX_C_SOURCE=199506L to expose a greater amount of POSIX
+    dnl functionality so clock_gettime and CLOCK_MONOTONIC are defined
+    dnl correctly.
+    dnl POSIX feature information can be found in the gcc manual at:
+    dnl http://www.gnu.org/s/libc/manual/html_node/Feature-Test-Macros.html
+    H5_CPPFLAGS="-D_POSIX_C_SOURCE=199506L $H5_CPPFLAGS"
 
     dnl Also add BSD support on Linux systems, so <features.h> defines
     dnl __USE_BSD, which is required to get the prototype for strdup
     dnl defined correctly in <string.h> and snprintf & vsnprintf defined
     dnl correctly in <stdio.h>
+    dnl Linking to the bsd-compat library is required as per the gcc manual:
+    dnl http://www.gnu.org/s/libc/manual/html_node/Feature-Test-Macros.html
+    dnl though we do not do this as it breaks the big test on older versions
+    dnl of linux (CentOS 4.6) using newer versions of gcc (4.6.2).
     AM_CPPFLAGS="-D_BSD_SOURCE $AM_CPPFLAGS"
     ;;
 esac
 
-dnl Need to add AM_CPPFLAGS into CPPFLAGS to make them visible for configure checks.
-dnl Note: CPPFLAGS will be restored by the end of configure.
-CPPFLAGS="$AM_CPPFLAGS $CPPFLAGS"
+dnl Need to add the AM_ and H5_ into CPFLAGS/CPPFLAGS to make them visible 
+dnl for configure checks.
+dnl Note: Both will be restored by the end of configure.
+CPPFLAGS="$H5_CPPFLAGS $AM_CPPFLAGS $CPPFLAGS"
+CFLAGS="$H5_CFLAGS $AM_CFLAGS $CFLAGS"
 
 AC_TRY_COMPILE([#include <sys/types.h>],
                [off64_t n = 0;],
@@ -1973,6 +2053,12 @@ if test "X$THREADSAFE" = "Xyes"; then
 fi
 
 dnl ----------------------------------------------------------------------
+dnl Check for MONOTONIC_TIMER support (used in clock_gettime).  This has
+dnl to be done after any POSIX/BSD defines to ensure that the test gets
+dnl the correct POSIX level on linux.
+AC_CHECK_DECL(CLOCK_MONOTONIC,[have_clock_monotonic="yes"],[have_clock_monotonic="no"],[[#include <time.h>]])
+
+dnl ----------------------------------------------------------------------
 dnl How does one figure out the local time zone?  Anyone know of a
 dnl Posix way to do this?
 dnl
@@ -2837,76 +2923,36 @@ if test -n "$PARALLEL"; then
     AC_MSG_RESULT([no])
   fi
 
-dnl ----------------------------------------------------------------------
-dnl Set the flag to indicate that the MPI_File_get_size() function
-dnl works.  The default is enabled unless the user knows the function
-dnl doesn't work on the system and disables it.  (This flag should be set
-dnl for all machines except for SGI Altix Propack 4 where the function 
-dnl doesn't return correct file size.)
-dnl
-AC_ARG_ENABLE([mpi-size],
-              [AC_HELP_STRING([--enable-mpi-size],
-                              [Some systems (only SGI Altix Propack 4 so far) return wrong value
-                               from MPI_File_get_size.  By disabling this function, the library
-                               will replace it with stat to get the correct file size.
-                               [default=yes]])],
-              [MPI_GET_SIZE=$enableval])
-
-AC_MSG_CHECKING([if MPI_File_get_size is enabled])
-
-AC_SUBST(MPI_GET_SIZE)
-case "X-$MPI_GET_SIZE" in
-  X-no)
-    AC_MSG_RESULT([no])
-    MPI_GET_SIZE=no
-    ;;
-  X-yes|*)
-    AC_MSG_RESULT([yes])
-    MPI_GET_SIZE=yes
-    AC_DEFINE([HAVE_MPI_GET_SIZE], [1],
-              [Define if MPI_File_get_size works correctly])
-    ;;
-esac
-
-dnl ----------------------------------------------------------------------
-dnl Check to see whether the complicate MPI derived datatype works. 
-dnl In Dec. 20th, 2004, we found that IBM's MPIO implemention didn't
-dnl handle with the displacement of the complicate MPI type derived datatype 
-dnl correctly. So we add the check here.
-dnl IBM fixed this bug in their new version that supported MPI-IO around spring 2005. 
-dnl We find that mpich 1.2.5 has the similar bug. The same
-dnl bug also occurs at SGI IRIX 6.5 C with compiler version lower than or equal to 7.3.
-dnl In case people still use the old compiler, we keep this flag.
-AC_MSG_CHECKING([if irregular hyperslab optimization code works inside MPI-IO])
-
-AC_CACHE_VAL([hdf5_cv_mpi_complex_derived_datatype_works],[hdf5_cv_mpi_complex_derived_datatype_works=yes])
-
-if test ${hdf5_cv_mpi_complex_derived_datatype_works} = "yes"; then
-  AC_DEFINE([MPI_COMPLEX_DERIVED_DATATYPE_WORKS], [1],
-            [Define if your system can handle complicated MPI derived datatype correctly.])
-  AC_MSG_RESULT([yes])
-else
-  AC_MSG_RESULT([no])
-fi
-
-
-dnl ----------------------------------------------------------------------
-dnl Check to see whether MPI-IO can do collective IO successfully when one or more processes don't do 
-dnl any IOs.
-dnl Up to now(Feb. 8th, 2006), we find that it will cause program hung with mpich 1.2.x version 
-dnl and SGI altix. For those systems, we have to turn off this feature and use independent IO instead.
-dnl
-AC_MSG_CHECKING([if MPI-IO can do collective IO when one or more processes don't do IOs])
-
-AC_CACHE_VAL([hdf5_cv_mpi_special_collective_io_works],[hdf5_cv_mpi_special_collective_io_works=yes])
-
-if test ${hdf5_cv_mpi_special_collective_io_works} = "yes"; then
-  AC_DEFINE([MPI_SPECIAL_COLLECTIVE_IO_WORKS], [1],
-            [Define if your system can handle special collective IO properly.])
-  AC_MSG_RESULT([yes])
-else
-  AC_MSG_RESULT([no])
-fi
+  dnl ----------------------------------------------------------------------
+  dnl Set the flag to indicate that the MPI_File_get_size() function
+  dnl works.  The default is enabled unless the user knows the function
+  dnl doesn't work on the system and disables it.  (This flag should be set
+  dnl for all machines except for SGI Altix Propack 4 where the function 
+  dnl doesn't return correct file size.)
+  dnl
+  AC_ARG_ENABLE([mpi-size],
+                [AC_HELP_STRING([--enable-mpi-size],
+                                [Some systems (only SGI Altix Propack 4 so far) return wrong value
+                                 from MPI_File_get_size.  By disabling this function, the library
+                                 will replace it with stat to get the correct file size.
+                                 [default=yes]])],
+                [MPI_GET_SIZE=$enableval])
+
+  AC_MSG_CHECKING([if MPI_File_get_size is enabled])
+
+  AC_SUBST(MPI_GET_SIZE)
+  case "X-$MPI_GET_SIZE" in
+    X-no)
+      AC_MSG_RESULT([no])
+      MPI_GET_SIZE=no
+      ;;
+    X-yes|*)
+      AC_MSG_RESULT([yes])
+      MPI_GET_SIZE=yes
+      AC_DEFINE([HAVE_MPI_GET_SIZE], [1],
+                [Define if MPI_File_get_size works correctly])
+      ;;
+  esac
 fi
 
 dnl ----------------------------------------------------------------------
@@ -4280,26 +4326,6 @@ AC_ARG_ENABLE([embedded-libinfo],
 
 
 dnl ----------------------------------------------------------------------
-dnl Enable h5dump packed bits feature
-dnl
-AC_MSG_CHECKING([Whether to enable the h5dump packed bits feature])
-AC_ARG_ENABLE([h5dump-packed-bits],
-    [AC_HELP_STRING([--enable-h5dump-packed-bits],
-	[Enable h5dump packed bits feature [default=yes]])],
-	[enable_h5dump_packed_bits=$enableval],
-	[enable_h5dump_packed_bits=yes])
-
-   if test "${enable_h5dump_packed_bits}" = "yes"; then
-      AC_MSG_RESULT([yes])
-      AC_DEFINE([HAVE_H5DUMP_PACKED_BITS], [1],
-                [Define if h5dump packed bits feature is enabled])
-   else
-      AC_MSG_RESULT([no])
-      PACKED_BITS=no
-    fi
-
-
-dnl ----------------------------------------------------------------------
 dnl Check if pointer alignments are enforced
 dnl
 AC_MSG_CHECKING([if alignment restrictions are strictly enforced])
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 6eae57d..597e6de 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -145,6 +145,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -165,10 +166,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -212,7 +215,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/examples/h5_elink_unix2win.c b/examples/h5_elink_unix2win.c
index bcbb65f..9c0918c 100644
--- a/examples/h5_elink_unix2win.c
+++ b/examples/h5_elink_unix2win.c
@@ -138,11 +138,11 @@ const H5L_class_t elink_unix2win_class[1] = {{
 static int
 unix2win_example(void)
 {
-    hid_t	fid = (-1);     		/* File ID */
-    hid_t	gid = (-1);     		/* Group ID */
+    hid_t  fid = (-1);         /* File ID */
+    hid_t  gid = (-1);         /* Group ID */
 
     /* Create the target file. */
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
     if((fid=H5Fcreate("u2w\\u2w_target.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0) goto error;
 #else
     if((fid=H5Fcreate("u2w/u2w_target.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT))<0) goto error;
@@ -161,7 +161,7 @@ unix2win_example(void)
      * that external links can be traversed.
      */
 
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
     /* Register the elink_unix2win class defined above to replace default
      * external links
      */
@@ -181,8 +181,8 @@ unix2win_example(void)
  error:
     printf("Error!\n");
     H5E_BEGIN_TRY {
-    	H5Gclose (gid);
-    	H5Fclose (fid);
+      H5Gclose (gid);
+      H5Fclose (fid);
     } H5E_END_TRY;
     return -1;
 }
@@ -195,7 +195,7 @@ unix2win_example(void)
 int
 main(void)
 {
-    int		ret;
+    int    ret;
 
     printf("Testing unix2win external links.\n");
     ret = unix2win_example();
diff --git a/examples/run-c-ex.sh.in b/examples/run-c-ex.sh.in
old mode 100755
new mode 100644
diff --git a/examples/testh5cc.sh.in b/examples/testh5cc.sh.in
old mode 100755
new mode 100644
diff --git a/fortran/Makefile.in b/fortran/Makefile.in
index 1102259..9f006f0 100644
--- a/fortran/Makefile.in
+++ b/fortran/Makefile.in
@@ -182,6 +182,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -202,10 +203,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -249,7 +252,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/fortran/examples/CMakeLists.txt b/fortran/examples/CMakeLists.txt
index ee459e1..47c221c 100644
--- a/fortran/examples/CMakeLists.txt
+++ b/fortran/examples/CMakeLists.txt
@@ -30,6 +30,13 @@ SET (examples
     compound
 )
 
+SET (F2003_examples
+    rwdset_fortran2003
+    nested_derived_type
+    compound_fortran2003
+    compound_complex_fortran2003
+)
+
 FOREACH (example ${examples})
   ADD_EXECUTABLE (f90_ex_${example} ${HDF5_F90_EXAMPLES_SOURCE_DIR}/${example}.f90)
   TARGET_NAMING (f90_ex_${example} ${LIB_TYPE})
@@ -37,7 +44,7 @@ FOREACH (example ${examples})
   IF (WIN32 AND NOT CYGWIN)
     SET_PROPERTY (TARGET f90_ex_${example} 
         APPEND PROPERTY COMPILE_DEFINITIONS 
-  	      HDF5F90_WINDOWS
+          HDF5F90_WINDOWS
     )
   ENDIF (WIN32 AND NOT CYGWIN)
   TARGET_LINK_LIBRARIES (f90_ex_${example}
@@ -48,10 +55,40 @@ FOREACH (example ${examples})
 
   IF (BUILD_TESTING)
     ADD_TEST (NAME f90_ex_${example} COMMAND $<TARGET_FILE:f90_ex_${example}>)
+    IF (NOT "${last_test}" STREQUAL "")
+      SET_TESTS_PROPERTIES (f90_ex_${example} PROPERTIES DEPENDS ${last_test})
+    ENDIF (NOT "${last_test}" STREQUAL "")
+    SET (last_test "f90_ex_${example}")
   ENDIF (BUILD_TESTING)
 
 ENDFOREACH (example ${examples})
 
+IF (FORTRAN_HAVE_ISO_C_BINDING AND HDF5_ENABLE_F2003)
+  FOREACH (example ${F2003_examples})
+    ADD_EXECUTABLE (f03_ex_${example} ${HDF5_F90_EXAMPLES_SOURCE_DIR}/${example}.f90)
+    TARGET_NAMING (f03_ex_${example} ${LIB_TYPE})
+    TARGET_FORTRAN_WIN_PROPERTIES (f03_ex_${example} "")
+    IF (WIN32 AND NOT CYGWIN)
+      SET_PROPERTY (TARGET f03_ex_${example} 
+          APPEND PROPERTY COMPILE_DEFINITIONS HDF5F90_WINDOWS
+      )
+    ENDIF (WIN32 AND NOT CYGWIN)
+    TARGET_LINK_LIBRARIES (f03_ex_${example}
+        ${HDF5_F90_LIB_TARGET}
+        ${HDF5_LIB_TARGET}
+    )
+    SET_TARGET_PROPERTIES (f03_ex_${example} PROPERTIES LINKER_LANGUAGE Fortran)
+
+    IF (BUILD_TESTING)
+      ADD_TEST (NAME f03_ex_${example} COMMAND $<TARGET_FILE:f03_ex_${example}>)
+      IF (NOT "${last_test}" STREQUAL "")
+        SET_TESTS_PROPERTIES (f03_ex_${example} PROPERTIES DEPENDS ${last_test})
+      ENDIF (NOT "${last_test}" STREQUAL "")
+      SET (last_test "f03_ex_${example}")
+    ENDIF (BUILD_TESTING)
+  ENDFOREACH (example ${F2003_examples})
+ENDIF (FORTRAN_HAVE_ISO_C_BINDING AND HDF5_ENABLE_F2003)
+
 IF (H5_HAVE_PARALLEL)
   ADD_EXECUTABLE (f90_ex_ph5example ${HDF5_F90_EXAMPLES_SOURCE_DIR}/ph5example.f90)
   TARGET_NAMING (f90_ex_ph5example ${LIB_TYPE})
diff --git a/fortran/examples/Makefile.am b/fortran/examples/Makefile.am
index 57a8f94..7465b98 100644
--- a/fortran/examples/Makefile.am
+++ b/fortran/examples/Makefile.am
@@ -31,18 +31,28 @@ endif
 # be run.
 # We don't tell automake about these programs so that it doesn't try to
 # compile them with the regular fortran compiler.
-TEST_PROG=dsetexample fileexample rwdsetexample attrexample groupexample    \
-       grpsexample grpdsetexample hyperslab selectele grpit refobjexample   \
-       refregexample mountexample compound
-TEST_SCRIPT=testh5fc.sh
+
+TEST_PROG=dsetexample fileexample rwdsetexample attrexample groupexample \
+     grpsexample grpdsetexample hyperslab selectele grpit refobjexample  \
+     refregexample mountexample compound
 
 # List files to be installed here
-INSTALL_FILES=dsetexample.f90 fileexample.f90 rwdsetexample.f90             \
-       attrexample.f90 groupexample.f90 grpsexample.f90 grpdsetexample.f90  \
-       hyperslab.f90 selectele.f90 grpit.f90 refobjexample.f90              \
-       refregexample.f90 mountexample.f90 compound.f90 ph5example.f90
+INSTALL_FILES=dsetexample.f90 fileexample.f90 rwdsetexample.f90           \
+     attrexample.f90 groupexample.f90 grpsexample.f90 grpdsetexample.f90  \
+     hyperslab.f90 selectele.f90 grpit.f90 refobjexample.f90              \
+     refregexample.f90 mountexample.f90  compound.f90 ph5example.f90
 INSTALL_SCRIPT_FILES = run-fortran-ex.sh
 
+
+# Add attention tests for Fortran 2003 features
+if FORTRAN_2003_CONDITIONAL_F
+  TEST_PROG +=  rwdset_fortran2003 nested_derived_type \
+      compound_fortran2003 compound_complex_fortran2003
+  INSTALL_FILES +=  rwdset_fortran2003.f90 nested_derived_type.f90 \
+      compound_fortran2003.f90 compound_complex_fortran2003.f90
+endif
+TEST_SCRIPT=testh5fc.sh
+
 # Mark this directory as part of the Fortran API
 FORTRAN_API=yes
 
@@ -89,6 +99,12 @@ refregexample: refregexample.f90
 mountexample: mountexample.f90
 compound: compound.f90
 ph5example: ph5example.f90
+if FORTRAN_2003_CONDITIONAL_F
+rwdset_fortran2003: rwdset_fortran2003.f90
+nested_derived_type: nested_derived_type.f90
+compound_fortran2003: compound_fortran2003.f90
+compound_complex_fortran2003: compound_complex_fortran2003.f90
+endif
 
 include $(top_srcdir)/config/examples.am
 include $(top_srcdir)/config/conclude.am
diff --git a/fortran/examples/Makefile.in b/fortran/examples/Makefile.in
index 013c6c3..6593fca 100644
--- a/fortran/examples/Makefile.in
+++ b/fortran/examples/Makefile.in
@@ -59,6 +59,14 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
 	$(top_srcdir)/config/commence.am \
 	$(top_srcdir)/config/conclude.am \
 	$(top_srcdir)/config/examples.am
+
+# Add attention tests for Fortran 2003 features
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@am__append_1 = rwdset_fortran2003 nested_derived_type \
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@      compound_fortran2003 compound_complex_fortran2003
+
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@am__append_2 = rwdset_fortran2003.f90 nested_derived_type.f90 \
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@      compound_fortran2003.f90 compound_complex_fortran2003.f90
+
 TESTS =
 subdir = fortran/examples
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -145,6 +153,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -165,10 +174,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -212,7 +223,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
@@ -368,19 +378,19 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.h5
 # be run.
 # We don't tell automake about these programs so that it doesn't try to
 # compile them with the regular fortran compiler.
-TEST_PROG = dsetexample fileexample rwdsetexample attrexample groupexample    \
-       grpsexample grpdsetexample hyperslab selectele grpit refobjexample   \
-       refregexample mountexample compound
-
-TEST_SCRIPT = testh5fc.sh
+TEST_PROG = dsetexample fileexample rwdsetexample attrexample \
+	groupexample grpsexample grpdsetexample hyperslab selectele \
+	grpit refobjexample refregexample mountexample compound \
+	$(am__append_1)
 
 # List files to be installed here
-INSTALL_FILES = dsetexample.f90 fileexample.f90 rwdsetexample.f90             \
-       attrexample.f90 groupexample.f90 grpsexample.f90 grpdsetexample.f90  \
-       hyperslab.f90 selectele.f90 grpit.f90 refobjexample.f90              \
-       refregexample.f90 mountexample.f90 compound.f90 ph5example.f90
-
+INSTALL_FILES = dsetexample.f90 fileexample.f90 rwdsetexample.f90 \
+	attrexample.f90 groupexample.f90 grpsexample.f90 \
+	grpdsetexample.f90 hyperslab.f90 selectele.f90 grpit.f90 \
+	refobjexample.f90 refregexample.f90 mountexample.f90 \
+	compound.f90 ph5example.f90 $(am__append_2)
 INSTALL_SCRIPT_FILES = run-fortran-ex.sh
+TEST_SCRIPT = testh5fc.sh
 
 # Mark this directory as part of the Fortran API
 FORTRAN_API = yes
@@ -655,6 +665,10 @@ refregexample: refregexample.f90
 mountexample: mountexample.f90
 compound: compound.f90
 ph5example: ph5example.f90
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@rwdset_fortran2003: rwdset_fortran2003.f90
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@nested_derived_type: nested_derived_type.f90
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@compound_fortran2003: compound_fortran2003.f90
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@compound_complex_fortran2003: compound_complex_fortran2003.f90
 
 # How to create EXAMPLEDIR if it doesn't already exist
 $(EXAMPLEDIR):
diff --git a/fortran/examples/compound_complex_fortran2003.f90 b/fortran/examples/compound_complex_fortran2003.f90
new file mode 100644
index 0000000..19671f7
--- /dev/null
+++ b/fortran/examples/compound_complex_fortran2003.f90
@@ -0,0 +1,117 @@
+! This is the F2003 version of the h5_compound.c example source code.
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+! Copyright by the Board of Trustees of the University of Illinois.         *
+! All rights reserved.                                                      *
+!                                                                           *
+! This file is part of HDF5.  The full HDF5 copyright notice, including     *
+! terms governing use, modification, and redistribution, is contained in    *
+! the files COPYING and Copyright.html.  COPYING can be found at the root   *
+! of the source code distribution tree; Copyright.html can be found at the  *
+! root level of an installed copy of the electronic HDF5 document set and   *
+! is linked from the top-level documents page.  It can also be found at     *
+! http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *
+! access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! This example shows how to create an array of a compound datatype which 
+! contains an array of type complex and how to write it to hdf5 
+! and how to read it back into a compound datatype for hdf5.
+!
+
+PROGRAM compound_complex_fortran2003
+
+  USE hdf5
+  USE ISO_C_BINDING
+  IMPLICIT NONE
+
+  INTEGER, PARAMETER :: r_k8 = KIND(0.0d0)
+  INTEGER, PARAMETER :: NMAX = 3
+
+  TYPE sample
+     COMPLEX(KIND=r_k8), DIMENSION(1:NMAX) :: nlev
+     REAL(KIND=r_k8) :: N
+  END TYPE sample
+
+  INTEGER(HID_T)   :: sample_type_id, dset_id, dspace_id, file_id
+  INTEGER(HSIZE_T) :: dims(1) = (/NMAX/)
+  INTEGER :: error
+
+  TYPE(sample), DIMENSION(1:NMAX), TARGET :: samples, read_samples
+  INTEGER :: i
+
+  TYPE(C_PTR) :: f_ptr
+  INTEGER(HSIZE_T), DIMENSION(1) :: array_dims=(/2*NMAX/) ! complex is really (real,real) so double size of array
+  INTEGER(hid_t) :: array_type_id                    ! Nested Array Datatype ID
+
+  ! Initialize data
+  DO i=1,NMAX
+     samples(i)%nlev(1:NMAX) = (3.14159_r_k8, 2.71828_r_k8)
+     samples(i)%N = i
+  END DO
+
+  ! Initialize FORTRAN interface.
+  CALL h5open_f(error)
+
+  ! Create a new file using default properties.
+  CALL h5fcreate_f("test.h5", H5F_ACC_TRUNC_F, file_id, error)
+  !
+  ! Create the memory data type.
+  !
+  CALL H5Tcreate_f(H5T_COMPOUND_F, H5OFFSETOF(C_LOC(samples(1)), C_LOC(samples(2))), sample_type_id, error)
+
+  ! Create the array type
+  CALL h5Tarray_create_f(H5T_NATIVE_DOUBLE, 1, array_dims, array_type_id, error)
+  ! Then use that array type to insert values into
+  CALL H5Tinsert_f( sample_type_id, "nlev", &
+       H5OFFSETOF(C_LOC(samples(1)),C_LOC(samples(1)%nlev(1))), array_type_id, error)
+  CALL H5Tinsert_f( sample_type_id, "N", &
+       H5OFFSETOF(C_LOC(samples(1)),C_LOC(samples(1)%N)), h5kind_to_type(r_k8,H5_REAL_KIND), error)
+  !
+  ! Create dataspace
+  !
+  CALL h5screate_simple_f(1, dims, dspace_id, error)
+  !
+  ! Create the dataset.
+  !
+  CALL H5Dcreate_f(file_id, "samples",  sample_type_id, dspace_id, dset_id, error)
+  !
+  ! Write data to the dataset
+  !
+  f_ptr = C_LOC(samples(1))
+  CALL H5Dwrite_f(dset_id, sample_type_id, f_ptr, error)
+  ! Close up
+  CALL h5dclose_f(dset_id, error)
+  CALL h5sclose_f(dspace_id, error)
+  CALL h5fclose_f(file_id, error)
+  !
+  ! Open the file and the dataset.
+  !
+  CALL H5Fopen_f("test.h5", H5F_ACC_RDONLY_F, file_id, error)
+  
+  CALL H5Dopen_f(file_id, "samples", dset_id, error)
+  !
+  ! Create the memory data type.
+  !
+  CALL H5Tcreate_f(H5T_COMPOUND_F,H5OFFSETOF(C_LOC(samples(1)), C_LOC(samples(2))), sample_type_id,error)
+
+  CALL H5Tinsert_f( sample_type_id, "nlev", &
+       H5OFFSETOF(C_LOC(samples(1)),C_LOC(samples(1)%nlev(1))), array_type_id, error)
+  CALL H5Tinsert_f( sample_type_id, "N", &
+       H5OFFSETOF(C_LOC(samples(1)),C_LOC(samples(1)%N)), h5kind_to_type(r_k8,H5_REAL_KIND), error)
+
+  f_ptr = C_LOC(read_samples(1))
+  CALL H5Dread_f(dset_id, sample_type_id, f_ptr, error)
+
+  !
+  ! Display the fields
+  !
+  DO i=1,NMAX
+     WRITE(*,'(A,3(" (",F8.5,",",F8.5,")"))') "SAMPLES =",read_samples(i)%nlev(1:NMAX)
+     WRITE(*,'(A,F8.5)') "N =", read_samples(i)%N
+  END DO
+
+  CALL H5Tclose_f(sample_type_id, error)
+  CALL H5Dclose_f(dset_id, error)
+  CALL H5Fclose_f(file_id, error)
+
+END PROGRAM compound_complex_fortran2003
diff --git a/fortran/examples/compound_fortran2003.f90 b/fortran/examples/compound_fortran2003.f90
new file mode 100644
index 0000000..a55d1a6
--- /dev/null
+++ b/fortran/examples/compound_fortran2003.f90
@@ -0,0 +1,208 @@
+! This is the F2003 version of the h5_compound.c example source code.
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+! Copyright by the Board of Trustees of the University of Illinois.         *
+! All rights reserved.                                                      *
+!                                                                           *
+! This file is part of HDF5.  The full HDF5 copyright notice, including     *
+! terms governing use, modification, and redistribution, is contained in    *
+! the files COPYING and Copyright.html.  COPYING can be found at the root   *
+! of the source code distribution tree; Copyright.html can be found at the  *
+! root level of an installed copy of the electronic HDF5 document set and   *
+! is linked from the top-level documents page.  It can also be found at     *
+! http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *
+! access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! This example shows how to create a compound data type,
+! write an array which has the compound data type to the file,
+! and read back fields' subsets.
+!
+
+PROGRAM main
+  USE hdf5
+  USE ISO_C_BINDING
+  IMPLICIT NONE
+
+! KIND parameters
+
+  INTEGER, PARAMETER :: int_k1 = SELECTED_INT_KIND(1)  ! This should map to INTEGER*1 on most modern processors
+  INTEGER, PARAMETER :: int_k2 = SELECTED_INT_KIND(4)  ! This should map to INTEGER*2 on most modern processors
+  INTEGER, PARAMETER :: int_k4 = SELECTED_INT_KIND(8)  ! This should map to INTEGER*4 on most modern processors
+  INTEGER, PARAMETER :: int_k8 = SELECTED_INT_KIND(16) ! This should map to INTEGER*8 on most modern processors
+
+  INTEGER, PARAMETER :: r_k4 = SELECTED_REAL_KIND(5)  ! This should map to REAL*4 on most modern processors
+  INTEGER, PARAMETER :: r_k8 = SELECTED_REAL_KIND(10) ! This should map to REAL*8 on most modern processors
+
+! FILES
+
+  CHARACTER(LEN=*), PARAMETER :: H5FILE_NAME = "SDScompound.h5"
+  CHARACTER(LEN=*), PARAMETER :: DATASETNAME = "ArrayOfStructures"
+
+  INTEGER, PARAMETER :: LENGTH = 10
+  INTEGER, PARAMETER :: RANK = 1
+
+!----------------------------------------------------------------
+! First derived-type and dataset
+  TYPE s1_t
+     CHARACTER(LEN=1), DIMENSION(1:13) :: chr
+     INTEGER(KIND=int_k1) :: a
+     REAL(KIND=r_k4) :: b
+     REAL(KIND=r_k8) :: c
+  END TYPE s1_t
+
+  TYPE(s1_t), TARGET :: s1(LENGTH)
+  INTEGER(hid_t) :: s1_tid     ! File datatype identifier
+
+!----------------------------------------------------------------
+! Second derived-type (subset of s1_t)  and dataset
+  TYPE s2_t
+     CHARACTER(LEN=1), DIMENSION(1:13) :: chr
+     REAL(KIND=r_k8) :: c
+     INTEGER(KIND=int_k1) :: a
+  END TYPE s2_t
+
+  type(s2_t), target :: s2(LENGTH)
+  integer(hid_t) :: s2_tid    ! Memory datatype handle
+
+!----------------------------------------------------------------
+! Third "derived-type" (will be used to read float field of s1)
+  INTEGER(hid_t) :: s3_tid   ! Memory datatype handle
+  REAL(KIND=r_k4), TARGET :: s3(LENGTH)
+
+  INTEGER :: i
+  INTEGER(hid_t) :: file, dataset, space
+  !type(H5F_fileid_type) :: file
+  !type(H5D_dsetid_type) :: dataset
+  !type(H5S_spaceid_type) :: space
+  INTEGER(hsize_t) :: DIM(1) = (/LENGTH/)   ! Dataspace dimensions
+  INTEGER(SIZE_T) :: type_size  ! Size of the datatype
+  INTEGER(SIZE_T) :: offset, sizeof_compound
+  INTEGER :: hdferr
+  TYPE(C_PTR) :: f_ptr
+  
+  INTEGER(SIZE_T) :: type_sizei  ! Size of the integer datatype 
+  INTEGER(SIZE_T) :: type_sizer  ! Size of the real datatype 
+  INTEGER(SIZE_T) :: type_sized  ! Size of the double datatype 
+  INTEGER(hid_t) :: tid3      ! /* Nested Array Datatype ID	*/
+  INTEGER(HSIZE_T), DIMENSION(1) :: tdims1=(/13/)
+  !
+  ! Initialize FORTRAN interface.
+  !
+
+  CALL h5open_f(hdferr)
+
+  !
+  ! Initialize the data
+  !
+  DO i = 0, LENGTH-1
+     s1(i+1)%chr(1)(1:1) = 'a'
+     s1(i+1)%chr(2)(1:1) = 'b'
+     s1(i+1)%chr(3)(1:1) = 'c'
+     s1(i+1)%chr(4:12)(1:1) = ' '
+     s1(i+1)%chr(13)(1:1) = 'd'
+     s1(i+1)%a = i
+     s1(i+1)%b = i*i
+     s1(i+1)%c = 1./REAL(i+1)
+  END DO
+  !
+  ! Create the data space.
+  !
+  !
+  CALL H5Screate_simple_f(RANK, dim, space, hdferr)
+
+  !
+  ! Create the file.
+  !
+  CALL H5Fcreate_f(H5FILE_NAME, H5F_ACC_TRUNC_F, file, hdferr)
+
+  !
+  ! Create the memory data type.
+  !
+  CALL H5Tcreate_f(H5T_COMPOUND_F, H5OFFSETOF(C_LOC(s1(1)), C_LOC(s1(2))), s1_tid, hdferr)
+
+  CALL h5tarray_create_f(H5T_NATIVE_CHARACTER, 1, tdims1, tid3, hdferr)
+
+  CALL H5Tinsert_f(s1_tid, "chr_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%chr)),tid3, hdferr)
+  CALL H5Tinsert_f(s1_tid, "a_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%a)), h5kind_to_type(int_k1,H5_INTEGER_KIND), hdferr)
+  CALL H5Tinsert_f(s1_tid, "c_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%c)), h5kind_to_type(r_k8,H5_REAL_KIND), hdferr)
+  CALL H5Tinsert_f(s1_tid, "b_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%b)), h5kind_to_type(r_k4,H5_REAL_KIND), hdferr)
+
+  !
+  ! Create the dataset.
+  !
+  CALL H5Dcreate_f(file, DATASETNAME, s1_tid, space, dataset, hdferr)
+
+  !
+  ! Write data to the dataset
+  !
+  
+  f_ptr = C_LOC(s1(1))
+  CALL H5Dwrite_f(dataset, s1_tid, f_ptr, hdferr)
+
+  !
+  ! Release resources
+  !
+  CALL H5Tclose_f(s1_tid, hdferr)
+  CALL H5Sclose_f(space, hdferr)
+  CALL H5Dclose_f(dataset, hdferr)
+  CALL H5Fclose_f(file, hdferr)
+
+  !
+  ! Open the file and the dataset.
+  !
+
+  CALL H5Fopen_f(H5FILE_NAME, H5F_ACC_RDONLY_F, file, hdferr)
+  
+  CALL H5Dopen_f(file, DATASETNAME, dataset,hdferr)
+
+  !
+  ! Create a data type for s2
+  !
+  CALL H5Tcreate_f(H5T_COMPOUND_F,  H5OFFSETOF(C_LOC(s2(1)), C_LOC(s2(2))), s2_tid, hdferr)
+
+  CALL H5Tinsert_f(s2_tid, "chr_name", H5OFFSETOF(C_LOC(s2(1)),C_LOC(s2(1)%chr)), tid3, hdferr)
+  CALL H5Tinsert_f(s2_tid, "c_name", H5OFFSETOF(C_LOC(s2(1)),C_LOC(s2(1)%c)), h5kind_to_type(r_k8,H5_REAL_KIND), hdferr)
+  CALL H5Tinsert_f(s2_tid, "a_name", H5OFFSETOF(C_LOC(s2(1)),C_LOC(s2(1)%a)), h5kind_to_type(int_k1,H5_INTEGER_KIND), hdferr)
+
+  !
+  ! Read two fields c and a from s1 dataset. Fields in the file
+  ! are found by their names "c_name" and "a_name".
+  s2(:)%c=-1; s2(:)%a=-1;
+
+
+  f_ptr = C_LOC(s2(1))
+  CALL H5Dread_f(dataset, s2_tid, f_ptr, hdferr)
+
+  !
+  ! Display the fields
+  !
+  DO i = 1, length
+     WRITE(*,'(/,A,/,999(A,1X))') "Field chr :", s2(i)%chr(1:13)(1:1)
+  ENDDO
+  WRITE(*,'(/,A,/,999(F8.4,1X))') "Field c :", s2(:)%c
+  WRITE(*,'(/,A,/,999(I0,1X))') "Field a :", s2(:)%a
+  !
+  ! Create a data type for s3.
+  !
+  CALL H5Tcreate_f(H5T_COMPOUND_F, H5OFFSETOF(C_LOC(s3(1)),C_LOC(s3(2))),s3_tid, hdferr)
+
+  CALL H5Tinsert_f(s3_tid, "b_name", 0_size_t, h5kind_to_type(r_k4,H5_REAL_KIND), hdferr)
+  !
+  ! Read field b from s1 dataset. Field in the file is found by its name.
+  !
+  s3(:)=-1
+  f_ptr = C_LOC(s3(1))
+  CALL H5Dread_f(dataset, s3_tid, f_ptr, hdferr)
+  !
+  ! Display the field
+  !
+  WRITE(*,'(/,A,/,999(F8.4,1X))') "Field b :",s3(:)
+  !
+  ! Release resources
+  !
+  CALL H5Tclose_f(s2_tid, hdferr)
+  CALL H5Tclose_f(s3_tid, hdferr)
+  CALL H5Dclose_f(dataset, hdferr)
+  CALL H5Fclose_f(file, hdferr)
+
+END PROGRAM main
diff --git a/fortran/examples/nested_derived_type.f90 b/fortran/examples/nested_derived_type.f90
new file mode 100644
index 0000000..f806110
--- /dev/null
+++ b/fortran/examples/nested_derived_type.f90
@@ -0,0 +1,212 @@
+! 
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+! Copyright by the Board of Trustees of the University of Illinois.         *
+! All rights reserved.                                                      *
+!                                                                           *
+! This file is part of HDF5.  The full HDF5 copyright notice, including     *
+! terms governing use, modification, and redistribution, is contained in    *
+! the files COPYING and Copyright.html.  COPYING can be found at the root   *
+! of the source code distribution tree; Copyright.html can be found at the  *
+! root level of an installed copy of the electronic HDF5 document set and   *
+! is linked from the top-level documents page.  It can also be found at     *
+! http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *
+! access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! This example shows how to create a nested compound data type,
+! write an array which has the compound data type to the file,
+! and read back fields' subsets.
+
+PROGRAM main
+  USE HDF5
+  USE ISO_C_BINDING
+  IMPLICIT NONE
+
+! KIND parameters
+  INTEGER, PARAMETER :: int_k1 = SELECTED_INT_KIND(Fortran_INTEGER_1)  ! This should map to INTEGER*1 on most modern processors
+  INTEGER, PARAMETER :: int_k4 = SELECTED_INT_KIND(Fortran_INTEGER_2)  ! This should map to INTEGER*2 on most modern processors
+  INTEGER, PARAMETER :: int_k8 = SELECTED_INT_KIND(Fortran_INTEGER_4)  ! This should map to INTEGER*4 on most modern processors
+  INTEGER, PARAMETER :: int_k16 = SELECTED_INT_KIND(Fortran_INTEGER_8) ! This should map to INTEGER*8 on most modern processors
+
+  INTEGER, PARAMETER :: r_k4 = SELECTED_REAL_KIND(Fortran_REAL_4) ! This should map to REAL*4 on most modern processors
+  INTEGER, PARAMETER :: r_k8 = SELECTED_REAL_KIND(Fortran_REAL_8) ! This should map to REAL*8 on most modern processors
+
+! FILES
+
+  CHARACTER(LEN=*), PARAMETER :: H5FILE_NAME = "SDScompound.h5"
+  CHARACTER(LEN=*), PARAMETER :: DATASETNAME = "ArrayOfStructures"
+
+  INTEGER, PARAMETER :: LENGTH = 10
+  INTEGER, PARAMETER :: RANK = 1
+
+!----------------------------------------------------------------
+! Nested derived-type and dataset
+
+  TYPE s4_t
+     INTEGER(int_k8), DIMENSION(1:4) :: x
+  ENDTYPE s4_t
+
+  TYPE s1_t
+     CHARACTER(LEN=1), DIMENSION(1:7) :: chr
+     INTEGER(KIND=int_k1) :: a
+     REAL(KIND=r_k4) :: b
+     TYPE(s4_t) :: d
+     REAL(KIND=r_k8) :: c
+  END TYPE s1_t
+
+  TYPE(s1_t), TARGET, DIMENSION(1:length) :: s1
+  INTEGER(hid_t) :: s1_tid     ! File datatype identifier
+
+!----------------------------------------------------------------
+! Second derived-type (subset of s1_t) and dataset
+  TYPE s2_t
+     CHARACTER(LEN=1), DIMENSION(1:7) :: chr
+     REAL(KIND=r_k8) :: c
+     INTEGER(KIND=int_k1) :: a
+     TYPE(s4_t) :: d
+  END TYPE s2_t
+
+  TYPE(s2_t), TARGET :: s2(LENGTH)
+  integer(hid_t) :: s2_tid    ! Memory datatype handle
+  INTEGER(hid_t) :: tid3a
+!----------------------------------------------------------------
+! Third "derived-type" (will be used to read float field of s1)
+  INTEGER(hid_t) :: s3_tid   ! Memory datatype handle
+  REAL(KIND=r_k4), TARGET :: s3(LENGTH)
+
+  INTEGER :: i
+  INTEGER(hid_t) :: file, dataset, space
+  !type(H5F_fileid_type) :: file
+  !type(H5D_dsetid_type) :: dataset
+  !type(H5S_spaceid_type) :: space
+  INTEGER(hsize_t) :: DIM(1) = (/LENGTH/)   ! Dataspace dimensions
+  INTEGER(SIZE_T) :: type_size  ! Size of the datatype
+  INTEGER(SIZE_T) :: offset, sizeof_compound
+  INTEGER :: hdferr
+  TYPE(C_PTR) :: f_ptr
+  
+  INTEGER(SIZE_T) :: type_sizei  ! Size of the integer datatype 
+  INTEGER(SIZE_T) :: type_sizer  ! Size of the real datatype 
+  INTEGER(SIZE_T) :: type_sized  ! Size of the double datatype 
+  INTEGER(hid_t) :: tid3      ! /* Nested Array Datatype ID	*/
+  INTEGER(HSIZE_T), DIMENSION(1) :: tdims1=(/7/)
+  INTEGER(HSIZE_T), DIMENSION(1) :: tdims1a=(/4/)
+  !
+  ! Initialize FORTRAN interface.
+  !
+  CALL h5open_f(hdferr)
+  !
+  ! Initialize the data
+  !
+  DO i = 0, LENGTH-1
+     s1(i+1)%chr(1:7)(1:1) = (/'a','b','c',' ',' ',' ','d'/)
+     s1(i+1)%a = i
+     s1(i+1)%b = i*i
+     s1(i+1)%c = 1./REAL(i+1)
+     s1(i+1)%d%x(1:4) = (/i,i*10,i*100,i*1000/)
+  END DO
+  !
+  ! Create the data space.
+  !
+  !
+  CALL H5Screate_simple_f(RANK, dim, space, hdferr)
+  !
+  ! Create the file.
+  !
+  CALL H5Fcreate_f(H5FILE_NAME, H5F_ACC_TRUNC_F, file, hdferr)
+  !
+  ! Create the memory data type.
+  !
+  CALL H5Tcreate_f(H5T_COMPOUND_F, H5OFFSETOF(C_LOC(s1(1)), C_LOC(s1(2))), s1_tid, hdferr)
+
+  CALL h5tarray_create_f(H5T_NATIVE_CHARACTER, 1, tdims1, tid3, hdferr)
+
+  CALL H5Tinsert_f(s1_tid, "chr_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%chr)),tid3, hdferr)
+  CALL H5Tinsert_f(s1_tid, "a_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%a)), h5kind_to_type(int_k1,H5_INTEGER_KIND), hdferr)
+  CALL H5Tinsert_f(s1_tid, "c_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%c)), h5kind_to_type(r_k8,H5_REAL_KIND), hdferr)
+  CALL H5Tinsert_f(s1_tid, "b_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%b)), h5kind_to_type(r_k4,H5_REAL_KIND), hdferr)
+
+  ! Create an array of integer datatype
+  CALL h5tarray_create_f(h5kind_to_type(int_k8,H5_INTEGER_KIND), 1, tdims1a, tid3a, hdferr)
+  CALL H5Tinsert_f(s1_tid, "d_name", H5OFFSETOF(C_LOC(s1(1)),C_LOC(s1(1)%d%x)), tid3a, hdferr)
+
+  !
+  ! Create the dataset.
+  !
+  CALL H5Dcreate_f(file, DATASETNAME, s1_tid, space, dataset, hdferr)
+
+  !
+  ! Write data to the dataset
+  !
+  
+  f_ptr = C_LOC(s1(1))
+  CALL H5Dwrite_f(dataset, s1_tid, f_ptr, hdferr)
+
+  !
+  ! Release resources
+  !
+  CALL H5Tclose_f(s1_tid, hdferr)
+  CALL H5Sclose_f(space, hdferr)
+  CALL H5Dclose_f(dataset, hdferr)
+  CALL H5Fclose_f(file, hdferr)
+
+  !
+  ! Open the file and the dataset.
+  !
+
+  CALL H5Fopen_f(H5FILE_NAME, H5F_ACC_RDONLY_F, file, hdferr)
+  
+  CALL H5Dopen_f(file, DATASETNAME, dataset,hdferr)
+  !
+  ! Create a data type for s2
+  !
+  CALL H5Tcreate_f(H5T_COMPOUND_F,  H5OFFSETOF(C_LOC(s2(1)), C_LOC(s2(2))), s2_tid, hdferr)
+
+  CALL H5Tinsert_f(s2_tid, "chr_name", H5OFFSETOF(C_LOC(s2(1)),C_LOC(s2(1)%chr)), tid3, hdferr)
+  CALL H5Tinsert_f(s2_tid, "c_name", H5OFFSETOF(C_LOC(s2(1)),C_LOC(s2(1)%c)), h5kind_to_type(r_k8,H5_REAL_KIND), hdferr)
+  CALL H5Tinsert_f(s2_tid, "a_name", H5OFFSETOF(C_LOC(s2(1)),C_LOC(s2(1)%a)), h5kind_to_type(int_k1,H5_INTEGER_KIND), hdferr)
+  CALL H5Tinsert_f(s2_tid, "d_name", H5OFFSETOF(C_LOC(s2(1)),C_LOC(s2(1)%d%x)), tid3a, hdferr)
+
+  !
+  ! Read two fields c and a from s1 dataset. Fields in the file
+  ! are found by their names "c_name" and "a_name".
+
+  f_ptr = C_LOC(s2(1))
+  CALL H5Dread_f(dataset, s2_tid, f_ptr, hdferr)
+
+  !
+  ! Display the fields
+  !
+  DO i = 1, length
+     WRITE(*,'(/,A,/,999(A,1X))') "Field chr :", s2(i)%chr(1:7)(1:1)
+  ENDDO
+  WRITE(*,'(/,A,/,999(F8.4,1X))') "Field c :", s2(:)%c
+  WRITE(*,'(/,A,/,999(I0,1X))') "Field a :", s2(:)%a
+  DO i = 1, length
+     WRITE(*,'(/,A,/,999(I0,1X))') "Field d%x :", s2(i)%d%x(:)
+  ENDDO
+  !
+  ! Create a data type for s3.
+  !
+  CALL H5Tcreate_f(H5T_COMPOUND_F, H5OFFSETOF(C_LOC(s3(1)),C_LOC(s3(2))),s3_tid, hdferr)
+
+  CALL H5Tinsert_f(s3_tid, "b_name", 0_size_t, h5kind_to_type(r_k4,H5_REAL_KIND), hdferr)
+  !
+  ! Read field b from s1 dataset. Field in the file is found by its name.
+  !
+  s3(:)=-1
+  f_ptr = C_LOC(s3(1))
+  CALL H5Dread_f(dataset, s3_tid, f_ptr, hdferr)
+  !
+  ! Display the field
+  !
+  WRITE(*,'(/,A,/,999(F8.4,1X))') "Field b :",s3(:)
+  !
+  ! Release resources
+  !
+  CALL H5Tclose_f(s2_tid, hdferr)
+  CALL H5Tclose_f(s3_tid, hdferr)
+  CALL H5Dclose_f(dataset, hdferr)
+  CALL H5Fclose_f(file, hdferr)
+
+END PROGRAM main
diff --git a/fortran/examples/rwdset_fortran2003.f90 b/fortran/examples/rwdset_fortran2003.f90
new file mode 100644
index 0000000..74bda85
--- /dev/null
+++ b/fortran/examples/rwdset_fortran2003.f90
@@ -0,0 +1,181 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
+!
+!
+! The following example shows how to write and read to/from an existing dataset. 
+! It opens the file created in the previous example, obtains the dataset 
+! identifier, writes the data to the dataset in the file, 
+! then reads the dataset to memory. Uses updated Fortran 2003 interface
+! with different KINDs of integers and reals.
+!
+PROGRAM RWDSET_FORTRAN2003
+
+  USE ISO_C_BINDING
+
+  USE HDF5 ! This module contains all necessary modules 
+        
+  IMPLICIT NONE
+
+  INTEGER, PARAMETER :: int_kind_1 = SELECTED_INT_KIND(Fortran_INTEGER_1)  !should map to INTEGER*1 on most modern processors
+  INTEGER, PARAMETER :: int_kind_4 = SELECTED_INT_KIND(Fortran_INTEGER_2)  !should map to INTEGER*2 on most modern processors
+  INTEGER, PARAMETER :: int_kind_8 = SELECTED_INT_KIND(Fortran_INTEGER_4)  !should map to INTEGER*4 on most modern processors
+  INTEGER, PARAMETER :: int_kind_16 = SELECTED_INT_KIND(Fortran_INTEGER_8) !should map to INTEGER*8 on most modern processors
+
+  INTEGER, PARAMETER :: real_kind_7 = SELECTED_REAL_KIND(Fortran_REAL_4) !should map to REAL*4 on most modern processors
+  INTEGER, PARAMETER :: real_kind_15 = SELECTED_REAL_KIND(Fortran_REAL_8) !should map to REAL*8 on most modern processors
+
+  CHARACTER(LEN=8), PARAMETER :: filename = "dsetf.h5" ! File name
+  CHARACTER(LEN=5), PARAMETER :: dsetname1 = "dset1"     ! Dataset name
+  CHARACTER(LEN=5), PARAMETER :: dsetname2 = "dset2"     ! Dataset name
+  CHARACTER(LEN=5), PARAMETER :: dsetname4 = "dset4"     ! Dataset name
+  CHARACTER(LEN=5), PARAMETER :: dsetname8 = "dset8"     ! Dataset name
+  CHARACTER(LEN=6), PARAMETER :: dsetnamer4 = "dsetr4"     ! Dataset name
+  CHARACTER(LEN=6), PARAMETER :: dsetnamer8 = "dsetr8"     ! Dataset name
+
+  INTEGER(HID_T) :: file_id       ! File identifier 
+  INTEGER(HID_T) :: dset_id1      ! Dataset identifier  
+  INTEGER(HID_T) :: dset_id4      ! Dataset identifier   
+  INTEGER(HID_T) :: dset_id8      ! Dataset identifier  
+  INTEGER(HID_T) :: dset_id16     ! Dataset identifier  
+  INTEGER(HID_T) :: dset_idr4      ! Dataset identifier   
+  INTEGER(HID_T) :: dset_idr8      ! Dataset identifier 
+
+  INTEGER :: error ! Error flag
+  INTEGER :: i, j
+
+! Data buffers:
+
+  INTEGER, DIMENSION(1:4) :: dset_data
+
+  INTEGER(int_kind_1), DIMENSION(1:4), TARGET :: dset_data_i1, data_out_i1
+  INTEGER(int_kind_4), DIMENSION(1:4), TARGET :: dset_data_i4, data_out_i4
+  INTEGER(int_kind_8), DIMENSION(1:4), TARGET :: dset_data_i8, data_out_i8
+  INTEGER(int_kind_16), DIMENSION(1:4), TARGET :: dset_data_i16, data_out_i16
+
+  INTEGER(int_kind_8), DIMENSION(1:4), TARGET :: data_out_i8a
+
+  REAL(real_kind_7), DIMENSION(1:4), TARGET :: dset_data_r7, data_out_r7
+  REAL(real_kind_15), DIMENSION(1:4), TARGET :: dset_data_r15, data_out_r15
+
+  INTEGER(HSIZE_T), DIMENSION(1:1) :: data_dims = (/4/) 
+  INTEGER(HID_T) :: dspace_id     ! Dataspace identifier
+  
+  TYPE(C_PTR) :: f_ptr
+  INTEGER(hid_t) :: datatype         !/* Common datatype ID */
+
+  !
+  ! Initialize FORTRAN interface.
+  !
+  CALL h5open_f(error) 
+  !
+  ! Initialize the dset_data array.
+  !
+  DO i = 1, 4
+     dset_data_i1(i)  = i
+     dset_data_i4(i)  = i
+     dset_data_i8(i)  = i
+     dset_data_i16(i) = i
+
+     dset_data_r7(i) = (i)*100.
+     dset_data_r15(i) = (i)*1000.
+
+  END DO
+
+  CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+  !
+  ! Create dataspaces for datasets
+  !
+  CALL h5screate_simple_f(1, data_dims , dspace_id, error)
+  !
+  ! Create the dataset.
+  !
+  CALL H5Dcreate_f(file_id, dsetname1, h5kind_to_type(int_kind_1,H5_INTEGER_KIND),  dspace_id, dset_id1, error)
+  CALL H5Dcreate_f(file_id, dsetname2, h5kind_to_type(int_kind_4,H5_INTEGER_KIND),  dspace_id, dset_id4, error)
+  CALL H5Dcreate_f(file_id, dsetname4, h5kind_to_type(int_kind_8,H5_INTEGER_KIND),  dspace_id, dset_id8, error)
+  CALL H5Dcreate_f(file_id, dsetname8, h5kind_to_type(int_kind_16,H5_INTEGER_KIND), dspace_id, dset_id16, error)
+
+  CALL H5Dcreate_f(file_id, dsetnamer4, h5kind_to_type(real_kind_7,H5_REAL_KIND),  dspace_id, dset_idr4, error)
+  CALL H5Dcreate_f(file_id, dsetnamer8, h5kind_to_type(real_kind_15,H5_REAL_KIND), dspace_id, dset_idr8, error)
+
+  !
+  ! Write the dataset.
+  !
+  f_ptr = C_LOC(dset_data_i1(1))
+  CALL h5dwrite_f(dset_id1, h5kind_to_type(int_kind_1,H5_INTEGER_KIND), f_ptr, error)
+  f_ptr = C_LOC(dset_data_i4(1))
+  CALL h5dwrite_f(dset_id4, h5kind_to_type(int_kind_4,H5_INTEGER_KIND), f_ptr, error)
+  f_ptr = C_LOC(dset_data_i8(1))
+  CALL h5dwrite_f(dset_id8, h5kind_to_type(int_kind_8,H5_INTEGER_KIND), f_ptr, error)
+  f_ptr = C_LOC(dset_data_i16(1))
+  CALL h5dwrite_f(dset_id16, h5kind_to_type(int_kind_16,H5_INTEGER_KIND), f_ptr, error)
+  f_ptr = C_LOC(dset_data_r7(1))
+  CALL h5dwrite_f(dset_idr4, h5kind_to_type(real_kind_7,H5_REAL_KIND), f_ptr, error)
+  f_ptr = C_LOC(dset_data_r15(1))
+  CALL h5dwrite_f(dset_idr8, h5kind_to_type(real_kind_15,H5_REAL_KIND), f_ptr, error)
+  !
+  ! Close the file
+  !
+  CALL h5fclose_f(file_id, error)
+
+  ! Open the file
+
+  CALL h5fopen_f(filename, H5F_ACC_RDWR_F, file_id, error)
+  !
+  ! Read the dataset.
+  !
+  ! Read data back into an integer size that is larger then the original size used for 
+  ! writing the data
+  f_ptr = C_LOC(data_out_i8a(1))
+  CALL h5dread_f(dset_id1, h5kind_to_type(int_kind_8,H5_INTEGER_KIND), f_ptr,  error)
+  f_ptr = C_LOC(data_out_i4(1))
+  CALL h5dread_f(dset_id4, h5kind_to_type(int_kind_4,H5_INTEGER_KIND), f_ptr,  error)
+  f_ptr = C_LOC(data_out_i8(1))
+  CALL h5dread_f(dset_id8, h5kind_to_type(int_kind_8,H5_INTEGER_KIND), f_ptr,  error)
+  f_ptr = C_LOC(data_out_i16(1))
+  CALL h5dread_f(dset_id16, h5kind_to_type(int_kind_16,H5_INTEGER_KIND), f_ptr,  error)
+  f_ptr = C_LOC(data_out_r7(1))
+  CALL h5dread_f(dset_idr4, h5kind_to_type(real_kind_7,H5_REAL_KIND), f_ptr,  error)
+  f_ptr = C_LOC(data_out_r15(1))
+  CALL h5dread_f(dset_idr8, h5kind_to_type(real_kind_15,H5_REAL_KIND), f_ptr,  error)
+
+! memory type
+  WRITE(*,'(A,4i8)' )'SELECTED_INT_KIND(Fortran_INTEGER_1):  ',data_out_i8a
+  WRITE(*,'(A,4i8)' )'SELECTED_INT_KIND(Fortran_INTEGER_4):  ',data_out_i4
+  WRITE(*,'(A,4i8)' )'SELECTED_INT_KIND(Fortran_INTEGER_8):  ',data_out_i8
+  WRITE(*,'(A,4i8)' )'SELECTED_INT_KIND(Fortran_INTEGER_16): ',data_out_i16
+  WRITE(*,'(A,4(1x,f9.4))' )'SELECTED_REAL_KIND(Fortran_REAL_7):  ',data_out_r7
+  WRITE(*,'(A,4(1x,f16.10))' )'SELECTED_REAL_KIND(Fortran_REAL_15):  ',data_out_r15
+  !
+  ! Close the dataset.
+  !
+  CALL h5dclose_f(dset_id1, error)
+  CALL h5dclose_f(dset_id4, error)
+  CALL h5dclose_f(dset_id8, error)
+  CALL h5dclose_f(dset_id16, error)
+  CALL h5dclose_f(dset_idr4, error)
+  CALL h5dclose_f(dset_idr8, error)
+  !
+  ! Close the file.
+  !
+  CALL h5fclose_f(file_id, error)
+  !
+  ! Close FORTRAN interface.
+  !
+  CALL h5close_f(error)
+
+END PROGRAM RWDSET_FORTRAN2003
+
+               
+
diff --git a/fortran/examples/testh5fc.sh.in b/fortran/examples/testh5fc.sh.in
index cc26e37..234d4e2 100755
--- a/fortran/examples/testh5fc.sh.in
+++ b/fortran/examples/testh5fc.sh.in
@@ -25,8 +25,7 @@ EXIT_SUCCESS=0
 EXIT_FAILURE=1
 
 # Where the tool is installed.
-# Note: no '/' after DESTDIR.  Explanation in commence.am
-prefix="${prefix:-${DESTDIR}@prefix@}"
+prefix="${prefix:- at prefix@}"
 PARALLEL=@PARALLEL@		# Am I in parallel mode?
 AR="@AR@"
 RANLIB="@RANLIB@"
diff --git a/fortran/robodoc.rc b/fortran/robodoc.rc
new file mode 100644
index 0000000..1366f77
--- /dev/null
+++ b/fortran/robodoc.rc
@@ -0,0 +1,73 @@
+items:
+ NAME
+ COPYRIGHT
+ SYNOPSIS
+ USAGE 
+ FUNCTION
+ DESCRIPTION
+ PURPOSE
+ AUTHOR 
+ CREATION DATE
+ MODIFICATION HISTORY
+ HISTORY 
+ INPUTS 
+ ARGUMENTS
+ OPTIONS 
+ PARAMETERS
+ SWITCHES
+ OUTPUTS 
+ SIDE EFFECTS
+ RESULT
+ RETURN VALUE 
+ EXAMPLE
+ NOTES
+ DIAGNOSTICS 
+ WARNINGS 
+ ERRORS
+ BUGS
+ TODO
+ IDEAS 
+ PORTABILITY
+ SEE ALSO 
+ METHODS
+ NEW METHODS
+ ATTRIBUTES
+ NEW ATTRIBUTES
+ TAGS
+ DERIVED FROM
+ DERIVED BY 
+ USES
+ CHILDREN 
+ USED BY
+ PARENTS
+ COMMANDS
+ SOURCE
+ CONTAINS SUBROUTINES
+ OPTIONAL PARAMETERS
+ FILE
+ignore items:
+ COPYRIGHT
+headertypes:
+ s Subroutines robo_subroutines
+options:
+    --nogeneratedwith	
+    --src ./
+    --doc ./doc/DevelGuide
+    --html
+    --multidoc
+    --index
+    --tabsize 8
+    --sections
+    --sectionnameonly
+    --documenttitle "HDF5 FORTRAN Developer's Guide"
+    --cmode		
+ignore files:
+    .svn
+    *~
+    *.o
+    *e
+    *.mod
+accept files:
+    *.c
+    *.f90
+    *.h
diff --git a/fortran/src/CMakeLists.txt b/fortran/src/CMakeLists.txt
index d5cbc1b..bb927eb 100644
--- a/fortran/src/CMakeLists.txt
+++ b/fortran/src/CMakeLists.txt
@@ -2,15 +2,6 @@ cmake_minimum_required (VERSION 2.8)
 PROJECT (HDF5_F90_SRC C CXX Fortran)
 
 #-----------------------------------------------------------------------------
-# When building utility executables that generate other (source) files :
-# we make use of the following variables defined in the root CMakeLists.
-# Certain systems may add /Debug or /Release to output paths
-# and we need to call the executable from inside the CMake configuration
-#-----------------------------------------------------------------------------
-#inherit EXE_EXT     from parent HDF5 cmake project
-#inherit CFG_INIT    from parent HDF5 cmake project
-
-#-----------------------------------------------------------------------------
 # Setup the Fortran auto-detection utilities
 # H5test_kind(_SIZEOF).f90 used to generate H5fortran_detect.f90
 # H5fortran_detect.f90     used to generate H5fort_type_defines.h
@@ -39,7 +30,7 @@ IF (WIN32 AND MSVC)
 ENDIF (WIN32 AND MSVC)
 SET_TARGET_PROPERTIES (H5test_FortranHavekind PROPERTIES LINKER_LANGUAGE Fortran)
 
-SET (CMD ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}${CFG_INIT}/H5test_FortranHavekind${EXE_EXT})
+SET (CMD $<TARGET_FILE:H5test_FortranHavekind>)
 ADD_CUSTOM_COMMAND (
     OUTPUT ${HDF5_F90_BINARY_DIR}/H5fortran_detect.f90
     COMMAND ${CMD}
@@ -63,9 +54,9 @@ IF (WIN32 AND MSVC)
           LINK_FLAGS "/SUBSYSTEM:CONSOLE"
   )
 ENDIF (WIN32 AND MSVC)
-SET_TARGET_PROPERTIES (H5test_FortranHavekind PROPERTIES LINKER_LANGUAGE Fortran)
+SET_TARGET_PROPERTIES (H5fortran_detect PROPERTIES LINKER_LANGUAGE Fortran)
 
-SET (CMD ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}${CFG_INIT}/H5fortran_detect${EXE_EXT})
+SET (CMD $<TARGET_FILE:H5fortran_detect>)
 ADD_CUSTOM_COMMAND (
     OUTPUT ${HDF5_F90_BINARY_DIR}/H5fort_type_defines.h
     COMMAND ${CMD}
@@ -80,7 +71,7 @@ ADD_EXECUTABLE (H5match_types
     ${HDF5_F90_BINARY_DIR}/H5fort_type_defines.h
     ${HDF5_F90_SRC_SOURCE_DIR}/H5match_types.c
 )
-SET (CMD ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}${CFG_INIT}/H5match_types${EXE_EXT})
+SET (CMD $<TARGET_FILE:H5match_types>)
 ADD_CUSTOM_COMMAND (
     OUTPUT ${HDF5_F90_BINARY_DIR}/H5f90i_gen.h
            ${HDF5_F90_BINARY_DIR}/H5fortran_types.f90
@@ -129,6 +120,17 @@ SET_GLOBAL_VARIABLE (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF
 H5_SET_LIB_OPTIONS (${HDF5_F90_C_LIB_TARGET} ${HDF5_F90_C_LIB_NAME} ${LIB_TYPE})
 
 #-----------------------------------------------------------------------------
+# Fortran 2003 standard
+#-----------------------------------------------------------------------------
+IF (FORTRAN_HAVE_ISO_C_BINDING AND HDF5_ENABLE_F2003)
+  # default real is 4 bytes, so include double signatures
+  SET (F_STATUS "_F03")
+ELSE (FORTRAN_HAVE_ISO_C_BINDING AND HDF5_ENABLE_F2003)
+  # default real is 8 bytes, so exclude double signatures
+  SET (F_STATUS "_F90")
+ENDIF (FORTRAN_HAVE_ISO_C_BINDING AND HDF5_ENABLE_F2003)
+
+#-----------------------------------------------------------------------------
 # Fortran Real Size
 #-----------------------------------------------------------------------------
 IF (FORTRAN_DEFAULT_REAL_NOT_DOUBLE)
@@ -148,6 +150,7 @@ SET (f90_F_SRCS
 
     # normal distribution
     ${HDF5_F90_SRC_SOURCE_DIR}/H5f90global.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5_ff${F_STATUS}.f90
     ${HDF5_F90_SRC_SOURCE_DIR}/H5_ff.f90
     ${HDF5_F90_SRC_SOURCE_DIR}/H5Aff.f90
     ${HDF5_F90_SRC_SOURCE_DIR}/H5Dff.f90
@@ -162,6 +165,14 @@ SET (f90_F_SRCS
     ${HDF5_F90_SRC_SOURCE_DIR}/H5Sff.f90
     ${HDF5_F90_SRC_SOURCE_DIR}/H5Tff.f90
     ${HDF5_F90_SRC_SOURCE_DIR}/H5Zff.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5Aff${F_STATUS}.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5Dff${F_STATUS}.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5Eff${F_STATUS}.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5Lff${F_STATUS}.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5Off${F_STATUS}.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5Pff${F_STATUS}.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5Rff${F_STATUS}.f90
+    ${HDF5_F90_SRC_SOURCE_DIR}/H5Tff${F_STATUS}.f90
     ${HDF5_F90_SRC_SOURCE_DIR}/H5_DBLE_Interface${F_DBLE}.f90
 )
 
@@ -189,16 +200,20 @@ SET (SHARED_LINK_FLAGS " ")
 IF (WIN32 AND NOT CYGWIN)
   IF (BUILD_SHARED_LIBS)
     SET_PROPERTY (TARGET ${HDF5_F90_LIB_TARGET}
-	    APPEND PROPERTY COMPILE_DEFINITIONS
-		    BUILD_HDF5_DLL
-	)
+      APPEND PROPERTY COMPILE_DEFINITIONS
+        BUILD_HDF5_DLL
+    )
     IF (MSVC)
-      SET (SHARED_LINK_FLAGS "/DLL /DEF:${HDF5_F90_SRC_SOURCE_DIR}/hdf5_fortrandll.def")
+      IF (H5_HAVE_PARALLEL)
+        SET (SHARED_LINK_FLAGS "/DLL /DEF:${HDF5_F90_SRC_SOURCE_DIR}/phdf5_fortrandll.def")
+      ELSE (H5_HAVE_PARALLEL)
+        SET (SHARED_LINK_FLAGS "/DLL /DEF:${HDF5_F90_SRC_SOURCE_DIR}/hdf5_fortrandll.def")
+      ENDIF (H5_HAVE_PARALLEL)
     ENDIF (MSVC)
   ENDIF (BUILD_SHARED_LIBS)
   SET_PROPERTY (TARGET ${HDF5_F90_LIB_TARGET}
       APPEND PROPERTY COMPILE_DEFINITIONS
-  	    HDF5F90_WINDOWS
+        HDF5F90_WINDOWS
   )
 ENDIF (WIN32 AND NOT CYGWIN)
 TARGET_FORTRAN_WIN_PROPERTIES (${HDF5_F90_LIB_TARGET} ${SHARED_LINK_FLAGS})
diff --git a/fortran/src/H5Af.c b/fortran/src/H5Af.c
index 8e6158e..896736d 100644
--- a/fortran/src/H5Af.c
+++ b/fortran/src/H5Af.c
@@ -1,4 +1,9 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* H5Af/H5Af
+ * PURPOSE
+ *   This file contains C stubs for H5A Fortran APIs
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,31 +16,41 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This files contains C stubs for H5A Fortran APIs */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include "H5f90.h"
 #include "H5Eprivate.h"
 
-/*----------------------------------------------------------------------------
- * Name:        h5acreate_c
- * Purpose:     Call H5Acreate2 to create an attribute
- * Inputs:      obj_id - object identifier
+/****if* H5Af/h5acreate_c
+ * NAME
+ *        h5acreate_c
+ * PURPOSE
+ *     Call H5Acreate2 to create an attribute
+ * INPUTS
+ *      obj_id - object identifier
  *              name - name of the attribute
  *              namelen - name length
  *              type_id - datatype identifier
  *              space_id - dataspace identifier
  *              crt_pr  - identifier of creation property list
- * Outputs:     attr_id - attribute identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     attr_id - attribute identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5acreate_c(hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *type_id,
     hid_t_f *space_id, hid_t_f *crt_prp, hid_t_f *aapl, hid_t_f *attr_id)
+/*******/
 {
     char *c_name = NULL;        /* Buffer to hold C string */
     int_f ret_value = 0;        /* Return value */
@@ -58,20 +73,29 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aopen_name _c
- * Purpose:     Call H5Aopen to open an attribute
- * Inputs:      obj_id - object identifier
+/****if* H5Af/h5aopen_name_c
+ * NAME
+ *        h5aopen_name_c
+ * PURPOSE
+ *     Call H5Aopen to open an attribute
+ * INPUTS
+ *      obj_id - object identifier
  *              name - name of the attribute
  *              namelen - name length
- * Outputs:     attr_id - dataset identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     attr_id - dataset identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aopen_name_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *attr_id)
+/*******/
 {
     char *c_name = NULL;          /* Buffer to hold C string */
     int_f ret_value = 0;          /* Return value */
@@ -94,22 +118,30 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5awritec_c
- * Purpose:     Call h5awrite_c to write a character  attribute
- * Inputs:      attr_id - dataset identifier
+/****if* H5Af/h5awritec_c
+ * NAME
+ *        h5awritec_c
+ * PURPOSE
+ *     Call h5awrite_c to write a character  attribute
+ * INPUTS
+ *      attr_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              buf      - character data buffer
  *              dims     - array to store dimensions sizes of buf; used only
  *                         by Fortran routine.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday , August 12, 1999
- * Modifications: dims paramete added.
+ * HISTORY
+ * dims paramete added.
  *                April 4, 2001
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5awritec_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -118,6 +150,7 @@ nh5awritec_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 }
 int_f
 nh5awritec_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -127,6 +160,7 @@ nh5awritec_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5awritec_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -136,6 +170,7 @@ nh5awritec_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5awritec_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -145,6 +180,7 @@ nh5awritec_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5awritec_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -154,6 +190,7 @@ nh5awritec_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5awritec_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -163,6 +200,7 @@ nh5awritec_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5awritec_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -172,6 +210,7 @@ nh5awritec_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5awritec_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -181,6 +220,7 @@ nh5awritec_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5awritec_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -190,26 +230,34 @@ nh5awritec_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5awrite_c
- * Purpose:     Call H5Awrite to write a attribute
- * Inputs:      attr_id - attribute identifier
+/****if* H5Af/h5awrite_c
+ * NAME
+ *        h5awrite_c
+ * PURPOSE
+ *     Call H5Awrite to write a attribute
+ * INPUTS
+ *      attr_id - attribute identifier
  *              mem_type_id - memory datatype identifier
  *              buf      - data buffer
  *              dims     - array to store dimensions sizes of buf; used only
  *                         by Fortran routine.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications: dims parameter added
+ * HISTORY
+ * dims parameter added
  *                                           April 4, 2001
  *                Added nh5awrite_integer(real,double)_s,1-7 functions to eliminate
  *                complains about wrong parameters types in h5awrite_c function
  *                called by Fortran routines.
  *                                           October 9, 2006 EIP
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5awrite_integer_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -219,6 +267,7 @@ nh5awrite_integer_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void U
 
 int_f
 nh5awrite_integer_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -228,6 +277,7 @@ nh5awrite_integer_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void U
 
 int_f
 nh5awrite_integer_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -237,6 +287,7 @@ nh5awrite_integer_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void U
 
 int_f
 nh5awrite_integer_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -246,6 +297,7 @@ nh5awrite_integer_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void U
 
 int_f
 nh5awrite_integer_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -255,6 +307,7 @@ nh5awrite_integer_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void U
 
 int_f
 nh5awrite_integer_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -264,6 +317,7 @@ nh5awrite_integer_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void U
 
 int_f
 nh5awrite_integer_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -273,6 +327,7 @@ nh5awrite_integer_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void U
 
 int_f
 nh5awrite_integer_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -282,6 +337,7 @@ nh5awrite_integer_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void U
 
 int_f
 nh5awrite_real_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -291,6 +347,7 @@ nh5awrite_real_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUS
 
 int_f
 nh5awrite_real_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -300,6 +357,7 @@ nh5awrite_real_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUS
 
 int_f
 nh5awrite_real_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -309,6 +367,7 @@ nh5awrite_real_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUS
 
 int_f
 nh5awrite_real_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -318,6 +377,7 @@ nh5awrite_real_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUS
 
 int_f
 nh5awrite_real_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -327,6 +387,7 @@ nh5awrite_real_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUS
 
 int_f
 nh5awrite_real_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -336,6 +397,7 @@ nh5awrite_real_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUS
 
 int_f
 nh5awrite_real_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -345,6 +407,7 @@ nh5awrite_real_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUS
 
 int_f
 nh5awrite_real_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -354,6 +417,7 @@ nh5awrite_real_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUS
 
 int_f
 nh5awrite_double_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -363,6 +427,7 @@ nh5awrite_double_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5awrite_double_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -372,6 +437,7 @@ nh5awrite_double_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5awrite_double_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -381,6 +447,7 @@ nh5awrite_double_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5awrite_double_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -390,6 +457,7 @@ nh5awrite_double_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5awrite_double_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -399,6 +467,7 @@ nh5awrite_double_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5awrite_double_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -408,6 +477,7 @@ nh5awrite_double_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5awrite_double_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -417,6 +487,7 @@ nh5awrite_double_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5awrite_double_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
      /*
       * Call h5awrite_c  function.
@@ -426,6 +497,7 @@ nh5awrite_double_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5awrite_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED *dims)
+/******/
 {
     int_f ret_value=0;          /* Return value */
 
@@ -440,26 +512,35 @@ done:
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5areadc_c
- * Purpose:     Call h5aread_c to read character  attribute
- * Inputs:      dset_id - dataset identifier
+/****if* H5Af/h5areadc_c
+ * NAME
+ *        h5areadc_c
+ * PURPOSE
+ *     Call h5aread_c to read character  attribute
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              dims     - array to store dimensions sizes of buf; used only
  *                         by Fortran routine.
- * Outputs:     buf      - character data buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     buf      - character data buffer
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications: dims parameter added.
+ * HISTORY
+ * dims parameter added.
  *                April 4, 2001
  *                Added nh5areadc_s,1-7 functions to eliminate
  *                complains about wrong parameters types in h5awrite_c function
  *                called by Fortran routines.
  *                                           October 9, 2006 EIP
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5areadc_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -468,6 +549,7 @@ nh5areadc_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 }
 int_f
 nh5areadc_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -477,6 +559,7 @@ nh5areadc_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5areadc_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -486,6 +569,7 @@ nh5areadc_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5areadc_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -495,6 +579,7 @@ nh5areadc_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5areadc_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -504,6 +589,7 @@ nh5areadc_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5areadc_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -513,6 +599,7 @@ nh5areadc_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5areadc_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -522,6 +609,7 @@ nh5areadc_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 int_f
 nh5areadc_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -530,6 +618,7 @@ nh5areadc_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 }
 int_f
 nh5areadc_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -539,26 +628,35 @@ nh5areadc_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims)
 
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5aread_c
- * Purpose:     Call H5Aread to read an attribute
- * Inputs:      dset_id - dataset identifier
+/****if* H5Af/h5aread_c
+ * NAME
+ *        h5aread_c
+ * PURPOSE
+ *     Call H5Aread to read an attribute
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              dims     - array to store dimensions sizes of buf; used only
  *                         by Fortran routine.
- * Outputs:     buf      - data buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     buf      - data buffer
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications: dims paramete added.
+ * HISTORY
+ * dims paramete added.
  *                April 4, 2001
  *                Added nh5aread_integer(real,double)_s,1-7 functions to eliminate
  *                complains about wrong parameters types in h5awrite_c function
  *                called by Fortran routines.
  *                                           October 9, 2006 EIP
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5aread_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
     int_f ret_value=0;          /* Return value */
 
@@ -574,6 +672,7 @@ done:
 
 int_f
 nh5aread_integer_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -583,6 +682,7 @@ nh5aread_integer_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5aread_integer_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -592,6 +692,7 @@ nh5aread_integer_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5aread_integer_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -601,6 +702,7 @@ nh5aread_integer_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5aread_integer_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -610,6 +712,7 @@ nh5aread_integer_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5aread_integer_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -619,6 +722,7 @@ nh5aread_integer_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5aread_integer_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -628,6 +732,7 @@ nh5aread_integer_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5aread_integer_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -637,6 +742,7 @@ nh5aread_integer_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5aread_integer_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -646,6 +752,7 @@ nh5aread_integer_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UN
 
 int_f
 nh5aread_real_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -655,6 +762,7 @@ nh5aread_real_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSE
 
 int_f
 nh5aread_real_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -664,6 +772,7 @@ nh5aread_real_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSE
 
 int_f
 nh5aread_real_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -673,6 +782,7 @@ nh5aread_real_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSE
 
 int_f
 nh5aread_real_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -682,6 +792,7 @@ nh5aread_real_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSE
 
 int_f
 nh5aread_real_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -691,6 +802,7 @@ nh5aread_real_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSE
 
 int_f
 nh5aread_real_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -700,6 +812,7 @@ nh5aread_real_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSE
 
 int_f
 nh5aread_real_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -709,6 +822,7 @@ nh5aread_real_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSE
 
 int_f
 nh5aread_real_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -718,6 +832,7 @@ nh5aread_real_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSE
 
 int_f
 nh5aread_double_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -727,6 +842,7 @@ nh5aread_double_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNU
 
 int_f
 nh5aread_double_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -736,6 +852,7 @@ nh5aread_double_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNU
 
 int_f
 nh5aread_double_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -745,6 +862,7 @@ nh5aread_double_2_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNU
 
 int_f
 nh5aread_double_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -754,6 +872,7 @@ nh5aread_double_3_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNU
 
 int_f
 nh5aread_double_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -763,6 +882,7 @@ nh5aread_double_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNU
 
 int_f
 nh5aread_double_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -772,6 +892,7 @@ nh5aread_double_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNU
 
 int_f
 nh5aread_double_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -781,6 +902,7 @@ nh5aread_double_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNU
 
 int_f
 nh5aread_double_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNUSED * dims)
+/******/
 {
      /*
       * Call h5aread_c  function.
@@ -789,18 +911,26 @@ nh5aread_double_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void UNU
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5aclose_c
- * Purpose:     Call H5Aclose to close an attribute
- * Inputs:      attr_id - identifier of an attribute to be closed
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Af/h5aclose_c
+ * NAME
+ *        h5aclose_c
+ * PURPOSE
+ *     Call H5Aclose to close an attribute
+ * INPUTS
+ *      attr_id - identifier of an attribute to be closed
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5aclose_c ( hid_t_f *attr_id )
+/******/
 {
     int_f ret_value=0;          /* Return value */
 
@@ -811,19 +941,27 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5adelete_c
- * Purpose:     Call H5Adelete to delete an attribute
- * Inputs:      obj_id - object identifier
+/****if* H5Af/h5adelete_c
+ * NAME
+ *        h5adelete_c
+ * PURPOSE
+ *     Call H5Adelete to delete an attribute
+ * INPUTS
+ *      obj_id - object identifier
  *              name - name of the attribute
  *              namelen - name length
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5adelete_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen)
+/******/
 {
     char *c_name = NULL;        /* Buffer to hold C string */
     int_f ret_value = 0;        /* Return value */
@@ -848,19 +986,28 @@ done:
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5aopen_idx_c
- * Purpose:     Call H5Aopen_by_idx to open an attribute
- * Inputs:      obj_id - object identifier
+/****if* H5Af/h5aopen_idx_c
+ * NAME
+ *        h5aopen_idx_c
+ * PURPOSE
+ *     Call H5Aopen_by_idx to open an attribute
+ * INPUTS
+ *      obj_id - object identifier
  *              idx    - attribute index ( zero based)
- * Outputs:     attr_id - attribute identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     attr_id - attribute identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aopen_idx_c (hid_t_f *obj_id, int_f *idx, hid_t_f *attr_id)
+/******/
 {
     int_f ret_value = 0;          /* Return value */
 
@@ -875,18 +1022,27 @@ done:
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_space_c
- * Purpose:     Call H5Aget_space to get attribute's dataspace
- * Inputs:      attr_id - attribute identifier
- * Outputs:     space_id - dataspace identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Af/h5aget_space_c
+ * NAME
+ *        h5aget_space_c
+ * PURPOSE
+ *     Call H5Aget_space to get attribute's dataspace
+ * INPUTS
+ *      attr_id - attribute identifier
+ * OUTPUTS
+ *     space_id - dataspace identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aget_space_c (hid_t_f *attr_id, hid_t_f *space_id)
+/******/
 {
     int_f ret_value=0;          /* Return value */
 
@@ -900,18 +1056,27 @@ done:
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_type_c
- * Purpose:     Call H5Aget_space to get attribute's datatype
- * Inputs:      attr_id - attribute identifier
- * Outputs:     type_id - datatype identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Af/h5aget_type_c
+ * NAME
+ *        h5aget_type_c
+ * PURPOSE
+ *     Call H5Aget_space to get attribute's datatype
+ * INPUTS
+ *      attr_id - attribute identifier
+ * OUTPUTS
+ *     type_id - datatype identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aget_type_c (hid_t_f *attr_id, hid_t_f *type_id)
+/******/
 {
     int_f ret_value=0;          /* Return value */
 
@@ -925,19 +1090,27 @@ done:
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_num_attrs_c
- * Purpose:     Call H5Oget_info to determine number of
+/****if* H5Af/h5aget_num_attrs_c
+ * NAME
+ *        h5aget_num_attrs_c
+ * PURPOSE
+ *     Call H5Oget_info to determine number of
  *              attributes of an object
- * Inputs:      obj_id - object identifier
+ * INPUTS
+ *      obj_id - object identifier
  *              attr_num - number of attributes
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aget_num_attrs_c (hid_t_f *obj_id, int_f *attr_num)
+/******/
 {
     H5O_info_t oinfo;           /* Object info */
     int_f ret_value = 0;        /* Return value */
@@ -955,19 +1128,28 @@ done:
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_name_c
- * Purpose:     Call H5Aget_name to get attribute's name
- * Inputs:      attr_id - attribute identifier
+/****if* H5Af/h5aget_name_c
+ * NAME
+ *        h5aget_name_c
+ * PURPOSE
+ *     Call H5Aget_name to get attribute's name
+ * INPUTS
+ *      attr_id - attribute identifier
  *              bufsize - size of the buffer
- * Outputs:     buf - buffer to hold the name
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     buf - buffer to hold the name
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aget_name_c(hid_t_f *attr_id, size_t_f *bufsize, _fcd buf)
+/******/
 {
   size_t c_bufsize;
   char *c_buf=NULL;           /* Buffer to hold C string */
@@ -997,19 +1179,28 @@ done:
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_storage_size_c
- * Purpose:     Call H5Aget_storage_size
- * Inputs:      attr_id - identifier of an attribute
- * Outputs:     size    - attributes storage requirements
- * Returns:     0 on success, -1 on failure
- * Programmer:  M. S. Breitenfeld
+/****if* H5Af/h5aget_storage_size_c
+ * NAME
+ *        h5aget_storage_size_c
+ * PURPOSE
+ *     Call H5Aget_storage_size
+ * INPUTS
+ *      attr_id - identifier of an attribute
+ * OUTPUTS
+ *     size    - attributes storage requirements
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 
 int_f
 nh5aget_storage_size_c ( hid_t_f *attr_id,  hsize_t_f *size)
+/******/
 {
     int_f ret_value=0;          /* Return value */
 
@@ -1020,19 +1211,28 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_create_plist_c
- * Purpose:     Call H5Aget_create_plist
- * Inputs:      attr_id - identifier of an attribute
- * Outputs:     creation_prop_id - Identifier for the attribute’s creation property
- * Returns:     0 on success, -1 on failure
- * Programmer:  M. S. Breitenfeld
+/****if* H5Af/h5aget_create_plist_c
+ * NAME
+ *        h5aget_create_plist_c
+ * PURPOSE
+ *     Call H5Aget_create_plist
+ * INPUTS
+ *      attr_id - identifier of an attribute
+ * OUTPUTS
+ *     creation_prop_id - Identifier for the attribute’s creation property
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 
 int_f
 nh5aget_create_plist_c ( hid_t_f *attr_id,  hid_t_f *creation_prop_id)
+/******/
 {
     int_f ret_value=0;          /* Return value */
 
@@ -1043,10 +1243,13 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:      h5arename_by_name_c
- * Purpose:   Calls H5Arename_by_name
- * Inputs:    loc_id        - Object identifier
+/****if* H5Af/h5arename_by_name_c
+ * NAME
+ *      h5arename_by_name_c
+ * PURPOSE
+ *   Calls H5Arename_by_name
+ * INPUTS
+ *    loc_id        - Object identifier
  *            obj_name      - Name of object, relative to location,
  *                             whose attribute is to be renamed
  *            obj_name_len      - Object name length
@@ -1055,18 +1258,24 @@ done:
  *            new_attr_name     - New attribute name
  *            new_attr_name_len - New attribute name length
  *            lapl_id       - Link access property list identifier
- * Outputs:     N/A
- * Returns:     0 on success, -1 on failure
- * Programmer:  M. S. Breitenfeld
+ * OUTPUTS
+ *     N/A
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 
 int_f
 nh5arename_by_name_c( hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
 		      _fcd old_attr_name, size_t_f *old_attr_namelen,
 		      _fcd new_attr_name, size_t_f *new_attr_namelen,
 		      hid_t_f *lapl_id )
+/******/
 {
     char *c_obj_name = NULL;          /* Buffer to hold C string */
     char *c_old_attr_name = NULL;     /* Buffer to hold C string */
@@ -1095,21 +1304,30 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aopen_c
- * Purpose:     Call H5Aopen to open an attribute
- * Inputs:      obj_id       - Identifer for object to which attribute is attached
+/****if* H5Af/h5aopen_c
+ * NAME
+ *        h5aopen_c
+ * PURPOSE
+ *     Call H5Aopen to open an attribute
+ * INPUTS
+ *      obj_id       - Identifer for object to which attribute is attached
  *	        attr_name    - Attribute access property list
  *              attr_namelen - size of attr_name
  *              aapl_id      - Link access property list
- * Outputs:     attr_id - dataset identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * OUTPUTS
+ *     attr_id - dataset identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aopen_c (hid_t_f *obj_id, _fcd attr_name, size_t_f *attr_namelen, hid_t_f *aapl_id, hid_t_f *attr_id)
+/******/
 {
     char *c_attr_name = NULL;          /* Buffer to hold C string */
     int_f ret_value = 0;          /* Return value */
@@ -1131,24 +1349,33 @@ done:
         HDfree(c_attr_name);
     return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5adelete_by_name_c
- * Purpose:     Call h5adelete_by_name to remove an attribute from a specified location
- * Inputs:      loc_id - identifer for object to which attribute is attached
+/****if* H5Af/h5adelete_by_name_c
+ * NAME
+ *        h5adelete_by_name_c
+ * PURPOSE
+ *     Call h5adelete_by_name to remove an attribute from a specified location
+ * INPUTS
+ *      loc_id - identifer for object to which attribute is attached
  *              obj_name - object identifier
  *              obj_namelen - name length
  *              attr_name - name of the attribute
  *              attr_namelen - name length
  *              lapl_id - link access property list
  *
- * Outputs:     N/A
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * OUTPUTS
+ *     N/A
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5adelete_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, _fcd attr_name, size_t_f *attr_namelen, hid_t_f *lapl_id)
+/******/
 {
     char *c_obj_name = NULL;          /* Buffer to hold C string */
     char *c_attr_name = NULL;         /* Buffer to hold C string */
@@ -1175,25 +1402,34 @@ done:
         HDfree(c_obj_name);
     return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5adelete_by_idx_c
- * Purpose:     Call h5adelete_by_idx
- * Inputs:      loc_id - Location or object identifier; may be dataset or group
+/****if* H5Af/h5adelete_by_idx_c
+ * NAME
+ *        h5adelete_by_idx_c
+ * PURPOSE
+ *     Call h5adelete_by_idx
+ * INPUTS
+ *      loc_id - Location or object identifier; may be dataset or group
  *              obj_name - object identifier
  *              obj_namelen - name length
  *              attr_name - name of the attribute
  *              attr_namelen - name length
  *              lapl_id - link access property list
  *
- * Outputs:     N/A
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * OUTPUTS
+ *     N/A
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5adelete_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
 		     int_f *idx_type, int_f *order, hsize_t_f *n, hid_t_f *lapl_id)
+/******/
 {
     char *c_obj_name = NULL;          /* Buffer to hold C string */
     int_f ret_value = 0;          /* Return value */
@@ -1216,11 +1452,13 @@ done:
 
     return ret_value;
 }
-
-/*----------------------------------------------------------------------------
- * Name:        h5aget_name_by_idx_c
- * Purpose:     Call h5aget_name_by_idx
- * Inputs:
+/****if* H5Af/h5aget_name_by_idx_c
+ * NAME
+ *        h5aget_name_by_idx_c
+ * PURPOSE
+ *     Call h5aget_name_by_idx
+ * INPUTS
+ *
  *
  *        loc_id - Identifer for object to which attribute is attached
  *      obj_name - Name of object, relative to location,
@@ -1246,17 +1484,23 @@ done:
  *      hdferr   - Error code:
  *                            Returns attribute name size, -1 if fail
  *
- * Outputs:     name - Attribute name
+ * OUTPUTS
+ *     name - Attribute name
  *
- * Returns:     Size of buffer on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     Size of buffer on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5aget_name_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
 		       int_f *idx_type, int_f *order, hsize_t_f *n, _fcd name,
 		       size_t_f *size, hid_t_f *lapl_id)
+/******/
 {
     char *c_obj_name = NULL;          /* Buffer to hold C string */
     ssize_t c_size;
@@ -1299,10 +1543,13 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aopen_by_idx_c
- * Purpose:     Call H5Aopen_by_idx
- * Inputs:   loc_id    - Object identifier
+/****if* H5Af/h5aopen_by_idx_c
+ * NAME
+ *        h5aopen_by_idx_c
+ * PURPOSE
+ *     Call H5Aopen_by_idx
+ * INPUTS
+ *   loc_id    - Object identifier
  *            obj_name - Name of object to which attribute is attached
  *         obj_namelen - name length
  *            idx_type - Type of index; Possible values are:
@@ -1321,15 +1568,21 @@ done:
  *                   n - Attribute’s position in index
  *             aapl_id - Attribute access property list
  *             lapl_id - Link access property list
- * Outputs:    attr_id - attribute identifer
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * OUTPUTS
+ *    attr_id - attribute identifer
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5aopen_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
 		   int_f *idx_type, int_f *order, hsize_t_f *n, hid_t_f *aapl_id, hid_t_f *lapl_id, hid_t_f *attr_id )
+/******/
 {
     char *c_obj_name = NULL;          /* Buffer to hold C string */
     int_f ret_value = 0;          /* Return value */
@@ -1353,24 +1606,33 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_info_c
- * Purpose:     Call H5Aget_info
- * Inputs:     loc_id  - Object identifier
- * Outputs:
+/****if* H5Af/h5aget_info_c
+ * NAME
+ *        h5aget_info_c
+ * PURPOSE
+ *     Call H5Aget_info
+ * INPUTS
+ *     loc_id  - Object identifier
+ * OUTPUTS
+ *
  *        corder_valid - Indicates whether the the creation order data is valid for this attribute
  *              corder - Is a positive integer containing the creation order of the attribute
  *                cset - Indicates the character set used for the attribute’s name
  *           data_size - indicates the size, in the number of characters, of the attribute
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5aget_info_c (hid_t_f *loc_id, int_f *corder_valid, int_f *corder,
 		int_f *cset, hsize_t_f *data_size )
+/******/
 {
 
     int_f ret_value = 0;          /* Return value */
@@ -1396,10 +1658,13 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_info_by_idx_c
- * Purpose:     Call  H5Aget_info_by_idx
- * Inputs:    loc_id  - Object identifier
+/****if* H5Af/h5aget_info_by_idx_c
+ * NAME
+ *        h5aget_info_by_idx_c
+ * PURPOSE
+ *     Call  H5Aget_info_by_idx
+ * INPUTS
+ *    loc_id  - Object identifier
  *            obj_name - Name of object to which attribute is attached
  *         obj_namelen - name length
  *            idx_type - Type of index; Possible values are:
@@ -1417,22 +1682,28 @@ done:
  *
  *                   n - Attribute’s position in index
  *             lapl_id - Link access property list
- * Outputs:
+ * OUTPUTS
+ *
  *        corder_valid - Indicates whether the the creation order data is valid for this attribute
  *              corder - Is a positive integer containing the creation order of the attribute
  *                cset - Indicates the character set used for the attribute’s name
  *           data_size - indicates the size, in the number of characters, of the attribute
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5aget_info_by_idx_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
 		int_f *idx_type, int_f *order, hsize_t_f *n, hid_t_f *lapl_id,
 		int_f *corder_valid, int_f *corder,
 		int_f *cset, hsize_t_f *data_size )
+/******/
 {
     char *c_obj_name = NULL;          /* Buffer to hold C string */
     H5A_info_t ainfo;
@@ -1466,31 +1737,40 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aget_info_by_name_c
- * Purpose:     Call  H5Aget_info_by_name
- * Inputs:      loc_id - Object identifier
+/****if* H5Af/h5aget_info_by_name_c
+ * NAME
+ *        h5aget_info_by_name_c
+ * PURPOSE
+ *     Call  H5Aget_info_by_name
+ * INPUTS
+ *      loc_id - Object identifier
  *            obj_name - Name of object to which attribute is attached
  *         obj_namelen - name length
  *           attr_name - Attribute name
  *        attr_namelen - attribute name length
  *             lapl_id - Link access property list
- * Outputs:
+ * OUTPUTS
+ *
  *        corder_valid - Indicates whether the the creation order data is valid for this attribute
  *              corder - Is a positive integer containing the creation order of the attribute
  *                cset - Indicates the character set used for the attribute’s name
  *           data_size - indicates the size, in the number of characters, of the attribute
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5aget_info_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
 			_fcd attr_name, size_t_f *attr_namelen, hid_t_f *lapl_id,
 			int_f *corder_valid, int_f *corder,
 			int_f *cset, hsize_t_f *data_size )
+/******/
 {
     char *c_obj_name = NULL;          /* Buffer to hold C string */
     char *c_attr_name = NULL;          /* Buffer to hold C string */
@@ -1528,11 +1808,14 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5acreate_by_name_c
- * Purpose:     Call h5acreate_by_name
+/****if* H5Af/h5acreate_by_name_c
+ * NAME
+ *        h5acreate_by_name_c
+ * PURPOSE
+ *     Call h5acreate_by_name
 
- * Inputs:
+ * INPUTS
+ *
  *         loc_id  - Object identifier
  *        obj_name - Name of object to which attribute is attached
  *     obj_namelen - name length
@@ -1544,19 +1827,25 @@ done:
  *         aapl_id - Attribute access property list identifier (Currently not used.)
  *         lapl_id - Link access property list
  *
- * Outputs:
+ * OUTPUTS
+ *
  *            attr - an attribute identifier
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5acreate_by_name_c(hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen,
 		     _fcd attr_name, size_t_f *attr_namelen,  hid_t_f *type_id,
 		     hid_t_f *space_id, hid_t_f *acpl_id, hid_t_f *aapl_id,
 		     hid_t_f *lapl_id, hid_t_f *attr_id )
+/******/
 {
   char *c_obj_name = NULL;      /* Buffer to hold C string */
   char *c_attr_name = NULL;     /* Buffer to hold C string */
@@ -1585,21 +1874,30 @@ done:
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aexists_c
- * Purpose:     CAll h5aexists
- * Inputs:
+/****if* H5Af/h5aexists_c
+ * NAME
+ *        h5aexists_c
+ * PURPOSE
+ *     CAll h5aexists
+ * INPUTS
+ *
  *             obj_id - Object identifier
  *          attr_name - Attribute name
- * Outputs:
+ * OUTPUTS
+ *
  *     attr_exists_c  - returns a positive value, for TRUE, or 0 (zero), for FALSE.
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aexists_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *attr_exists)
+/******/
 {
   char *c_name = NULL;          /* Buffer to hold C string */
   int_f ret_value = 0;          /* Return value */
@@ -1622,24 +1920,33 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aexists_by_name_c
- * Purpose:     CAll H5Aexists_by_name
- * Inputs:
+/****if* H5Af/h5aexists_by_name_c
+ * NAME
+ *        h5aexists_by_name_c
+ * PURPOSE
+ *     CAll H5Aexists_by_name
+ * INPUTS
+ *
  *     loc_id - Location identifier
  *   obj_name - Object name either relative to loc_id, absolute from the file’s root group, or '.' (a dot)
  *  attr_name - Attribute name
  *    lapl_id - Link access property list identifier
- * Outputs:
+ * OUTPUTS
+ *
  *     attr_exists_c  - returns a positive value, for TRUE, or 0 (zero), for FALSE.
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aexists_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, _fcd attr_name, size_t_f *attr_namelen,
 		      hid_t_f *lapl_id, int_f *attr_exists)
+/******/
 {
   char *c_obj_name = NULL;          /* Buffer to hold object name C string */
   char *c_attr_name = NULL;          /* Buffer to hold attribute name C string */
@@ -1667,25 +1974,34 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5aopen_by_name_c
- * Purpose:     Call H5Aopen_by_name
- * Inputs:
+/****if* H5Af/h5aopen_by_name_c
+ * NAME
+ *        h5aopen_by_name_c
+ * PURPOSE
+ *     Call H5Aopen_by_name
+ * INPUTS
+ *
  *     loc_id - Location identifier
  *   obj_name - Object name either relative to loc_id, absolute from the file’s root group, or '.' (a dot)
  *  attr_name - Attribute name
  *    aapl_id - Attribute access property list (Currently unused; should be passed in as H5P_DEFAULT.)
  *    lapl_id - Link access property list identifier
- * Outputs:
+ * OUTPUTS
+ *
  *     attr_id  - attribute identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5aopen_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, _fcd attr_name, size_t_f *attr_namelen,
 		    hid_t_f *aapl_id, hid_t_f *lapl_id, hid_t_f *attr_id)
+/******/
 {
   char *c_obj_name = NULL;          /* Buffer to hold object name C string */
   char *c_attr_name = NULL;          /* Buffer to hold attribute name C string */
@@ -1713,25 +2029,34 @@ nh5aopen_by_name_c (hid_t_f *loc_id, _fcd obj_name, size_t_f *obj_namelen, _fcd
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:      h5arename_c
- * Purpose:   Calls H5Arename
- * Inputs:    loc_id            - Object identifier
+/****if* H5Af/h5arename_c
+ * NAME
+ *      h5arename_c
+ * PURPOSE
+ *   Calls H5Arename
+ * INPUTS
+ *    loc_id            - Object identifier
  *            old_attr_name     - Prior attribute name
  *            old_attr_name_len - Prior attribute name length
  *            new_attr_name     - New attribute name
  *            new_attr_name_len - New attribute name length
- * Outputs:     N/A
- * Returns:     0 on success, -1 on failure
- * Programmer:  M. S. Breitenfeld
+ * OUTPUTS
+ *     N/A
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 
 int_f
 nh5arename_c( hid_t_f *loc_id,
 		      _fcd old_attr_name, size_t_f *old_attr_namelen,
 		      _fcd new_attr_name, size_t_f *new_attr_namelen)
+/******/
 {
   char *c_old_attr_name = NULL;     /* Buffer to hold C string */
   char *c_new_attr_name = NULL;     /* Buffer to hold C string */
@@ -1754,3 +2079,69 @@ done:
       HDfree(c_new_attr_name);
     return ret_value;
 }
+/****if* H5Af/h5awrite_f_c
+ * NAME
+ *        h5awrite_f_c
+ * PURPOSE
+ *     Call H5Awrite to write a dataset
+ * INPUTS
+ *      attr_id - Identifier of an attribute to write.
+ *              mem_type_id - Identifier of the attribute datatype (in memory).
+ *              buf      - data pointer buffer
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *              June 11, 2008
+ * HISTORY
+ *
+ *
+ * SOURCE
+*/
+int_f
+nh5awrite_f_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf)
+/******/
+{
+  int ret_value = -1;
+  herr_t ret;
+
+  ret = H5Awrite( (hid_t)*attr_id, (hid_t)*mem_type_id, buf);
+
+  if (ret < 0) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+
+/****if* H5Af/h5aread_f_c
+ * NAME
+ *        h5aread_f_c
+ * PURPOSE
+ *     Call H5Awrite to write a dataset
+ * INPUTS
+ *      attr_id - Identifier of an attribute to write.
+ *              mem_type_id - Identifier of the attribute datatype (in memory).
+ *              buf      - data pointer buffer
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *              June 11, 2008
+ * HISTORY
+ *
+ *
+ * SOURCE
+*/
+int_f
+nh5aread_f_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf)
+/******/
+{
+  int ret_value = -1;
+  herr_t ret;
+
+  ret = H5Aread( (hid_t)*attr_id, (hid_t)*mem_type_id, buf);
+
+  if (ret < 0) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+
diff --git a/fortran/src/H5Aff.f90 b/fortran/src/H5Aff.f90
index 49f3e70..1926dd1 100644
--- a/fortran/src/H5Aff.f90
+++ b/fortran/src/H5Aff.f90
@@ -1,3 +1,15 @@
+!****h* ROBODoc/H5A
+!
+! NAME
+!  MODULE H5A
+!
+! PURPOSE
+!  This file contains Fortran interfaces for H5A functions. It includes
+!  all the functions that are independent on whether the Fortran 2003 functions
+!  are enabled or disabled.
+!
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,129 +25,77 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5A function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
 !
-! This file contains Fortran90 interfaces for H5A functions.
-!
+!*****
+
 MODULE H5A
 
   USE H5GLOBAL
 !
-!On Windows there are no big (integer*8) integers, so overloading
-!for bug #670 does not work. I have to use DEC compilation directives to make
-!Windows DEC Visual Fortran and OSF compilers happy and do right things.
-!						05/01/02 EP
-!
-  INTERFACE h5awrite_f
-
-     MODULE PROCEDURE h5awrite_integer_scalar
-     MODULE PROCEDURE h5awrite_integer_1
-     MODULE PROCEDURE h5awrite_integer_2
-     MODULE PROCEDURE h5awrite_integer_3
-     MODULE PROCEDURE h5awrite_integer_4
-     MODULE PROCEDURE h5awrite_integer_5
-     MODULE PROCEDURE h5awrite_integer_6
-     MODULE PROCEDURE h5awrite_integer_7
-     MODULE PROCEDURE h5awrite_char_scalar
-     MODULE PROCEDURE h5awrite_char_1
-     MODULE PROCEDURE h5awrite_char_2
-     MODULE PROCEDURE h5awrite_char_3
-     MODULE PROCEDURE h5awrite_char_4
-     MODULE PROCEDURE h5awrite_char_5
-     MODULE PROCEDURE h5awrite_char_6
-     MODULE PROCEDURE h5awrite_char_7
-     MODULE PROCEDURE h5awrite_real_scalar
-     MODULE PROCEDURE h5awrite_real_1
-     MODULE PROCEDURE h5awrite_real_2
-     MODULE PROCEDURE h5awrite_real_3
-     MODULE PROCEDURE h5awrite_real_4
-     MODULE PROCEDURE h5awrite_real_5
-     MODULE PROCEDURE h5awrite_real_6
-     MODULE PROCEDURE h5awrite_real_7
-
-  END INTERFACE
-
-  INTERFACE h5aread_f
-
-     MODULE PROCEDURE h5aread_integer_scalar
-     MODULE PROCEDURE h5aread_integer_1
-     MODULE PROCEDURE h5aread_integer_2
-     MODULE PROCEDURE h5aread_integer_3
-     MODULE PROCEDURE h5aread_integer_4
-     MODULE PROCEDURE h5aread_integer_5
-     MODULE PROCEDURE h5aread_integer_6
-     MODULE PROCEDURE h5aread_integer_7
-     MODULE PROCEDURE h5aread_char_scalar
-     MODULE PROCEDURE h5aread_char_1
-     MODULE PROCEDURE h5aread_char_2
-     MODULE PROCEDURE h5aread_char_3
-     MODULE PROCEDURE h5aread_char_4
-     MODULE PROCEDURE h5aread_char_5
-     MODULE PROCEDURE h5aread_char_6
-     MODULE PROCEDURE h5aread_char_7
-     MODULE PROCEDURE h5aread_real_scalar
-     MODULE PROCEDURE h5aread_real_1
-     MODULE PROCEDURE h5aread_real_2
-     MODULE PROCEDURE h5aread_real_3
-     MODULE PROCEDURE h5aread_real_4
-     MODULE PROCEDURE h5aread_real_5
-     MODULE PROCEDURE h5aread_real_6
-     MODULE PROCEDURE h5aread_real_7
-
-  END INTERFACE
+!  On Windows there are no big (integer*8) integers, so overloading
+!  for bug #670 does not work. I have to use DEC compilation directives to make
+!  Windows DEC Visual Fortran and OSF compilers happy and do right things.
+!  05/01/02 EP
+!
 
 CONTAINS
 
-!----------------------------------------------------------------------
-! Name:		h5acreate_f
 !
-! Purpose: 	Creates a dataset as an attribute of a group, dataset,
-!		or named datatype
+!****s* H5A/h5acreate_f
+!
+! NAME
+!  h5acreate_f
+!
+! PURPOSE
+!  Creates a dataset as an attribute of a group, dataset, or named datatype
+!
+! INPUTS
+!  loc_id 	 - identifier of an object (group, dataset,
+!                  or named datatype) attribute is attached to
+!  name 	 - attribute name
+!  type_id 	 - attribute datatype identifier
+!  space_id 	 - attribute dataspace identifier
 !
-! Inputs:
-!		loc_id		- identifier of an object (group, dataset,
-!				  or named datatype) attribute is attached to
-!		name		- attribute name
-!		type_id		- attribute datatype identifier
-!		space_id	- attribute dataspace identifier
+! OUTPUTS
+!  attr_id 	 - attribute identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  acpl_id 	 - Attribute creation property list identifier
+!  appl_id 	 - Attribute access property list identifier
 !
-! Outputs:
-!		attr_id		- attribute identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!		acpl_id	- Attribute creation property list identifier
-!               appl_id - Attribute access property list identifier
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
 !
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
 !
-!----------------------------------------------------------------------
+! SOURCE
   SUBROUTINE h5acreate_f(loc_id, name, type_id, space_id, attr_id, &
                                  hdferr, acpl_id, aapl_id )
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: loc_id    ! Object identifier
-    CHARACTER(LEN=*), INTENT(IN) :: name    ! Attribute name
-    INTEGER(HID_T), INTENT(IN) :: type_id
-    ! Attribute datatype identifier
-    INTEGER(HID_T), INTENT(IN) :: space_id
-    ! Attribute dataspace identifier
-    INTEGER(HID_T), INTENT(OUT) :: attr_id  ! Attribute identifier
-    INTEGER, INTENT(OUT) :: hdferr       ! Error code:
-                                         ! 0 on success and -1 on failure
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! Object identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Attribute name
+    INTEGER(HID_T), INTENT(IN) :: type_id  ! Attribute datatype identifier
+    INTEGER(HID_T), INTENT(IN) :: space_id ! Attribute dataspace identifier
+    INTEGER(HID_T), INTENT(OUT) :: attr_id ! Attribute identifier
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code:
+                                           ! 0 on success and -1 on failure
+!*****
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: acpl_id ! Attribute creation property list identifier
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: aapl_id ! Attribute access property list identifier
 
     INTEGER(HID_T) :: acpl_id_default
     INTEGER(HID_T) :: aapl_id_default
     INTEGER(SIZE_T) :: namelen
-!            INTEGER, EXTERNAL :: h5acreate_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5acreate_c(loc_id, name, namelen, type_id, &
             space_id, acpl_id_default, aapl_id_default, attr_id)
@@ -157,7 +117,7 @@ CONTAINS
 
     acpl_id_default = H5P_DEFAULT_F
     aapl_id_default = H5P_DEFAULT_F
-    namelen = LEN(NAME)
+    namelen = LEN(name)
     IF (PRESENT(acpl_id)) acpl_id_default = acpl_id
     IF (PRESENT(aapl_id)) aapl_id_default = aapl_id
 
@@ -167,43 +127,42 @@ CONTAINS
   END SUBROUTINE h5acreate_f
 
 
-!----------------------------------------------------------------------
-! Name:		h5aopen_name_f
 !
-! Purpose:  	Opens an attribute specified by name.
+!****s* H5A/h5aopen_name_f
 !
-! Inputs:
-!		obj_id 		- identifier of a group, dataset, or named
-!				  datatype atttribute to be attached to
-!		name		- attribute name
-! Outputs:
-!		attr_id		- attribute identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5aopen_name_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Opens an attribute specified by name.
 !
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
+! INPUTS
+!  obj_id 	 - identifier of a group, dataset, or named
+!                  datatype atttribute to be attached to
+!  name 	 - attribute name
+! OUTPUTS
+!  attr_id 	 - attribute identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+! SOURCE
   SUBROUTINE h5aopen_name_f(obj_id, name, attr_id, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: obj_id    ! Object identifier
     CHARACTER(LEN=*), INTENT(IN) :: name    ! Attribute name
     INTEGER(HID_T), INTENT(OUT) :: attr_id  ! Attribute identifier
     INTEGER, INTENT(OUT) :: hdferr          ! Error code
+!*****
     INTEGER(SIZE_T) :: namelen
 
-!            INTEGER, EXTERNAL :: h5aopen_name_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aopen_name_c(obj_id, name, namelen, attr_id)
          USE H5GLOBAL
@@ -221,44 +180,41 @@ CONTAINS
     namelen = LEN(name)
     hdferr = h5aopen_name_c(obj_id, name, namelen, attr_id)
   END SUBROUTINE h5aopen_name_f
-
-
-!----------------------------------------------------------------------
-! Name:		h5aopen_idx_f
 !
-! Purpose:  	Opens the attribute specified by its index.
+!****s* H5A/h5aopen_idx_f
 !
-! Inputs:
-!		obj_id		- identifier of a group, dataset, or named
-!				  datatype an attribute to be attached to
-!		index		- index of the attribute to open (zero-based)
-! Outputs:
-!		attr_id		- attribute identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5aopen_idx_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Opens the attribute specified by its index.
 !
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
+! INPUTS
+!  obj_id 	 - identifier of a group, dataset, or named
+!                  datatype an attribute to be attached to
+!  index 	 - index of the attribute to open (zero-based)
+! OUTPUTS
+!  attr_id 	 - attribute identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+! SOURCE
   SUBROUTINE h5aopen_idx_f(obj_id, index, attr_id, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: obj_id    ! Object identifier
     INTEGER, INTENT(IN) :: index            ! Attribute index
     INTEGER(HID_T), INTENT(OUT) :: attr_id  ! Attribute identifier
     INTEGER, INTENT(OUT) :: hdferr          ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5aopen_idx_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aopen_idx_c(obj_id, index, attr_id)
          USE H5GLOBAL
@@ -273,1686 +229,131 @@ CONTAINS
 
     hdferr = h5aopen_idx_c(obj_id, index, attr_id)
   END SUBROUTINE h5aopen_idx_f
-
-
-  SUBROUTINE h5awrite_integer_scalar(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    INTEGER, INTENT(IN) :: buf              ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_integer_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
 !
-    INTERFACE
-       INTEGER FUNCTION h5awrite_integer_s_c(attr_id, memtype_id,  buf, dims)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_S_C'::h5awrite_integer_s_c
-         !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-         INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         INTEGER, INTENT(IN)::buf
-       END FUNCTION h5awrite_integer_s_c
-    END INTERFACE
-
-    hdferr = h5awrite_integer_s_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_integer_scalar
-
-  SUBROUTINE h5awrite_integer_1(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    INTEGER, INTENT(IN) , &
-         DIMENSION(dims(1)) :: buf
-    ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_integer_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+!****s* H5A/h5aget_space_f
 !
-    INTERFACE
-       INTEGER FUNCTION h5awrite_integer_1_c(attr_id, memtype_id,  buf, dims)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_1_C'::h5awrite_integer_1_c
-         !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-         INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         INTEGER, INTENT(IN), DIMENSION(dims(1)) :: buf
-       END FUNCTION h5awrite_integer_1_c
-    END INTERFACE
-
-    hdferr = h5awrite_integer_1_c(attr_id, memtype_id,  buf, dims)
-
-  END SUBROUTINE h5awrite_integer_1
-
-
-  SUBROUTINE h5awrite_integer_2(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    INTEGER, INTENT(IN) , &
-         DIMENSION(dims(1),dims(2)) :: buf
-    ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_integer_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! NAME
+!  h5aget_space_f
 !
-    INTERFACE
-       INTEGER FUNCTION h5awrite_integer_2_c(attr_id, memtype_id,  buf, dims)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_2_C'::h5awrite_integer_2_c
-         !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-         INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2)) :: buf
-       END FUNCTION h5awrite_integer_2_c
-    END INTERFACE
-
-    hdferr = h5awrite_integer_2_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_integer_2
-
-
-  SUBROUTINE h5awrite_integer_3(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3)) :: buf
-                                                    ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_integer_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! PURPOSE
+!  Gets a copy of the dataspace for an attribute.
 !
-    INTERFACE
-       INTEGER FUNCTION h5awrite_integer_3_c(attr_id, memtype_id,  buf, dims)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_3_C'::h5awrite_integer_3_c
-         !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-         INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3)) :: buf
-       END FUNCTION h5awrite_integer_3_c
-    END INTERFACE
-
-    hdferr = h5awrite_integer_3_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_integer_3
-
-
-  SUBROUTINE h5awrite_integer_4(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    INTEGER, INTENT(IN), &
-         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-    ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_integer_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! INPUTS
+!  attr_id 	 - attribute identifier
 !
-    INTERFACE
-       INTEGER FUNCTION h5awrite_integer_4_c(attr_id, memtype_id,  buf, dims)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_4_C'::h5awrite_integer_4_c
-         !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-         INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-       END FUNCTION h5awrite_integer_4_c
-    END INTERFACE
-
-    hdferr = h5awrite_integer_4_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_integer_4
-
-
-  SUBROUTINE h5awrite_integer_5(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-                                                    ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_integer_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! OUTPUTS
+!  space_id 	 - attribite dataspace identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-    INTERFACE
-       INTEGER FUNCTION h5awrite_integer_5_c(attr_id, memtype_id,  buf, dims)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_5_C'::h5awrite_integer_5_c
-         !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-         INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-       END FUNCTION h5awrite_integer_5_c
-    END INTERFACE
-
-    hdferr = h5awrite_integer_5_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_integer_5
-
-
-  SUBROUTINE h5awrite_integer_6(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    INTEGER, INTENT(IN), &
-         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-    ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_integer_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-    INTERFACE
-       INTEGER FUNCTION h5awrite_integer_6_c(attr_id, memtype_id,  buf, dims)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_6_C'::h5awrite_integer_6_c
-         !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-         INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         INTEGER, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-       END FUNCTION h5awrite_integer_6_c
-    END INTERFACE
-
-    hdferr = h5awrite_integer_6_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_integer_6
-
-
-  SUBROUTINE h5awrite_integer_7(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    INTEGER, INTENT(IN), &
-         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-    ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_integer_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
 !
-    INTERFACE
-       INTEGER FUNCTION h5awrite_integer_7_c(attr_id, memtype_id,  buf, dims)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_7_C'::h5awrite_integer_7_c
-         !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-         INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         INTEGER, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-       END FUNCTION h5awrite_integer_7_c
-    END INTERFACE
-
-    hdferr = h5awrite_integer_7_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_integer_7
-
-
-  SUBROUTINE h5awrite_real_scalar(attr_id, memtype_id,  buf, dims, hdferr)
+!
+! SOURCE
+  SUBROUTINE h5aget_space_f(attr_id, space_id, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    REAL, INTENT(IN) :: buf                 ! Attribute data
+    INTEGER(HID_T), INTENT(OUT) :: space_id ! Attribute dataspace identifier
     INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_real_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
     INTERFACE
-       INTEGER FUNCTION h5awrite_real_s_c(attr_id, memtype_id,  buf, dims)
+       INTEGER FUNCTION h5aget_space_c(attr_id, space_id)
          USE H5GLOBAL
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_S_C'::h5awrite_real_s_c
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AGET_SPACE_C'::h5aget_space_c
          !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
          INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         REAL, INTENT(IN)::buf
-       END FUNCTION h5awrite_real_s_c
+         INTEGER(HID_T), INTENT(OUT) :: space_id
+       END FUNCTION h5aget_space_c
     END INTERFACE
-
-    hdferr = h5awrite_real_s_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_real_scalar
-
-  SUBROUTINE h5awrite_real_1(attr_id, memtype_id,  buf, dims, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-    ! identifier  (in memory)
-    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-    REAL, INTENT(IN), &
-         DIMENSION(dims(1)) :: buf
-                                                    ! Attribute data
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_real_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+    
+    hdferr = h5aget_space_c(attr_id, space_id)
+  END SUBROUTINE h5aget_space_f
+!
+!****s* H5A/h5aget_type_f
+!
+! NAME
+!  h5aget_type_f
+!
+! PURPOSE
+!  Gets an attribute datatype.
 !
+! INPUTS
+!  attr_id 	 - attribute identifier
+! OUTPUTS
+!  type_id 	 - attribute datatype identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+! SOURCE
+  SUBROUTINE h5aget_type_f(attr_id, type_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id  ! Attribute identifier
+    INTEGER(HID_T), INTENT(OUT) :: type_id ! Attribute datatype identifier
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
     INTERFACE
-       INTEGER FUNCTION h5awrite_real_1_c(attr_id, memtype_id,  buf, dims)
+       INTEGER FUNCTION h5aget_type_c(attr_id, type_id)
          USE H5GLOBAL
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_1_C'::h5awrite_real_1_c
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AGET_TYPE_C'::h5aget_type_c
          !DEC$ENDIF
-         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
          INTEGER(HID_T), INTENT(IN) :: attr_id
-         INTEGER(HID_T), INTENT(IN) :: memtype_id
-         REAL, INTENT(IN), &
-              DIMENSION(dims(1)) :: buf
-       END FUNCTION h5awrite_real_1_c
+         INTEGER(HID_T), INTENT(OUT) :: type_id
+       END FUNCTION h5aget_type_c
     END INTERFACE
-
-    hdferr = h5awrite_real_1_c(attr_id, memtype_id,  buf, dims)
-  END SUBROUTINE h5awrite_real_1
-
-
-          SUBROUTINE h5awrite_real_2(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_real_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awrite_real_2_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_2_C'::h5awrite_real_2_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5awrite_real_2_c
-            END INTERFACE
-
-            hdferr = h5awrite_real_2_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_real_2
-
-
-          SUBROUTINE h5awrite_real_3(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_real_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awrite_real_3_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_3_C'::h5awrite_real_3_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5awrite_real_3_c
-            END INTERFACE
-
-            hdferr = h5awrite_real_3_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_real_3
-
-
-          SUBROUTINE h5awrite_real_4(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_real_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awrite_real_4_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_4_C'::h5awrite_real_4_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5awrite_real_4_c
-            END INTERFACE
-
-            hdferr = h5awrite_real_4_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_real_4
-
-
-          SUBROUTINE h5awrite_real_5(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_real_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awrite_real_5_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_5_C'::h5awrite_real_5_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5awrite_real_5_c
-            END INTERFACE
-
-            hdferr = h5awrite_real_5_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_real_5
-
-
-          SUBROUTINE h5awrite_real_6(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_real_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awrite_real_6_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_6_C'::h5awrite_real_6_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5awrite_real_6_c
-            END INTERFACE
-
-            hdferr = h5awrite_real_6_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_real_6
-
-
-          SUBROUTINE h5awrite_real_7(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awrite_real_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awrite_real_7_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_7_C'::h5awrite_real_7_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5awrite_real_7_c
-            END INTERFACE
-
-            hdferr = h5awrite_real_7_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_real_7
-
-
-          SUBROUTINE h5awrite_char_scalar(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*),INTENT(IN) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-!            INTEGER, EXTERNAL :: h5awritec_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awritec_s_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_S_C'::h5awritec_s_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(IN)::buf
-              END FUNCTION h5awritec_s_c
-            END INTERFACE
-
-            hdferr = h5awritec_s_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_char_scalar
-
-          SUBROUTINE h5awrite_char_1(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-!            INTEGER, EXTERNAL :: h5awritec_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awritec_1_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_1_C'::h5awritec_1_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(IN), DIMENSION(dims(1))::buf
-              END FUNCTION h5awritec_1_c
-            END INTERFACE
-
-            hdferr = h5awritec_1_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_char_1
-
-
-          SUBROUTINE h5awrite_char_2(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5awritec_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awritec_2_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_2_C'::h5awritec_2_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5awritec_2_c
-            END INTERFACE
-
-            hdferr = h5awritec_2_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_char_2
-
-
-          SUBROUTINE h5awrite_char_3(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-!            INTEGER, EXTERNAL :: h5awritec_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awritec_3_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_3_C'::h5awritec_3_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5awritec_3_c
-            END INTERFACE
-
-            hdferr = h5awritec_3_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_char_3
-
-
-          SUBROUTINE h5awrite_char_4(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-!            INTEGER, EXTERNAL :: h5awritec_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awritec_4_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_4_C'::h5awritec_4_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5awritec_4_c
-            END INTERFACE
-
-            hdferr = h5awritec_4_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_char_4
-
-
-          SUBROUTINE h5awrite_char_5(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-!            INTEGER, EXTERNAL :: h5awritec_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awritec_5_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_5_C'::h5awritec_5_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5awritec_5_c
-            END INTERFACE
-
-            hdferr = h5awritec_5_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_char_5
-
-
-          SUBROUTINE h5awrite_char_6(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-!            INTEGER, EXTERNAL :: h5awritec_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awritec_6_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_6_C'::h5awritec_6_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5awritec_6_c
-            END INTERFACE
-
-            hdferr = h5awritec_6_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_char_6
-
-
-          SUBROUTINE h5awrite_char_7(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-!            INTEGER, EXTERNAL :: h5awritec_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5awritec_7_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_7_C'::h5awritec_7_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5awritec_7_c
-            END INTERFACE
-
-            hdferr = h5awritec_7_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5awrite_char_7
-
-!----------------------------------------------------------------------
-! Name:		h5aread_f
-!
-! Purpose:  	Reads an attribute.
-!
-! Inputs:
-!		attr_id		- attribute identifier
-!		memtype_id	- attribute memory type identifier
-!		dims		- 1D array of size 7, stores sizes of the
-!				- buf array dimensions.
-! Outputs:
-!		buf		- buffer to read attribute data in
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
-!
-!			dims parameter was added to make code portable;
-!			Aprile 4, 2001
-!
-!                       Changed buf intent to INOUT to be consistant
-!                       with how the C functions handles it. The pg
-!                       compiler will return 0 if a buf value is not set.
-!                       February, 2008
-!
-! Comment:		This function is overloaded to write INTEGER,
-!			REAL, DOUBLE PRECISION and CHARACTER buffers
-!			up to 7 dimensions.
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5aread_integer_scalar(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            INTEGER, INTENT(INOUT) :: buf             ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_integer_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_integer_s_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_S_C'::h5aread_integer_s_c
-              !DEC$ENDIF
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              INTEGER, INTENT(INOUT)::buf
-              END FUNCTION h5aread_integer_s_c
-            END INTERFACE
-            hdferr = h5aread_integer_s_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_integer_scalar
-
-          SUBROUTINE h5aread_integer_1(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            INTEGER, INTENT(INOUT), DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_integer_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_integer_1_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_1_C'::h5aread_integer_1_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              INTEGER, INTENT(INOUT), DIMENSION(dims(1)) :: buf
-              END FUNCTION h5aread_integer_1_c
-            END INTERFACE
-
-            hdferr = h5aread_integer_1_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_integer_1
-
-
-          SUBROUTINE h5aread_integer_2(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            INTEGER, INTENT(INOUT),DIMENSION(dims(1),dims(2)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_integer_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_integer_2_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_2_C'::h5aread_integer_2_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              INTEGER, INTENT(INOUT), DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5aread_integer_2_c
-            END INTERFACE
-
-            hdferr = h5aread_integer_2_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_integer_2
-
-
-          SUBROUTINE h5aread_integer_3(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            INTEGER, INTENT(INOUT), &
-                 DIMENSION(dims(1),dims(2),dims(3)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_integer_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_integer_3_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_3_C'::h5aread_integer_3_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5aread_integer_3_c
-            END INTERFACE
-
-            hdferr = h5aread_integer_3_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_integer_3
-
-
-          SUBROUTINE h5aread_integer_4(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_integer_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_integer_4_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_4_C'::h5aread_integer_4_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5aread_integer_4_c
-            END INTERFACE
-
-            hdferr = h5aread_integer_4_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_integer_4
-
-
-          SUBROUTINE h5aread_integer_5(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_integer_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_integer_5_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_5_C'::h5aread_integer_5_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5aread_integer_5_c
-            END INTERFACE
-
-            hdferr = h5aread_integer_5_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_integer_5
-
-
-          SUBROUTINE h5aread_integer_6(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_integer_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_integer_6_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_6_C'::h5aread_integer_6_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5aread_integer_6_c
-            END INTERFACE
-
-            hdferr = h5aread_integer_6_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_integer_6
-
-
-          SUBROUTINE h5aread_integer_7(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_integer_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_integer_7_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_7_C'::h5aread_integer_7_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5aread_integer_7_c
-            END INTERFACE
-
-            hdferr = h5aread_integer_7_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_integer_7
-
-
-          SUBROUTINE h5aread_real_scalar(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(INOUT) :: buf                ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_real_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_real_s_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_S_C'::h5aread_real_s_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(INOUT)::buf
-              END FUNCTION h5aread_real_s_c
-            END INTERFACE
-
-            hdferr = h5aread_real_s_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_real_scalar
-
-          SUBROUTINE h5aread_real_1(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_real_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_real_1_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_1_C'::h5aread_real_1_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1)) :: buf
-              END FUNCTION h5aread_real_1_c
-            END INTERFACE
-
-            hdferr = h5aread_real_1_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_real_1
-
-
-          SUBROUTINE h5aread_real_2(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_real_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_real_2_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_2_C'::h5aread_real_2_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5aread_real_2_c
-            END INTERFACE
-
-            hdferr = h5aread_real_2_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_real_2
-
-
-          SUBROUTINE h5aread_real_3(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_real_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_real_3_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_3_C'::h5aread_real_3_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5aread_real_3_c
-            END INTERFACE
-
-            hdferr = h5aread_real_3_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_real_3
-
-
-          SUBROUTINE h5aread_real_4(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_real_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_real_4_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_4_C'::h5aread_real_4_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5aread_real_4_c
-            END INTERFACE
-
-            hdferr = h5aread_real_4_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_real_4
-
-
-          SUBROUTINE h5aread_real_5(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_real_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_real_5_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_5_C'::h5aread_real_5_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5aread_real_5_c
-            END INTERFACE
-
-            hdferr = h5aread_real_5_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_real_5
-
-
-          SUBROUTINE h5aread_real_6(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_real_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_real_6_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_6_C'::h5aread_real_6_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5aread_real_6_c
-            END INTERFACE
-
-            hdferr = h5aread_real_6_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_real_6
-
-
-          SUBROUTINE h5aread_real_7(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5aread_real_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aread_real_7_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_7_C'::h5aread_real_7_c
-              !DEC$ENDIF
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5aread_real_7_c
-            END INTERFACE
-
-            hdferr = h5aread_real_7_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_real_7
-
-          SUBROUTINE h5aread_char_scalar(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(INOUT) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5areadc_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5areadc_s_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_S_C'::h5areadc_s_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(INOUT) :: buf
-              END FUNCTION h5areadc_s_c
-            END INTERFACE
-
-            hdferr = h5areadc_s_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_char_scalar
-
-          SUBROUTINE h5aread_char_1(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5areadc_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5areadc_1_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_1_C'::h5areadc_1_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(INOUT), &
-                   DIMENSION(dims(1)) :: buf
-              END FUNCTION h5areadc_1_c
-            END INTERFACE
-
-            hdferr = h5areadc_1_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_char_1
-
-
-          SUBROUTINE h5aread_char_2(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(INOUT), &
-                 DIMENSION(dims(1),dims(2)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5areadc_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5areadc_2_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_2_C'::h5areadc_2_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5areadc_2_c
-            END INTERFACE
-
-            hdferr = h5areadc_2_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_char_2
-
-
-          SUBROUTINE h5aread_char_3(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5areadc_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5areadc_3_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_3_C'::h5areadc_3_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5areadc_3_c
-            END INTERFACE
-
-            hdferr = h5areadc_3_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_char_3
-
-
-          SUBROUTINE h5aread_char_4(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5areadc_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5areadc_4_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_4_C'::h5areadc_4_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5areadc_4_c
-            END INTERFACE
-
-            hdferr = h5areadc_4_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_char_4
-
-
-          SUBROUTINE h5aread_char_5(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5areadc_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5areadc_5_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_5_C'::h5areadc_5_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5areadc_5_c
-            END INTERFACE
-
-            hdferr = h5areadc_5_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_char_5
-
-
-          SUBROUTINE h5aread_char_6(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5areadc_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5areadc_6_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_6_C'::h5areadc_6_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5areadc_6_c
-            END INTERFACE
-
-            hdferr = h5areadc_6_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_char_6
-
-
-          SUBROUTINE h5aread_char_7(attr_id, memtype_id,  buf, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id   ! Attribute identifier
-            INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
-                                                     ! identifier  (in memory)
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-                                                    ! Attribute data
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5areadc_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5areadc_7_c(attr_id, memtype_id,  buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_7_C'::h5areadc_7_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(IN) :: memtype_id
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5areadc_7_c
-            END INTERFACE
-
-            hdferr = h5areadc_7_c(attr_id, memtype_id,  buf, dims)
-          END SUBROUTINE h5aread_char_7
-
-
-!----------------------------------------------------------------------
-! Name:		h5aget_space_f
-!
-! Purpose:  	Gets a copy of the dataspace for an attribute.
-!
-! Inputs:
-!		attr_id		- attribute identifier
-! Outputs:
-!		space_id	- attribite dataspace identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
-!
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5aget_space_f(attr_id, space_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id  ! Attribute identifier
-            INTEGER(HID_T), INTENT(OUT) :: space_id
-                                            ! Attribute dataspace identifier
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL:: h5aget_space_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aget_space_c(attr_id, space_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AGET_SPACE_C'::h5aget_space_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(OUT) :: space_id
-              END FUNCTION h5aget_space_c
-            END INTERFACE
-
-            hdferr = h5aget_space_c(attr_id, space_id)
-          END SUBROUTINE h5aget_space_f
-
-!----------------------------------------------------------------------
-! Name:		h5aget_type_f
-!
-! Purpose:  	Gets an attribute datatype.
-!
-! Inputs:
-!		attr_id 	- attribute identifier
-! Outputs:
-!		type_id		- attribute datatype identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
-!
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5aget_type_f(attr_id, type_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: attr_id  ! Attribute identifier
-            INTEGER(HID_T), INTENT(OUT) :: type_id
-                                              ! Attribute datatype identifier
-            INTEGER, INTENT(OUT) :: hdferr    ! Error code
-
-!            INTEGER, EXTERNAL :: h5aget_type_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5aget_type_c(attr_id, type_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AGET_TYPE_C'::h5aget_type_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: attr_id
-              INTEGER(HID_T), INTENT(OUT) :: type_id
-              END FUNCTION h5aget_type_c
-            END INTERFACE
-
-            hdferr = h5aget_type_c(attr_id, type_id)
-          END SUBROUTINE h5aget_type_f
-
-!----------------------------------------------------------------------
-! Name:		h5aget_name_f
-!
-! Purpose: 	Gets an attribute name.
-!
-! Inputs:
-!		attr_id		- attribute identifier
-!		size		- size of a buffer to read name in
-! Outputs:
-!		buf		- buffer to read name in
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
-!
-!----------------------------------------------------------------------
-
-
+    
+    hdferr = h5aget_type_c(attr_id, type_id)
+  END SUBROUTINE h5aget_type_f
+!
+!****s* H5A/h5aget_name_f
+!
+! NAME
+!  h5aget_name_f
+!
+! PURPOSE
+!  Gets an attribute name.
+!
+! INPUTS
+!  attr_id 	 - attribute identifier
+!  size 	 - size of a buffer to read name in
+! OUTPUTS
+!  buf 	         - buffer to read name in
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+!
+! SOURCE
   SUBROUTINE h5aget_name_f(attr_id, size, buf, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: attr_id  ! Attribute identifier
     INTEGER(SIZE_T), INTENT(IN) :: size    ! Buffer size
-    CHARACTER(LEN=*), INTENT(INOUT) :: buf
-                                           ! Buffer to hold attribute name
+    CHARACTER(LEN=*), INTENT(INOUT) :: buf ! Buffer to hold attribute name
     INTEGER, INTENT(OUT) :: hdferr ! Error code:
-                                   ! name length is successful,
-                                   ! -1 if fail
-
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+                                   ! name length is successful, -1 if fail
+!*****
     INTERFACE
        INTEGER FUNCTION h5aget_name_c(attr_id, size, buf)
          USE H5GLOBAL
@@ -1969,47 +370,46 @@ CONTAINS
     hdferr = h5aget_name_c(attr_id, size, buf)
   END SUBROUTINE h5aget_name_f
 
-!----------------------------------------------------------------------
-! Name:		h5aget_name_by_idx_f
 !
-! Purpose: 	Gets an attribute name, by attribute index position.
+!****s* H5A/h5aget_name_by_idx_f
 !
-! Inputs:
-!          loc_id   - Location of object to which attribute is attached
-!          obj_name - Name of object to which attribute is attached, relative to location
-!          idx_type - Type of index; Possible values are:
+! NAME
+!  h5aget_name_by_idx_f
 !
-!                  H5_INDEX_UNKNOWN_F = -1  - Unknown index type
-!                  H5_INDEX_NAME_F          - Index on names
-!                  H5_INDEX_CRT_ORDER_F     - Index on creation order
-!                  H5_INDEX_N_F             - Number of indices defined
+! PURPOSE
+!  Gets an attribute name, by attribute index position.
 !
-!          order    - Order in which to iterate over index; Possible values are:
+! INPUTS
+!  loc_id 	 - Location of object to which attribute is attached
+!  obj_name 	 - Name of object to which attribute is attached, relative to location
+!  idx_type 	 - Type of index; Possible values are:
+!                   H5_INDEX_UNKNOWN_F = -1  - Unknown index type
+!                   H5_INDEX_NAME_F 	     - Index on names
+!                   H5_INDEX_CRT_ORDER_F     - Index on creation order
+!                   H5_INDEX_N_F 	     - Number of indices defined
 !
-!                  H5_ITER_UNKNOWN_F   - Unknown order
-!                  H5_ITER_INC_F       - Increasing order
-!                  H5_ITER_DEC_F       - Decreasing order
-!                  H5_ITER_NATIVE_F    - No particular order, whatever is fastest
-!                  H5_ITER_N_F	     - Number of iteration orders
+!  order 	 - Order in which to iterate over index; Possible values are:
+!                   H5_ITER_UNKNOWN_F 	 - Unknown order
+!                   H5_ITER_INC_F 	 - Increasing order
+!                   H5_ITER_DEC_F 	 - Decreasing order
+!                   H5_ITER_NATIVE_F 	 - No particular order, whatever is fastest
+!                   H5_ITER_N_F 	 - Number of iteration orders
+!  order 	 - Index traversal order
+!  n 	         - Attribute’s position in index
 !
-!          order    - Index traversal order
-!              n    - Attribute’s position in index
+! OUTPUTS
+!  name 	 - Attribute name
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Outputs:
-!		name            - Attribute name
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!        lapl_id    - Link access property list
-!           size    - Size, in bytes, of attribute name
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Link access property list
+!  size 	 - Size, in bytes, of attribute name
 !
-! Programmer:   M.S. Breitenfeld
-!		January, 2008
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
 !
-! Modifications: N/A
-!----------------------------------------------------------------------
-
+! SOURCE
   SUBROUTINE h5aget_name_by_idx_f(loc_id, obj_name, idx_type, order, &
        n, name, hdferr, size, lapl_id)
     IMPLICIT NONE
@@ -2028,23 +428,19 @@ CONTAINS
                                     !    H5_ITER_DEC_F       - Decreasing order
                                     !    H5_ITER_NATIVE_F    - No particular order, whatever is fastest
                                     !    H5_ITER_N_F 	    - Number of iteration orders
-
     INTEGER(HSIZE_T), INTENT(IN) :: n !  Attribute’s position in index
-
     CHARACTER(LEN=*), INTENT(OUT) :: name ! Attribute name
-
-
     INTEGER, INTENT(OUT) :: hdferr    ! Error code:
-                                         ! Returns attribute name size,
-                                         ! -1 if fail
-    INTEGER(SIZE_T) :: obj_namelen
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id   ! Link access property list
+                                      ! Returns attribute name size,
+                                      ! -1 if fail
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list
+    INTEGER(SIZE_T), OPTIONAL, INTENT(OUT) :: size  ! Indicates the size, in the number of characters, 
+                                                    ! of the attribute
+!*****
     INTEGER(HID_T) :: lapl_id_default
-    INTEGER(SIZE_T), OPTIONAL, INTENT(OUT) :: size   ! Indicates the size, in the number of characters, of the attribute
+    INTEGER(SIZE_T) :: obj_namelen
     INTEGER(SIZE_T) :: size_default
-!
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+
     INTERFACE
        INTEGER FUNCTION h5aget_name_by_idx_c(loc_id, obj_name, obj_namelen, idx_type, order, &
             n, name, size_default, lapl_id_default)
@@ -2079,43 +475,39 @@ CONTAINS
 
 
   END SUBROUTINE h5aget_name_by_idx_f
-
-
-!----------------------------------------------------------------------
-! Name:		h5aget_num_attrs_f
 !
-! Purpose:  	Determines the number of attributes attached to an object.
+!****s* H5A/h5aget_num_attrs_f
 !
-! Inputs:
-!		obj_id		- object (group, dataset, or named datatype)
-!				  identifier
-! Outputs:
-!		attr_num	- number of attributes attached to the object
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5aget_num_attrs_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Determines the number of attributes attached to an object.
 !
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
+! INPUTS
+!  obj_id 	 - object (group, dataset, or named datatype)
+!  identifier
+! OUTPUTS
+!  attr_num 	 - number of attributes attached to the object
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+! SOURCE
   SUBROUTINE h5aget_num_attrs_f(obj_id, attr_num, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: obj_id  ! Object identifier
-    INTEGER, INTENT(OUT) :: attr_num      ! Number of attributes of the
-    ! object
-    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+    INTEGER, INTENT(OUT) :: attr_num      ! Number of attributes of the object
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5aget_num_attrs_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aget_num_attrs_c(obj_id, attr_num)
          USE H5GLOBAL
@@ -2130,42 +522,40 @@ CONTAINS
     hdferr = h5aget_num_attrs_c(obj_id, attr_num)
   END SUBROUTINE h5aget_num_attrs_f
 
-!----------------------------------------------------------------------
-! Name:		h5adelete_f
 !
-! Purpose:  	Deletes an attribute of an object (group, dataset or
-!		named datatype)
+!****s* H5A/h5adelete_f
 !
-! Inputs:
-!		obj_id		- object identifier
-!		name		- attribute name
-! Outputs:
+! NAME
+!  h5adelete_f
 !
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Deletes an attribute of an object (group, dataset or
+!  named datatype)
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! INPUTS
+!  obj_id 	 - object identifier
+!  name 	 - attribute name
+! OUTPUTS
 !
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-!----------------------------------------------------------------------
-
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+! SOURCE
   SUBROUTINE h5adelete_f(obj_id, name, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: obj_id    ! Object identifier
-    CHARACTER(LEN=*), INTENT(IN) :: name    ! Attribute name
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    INTEGER(HID_T), INTENT(IN) :: obj_id  ! Object identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Attribute name
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
     INTEGER(SIZE_T) :: namelen
 
-!            INTEGER, EXTERNAL ::  h5adelete_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5adelete_c(obj_id, name, namelen)
          USE H5GLOBAL
@@ -2183,38 +573,36 @@ CONTAINS
     hdferr = h5adelete_c(obj_id, name, namelen)
   END SUBROUTINE h5adelete_f
 
-!----------------------------------------------------------------------
-! Name:		h5aclose_f
 !
-! Purpose:  	Closes the specified attribute.
+!****s* H5A/h5aclose_f
 !
-! Inputs:
-!		attr_id		- attribute identifier
-! Outputs:
+! NAME
+!  h5aclose_f
 !
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Closes the specified attribute.
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! INPUTS
+!  attr_id  - attribute identifier
+! OUTPUTS
 !
-! Modifications: 	Explicit Fortran interfaces are added for
-!			called C functions (it is needed for Windows
-!			port).  February 27, 2001
+!  hdferr   - Returns 0 if successful and -1 if fails
 !
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+! SOURCE
   SUBROUTINE h5aclose_f(attr_id, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: attr_id  ! Attribute identifier
-    INTEGER, INTENT(OUT) :: hdferr         ! Error code:
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5aclose_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aclose_c(attr_id)
          USE H5GLOBAL
@@ -2228,36 +616,32 @@ CONTAINS
     hdferr = h5aclose_c(attr_id)
   END SUBROUTINE h5aclose_f
 
-!----------------------------------------------------------------------
-! Name:		h5aget_storage_size_f
 !
-! Purpose:  	Returns the amount of storage required for an attribute.
+!****s* H5A/h5aget_storage_size_f
 !
-! Inputs:
-!		attr_id		- attribute identifier
-! Outputs:
-!               size            - attribute storage size
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5aget_storage_size_f
 !
-! Programmer:	M. S. Breitenfeld
-!		January, 2008
+! PURPOSE
+!  Returns the amount of storage required for an attribute.
 !
-! Modifications:  N/A
+! INPUTS
+!  attr_id 	 - attribute identifier
+! OUTPUTS
+!  size 	 - attribute storage size
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
 !
-!----------------------------------------------------------------------
-
+! SOURCE
   SUBROUTINE h5aget_storage_size_f(attr_id, size, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: attr_id  ! Attribute identifier
-    INTEGER(HSIZE_T), INTENT(OUT) :: size   ! Attribute storage requirement
+    INTEGER(HSIZE_T), INTENT(OUT) :: size  ! Attribute storage requirement
     INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aget_storage_size_c(attr_id, size)
          USE H5GLOBAL
@@ -2272,37 +656,34 @@ CONTAINS
     hdferr = h5aget_storage_size_c(attr_id, size)
   END SUBROUTINE h5aget_storage_size_f
 
-!----------------------------------------------------------------------
-! Name:		h5aget_create_plist_f
 !
-! Purpose:  	Gets an attribute creation property list identifier
+!****s* H5A/h5aget_create_plist_f
 !
-! Inputs:
-!		attr_id		  - Identifier of the attribute
-! Outputs:
-!               creation_prop_id  - Identifier for the attribute’s creation property
-!		hdferr:		  - error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5aget_create_plist_f
 !
-! Programmer:	M. S. Breitenfeld
-!		January, 2008
+! PURPOSE
+!  Gets an attribute creation property list identifier
 !
-! Modifications:  N/A
+! INPUTS
+!  attr_id 	    - Identifier of the attribute
+! OUTPUTS
+!  creation_prop_id - Identifier for the attribute’s creation property
+!  hdferr 	    - Returns 0 if successful and -1 if fails
 !
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+!
+! SOURCE
   SUBROUTINE h5aget_create_plist_f(attr_id, creation_prop_id, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: attr_id  ! Identifier of the attribute
     INTEGER(HID_T), INTENT(OUT) :: creation_prop_id   ! Identifier for the attribute’s creation property
-    INTEGER, INTENT(OUT) :: hdferr       ! Error code:
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
                                          ! 0 on success and -1 on failure
+!*****
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aget_create_plist_c(attr_id, creation_prop_id)
          USE H5GLOBAL
@@ -2317,31 +698,31 @@ CONTAINS
     hdferr = h5aget_create_plist_c(attr_id, creation_prop_id)
   END SUBROUTINE h5aget_create_plist_f
 
-!----------------------------------------------------------------------
-! Name:		h5arename_by_name_f
 !
-! Purpose: 	Renames an attribute
+!****s* H5A/h5arename_by_name_f
 !
-! Inputs:
-!		loc_id        - Location or object identifier; may be dataset or group
-!		obj_name      - Name of object, relative to location,
-!                                whose attribute is to be renamed
-!               old_attr_name - Prior attribute name
-!               new_attr_name - New attribute name
-!               lapl_id       - Link access property list identifier
+! NAME
+!  h5arename_by_name_f
 !
-! Outputs:
-!		hdferr:	      - error code
-!				 	Success:  0
-!				 	Failure: -1
+! PURPOSE
+!  Renames an attribute
 !
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
+! INPUTS
+!  loc_id 	 - Location or object identifier; may be dataset or group
+!  obj_name 	 - Name of object, relative to location,
+!                  whose attribute is to be renamed
+!  old_attr_name - Prior attribute name
+!  new_attr_name - New attribute name
+!  lapl_id 	 - Link access property list identifier
 !
-! Modifications: N/A
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+!
+! SOURCE
   SUBROUTINE h5arename_by_name_f(loc_id, obj_name, old_attr_name, new_attr_name, &
         hdferr, lapl_id)
     IMPLICIT NONE
@@ -2354,14 +735,12 @@ CONTAINS
     INTEGER, INTENT(OUT) :: hdferr       ! Error code:
                                          ! 0 on success and -1 on failure
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier
-
+!*****
     INTEGER(HID_T) :: lapl_id_default
     INTEGER(SIZE_T) :: obj_namelen
     INTEGER(SIZE_T) :: old_attr_namelen
     INTEGER(SIZE_T) :: new_attr_namelen
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5arename_by_name_c(loc_id, obj_name, obj_namelen, &
             old_attr_name, old_attr_namelen, new_attr_name, new_attr_namelen, &
@@ -2370,7 +749,7 @@ CONTAINS
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
          !DEC$ATTRIBUTES C,reference,decorate,alias:'H5ARENAME_BY_NAME_C'::h5arename_by_name_c
          !DEC$ENDIF
-         !DEC$ATTRIBUTES reference :: obj_name,  old_attr_name, new_attr_name
+         !DEC$ATTRIBUTES reference :: obj_name, old_attr_name, new_attr_name
          INTEGER(HID_T), INTENT(IN) :: loc_id
          CHARACTER(LEN=*), INTENT(IN) :: obj_name
          INTEGER(SIZE_T) :: obj_namelen
@@ -2396,30 +775,31 @@ CONTAINS
 
   END SUBROUTINE h5arename_by_name_f
 
-!----------------------------------------------------------------------
-! Name:		h5aopen_f
 !
-! Purpose:  	Opens an attribute for an object specified by object
-!               identifier and attribute name
+!****s* H5A/h5aopen_f
 !
-! Inputs:
-!		obj_id      - Identifer for object to which attribute is attached
-!               attr_name   - Name of attribute to open
-! Outputs:
-!		attr_id     - attribute identifier
-!		hdferr:     - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!		aapl_id     - Attribute access property list
+! NAME
+!  h5aopen_f
 !
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
+! PURPOSE
+!  Opens an attribute for an object specified by object
+!  identifier and attribute name
 !
-! Modifications: N/A
-!
-!----------------------------------------------------------------------
+! INPUTS
+!  obj_id 	 - Identifer for object to which attribute is attached
+!  attr_name 	 - Name of attribute to open
+! OUTPUTS
+!  attr_id 	 - attribute identifier
 
+! OPTIONAL PARAMETERS
+!  aapl_id 	 - Attribute access property list
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+!
+! SOURCE
   SUBROUTINE h5aopen_f(obj_id, attr_name, attr_id, hdferr, aapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: obj_id      ! Object identifier
@@ -2429,12 +809,11 @@ CONTAINS
                                               !   Success:  0
                                               !   Failure: -1
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: aapl_id     ! Attribute access property list
+!*****
     INTEGER(HID_T) :: aapl_id_default
 
     INTEGER(SIZE_T) :: attr_namelen
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aopen_c(obj_id, attr_name, attr_namelen, aapl_id_default, attr_id)
          USE H5GLOBAL
@@ -2459,43 +838,42 @@ CONTAINS
 
   END SUBROUTINE h5aopen_f
 
-!----------------------------------------------------------------------
-! Name:		h5adelete_by_idx_f
-!
-! Purpose:  	Deletes an attribute from an object according to index order
 !
-! Inputs:
-!		loc_id     - Location or object identifier; may be dataset or group
-!               obj_name   - Name of object, relative to location, from which attribute is to be removed
-!               idx_type   - Type of index; Possible values are:
+!****s* H5A/h5adelete_by_idx_f
 !
-!                  H5_INDEX_UNKNOWN_F = -1  - Unknown index type
-!                  H5_INDEX_NAME_F          - Index on names
-!                  H5_INDEX_CRT_ORDER_F     - Index on creation order
-!                  H5_INDEX_N_F	            - Number of indices defined
+! NAME
+!  h5adelete_by_idx_f
 !
-!               order - Order in which to iterate over index; Possible values are:
+! PURPOSE
+!  Deletes an attribute from an object according to index order
 !
-!                  H5_ITER_UNKNOWN_F   - Unknown order
-!                  H5_ITER_INC_F       - Increasing order
-!                  H5_ITER_DEC_F       - Decreasing order
-!                  H5_ITER_NATIVE_F    - No particular order, whatever is fastest
-!                  H5_ITER_N_F 	       - Number of iteration orders
+! INPUTS
+!  loc_id 	 - Location or object identifier; may be dataset or group
+!  obj_name 	 - Name of object, relative to location, from which attribute is to be removed
+!  idx_type 	 - Type of index; Possible values are:
+!                   H5_INDEX_UNKNOWN_F = -1  - Unknown index type
+!                   H5_INDEX_NAME_F 	     - Index on names
+!                   H5_INDEX_CRT_ORDER_F     - Index on creation order
+!                   H5_INDEX_N_F 	     - Number of indices defined
 !
-!               n          - Offset within index
-! Outputs:
-!		hdferr:     - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!               lapl_id    - Link access property list
+!  order 	 - Order in which to iterate over index; Possible values are:
+!                   H5_ITER_UNKNOWN_F 	 - Unknown order
+!                   H5_ITER_INC_F 	 - Increasing order
+!                   H5_ITER_DEC_F 	 - Decreasing order
+!                   H5_ITER_NATIVE_F 	 - No particular order, whatever is fastest
+!                   H5_ITER_N_F 	 - Number of iteration orders
 !
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
+!  n 	         - Offset within index
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Link access property list
 !
-! Modifications: N/A
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
 !
-!----------------------------------------------------------------------
+! SOURCE
   SUBROUTINE h5adelete_by_idx_f(loc_id, obj_name, idx_type, order, n, hdferr, lapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id      ! Identifer for object to which attribute is attached
@@ -2513,17 +891,14 @@ CONTAINS
                                               !    H5_ITER_DEC_F      - Decreasing order
                                               !    H5_ITER_NATIVE_F   - No particular order, whatever is fastest
                                               !    H5_ITER_N_F	    - Number of iteration orders
-!
     INTEGER(HSIZE_T), INTENT(IN) :: n         ! Offset within index
     INTEGER, INTENT(OUT) :: hdferr         ! Error code:
                                            ! 0 on success and -1 on failure
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list
+!*****
     INTEGER(SIZE_T) :: obj_namelen
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id     ! Link access property list
-
     INTEGER(HID_T) :: lapl_id_default
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5adelete_by_idx_c(loc_id, obj_name, obj_namelen, idx_type, order, n, lapl_id_default)
          USE H5GLOBAL
@@ -2549,45 +924,43 @@ CONTAINS
 
   END SUBROUTINE h5adelete_by_idx_f
 
-!----------------------------------------------------------------------
-! Name:		h5adelete_by_name_f
 !
-! Purpose:  	Removes an attribute from a specified location
+!****s* H5A/h5adelete_by_name_f
 !
-! Inputs:
-!		loc_id     - Identifer for object to which attribute is attached
-!               obj_name   - Name of attribute to open
-!		attr_name  - Attribute access property list
-!               lapl_id    - Link access property list
-! Outputs:
-!		hdferr:     - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5adelete_by_name_f
 !
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
+! PURPOSE
+!  Removes an attribute from a specified location
 !
-! Modifications: N/A
+! INPUTS
+!  loc_id 	 - Identifer for object to which attribute is attached
+!  obj_name 	 - Name of attribute to open
+!  attr_name 	 - Attribute access property list
+!  lapl_id 	 - Link access property list
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-!----------------------------------------------------------------------
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+!
+! SOURCE
   SUBROUTINE h5adelete_by_name_f(loc_id, obj_name, attr_name, hdferr, lapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id      ! Identifer for object to which attribute is attached
     CHARACTER(LEN=*), INTENT(IN) :: obj_name  ! Name of object, relative to location,
                                               !  from which attribute is to be removed
     CHARACTER(LEN=*), INTENT(IN) :: attr_name ! Name of attribute to delete
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code:
-                                            ! 0 on success and -1 on failure
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id     ! Link access property list
+    INTEGER, INTENT(OUT) :: hdferr            ! Error code:
+                                              ! 0 on success and -1 on failure
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list
+!*****
     INTEGER(SIZE_T) :: attr_namelen
     INTEGER(SIZE_T) :: obj_namelen
 
     INTEGER(HID_T) :: lapl_id_default
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5adelete_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, lapl_id_default)
          USE H5GLOBAL
@@ -2614,32 +987,32 @@ CONTAINS
 
   END SUBROUTINE h5adelete_by_name_f
 
-!----------------------------------------------------------------------
-! Name:		h5aopen_by_idx_f
 !
-! Purpose:  	Opens an existing attribute that is attached to an object specified by location and name
+!****s* H5A/h5aopen_by_idx_f
 !
-! Inputs:
-!		loc_id      - Location of object to which attribute is attached
-!               obj_name    - Name of object to which attribute is attached, relative to location
-!               idx_type    - Type of index
-!               order       - Index traversal order
-!               n           - Attribute’s position in index
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!               aapl_id     - Attribute access property list
-!               lapl_id     - Link access property list
+! NAME
+!  h5aopen_by_idx_f
 !
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
+! PURPOSE
+!  Opens an existing attribute that is attached to an object specified by location and name
 !
-! Modifications: N/A
+! INPUTS
+!  loc_id 	 - Location of object to which attribute is attached
+!  obj_name 	 - Name of object to which attribute is attached, relative to location
+!  idx_type 	 - Type of index
+!  order 	 - Index traversal order
+!  n 	         - Attribute’s position in index
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  aapl_id 	 - Attribute access property list
+!  lapl_id 	 - Link access property list
 !
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+!
+! SOURCE
   SUBROUTINE h5aopen_by_idx_f(loc_id, obj_name, idx_type, order, n, attr_id, hdferr, aapl_id, lapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id      ! Object identifier
@@ -2655,21 +1028,18 @@ CONTAINS
                                               !    H5_ITER_DEC_F      - Decreasing order
                                               !    H5_ITER_NATIVE_F   - No particular order, whatever is fastest
 
-    INTEGER(HSIZE_T), INTENT(IN) :: n      ! Attribute’s position in index
+    INTEGER(HSIZE_T), INTENT(IN) :: n       ! Attribute’s position in index
 
     INTEGER(HID_T), INTENT(OUT) :: attr_id  ! Attribute identifier
     INTEGER, INTENT(OUT) :: hdferr          ! Error code:
                                             ! 0 on success and -1 on failure
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: aapl_id  ! Attribute access property list
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id  ! Link access property list
-
+!*****
     INTEGER(SIZE_T) :: obj_namelen
     INTEGER(HID_T) :: aapl_id_default
     INTEGER(HID_T) :: lapl_id_default
 
-!
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aopen_by_idx_c(loc_id, obj_name, obj_namelen, idx_type, order, n, &
             aapl_id_default, lapl_id_default, attr_id)
@@ -2702,49 +1072,43 @@ CONTAINS
 
   END SUBROUTINE h5aopen_by_idx_f
 
-!----------------------------------------------------------------------
-! Name:		h5aget_info_f
-!
-! Purpose:  	Retrieves attribute information, by attribute identifier
-!
-! Inputs:
-!		attr_id		- attribute identifier
 !
-! Outputs:  NOTE: In C it is defined as a structure: H5A_info_t
+!****s* H5A/h5aget_info_f
 !
-!    corder_valid   - indicates whether the creation order data is valid for this attribute
-!    corder         - is a positive integer containing the creation order of the attribute
-!    cset           - indicates the character set used for the attribute’s name
-!    data_size      - indicates the size, in the number of characters, of the attribute
+! NAME
+!  h5aget_info_f
 !
-!    hdferr         - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Retrieves attribute information, by attribute identifier
 !
-! Programmer:	M. S. Breitenfeld
-!		January, 2008
+! INPUTS
+!  attr_id 	 - attribute identifier
 !
-! Modifications:  N/A
+! OUTPUTS
+!  NOTE: In C it is defined as a structure: H5A_info_t
 !
-!----------------------------------------------------------------------
-
-  SUBROUTINE h5aget_info_f(attr_id, f_corder_valid, corder, cset, data_size,  hdferr)
+!  corder_valid  - indicates whether the creation order data is valid for this attribute
+!  corder 	 - is a positive integer containing the creation order of the attribute
+!  cset 	 - indicates the character set used for the attribute’s name
+!  data_size 	 - indicates the size, in the number of characters, of the attribute
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+! SOURCE
+  SUBROUTINE h5aget_info_f(attr_id, f_corder_valid, corder, cset, data_size, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: attr_id  ! Attribute identifier
 
     LOGICAL, INTENT(OUT) :: f_corder_valid ! Indicates whether the creation order data is valid for this attribute
     INTEGER, INTENT(OUT) :: corder ! Is a positive integer containing the creation order of the attribute
-    INTEGER, INTENT(OUT) :: cset ! Indicates the character set used for the attribute’s name
-    INTEGER(HSIZE_T), INTENT(OUT) :: data_size   ! Indicates the size, in the number of characters, of the attribute
+    INTEGER, INTENT(OUT) :: cset   ! Indicates the character set used for the attribute’s name
+    INTEGER(HSIZE_T), INTENT(OUT) :: data_size ! Indicates the size, in the number of characters, of the attribute
     INTEGER, INTENT(OUT) :: hdferr       ! Error code:
                                          ! 0 on success and -1 on failure
-
+!*****
     INTEGER :: corder_valid
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aget_info_c(attr_id, corder_valid, corder, cset, data_size)
          USE H5GLOBAL
@@ -2766,43 +1130,43 @@ CONTAINS
     IF (corder_valid .EQ. 1) f_corder_valid =.TRUE.
 
 
-
   END SUBROUTINE h5aget_info_f
 
-!----------------------------------------------------------------------
-! Name:		h5aget_info_by_idx_f
 !
-! Purpose:  	Retrieves attribute information, by attribute index position
+!****s* H5A/h5aget_info_by_idx_f
 !
-! Inputs:
-!	loc_id - Location of object to which attribute is attached
-!     obj_name - Name of object to which attribute is attached, relative to location
-!     idx_type - Type of index
-!        order - Index traversal order
-!            n - Attribute’s position in index
+! NAME
+!  h5aget_info_by_idx_f
 !
-! Outputs:  NOTE: In C it is defined as a structure: H5A_info_t
-!    corder_valid   - indicates whether the creation order data is valid for this attribute
-!    corder         - is a positive integer containing the creation order of the attribute
-!    cset           - indicates the character set used for the attribute’s name
-!    data_size      - indicates the size, in the number of characters, of the attribute
-!    hdferr         - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!      lapl_id - Link access property list
+! PURPOSE
+!  Retrieves attribute information, by attribute index position
 !
-! Programmer:	M. S. Breitenfeld
-!		January, 2008
+! INPUTS
+!  loc_id 	 - Location of object to which attribute is attached
+!  obj_name 	 - Name of object to which attribute is attached, relative to location
+!  idx_type 	 - Type of index
+!  order 	 - Index traversal order
+!  n 	         - Attribute’s position in index
 !
-! Modifications:  N/A
+! OUTPUTS  NOTE: In C it is defined as a structure: H5A_info_t
+!  corder_valid  - indicates whether the creation order data is valid for this attribute
+!  corder 	 - is a positive integer containing the creation order of the attribute
+!  cset 	 - indicates the character set used for the attribute’s name
+!  data_size 	 - indicates the size, in the number of characters, of the attribute
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Link access property list
 !
-!----------------------------------------------------------------------
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+!
+! SOURCE
   SUBROUTINE h5aget_info_by_idx_f(loc_id, obj_name, idx_type, order, n, &
        f_corder_valid, corder, cset, data_size, hdferr, lapl_id)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: loc_id    ! Object identifier
-    CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Name of object to which attribute is attached
+    INTEGER(HID_T), INTENT(IN) :: loc_id      ! Object identifier
+    CHARACTER(LEN=*), INTENT(IN) :: obj_name  ! Name of object to which attribute is attached
     INTEGER, INTENT(IN) :: idx_type           ! Type of index; Possible values are:
                                               !    H5_INDEX_UNKNOWN_F   - Unknown index type
                                               !    H5_INDEX_NAME_F      - Index on names
@@ -2814,22 +1178,21 @@ CONTAINS
                                               !    H5_ITER_DEC_F      - Decreasing order
                                               !    H5_ITER_NATIVE_F   - No particular order, whatever is fastest
 
-    INTEGER(HSIZE_T), INTENT(IN) :: n      ! Attribute’s position in index
+    INTEGER(HSIZE_T), INTENT(IN) :: n         ! Attribute’s position in index
 
 
     LOGICAL, INTENT(OUT) :: f_corder_valid ! Indicates whether the creation order data is valid for this attribute
     INTEGER, INTENT(OUT) :: corder ! Is a positive integer containing the creation order of the attribute
-    INTEGER, INTENT(OUT) :: cset ! Indicates the character set used for the attribute’s name
-    INTEGER(HSIZE_T), INTENT(OUT) :: data_size   ! Indicates the size, in the number of characters, of the attribute
+    INTEGER, INTENT(OUT) :: cset   ! Indicates the character set used for the attribute’s name
+    INTEGER(HSIZE_T), INTENT(OUT) :: data_size ! Indicates the size, in the number of characters, of the attribute
     INTEGER, INTENT(OUT) :: hdferr       ! Error code:
                                          ! 0 on success and -1 on failure
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id  ! Link access property list
+!*****
     INTEGER :: corder_valid
     INTEGER(SIZE_T)  :: obj_namelen
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id  ! Link access property list
     INTEGER(HID_T) :: lapl_id_default
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aget_info_by_idx_c(loc_id, obj_name, obj_namelen, idx_type, order, n, lapl_id_default, &
             corder_valid, corder, cset, data_size)
@@ -2866,33 +1229,34 @@ CONTAINS
 
   END SUBROUTINE h5aget_info_by_idx_f
 
-!----------------------------------------------------------------------
-! Name:		h5aget_info_by_name_f
 !
-! Purpose:  	Retrieves attribute information, by attribute name
+!****s* H5A/h5aget_info_by_name_f
+!
+! NAME
+!  h5aget_info_by_name_f
 !
-! Inputs:
-!	loc_id - Location of object to which attribute is attached
-!     obj_name - Name of object to which attribute is attached, relative to location
-!    attr_name - Attribute name
+! PURPOSE
+!  Retrieves attribute information, by attribute name
 !
-! Outputs:  NOTE: In C it is defined as a structure: H5A_info_t
-!    corder_valid   - indicates whether the creation order data is valid for this attribute
-!    corder         - is a positive integer containing the creation order of the attribute
-!    cset           - indicates the character set used for the attribute’s name
-!    data_size      - indicates the size, in the number of characters, of the attribute
-!    hdferr         - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!      lapl_id - Link access property list
+! INPUTS
+!  loc_id 	 - Location of object to which attribute is attached
+!  obj_name 	 - Name of object to which attribute is attached, relative to location
+!  attr_name 	 - Attribute name
 !
-! Programmer:	M. S. Breitenfeld
-!		January, 2008
+! OUTPUTS  NOTE: In C it is defined as a structure: H5A_info_t
+!  corder_valid  - indicates whether the creation order data is valid for this attribute
+!  corder 	 - is a positive integer containing the creation order of the attribute
+!  cset 	 - indicates the character set used for the attribute’s name
+!  data_size 	 - indicates the size, in the number of characters, of the attribute
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Link access property list
 !
-! Modifications:  N/A
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
 !
-!----------------------------------------------------------------------
+! SOURCE
   SUBROUTINE h5aget_info_by_name_f(loc_id, obj_name, attr_name, &
        f_corder_valid, corder, cset, data_size, hdferr, lapl_id)
     IMPLICIT NONE
@@ -2907,15 +1271,13 @@ CONTAINS
     INTEGER(HSIZE_T), INTENT(OUT) :: data_size   ! Indicates the size, in the number of characters, of the attribute
     INTEGER, INTENT(OUT) :: hdferr         ! Error code:
                                            ! 0 on success and -1 on failure
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id  ! Link access property list
+!*****
     INTEGER :: corder_valid
     INTEGER(SIZE_T)  :: obj_namelen
     INTEGER(SIZE_T)  :: attr_namelen
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id  ! Link access property list
     INTEGER(HID_T) :: lapl_id_default
 
-
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5aget_info_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, lapl_id_default, &
             corder_valid, corder, cset, data_size)
@@ -2952,52 +1314,49 @@ CONTAINS
 
   END SUBROUTINE h5aget_info_by_name_f
 
-!----------------------------------------------------------------------
-! Name:	        H5Acreate_by_name_f
 !
-! Purpose:  	Creates an attribute attached to a specified object
+!****s* H5A/h5acreate_by_name_f
 !
-! Inputs:
-!   loc_id   	- Location or object identifier; may be dataset or group
-!   obj_name 	- Name, relative to loc_id, of object that attribute is to be attached to
-!   attr_name   - Attribute name
-!   type_id 	- Attribute datatype identifier
-!   space_id 	- Attribute dataspace identifier
+! NAME
+!  h5acreate_by_name_f
 !
-! Outputs:
-!       attr    - an attribute identifier
-!     hdferr    - error code
-!		       Success:  0
-!		       Failure: -1
-! Optional parameters:
-!   acpl_id 	- Attribute creation property list identifier (Currently not used.)
-!   aapl_id 	- Attribute access property list identifier (Currently not used.)
-!   lapl_id 	- Link access property list
+! PURPOSE
+!  Creates an attribute attached to a specified object
 !
-! Programmer:	M. S. Breitenfeld
-!		February, 2008
+! INPUTS
+!  loc_id 	 - Location or object identifier; may be dataset or group
+!  obj_name 	 - Name, relative to loc_id, of object that attribute is to be attached to
+!  attr_name 	 - Attribute name
+!  type_id 	 - Attribute datatype identifier
+!  space_id 	 - Attribute dataspace identifier
 !
-! Modifications:  N/A
+! OUTPUTS
+!  attr 	 - an attribute identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  acpl_id 	 - Attribute creation property list identifier (Currently not used.)
+!  aapl_id 	 - Attribute access property list identifier (Currently not used.)
+!  lapl_id 	 - Link access property list
 !
-!----------------------------------------------------------------------
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February, 2008
+! SOURCE
   SUBROUTINE h5acreate_by_name_f(loc_id, obj_name, attr_name, type_id, space_id, attr, hdferr, &
        acpl_id, aapl_id, lapl_id)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: loc_id    ! Object identifier
-    CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Name of object to which attribute is attached
-    CHARACTER(LEN=*), INTENT(IN) :: attr_name ! Attribute name
-
-    INTEGER(HID_T), INTENT(IN) :: type_id  ! Attribute datatype identifier
-    INTEGER(HID_T), INTENT(IN) :: space_id ! Attribute dataspace identifier
-
-    INTEGER(HID_T), INTENT(OUT) :: attr ! an attribute identifier
-    INTEGER, INTENT(OUT) :: hdferr         ! Error code:
-                                           ! 0 on success and -1 on failure
-
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: acpl_id ! Attribute creation property list identifier (Currently not used.)
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: aapl_id ! Attribute access property list identifier (Currently not used.)
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list
-
+    INTEGER(HID_T),   INTENT(IN)  :: loc_id
+    CHARACTER(LEN=*), INTENT(IN)  :: obj_name
+    CHARACTER(LEN=*), INTENT(IN)  :: attr_name
+    INTEGER(HID_T),   INTENT(IN)  :: type_id
+    INTEGER(HID_T),   INTENT(IN)  :: space_id
+    INTEGER(HID_T),   INTENT(OUT) :: attr
+    INTEGER,          INTENT(OUT) :: hdferr
+
+    INTEGER(HID_T),   INTENT(IN), OPTIONAL :: acpl_id
+    INTEGER(HID_T),   INTENT(IN), OPTIONAL :: aapl_id
+    INTEGER(HID_T),   INTENT(IN), OPTIONAL :: lapl_id
+!*****
     INTEGER(SIZE_T)  :: obj_namelen
     INTEGER(SIZE_T)  :: attr_namelen
 
@@ -3005,8 +1364,6 @@ CONTAINS
     INTEGER(HID_T) :: aapl_id_default
     INTEGER(HID_T) :: lapl_id_default
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5acreate_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, &
             type_id, space_id, acpl_id_default, aapl_id_default, lapl_id_default, attr)
@@ -3045,41 +1402,39 @@ CONTAINS
             type_id, space_id, acpl_id_default, aapl_id_default, lapl_id_default, attr)
   END SUBROUTINE h5acreate_by_name_f
 
-!----------------------------------------------------------------------
-! Name:	        H5Aexists_f
 !
-! Purpose:  	Determines whether an attribute with a given name exists on an object
+!****s* H5A/H5Aexists_f
+!
+! NAME
+!  H5Aexists_f
 !
-! Inputs:
-!                 obj_id - Object identifier
-!              attr_name - Attribute name
+! PURPOSE
+!  Determines whether an attribute with a given name exists on an object
 !
-! Outputs:
-!       attr_exists  - attribute exists status
-!            hdferr  - error code
-!		         Success:  0
-!		         Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+!  obj_id 	 - Object identifier
+!  attr_name 	 - Attribute name
 !
-! Programmer:	M. S. Breitenfeld
-!		February, 2008
+! OUTPUTS
+!  attr_exists 	 - attribute exists status
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Modifications:  N/A
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February, 2008
 !
-!----------------------------------------------------------------------
+! SOURCE
   SUBROUTINE h5aexists_f(obj_id, attr_name, attr_exists, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: obj_id     ! Object identifier
+    INTEGER(HID_T), INTENT(IN) :: obj_id      ! Object identifier
     CHARACTER(LEN=*), INTENT(IN) :: attr_name ! Attribute name
-    LOGICAL, INTENT(OUT) :: attr_exists ! .TRUE. if exists, .FALSE. otherwise
-    INTEGER, INTENT(OUT) :: hdferr         ! Error code:
-                                           ! 0 on success and -1 on failure
+    LOGICAL, INTENT(OUT) :: attr_exists  ! .TRUE. if exists, .FALSE. otherwise
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code:
+                                         ! 0 on success and -1 on failure
+!*****
     INTEGER(HID_T) :: attr_exists_c
     INTEGER(SIZE_T) :: attr_namelen
-!
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+
     INTERFACE
        INTEGER FUNCTION h5aexists_c(obj_id, attr_name, attr_namelen, attr_exists_c)
          USE H5GLOBAL
@@ -3103,55 +1458,55 @@ CONTAINS
 
   END SUBROUTINE h5aexists_f
 
-!----------------------------------------------------------------------
-! Name:	        H5Aexists_by_name_f
 !
-! Purpose:  	Determines whether an attribute with a given name exists on an object
+!****s* H5A/H5Aexists_by_name_f
+!
+! NAME
+!  H5Aexists_by_name_f
 !
-! Inputs:
-!     loc_id - Location identifier
-!   obj_name - Object name either relative to loc_id, absolute from the file’s root group, or '.' (a dot)
-!  attr_name - Attribute name
+! PURPOSE
+!  Determines whether an attribute with a given name exists on an object
 !
-! Outputs:
-!       attr_exists  - attribute exists status
-!            hdferr  - error code
-!		         Success:  0
-!		         Failure: -1
-! Optional parameters:
-!    lapl_id - Link access property list identifier
+! INPUTS
+!  loc_id 	 - Location identifier
+!  obj_name 	 - Object name either relative to loc_id, absolute from the file’s root group, or '.' (a dot)
+!  attr_name 	 - Attribute name
 !
-! Programmer:	M. S. Breitenfeld
-!		February, 2008
+! OUTPUTS
+!  attr_exists 	 - attribute exists status
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Link access property list identifier
 !
-! Modifications:  N/A
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February, 2008
 !
-!----------------------------------------------------------------------
+! SOURCE
   SUBROUTINE h5aexists_by_name_f(loc_id, obj_name, attr_name, attr_exists, hdferr, lapl_id)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: loc_id    ! Location identifier
+    INTEGER(HID_T), INTENT(IN) :: loc_id     ! Location identifier
     CHARACTER(LEN=*), INTENT(IN) :: obj_name ! Object name either relative to loc_id,
                                              ! absolute from the file’s root group, or '.'
     CHARACTER(LEN=*), INTENT(IN) :: attr_name ! Attribute name
     LOGICAL, INTENT(OUT) :: attr_exists ! .TRUE. if exists, .FALSE. otherwise
-    INTEGER, INTENT(OUT) :: hdferr         ! Error code:
-                                           ! 0 on success and -1 on failure
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code:
+                                        ! 0 on success and -1 on failure
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier
+!*****
     INTEGER :: attr_exists_c
     INTEGER(SIZE_T)  :: obj_namelen
     INTEGER(SIZE_T)  :: attr_namelen
 
     INTEGER(HID_T) :: lapl_id_default
-!
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+
     INTERFACE
        INTEGER FUNCTION h5aexists_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, lapl_id_default, attr_exists_c)
          USE H5GLOBAL
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
          !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AEXISTS_BY_NAME_C'::h5aexists_by_name_c
          !DEC$ENDIF
-         !DEC$ATTRIBUTES reference :: obj_name, attr_name
+         !DEC$ATTRIBUTES reference :: obj_name, attr_name 
          INTEGER(HID_T), INTENT(IN) :: loc_id
          CHARACTER(LEN=*), INTENT(IN) :: obj_name
          INTEGER(SIZE_T), INTENT(IN) :: obj_namelen
@@ -3174,31 +1529,31 @@ CONTAINS
     IF(attr_exists_c.GT.0) attr_exists = .TRUE.
 
   END SUBROUTINE h5aexists_by_name_f
-!----------------------------------------------------------------------
-! Name:	        H5Aopen_by_name_f
 !
-! Purpose:  	Opens an attribute for an object by object name and attribute name.
+!****s* H5A/H5Aopen_by_name_f
 !
-! Inputs:
-!     loc_id - Location from which to find object to which attribute is attached
-!   obj_name - Object name either relative to loc_id, absolute from the file’s root group, or '.' (a dot)
-!  attr_name - Attribute name
+! NAME
+!  H5Aopen_by_name_f
 !
-! Outputs:
-!       attr_id  - attribute identifier
-!        hdferr  - error code
-!		         Success:  0
-!		         Failure: -1
-! Optional parameters:
-!    aapl_id - Attribute access property list (Currently unused; should be passed in as H5P_DEFAULT.)
-!    lapl_id - Link access property list identifier
+! PURPOSE
+!  Opens an attribute for an object by object name and attribute name.
 !
-! Programmer:	M. S. Breitenfeld
-!		February, 2008
+! INPUTS
+!  loc_id 	 - Location from which to find object to which attribute is attached
+!  obj_name 	 - Object name either relative to loc_id, absolute from the file’s root group, or '.' (a dot)
+!  attr_name 	 - Attribute name
 !
-! Modifications:  N/A
+! OUTPUTS
+!  attr_id 	 - attribute identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  aapl_id 	 - Attribute access property list (Currently unused; should be passed in as H5P_DEFAULT.)
+!  lapl_id 	 - Link access property list identifier
 !
-!----------------------------------------------------------------------
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February, 2008
+! SOURCE
   SUBROUTINE h5aopen_by_name_f(loc_id, obj_name, attr_name, attr_id, hdferr, aapl_id, lapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id    ! Location identifier
@@ -3211,15 +1566,13 @@ CONTAINS
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: aapl_id ! Attribute access property list
                                                     ! (Currently unused; should be passed in as H5P_DEFAULT_F)
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier
-
+!*****
     INTEGER(HID_T) :: aapl_id_default
     INTEGER(HID_T) :: lapl_id_default
 
     INTEGER(SIZE_T) :: obj_namelen
     INTEGER(SIZE_T) :: attr_namelen
-!
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+
     INTERFACE
        INTEGER FUNCTION h5aopen_by_name_c(loc_id, obj_name, obj_namelen, attr_name, attr_namelen, &
             aapl_id_default, lapl_id_default, attr_id)
@@ -3252,28 +1605,33 @@ CONTAINS
 
   END SUBROUTINE h5aopen_by_name_f
 
-!----------------------------------------------------------------------
-! Name:		h5arename_f
 !
-! Purpose: 	Renames an attribute
+!****s* H5A/h5arename_f
 !
-! Inputs:
-!		loc_id        - Location or object identifier; may be dataset or group
-!               old_attr_name - Prior attribute name
-!               new_attr_name - New attribute name
+! NAME
+!  h5arename_f
 !
-! Outputs:
-!		hdferr:	      - error code
-!				 	Success:  0
-!				 	Failure: -1
+! PURPOSE
+!  Renames an attribute
 !
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
+! INPUTS
+!  loc_id 	 - Location or object identifier; may be dataset or group
+!  old_attr_name - Prior attribute name
+!  new_attr_name - New attribute name
+!
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+!
+! HISTORY
+!  N/A
 !
-! Modifications: N/A
 !
-!----------------------------------------------------------------------
 
+! SOURCE
   SUBROUTINE h5arename_f(loc_id, old_attr_name, new_attr_name, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id    ! Object identifier
@@ -3281,11 +1639,10 @@ CONTAINS
     CHARACTER(LEN=*), INTENT(IN) :: new_attr_name ! New attribute name
     INTEGER, INTENT(OUT) :: hdferr       ! Error code:
                                          ! 0 on success and -1 on failure
+!*****
     INTEGER(SIZE_T) :: old_attr_namelen
     INTEGER(SIZE_T) :: new_attr_namelen
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5arename_c(loc_id, &
             old_attr_name, old_attr_namelen, new_attr_name, new_attr_namelen)
diff --git a/fortran/src/H5Aff_F03.f90 b/fortran/src/H5Aff_F03.f90
new file mode 100644
index 0000000..b9e6c92
--- /dev/null
+++ b/fortran/src/H5Aff_F03.f90
@@ -0,0 +1,1274 @@
+!****h* ROBODoc/H5A (F03)
+! NAME
+!  H5A_PROVISIONAL
+!
+! FILE
+!  src/fortran/src/H5Aff_F03.f90
+!
+! PURPOSE
+!  This file contains Fortran 90 and Fortran 2003 interfaces for H5A functions.
+!  It contains the same functions as H5Aff_F90.f90 but includes the
+!  Fortran 2003 functions and the interface listings. This file will be compiled
+!  instead of H5Aff_F90.f90 if Fortran 2003 functions are enabled.
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!
+!  (A) C_LOC and character strings according to the Fortran 2003 standard:
+!
+!  15.1.2.5 C_LOC(X)
+!
+!  Argument. X shall either
+!
+!  (1) have interoperable type and type parameters and be
+!    (a) a variable that has the TARGET attribute and is interoperable,
+!    (b) an allocated allocatable variable that has the TARGET attribute
+!        and is not an array of zero size, or
+!    (c) an associated scalar pointer, or
+!  (2) be a nonpolymorphic scalar, have no length type parameters, and be
+!    (a) a nonallocatable, nonpointer variable that has the TARGET attribute,
+!    (b) an allocated allocatable variable that has the TARGET attribute, or
+!    (c) an associated pointer.
+!
+!  - When X is a character, for interoperability the standard is:
+!
+!  15.2.1 Interoperability of intrinsic types
+!
+!  ...if the type is character, interoperability also requires that the length type parameter
+!  be omitted or be specified by an initialization expression whose value is one.
+!
+!  THEREFORE compilers that have not extended the standard  require
+!
+!  CHARACTER(LEN=1), TARGET :: chr
+!  or
+!  CHARACTER, TARGET :: chr
+!
+!  (B)
+!                         *** IMPORTANT ***
+!  If you add a new H5A function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!
+!*****
+
+MODULE H5A_PROVISIONAL
+
+  USE H5GLOBAL
+!
+!  On Windows there are no big (integer*8) integers, so overloading
+!  for bug #670 does not work. I have to use DEC compilation directives to make
+!  Windows DEC Visual Fortran and OSF compilers happy and do right things.
+!  05/01/02 EP
+!
+  INTERFACE h5awrite_f
+     MODULE PROCEDURE h5awrite_integer_scalar
+     MODULE PROCEDURE h5awrite_integer_1
+     MODULE PROCEDURE h5awrite_integer_2
+     MODULE PROCEDURE h5awrite_integer_3
+     MODULE PROCEDURE h5awrite_integer_4
+     MODULE PROCEDURE h5awrite_integer_5
+     MODULE PROCEDURE h5awrite_integer_6
+     MODULE PROCEDURE h5awrite_integer_7
+     MODULE PROCEDURE h5awrite_char_scalar
+     MODULE PROCEDURE h5awrite_char_1
+     MODULE PROCEDURE h5awrite_char_2
+     MODULE PROCEDURE h5awrite_char_3
+     MODULE PROCEDURE h5awrite_char_4
+     MODULE PROCEDURE h5awrite_char_5
+     MODULE PROCEDURE h5awrite_char_6
+     MODULE PROCEDURE h5awrite_char_7
+     MODULE PROCEDURE h5awrite_real_scalar
+     MODULE PROCEDURE h5awrite_real_1
+     MODULE PROCEDURE h5awrite_real_2
+     MODULE PROCEDURE h5awrite_real_3
+     MODULE PROCEDURE h5awrite_real_4
+     MODULE PROCEDURE h5awrite_real_5
+     MODULE PROCEDURE h5awrite_real_6
+     MODULE PROCEDURE h5awrite_real_7
+     ! This is the preferred way to call h5awrite
+     ! by passing an address
+     MODULE PROCEDURE h5awrite_ptr
+
+  END INTERFACE
+
+  INTERFACE h5aread_f
+
+     MODULE PROCEDURE h5aread_integer_scalar
+     MODULE PROCEDURE h5aread_integer_1
+     MODULE PROCEDURE h5aread_integer_2
+     MODULE PROCEDURE h5aread_integer_3
+     MODULE PROCEDURE h5aread_integer_4
+     MODULE PROCEDURE h5aread_integer_5
+     MODULE PROCEDURE h5aread_integer_6
+     MODULE PROCEDURE h5aread_integer_7
+     MODULE PROCEDURE h5aread_char_scalar
+     MODULE PROCEDURE h5aread_char_1
+     MODULE PROCEDURE h5aread_char_2
+     MODULE PROCEDURE h5aread_char_3
+     MODULE PROCEDURE h5aread_char_4
+     MODULE PROCEDURE h5aread_char_5
+     MODULE PROCEDURE h5aread_char_6
+     MODULE PROCEDURE h5aread_char_7
+     MODULE PROCEDURE h5aread_real_scalar
+     MODULE PROCEDURE h5aread_real_1
+     MODULE PROCEDURE h5aread_real_2
+     MODULE PROCEDURE h5aread_real_3
+     MODULE PROCEDURE h5aread_real_4
+     MODULE PROCEDURE h5aread_real_5
+     MODULE PROCEDURE h5aread_real_6
+     MODULE PROCEDURE h5aread_real_7
+
+     ! This is the preferred way to call h5aread
+     ! by passing an address
+     MODULE PROCEDURE h5aread_ptr
+
+  END INTERFACE
+
+!  Interface for the function used to pass the C pointer of the buffer
+!  to the C H5Awrite routine
+
+  INTERFACE
+     INTEGER FUNCTION h5awrite_f_c(attr_id, mem_type_id, buf)
+       USE H5GLOBAL
+       USE, INTRINSIC :: ISO_C_BINDING
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_F_C'::h5awrite_f_c
+       !DEC$ENDIF
+       INTEGER(HID_T), INTENT(IN) :: attr_id
+       INTEGER(HID_T), INTENT(IN) :: mem_type_id
+       TYPE(C_PTR), VALUE :: buf
+     END FUNCTION h5awrite_f_c
+  END INTERFACE
+
+!  Interface for the function used to pass the C pointer of the buffer
+!  to the C H5Aread routine
+
+  INTERFACE
+     INTEGER FUNCTION h5aread_f_c(attr_id, mem_type_id, buf)
+       USE H5GLOBAL
+       USE, INTRINSIC :: ISO_C_BINDING
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_F_C'::h5aread_f_c
+       !DEC$ENDIF
+       INTEGER(HID_T), INTENT(IN) :: attr_id
+       INTEGER(HID_T), INTENT(IN) :: mem_type_id
+       TYPE(C_PTR), VALUE :: buf
+     END FUNCTION h5aread_f_c
+  END INTERFACE
+
+CONTAINS
+
+!****s* H5A (F03)/h5awrite_f_F90
+!
+! NAME
+!  h5awrite_f_F90
+!
+! PURPOSE
+!  Writes an attribute.
+!
+! Inputs:
+!  attr_id     - Attribute identifier
+!  memtype_id  - Attribute datatype identifier  (in memory)
+!  dims        - Array to hold corresponding dimension sizes of data buffer buf;
+!                dim(k) has value of the k-th dimension of buffer buf;
+!                values are ignored if buf is a scalar
+!  buf 	       - Data buffer; may be a scalar or an array
+!
+! Outputs:
+!  hdferr      - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+!  dims parameter was added to make code portable;
+!  Aprile 4, 2001
+!
+!  Changed buf intent to INOUT to be consistant
+!  with how the C functions handles it. The pg
+!  compiler will return 0 if a buf value is not set.
+!  February, 2008
+!
+! NOTES
+!  This function is overloaded to write INTEGER,
+!  REAL, DOUBLE PRECISION and CHARACTER buffers
+!  up to 7 dimensions.
+!
+! Fortran90 Interface:
+!!  SUBROUTINE h5awrite_f(attr_id, memtype_id, buf, dims, hdferr) 
+!!    INTEGER(HID_T)  , INTENT(IN)               :: attr_id
+!!    INTEGER(HID_T)  , INTENT(IN)               :: memtype_id
+!!    TYPE            , INTENT(IN)               :: buf
+!!    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+!!    INTEGER         , INTENT(OUT)              :: hdferr
+!*****
+
+
+  SUBROUTINE h5awrite_integer_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), TARGET :: buf                 ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr                     ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_integer_scalar
+
+  SUBROUTINE h5awrite_integer_1(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN) , &
+         DIMENSION(dims(1)), TARGET :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+    
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5awrite_integer_1
+
+
+  SUBROUTINE h5awrite_integer_2(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN) , &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf
+                                            ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_integer_2
+
+  SUBROUTINE h5awrite_integer_3(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_integer_3
+
+
+  SUBROUTINE h5awrite_integer_4(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_integer_4
+
+
+  SUBROUTINE h5awrite_integer_5(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_integer_5
+
+
+  SUBROUTINE h5awrite_integer_6(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5awrite_integer_6
+
+
+  SUBROUTINE h5awrite_integer_7(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), &
+         TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_integer_7
+
+
+  SUBROUTINE h5awrite_real_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), TARGET :: buf          ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5awrite_real_scalar
+
+  SUBROUTINE h5awrite_real_1(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1)), TARGET :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_real_1
+
+
+  SUBROUTINE h5awrite_real_2(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf
+    ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_real_2
+
+
+  SUBROUTINE h5awrite_real_3(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf
+    ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5awrite_real_3
+
+
+  SUBROUTINE h5awrite_real_4(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf
+    ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5awrite_real_4
+
+
+  SUBROUTINE h5awrite_real_5(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf
+    ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5awrite_real_5
+
+
+  SUBROUTINE h5awrite_real_6(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf
+    ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5awrite_real_6
+
+
+  SUBROUTINE h5awrite_real_7(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5awrite_real_7
+
+  SUBROUTINE h5awrite_char_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id               ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id            ! Attribute datatype
+                                                        !  identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims  ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN) :: buf                 ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr                      ! Error code
+
+    CALL h5awrite_char_scalar_fix(attr_id, memtype_id, buf, LEN(buf), dims, hdferr)
+
+  END SUBROUTINE h5awrite_char_scalar
+
+  SUBROUTINE h5awrite_char_scalar_fix(attr_id, memtype_id, buf, buf_len, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id               ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id            ! Attribute datatype
+                                                        !  identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims  ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN)  :: buf_len
+    CHARACTER(LEN=buf_len), INTENT(IN), TARGET :: buf   ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr                      ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1:1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_char_scalar_fix
+
+  SUBROUTINE h5awrite_char_1(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), DIMENSION(dims(1)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1)(1:1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_char_1
+
+  SUBROUTINE h5awrite_char_2(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims  ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1)(1:1))
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_char_2
+
+  SUBROUTINE h5awrite_char_3(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1)(1:1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_char_3
+
+  SUBROUTINE h5awrite_char_4(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1)(1:1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_char_4
+
+  SUBROUTINE h5awrite_char_5(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1)(1:1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_char_5
+
+
+  SUBROUTINE h5awrite_char_6(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1)(1:1))
+
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_char_6
+
+  SUBROUTINE h5awrite_char_7(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1)(1:1))
+    hdferr = h5awrite_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5awrite_char_7
+
+!****s* H5A (F03)/h5awrite_f_F03
+!
+! NAME
+!  h5awrite_f_F03
+!
+! PURPOSE
+!  Writes an attribute.
+!
+! Inputs:
+!  attr_id     - Attribute identifier
+!  memtype_id  - Attribute datatype identifier  (in memory)
+!  buf 	       - Data buffer; may be a scalar or an array
+!
+! Outputs:
+!  hdferr      - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+! NOTES
+!  This function is overloaded to write INTEGER,
+!  REAL, DOUBLE PRECISION and CHARACTER buffers
+!  up to 7 dimensions.
+!
+! Fortran2003 Interface:
+!!  SUBROUTINE h5awrite_f(attr_id, memtype_id, buf, hdferr) 
+!!    INTEGER(HID_T)  , INTENT(IN)  :: attr_id
+!!    INTEGER(HID_T)  , INTENT(IN)  :: memtype_id
+!!    TYPE(C_PTR)     , INTENT(IN)  :: buf
+!!    INTEGER         , INTENT(OUT) :: hdferr
+!*****
+
+  SUBROUTINE h5awrite_ptr(attr_id, mem_type_id, buf, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id     ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    TYPE(C_PTR), INTENT(IN), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr            ! Error code
+
+    hdferr = h5awrite_f_c(attr_id, mem_type_id, buf)
+
+  END SUBROUTINE h5awrite_ptr
+
+!****s* H5A (F03)/h5aread_f_F90
+!
+! NAME
+!  h5aread_f_F90
+!
+! PURPOSE
+!  Reads an attribute.
+!
+! Inputs:
+!  attr_id     - Attribute identifier
+!  memtype_id  - Attribute datatype identifier  (in memory)
+!  dims        - Array to hold corresponding dimension sizes of data buffer buf;
+!                dim(k) has value of the k-th dimension of buffer buf;
+!                values are ignored if buf is a scalar
+!
+! Outputs:
+!  buf 	       - Data buffer; may be a scalar or an array
+!  hdferr      - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+!  dims parameter was added to make code portable;
+!  Aprile 4, 2001
+!
+!  Changed buf intent to INOUT to be consistant
+!  with how the C functions handles it. The pg
+!  compiler will return 0 if a buf value is not set.
+!  February, 2008
+!
+! NOTES
+!  This function is overloaded to write INTEGER,
+!  REAL, DOUBLE PRECISION and CHARACTER buffers
+!  up to 7 dimensions.
+! Fortran90 Interface:
+!!  SUBROUTINE h5aread_f(attr_id, memtype_id, buf, dims, hdferr) 
+!!    INTEGER(HID_T)  , INTENT(IN)               :: attr_id
+!!    INTEGER(HID_T)  , INTENT(IN)               :: memtype_id
+!!    TYPE            , INTENT(INOUT)            :: buf
+!!    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+!!    INTEGER         , INTENT(OUT)              :: hdferr
+!*****
+  SUBROUTINE h5aread_integer_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), TARGET :: buf              ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code 
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_integer_scalar
+
+  SUBROUTINE h5aread_integer_1(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), DIMENSION(dims(1)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_integer_1
+
+
+  SUBROUTINE h5aread_integer_2(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT),DIMENSION(dims(1),dims(2)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_integer_2
+
+
+  SUBROUTINE h5aread_integer_3(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_integer_3
+
+
+  SUBROUTINE h5aread_integer_4(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_integer_4
+
+
+  SUBROUTINE h5aread_integer_5(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_integer_5
+
+
+  SUBROUTINE h5aread_integer_6(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_integer_6
+
+
+  SUBROUTINE h5aread_integer_7(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_integer_7
+
+
+  SUBROUTINE h5aread_real_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), TARGET :: buf                 ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_real_scalar
+
+  SUBROUTINE h5aread_real_1(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1)), TARGET :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_real_1
+
+
+  SUBROUTINE h5aread_real_2(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_real_2
+
+
+  SUBROUTINE h5aread_real_3(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf
+                                            ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_real_3
+
+
+  SUBROUTINE h5aread_real_4(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_real_4
+
+
+  SUBROUTINE h5aread_real_5(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_real_5
+
+
+  SUBROUTINE h5aread_real_6(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_real_6
+
+
+  SUBROUTINE h5aread_real_7(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+  END SUBROUTINE h5aread_real_7
+
+  SUBROUTINE h5aread_char_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+
+    CALL h5aread_char_scalar_fix(attr_id, memtype_id, buf, LEN(buf), dims, hdferr)
+
+  END SUBROUTINE h5aread_char_scalar
+
+  SUBROUTINE h5aread_char_scalar_fix(attr_id, memtype_id, buf, buf_len, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN)  :: buf_len
+    CHARACTER(LEN=buf_len), INTENT(INOUT), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1:1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5aread_char_scalar_fix
+
+  SUBROUTINE h5aread_char_1(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1)), TARGET :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1)(1:1))
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5aread_char_1
+
+
+  SUBROUTINE h5aread_char_2(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1)(1:1))
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5aread_char_2
+
+
+  SUBROUTINE h5aread_char_3(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1)(1:1))
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5aread_char_3
+
+  SUBROUTINE h5aread_char_4(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1)(1:1))
+
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5aread_char_4
+
+  SUBROUTINE h5aread_char_5(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1)(1:1))
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5aread_char_5
+
+
+  SUBROUTINE h5aread_char_6(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1)(1:1))
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5aread_char_6
+
+
+  SUBROUTINE h5aread_char_7(attr_id, memtype_id, buf, dims, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1)(1:1))
+    hdferr = h5aread_f_c(attr_id, memtype_id, f_ptr)
+
+  END SUBROUTINE h5aread_char_7
+
+
+!****s* H5A (F03)/h5aread_f_F03
+!
+! NAME
+!  h5aread_f_F03
+!
+! PURPOSE
+!  Reads an attribute.
+!
+! Inputs:
+!  attr_id     - Attribute identifier
+!  memtype_id  - Attribute datatype identifier  (in memory)
+!
+! Outputs:
+!  buf 	       - Data buffer; may be a scalar or an array
+!  hdferr      - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+!  dims parameter was added to make code portable;
+!  Aprile 4, 2001
+!
+!  Changed buf intent to INOUT to be consistant
+!  with how the C functions handles it. The pg
+!  compiler will return 0 if a buf value is not set.
+!  February, 2008
+!
+! NOTES
+!  This function is overloaded to write INTEGER,
+!  REAL, DOUBLE PRECISION and CHARACTER buffers
+!  up to 7 dimensions.
+! Fortran2003 Interface:
+!!  SUBROUTINE h5aread_f(attr_id, memtype_id, buf, hdferr) 
+!!    INTEGER(HID_T)  , INTENT(IN)    :: attr_id
+!!    INTEGER(HID_T)  , INTENT(IN)    :: memtype_id
+!!    TYPE(C_PTR)     , INTENT(INOUT) :: buf
+!!    INTEGER         , INTENT(OUT)   :: hdferr
+!*****
+
+  SUBROUTINE h5aread_ptr(attr_id, mem_type_id, buf, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id     ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    TYPE(C_PTR), INTENT(INOUT), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr            ! Error code
+
+    hdferr = h5aread_f_c(attr_id, mem_type_id, buf)
+
+  END SUBROUTINE h5aread_ptr
+
+END MODULE H5A_PROVISIONAL
+
+
diff --git a/fortran/src/H5Aff_F90.f90 b/fortran/src/H5Aff_F90.f90
new file mode 100644
index 0000000..7e14f7a
--- /dev/null
+++ b/fortran/src/H5Aff_F90.f90
@@ -0,0 +1,1618 @@
+!****h* ROBODoc/H5A (F90)
+!
+! NAME
+!  H5A_PROVISIONAL
+!
+! FILE
+!  fortran/src/H5Aff_F90.f90
+!
+! PURPOSE
+!
+!  This file contains Fortran 90 interfaces for H5A functions. It contains
+!  the same functions as H5Aff_F03.f90 but excludes the Fortran 2003 functions
+!  and the interface listings. This file will be compiled instead of H5Aff_F03.f90
+!  if Fortran 2003 functions are not enabled.
+!
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5A function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!
+!*****
+
+MODULE H5A_PROVISIONAL
+
+  USE H5GLOBAL
+  !
+  !On Windows there are no big (integer*8) integers, so overloading
+  !for bug #670 does not work. I have to use DEC compilation directives to make
+  !Windows DEC Visual Fortran and OSF compilers happy and do right things.
+  !						05/01/02 EP
+  !
+  INTERFACE h5awrite_f
+
+     MODULE PROCEDURE h5awrite_integer_scalar
+     MODULE PROCEDURE h5awrite_integer_1
+     MODULE PROCEDURE h5awrite_integer_2
+     MODULE PROCEDURE h5awrite_integer_3
+     MODULE PROCEDURE h5awrite_integer_4
+     MODULE PROCEDURE h5awrite_integer_5
+     MODULE PROCEDURE h5awrite_integer_6
+     MODULE PROCEDURE h5awrite_integer_7
+     MODULE PROCEDURE h5awrite_char_scalar
+     MODULE PROCEDURE h5awrite_char_1
+     MODULE PROCEDURE h5awrite_char_2
+     MODULE PROCEDURE h5awrite_char_3
+     MODULE PROCEDURE h5awrite_char_4
+     MODULE PROCEDURE h5awrite_char_5
+     MODULE PROCEDURE h5awrite_char_6
+     MODULE PROCEDURE h5awrite_char_7
+     MODULE PROCEDURE h5awrite_real_scalar
+     MODULE PROCEDURE h5awrite_real_1
+     MODULE PROCEDURE h5awrite_real_2
+     MODULE PROCEDURE h5awrite_real_3
+     MODULE PROCEDURE h5awrite_real_4
+     MODULE PROCEDURE h5awrite_real_5
+     MODULE PROCEDURE h5awrite_real_6
+     MODULE PROCEDURE h5awrite_real_7
+
+  END INTERFACE
+
+  INTERFACE h5aread_f
+
+     MODULE PROCEDURE h5aread_integer_scalar
+     MODULE PROCEDURE h5aread_integer_1
+     MODULE PROCEDURE h5aread_integer_2
+     MODULE PROCEDURE h5aread_integer_3
+     MODULE PROCEDURE h5aread_integer_4
+     MODULE PROCEDURE h5aread_integer_5
+     MODULE PROCEDURE h5aread_integer_6
+     MODULE PROCEDURE h5aread_integer_7
+     MODULE PROCEDURE h5aread_char_scalar
+     MODULE PROCEDURE h5aread_char_1
+     MODULE PROCEDURE h5aread_char_2
+     MODULE PROCEDURE h5aread_char_3
+     MODULE PROCEDURE h5aread_char_4
+     MODULE PROCEDURE h5aread_char_5
+     MODULE PROCEDURE h5aread_char_6
+     MODULE PROCEDURE h5aread_char_7
+     MODULE PROCEDURE h5aread_real_scalar
+     MODULE PROCEDURE h5aread_real_1
+     MODULE PROCEDURE h5aread_real_2
+     MODULE PROCEDURE h5aread_real_3
+     MODULE PROCEDURE h5aread_real_4
+     MODULE PROCEDURE h5aread_real_5
+     MODULE PROCEDURE h5aread_real_6
+     MODULE PROCEDURE h5aread_real_7
+  END INTERFACE
+
+CONTAINS
+
+  SUBROUTINE h5awrite_integer_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims  ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN) :: buf              ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+    INTERFACE
+       INTEGER FUNCTION h5awrite_integer_s_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_S_C'::h5awrite_integer_s_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(IN)::buf
+       END FUNCTION h5awrite_integer_s_c
+    END INTERFACE
+
+    hdferr = h5awrite_integer_s_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_integer_scalar
+
+  SUBROUTINE h5awrite_integer_1(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN) , &
+         DIMENSION(dims(1)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr ! Error code
+    !            INTEGER, EXTERNAL :: h5awrite_integer_1_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_integer_1_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_1_C'::h5awrite_integer_1_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(IN), DIMENSION(dims(1)) :: buf
+       END FUNCTION h5awrite_integer_1_c
+    END INTERFACE
+
+    hdferr = h5awrite_integer_1_c(attr_id, memtype_id, buf, dims)
+
+  END SUBROUTINE h5awrite_integer_1
+
+
+  SUBROUTINE h5awrite_integer_2(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN) , &
+         DIMENSION(dims(1),dims(2)) :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_integer_2_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_integer_2_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_2_C'::h5awrite_integer_2_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5awrite_integer_2_c
+    END INTERFACE
+
+    hdferr = h5awrite_integer_2_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_integer_2
+
+
+  SUBROUTINE h5awrite_integer_3(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_integer_3_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_integer_3_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_3_C'::h5awrite_integer_3_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5awrite_integer_3_c
+    END INTERFACE
+
+    hdferr = h5awrite_integer_3_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_integer_3
+
+
+  SUBROUTINE h5awrite_integer_4(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_integer_4_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_integer_4_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_4_C'::h5awrite_integer_4_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5awrite_integer_4_c
+    END INTERFACE
+
+    hdferr = h5awrite_integer_4_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_integer_4
+
+
+  SUBROUTINE h5awrite_integer_5(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_integer_5_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_integer_5_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_5_C'::h5awrite_integer_5_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(IN), DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5awrite_integer_5_c
+    END INTERFACE
+
+    hdferr = h5awrite_integer_5_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_integer_5
+
+
+  SUBROUTINE h5awrite_integer_6(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_integer_6_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_integer_6_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_6_C'::h5awrite_integer_6_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5awrite_integer_6_c
+    END INTERFACE
+
+    hdferr = h5awrite_integer_6_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_integer_6
+
+
+  SUBROUTINE h5awrite_integer_7(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_integer_7_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_integer_7_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_INTEGER_7_C'::h5awrite_integer_7_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5awrite_integer_7_c
+    END INTERFACE
+
+    hdferr = h5awrite_integer_7_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_integer_7
+
+
+  SUBROUTINE h5awrite_real_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+    REAL, INTENT(IN) :: buf                  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_real_s_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_real_s_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_S_C'::h5awrite_real_s_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(IN)::buf
+       END FUNCTION h5awrite_real_s_c
+    END INTERFACE
+
+    hdferr = h5awrite_real_s_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_real_scalar
+
+  SUBROUTINE h5awrite_real_1(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1)) :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_real_1_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_real_1_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_1_C'::h5awrite_real_1_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1)) :: buf
+       END FUNCTION h5awrite_real_1_c
+    END INTERFACE
+
+    hdferr = h5awrite_real_1_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_real_1
+
+
+  SUBROUTINE h5awrite_real_2(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_real_2_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_real_2_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_2_C'::h5awrite_real_2_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5awrite_real_2_c
+    END INTERFACE
+
+    hdferr = h5awrite_real_2_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_real_2
+
+
+  SUBROUTINE h5awrite_real_3(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_real_3_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_real_3_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_3_C'::h5awrite_real_3_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5awrite_real_3_c
+    END INTERFACE
+
+    hdferr = h5awrite_real_3_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_real_3
+
+
+  SUBROUTINE h5awrite_real_4(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_real_4_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_real_4_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_4_C'::h5awrite_real_4_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5awrite_real_4_c
+    END INTERFACE
+
+    hdferr = h5awrite_real_4_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_real_4
+
+
+  SUBROUTINE h5awrite_real_5(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_real_5_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_real_5_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_5_C'::h5awrite_real_5_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5awrite_real_5_c
+    END INTERFACE
+
+    hdferr = h5awrite_real_5_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_real_5
+
+
+  SUBROUTINE h5awrite_real_6(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_real_6_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_real_6_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_6_C'::h5awrite_real_6_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5awrite_real_6_c
+    END INTERFACE
+
+    hdferr = h5awrite_real_6_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_real_6
+
+
+  SUBROUTINE h5awrite_real_7(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awrite_real_7_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awrite_real_7_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITE_REAL_7_C'::h5awrite_real_7_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5awrite_real_7_c
+    END INTERFACE
+
+    hdferr = h5awrite_real_7_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_real_7
+
+  SUBROUTINE h5awrite_char_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*),INTENT(IN) :: buf
+                                             ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    !            INTEGER, EXTERNAL :: h5awritec_s_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awritec_s_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_S_C'::h5awritec_s_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(IN)::buf
+       END FUNCTION h5awritec_s_c
+    END INTERFACE
+
+    hdferr = h5awritec_s_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_char_scalar
+
+  SUBROUTINE h5awrite_char_1(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr ! Error code
+    !            INTEGER, EXTERNAL :: h5awritec_1_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awritec_1_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_1_C'::h5awritec_1_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(IN), DIMENSION(dims(1))::buf
+       END FUNCTION h5awritec_1_c
+    END INTERFACE
+
+    hdferr = h5awritec_1_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_char_1
+
+
+  SUBROUTINE h5awrite_char_2(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2)) :: buf   ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5awritec_2_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awritec_2_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_2_C'::h5awritec_2_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5awritec_2_c
+    END INTERFACE
+
+    hdferr = h5awritec_2_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_char_2
+
+
+  SUBROUTINE h5awrite_char_3(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr ! Error code
+    !            INTEGER, EXTERNAL :: h5awritec_3_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awritec_3_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_3_C'::h5awritec_3_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5awritec_3_c
+    END INTERFACE
+
+    hdferr = h5awritec_3_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_char_3
+
+
+  SUBROUTINE h5awrite_char_4(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    !            INTEGER, EXTERNAL :: h5awritec_4_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awritec_4_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_4_C'::h5awritec_4_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5awritec_4_c
+    END INTERFACE
+
+    hdferr = h5awritec_4_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_char_4
+
+
+  SUBROUTINE h5awrite_char_5(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    !            INTEGER, EXTERNAL :: h5awritec_5_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awritec_5_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_5_C'::h5awritec_5_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5awritec_5_c
+    END INTERFACE
+
+    hdferr = h5awritec_5_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_char_5
+
+
+  SUBROUTINE h5awrite_char_6(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    !            INTEGER, EXTERNAL :: h5awritec_6_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awritec_6_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_6_C'::h5awritec_6_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5awritec_6_c
+    END INTERFACE
+
+    hdferr = h5awritec_6_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_char_6
+
+
+  SUBROUTINE h5awrite_char_7(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    !            INTEGER, EXTERNAL :: h5awritec_7_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5awritec_7_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AWRITEC_7_C'::h5awritec_7_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5awritec_7_c
+    END INTERFACE
+
+    hdferr = h5awritec_7_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5awrite_char_7
+
+!
+! NAME
+!  h5aread_f
+!
+! PURPOSE
+!  Reads an attribute.
+!
+! INPUTS
+!		attr_id		- attribute identifier
+!		memtype_id	- attribute memory type identifier
+!		dims		- 1D array of size 7, stores sizes of the
+!				- buf array dimensions.
+! OUTPUTS
+!		buf		- buffer to read attribute data in
+!		hdferr:		- error code
+!				 	Success:  0
+!				 	Failure: -1
+! OPTIONAL PARAMETERS
+!   NONE
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!
+!  Explicit Fortran interfaces are added for
+!  called C functions (it is needed for Windows
+!  port).  February 27, 2001
+!
+!  dims parameter was added to make code portable;
+!  April 4, 2001
+!
+!  Changed buf intent to INOUT to be consistant
+!  with how the C functions handles it. The pg
+!  compiler will return 0 if a buf value is not set.
+!  February, 2008
+!
+! NOTES
+!  This function is overloaded to write INTEGER,
+!  REAL, DOUBLE PRECISION and CHARACTER buffers
+!  up to 7 dimensions.
+!
+
+  SUBROUTINE h5aread_integer_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT) :: buf            ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_integer_s_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_integer_s_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_S_C'::h5aread_integer_s_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(INOUT)::buf
+       END FUNCTION h5aread_integer_s_c
+    END INTERFACE
+    hdferr = h5aread_integer_s_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_integer_scalar
+
+  SUBROUTINE h5aread_integer_1(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), DIMENSION(dims(1)) :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_integer_1_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_integer_1_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_1_C'::h5aread_integer_1_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(INOUT), DIMENSION(dims(1)) :: buf
+       END FUNCTION h5aread_integer_1_c
+    END INTERFACE
+
+    hdferr = h5aread_integer_1_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_integer_1
+
+
+  SUBROUTINE h5aread_integer_2(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT),DIMENSION(dims(1),dims(2)) :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_integer_2_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_integer_2_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_2_C'::h5aread_integer_2_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(INOUT), DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5aread_integer_2_c
+    END INTERFACE
+
+    hdferr = h5aread_integer_2_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_integer_2
+
+
+  SUBROUTINE h5aread_integer_3(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_integer_3_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_integer_3_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_3_C'::h5aread_integer_3_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5aread_integer_3_c
+    END INTERFACE
+
+    hdferr = h5aread_integer_3_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_integer_3
+
+
+  SUBROUTINE h5aread_integer_4(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf ! Attribute data
+    ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_integer_4_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_integer_4_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_4_C'::h5aread_integer_4_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5aread_integer_4_c
+    END INTERFACE
+
+    hdferr = h5aread_integer_4_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_integer_4
+
+
+  SUBROUTINE h5aread_integer_5(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_integer_5_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_integer_5_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_5_C'::h5aread_integer_5_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5aread_integer_5_c
+    END INTERFACE
+
+    hdferr = h5aread_integer_5_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_integer_5
+
+
+  SUBROUTINE h5aread_integer_6(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_integer_6_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_integer_6_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_6_C'::h5aread_integer_6_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5aread_integer_6_c
+    END INTERFACE
+
+    hdferr = h5aread_integer_6_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_integer_6
+
+
+  SUBROUTINE h5aread_integer_7(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_integer_7_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_integer_7_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_INTEGER_7_C'::h5aread_integer_7_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5aread_integer_7_c
+    END INTERFACE
+
+    hdferr = h5aread_integer_7_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_integer_7
+
+
+  SUBROUTINE h5aread_real_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT) :: buf               ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_real_s_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_real_s_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_S_C'::h5aread_real_s_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(INOUT)::buf
+       END FUNCTION h5aread_real_s_c
+    END INTERFACE
+
+    hdferr = h5aread_real_s_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_real_scalar
+
+  SUBROUTINE h5aread_real_1(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_real_1_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_real_1_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_1_C'::h5aread_real_1_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1)) :: buf
+       END FUNCTION h5aread_real_1_c
+    END INTERFACE
+
+    hdferr = h5aread_real_1_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_real_1
+
+
+  SUBROUTINE h5aread_real_2(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)) :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_real_2_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_real_2_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_2_C'::h5aread_real_2_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5aread_real_2_c
+    END INTERFACE
+
+    hdferr = h5aread_real_2_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_real_2
+
+
+  SUBROUTINE h5aread_real_3(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf  ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr                  ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_real_3_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_real_3_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_3_C'::h5aread_real_3_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5aread_real_3_c
+    END INTERFACE
+
+    hdferr = h5aread_real_3_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_real_3
+
+
+  SUBROUTINE h5aread_real_4(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_real_4_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_real_4_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_4_C'::h5aread_real_4_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims       ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5aread_real_4_c
+    END INTERFACE
+
+    hdferr = h5aread_real_4_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_real_4
+
+
+  SUBROUTINE h5aread_real_5(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_real_5_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_real_5_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_5_C'::h5aread_real_5_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5aread_real_5_c
+    END INTERFACE
+
+    hdferr = h5aread_real_5_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_real_5
+
+
+  SUBROUTINE h5aread_real_6(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_real_6_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_real_6_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_6_C'::h5aread_real_6_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5aread_real_6_c
+    END INTERFACE
+
+    hdferr = h5aread_real_6_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_real_6
+
+
+  SUBROUTINE h5aread_real_7(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5aread_real_7_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5aread_real_7_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREAD_REAL_7_C'::h5aread_real_7_c
+         !DEC$ENDIF
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5aread_real_7_c
+    END INTERFACE
+
+    hdferr = h5aread_real_7_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_real_7
+
+  SUBROUTINE h5aread_char_scalar(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT) :: buf
+    ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5areadc_s_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5areadc_s_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_S_C'::h5areadc_s_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(INOUT) :: buf
+       END FUNCTION h5areadc_s_c
+    END INTERFACE
+
+    hdferr = h5areadc_s_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_char_scalar
+
+  SUBROUTINE h5aread_char_1(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr ! Error code
+
+    !            INTEGER, EXTERNAL :: h5areadc_1_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5areadc_1_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_1_C'::h5areadc_1_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1)) :: buf
+       END FUNCTION h5areadc_1_c
+    END INTERFACE
+
+    hdferr = h5areadc_1_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_char_1
+
+
+  SUBROUTINE h5aread_char_2(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr ! Error code
+
+    !            INTEGER, EXTERNAL :: h5areadc_2_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5areadc_2_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_2_C'::h5areadc_2_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5areadc_2_c
+    END INTERFACE
+
+    hdferr = h5areadc_2_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_char_2
+
+
+  SUBROUTINE h5aread_char_3(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5areadc_3_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5areadc_3_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_3_C'::h5areadc_3_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5areadc_3_c
+    END INTERFACE
+
+    hdferr = h5areadc_3_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_char_3
+
+
+  SUBROUTINE h5aread_char_4(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5areadc_4_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5areadc_4_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_4_C'::h5areadc_4_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5areadc_4_c
+    END INTERFACE
+
+    hdferr = h5areadc_4_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_char_4
+
+
+  SUBROUTINE h5aread_char_5(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+    ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5areadc_5_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5areadc_5_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_5_C'::h5areadc_5_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5areadc_5_c
+    END INTERFACE
+
+    hdferr = h5areadc_5_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_char_5
+
+
+  SUBROUTINE h5aread_char_6(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5areadc_6_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5areadc_6_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_6_C'::h5areadc_6_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5areadc_6_c
+    END INTERFACE
+
+    hdferr = h5areadc_6_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_char_6
+
+
+  SUBROUTINE h5aread_char_7(attr_id, memtype_id, buf, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: attr_id    ! Attribute identifier
+    INTEGER(HID_T), INTENT(IN) :: memtype_id ! Attribute datatype
+                                             ! identifier  (in memory)
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf ! Attribute data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+
+    !            INTEGER, EXTERNAL :: h5areadc_7_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5areadc_7_c(attr_id, memtype_id, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5AREADC_7_C'::h5areadc_7_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims ! Array to story buf dimension sizes
+         INTEGER(HID_T), INTENT(IN) :: attr_id
+         INTEGER(HID_T), INTENT(IN) :: memtype_id
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5areadc_7_c
+    END INTERFACE
+
+    hdferr = h5areadc_7_c(attr_id, memtype_id, buf, dims)
+  END SUBROUTINE h5aread_char_7
+
+END MODULE H5A_PROVISIONAL
+
+
diff --git a/fortran/src/H5Df.c b/fortran/src/H5Df.c
index 573315a..e1aa98e 100644
--- a/fortran/src/H5Df.c
+++ b/fortran/src/H5Df.c
@@ -1,4 +1,9 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* H5Df/H5Df
+ * PURPOSE
+ *   This file contains C stubs for H5D Fortran APIs
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,32 +16,42 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This files contains C stubs for H5D Fortran APIs */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include "H5f90.h"
 
-/*----------------------------------------------------------------------------
- * Name:        h5dcreate_c
- * Purpose:     Call H5Dcreate2 to create a dataset
- * Inputs:      loc_id - file or group identifier
+/****if* H5Df/h5dcreate_c
+ * NAME
+ *        h5dcreate_c
+ * PURPOSE
+ *     Call H5Dcreate2 to create a dataset
+ * INPUTS
+ *      loc_id - file or group identifier
  *              name - name of the dataset
  *              namelen - name length
  *              type_id - datatype identifier
  *              space_id - dataspace identifier
  *              crt_pr  - identifier of creation property list
- * Outputs:     dset_id - dataset identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     dset_id - dataset identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 4, 1999
- * Modifications:
+ * HISTORY
+ *
  *               - Added optional parameters introduced in version 1.8
  *                 February, 2008
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dcreate_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id, hid_t_f *space_id,
 	      hid_t_f *lcpl_id, hid_t_f *dcpl_id, hid_t_f *dapl_id, hid_t_f *dset_id)
+/******/
 {
      char *c_name = NULL;
      hid_t c_dset_id;
@@ -64,21 +79,30 @@ DONE:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dopen_c
- * Purpose:     Call H5Dopen2 to open a dataset
- * Inputs:      loc_id - file or group identifier
+/****if* H5Df/h5dopen_c
+ * NAME
+ *        h5dopen_c
+ * PURPOSE
+ *     Call H5Dopen2 to open a dataset
+ * INPUTS
+ *      loc_id - file or group identifier
  *              name - name of the dataset
  *              namelen - name length
  *              dapl_id	- Dataset access property list
- * Outputs:     dset_id - dataset identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     dset_id - dataset identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 4, 1999
- * Modifications: Added 1.8 parameter: dapl_id
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * Added 1.8 parameter: dapl_id
+ * SOURCE
+*/
 int_f
 nh5dopen_c(hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *dapl_id, hid_t_f *dset_id)
+/******/
 {
      char *c_name = NULL;
      hid_t c_dset_id;
@@ -105,24 +129,33 @@ DONE:
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dwritec_c
- * Purpose:     Call h5dwrite_c to write a dataset of characters
- * Inputs:      dset_id - dataset identifier
+
+/****if* H5Df/h5dwritec_c
+ * NAME
+ *        h5dwritec_c
+ * PURPOSE
+ *     Call h5dwrite_c to write a dataset of characters
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              mem_space_id - memory dataspace identifier
  *              file_space_id - memory dataspace identifier
  *              xfer_pr  - identifier of transfer property list
  *              buf      - character data buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, May 14, 2002
- * Modifications: This function is added to accomodate oveloaded h5dwrite_f
+ * HISTORY
+ * This function is added to accomodate oveloaded h5dwrite_f
  *                with the dims argument being of INTEGER(HSIZE_T) type
 
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dwritec_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+/******/
 {
      int ret_value = -1;
 
@@ -136,6 +169,7 @@ nh5dwritec_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid
 
 int_f
 nh5dwritec_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -149,6 +183,7 @@ nh5dwritec_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
 
 int_f
 nh5dwritec_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -162,6 +197,7 @@ nh5dwritec_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
 
 int_f
 nh5dwritec_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -175,6 +211,7 @@ nh5dwritec_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
 
 int_f
 nh5dwritec_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -188,6 +225,7 @@ nh5dwritec_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
 
 int_f
 nh5dwritec_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -201,6 +239,7 @@ nh5dwritec_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
 
 int_f
 nh5dwritec_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -214,6 +253,7 @@ nh5dwritec_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
 
 int_f
 nh5dwritec_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -227,6 +267,7 @@ nh5dwritec_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
 
 int_f
 nh5dwritec_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -238,19 +279,25 @@ nh5dwritec_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dwrite_c
- * Purpose:     Call H5Dwrite to write a dataset
- * Inputs:      dset_id - dataset identifier
+/****if* H5Df/h5dwrite_c
+ * NAME
+ *        h5dwrite_c
+ * PURPOSE
+ *     Call H5Dwrite to write a dataset
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              mem_space_id - memory dataspace identifier
  *              file_space_id - memory dataspace identifier
  *              xfer_pr  - identifier of transfer property list
  *              buf      - data buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, May 14, 2002
- * Modifications: This function is added to accomodate oveloaded h5dwrite_f
+ * HISTORY
+ * This function is added to accomodate oveloaded h5dwrite_f
  *                with the dims argument being of INTEGER(HSIZE_T) type
  *
  *                Added nh5dwrite_integer(real,double)_s,1-7_c functions to eliminate
@@ -258,9 +305,11 @@ nh5dwritec_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, h
  *                called by Fortran rouitnes
  *                                           October 10, 2006 EIP
  *
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dwrite_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f UNUSED *dims)
+/******/
 {
      int ret_value = -1;
      herr_t ret;
@@ -291,6 +340,7 @@ nh5dwrite_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_
 
 int_f
 nh5dwrite_integer_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -301,6 +351,7 @@ nh5dwrite_integer_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_spac
 
 int_f
 nh5dwrite_integer_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -311,6 +362,7 @@ nh5dwrite_integer_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_spac
 
 int_f
 nh5dwrite_integer_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -321,6 +373,7 @@ nh5dwrite_integer_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_spac
 
 int_f
 nh5dwrite_integer_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -331,6 +384,7 @@ nh5dwrite_integer_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_spac
 
 int_f
 nh5dwrite_integer_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -341,6 +395,7 @@ nh5dwrite_integer_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_spac
 
 int_f
 nh5dwrite_integer_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -351,6 +406,7 @@ nh5dwrite_integer_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_spac
 
 int_f
 nh5dwrite_integer_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -361,6 +417,7 @@ nh5dwrite_integer_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_spac
 
 int_f
 nh5dwrite_integer_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -371,6 +428,7 @@ nh5dwrite_integer_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_spac
 
 int_f
 nh5dwrite_real_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -380,6 +438,7 @@ nh5dwrite_real_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 int_f
 nh5dwrite_real_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -389,6 +448,7 @@ nh5dwrite_real_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 int_f
 nh5dwrite_real_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -398,6 +458,7 @@ nh5dwrite_real_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 int_f
 nh5dwrite_real_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -407,6 +468,7 @@ nh5dwrite_real_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 int_f
 nh5dwrite_real_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -416,6 +478,7 @@ nh5dwrite_real_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 int_f
 nh5dwrite_real_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -425,6 +488,7 @@ nh5dwrite_real_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 int_f
 nh5dwrite_real_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -434,6 +498,7 @@ nh5dwrite_real_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 int_f
 nh5dwrite_real_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -443,6 +508,7 @@ nh5dwrite_real_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 int_f
 nh5dwrite_double_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -452,6 +518,7 @@ nh5dwrite_double_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dwrite_double_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -461,6 +528,7 @@ nh5dwrite_double_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dwrite_double_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -470,6 +538,7 @@ nh5dwrite_double_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dwrite_double_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -479,6 +548,7 @@ nh5dwrite_double_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dwrite_double_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -488,6 +558,7 @@ nh5dwrite_double_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dwrite_double_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -497,6 +568,7 @@ nh5dwrite_double_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dwrite_double_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -506,6 +578,7 @@ nh5dwrite_double_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dwrite_double_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dwrite_c  function.
@@ -514,24 +587,32 @@ nh5dwrite_double_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5dwrite_ref_obj_c
- * Purpose:     Call H5Dwrite to write a dataset  of object references
- * Inputs:      dset_id - dataset identifier
+/****if* H5Df/h5dwrite_ref_obj_c
+ * NAME
+ *        h5dwrite_ref_obj_c
+ * PURPOSE
+ *     Call H5Dwrite to write a dataset  of object references
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              mem_space_id - memory dataspace identifier
  *              file_space_id - memory dataspace identifier
  *              xfer_pr  - identifier of transfer property list
  *              buf      - data buffer with references to the objects.
  *              n - number of references to be stored.
- * Returns:     0 on success,e-1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success,e-1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, May 14, 2002
- * Modifications: This function was added to accomodate h5dwrite_f with the
+ * HISTORY
+ * This function was added to accomodate h5dwrite_f with the
  *                dims argumnet being of INTEGER(HSIZE_T) type.
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dwrite_ref_obj_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, haddr_t_f *buf, hsize_t_f *dims)
+/******/
 {
     int ret_value = -1;
     herr_t ret;
@@ -573,24 +654,32 @@ nh5dwrite_ref_obj_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dwrite_ref_reg_c
- * Purpose:     Call H5Dwrite to write a dataset of dataset region references
- * Inputs:      dset_id - dataset identifier
+/****if* H5Df/h5dwrite_ref_reg_c
+ * NAME
+ *        h5dwrite_ref_reg_c
+ * PURPOSE
+ *     Call H5Dwrite to write a dataset of dataset region references
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              mem_space_id - memory dataspace identifier
  *              file_space_id - memory dataspace identifier
  *              xfer_pr  - identifier of transfer property list
  *              buf      - data buffer with references to the objects.
  *              n - number of references to be stored.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, May 14, 2002
- * Modifications: This function was added to accomodate h5dwrite_f with the
+ * HISTORY
+ * This function was added to accomodate h5dwrite_f with the
  *                dims argument being of INTEGER(HSIZE_T) type
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dwrite_ref_reg_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, int_f *buf, hsize_t_f *dims)
+/******/
 {
      int ret_value = -1;
      herr_t ret;
@@ -637,23 +726,32 @@ nh5dwrite_ref_reg_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
 
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5dreadc_c
- * Purpose:     Call h5dread_c to read a dataset of characters
- * Inputs:      dset_id - dataset identifier
+/****if* H5Df/h5dreadc_c
+ * NAME
+ *        h5dreadc_c
+ * PURPOSE
+ *     Call h5dread_c to read a dataset of characters
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              mem_space_id - memory dataspace identifier
  *              file_space_id - memory dataspace identifier
  *              xfer_pr  - identifier of transfer property list
- * Outputs:     buf      - character data buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     buf      - character data buffer
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, May 15, 2002
- * Modifications: This function was added to accomodate h5dread_f subroutine
+ * HISTORY
+ * This function was added to accomodate h5dread_f subroutine
  *                with the dims parameter being of INTEGER(HSIZE_T_F) size.
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dreadc_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+/******/
 {
      int ret_value = -1;
 
@@ -667,6 +765,7 @@ nh5dreadc_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_
 
 int_f
 nh5dreadc_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -680,6 +779,7 @@ nh5dreadc_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
 
 int_f
 nh5dreadc_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -693,6 +793,7 @@ nh5dreadc_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
 
 int_f
 nh5dreadc_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -706,6 +807,7 @@ nh5dreadc_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
 
 int_f
 nh5dreadc_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -719,6 +821,7 @@ nh5dreadc_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
 
 int_f
 nh5dreadc_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -732,6 +835,7 @@ nh5dreadc_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
 
 int_f
 nh5dreadc_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -745,6 +849,7 @@ nh5dreadc_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
 
 int_f
 nh5dreadc_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -758,6 +863,7 @@ nh5dreadc_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
 
 int_f
 nh5dreadc_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims)
+
 {
      int ret_value = -1;
 
@@ -769,19 +875,26 @@ nh5dreadc_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dread_c
- * Purpose:     Call H5Draed to read a dataset
- * Inputs:      dset_id - dataset identifier
+/****if* H5Df/h5dread_c
+ * NAME
+ *        h5dread_c
+ * PURPOSE
+ *     Call H5Draed to read a dataset
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              mem_space_id - memory dataspace identifier
  *              file_space_id - memory dataspace identifier
  *              xfer_pr  - identifier of transfer property list
- * Outputs:     buf      - data buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     buf      - data buffer
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, May 15, 2002
- * Modifications: This function was added to accomodate h5dread_f subroutine
+ * HISTORY
+ * This function was added to accomodate h5dread_f subroutine
  *                with the dims parameter being of INTEGER(HSIZE_T_F) size.
  *
  *                Added nh5dread_integer(real,double)_s,1-7_c functions to eliminate
@@ -789,9 +902,11 @@ nh5dreadc_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hi
  *                called by Fortran rouitnes
  *                                           October 10, 2006 EIP
  *
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dread_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f UNUSED *dims)
+/******/
 {
      int ret_value = -1;
      herr_t ret;
@@ -822,6 +937,7 @@ nh5dread_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t
 
 int_f
 nh5dread_integer_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -831,6 +947,7 @@ nh5dread_integer_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dread_integer_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -840,6 +957,7 @@ nh5dread_integer_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dread_integer_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -849,6 +967,7 @@ nh5dread_integer_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dread_integer_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -858,6 +977,7 @@ nh5dread_integer_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dread_integer_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -867,6 +987,7 @@ nh5dread_integer_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dread_integer_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -876,6 +997,7 @@ nh5dread_integer_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dread_integer_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -885,6 +1007,7 @@ nh5dread_integer_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dread_integer_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -894,6 +1017,7 @@ nh5dread_integer_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space
 
 int_f
 nh5dread_real_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -903,6 +1027,7 @@ nh5dread_real_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id
 
 int_f
 nh5dread_real_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -912,6 +1037,7 @@ nh5dread_real_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id
 
 int_f
 nh5dread_real_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -921,6 +1047,7 @@ nh5dread_real_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id
 
 int_f
 nh5dread_real_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -930,6 +1057,7 @@ nh5dread_real_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id
 
 int_f
 nh5dread_real_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -939,6 +1067,7 @@ nh5dread_real_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id
 
 int_f
 nh5dread_real_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -948,6 +1077,7 @@ nh5dread_real_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id
 
 int_f
 nh5dread_real_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -957,6 +1087,7 @@ nh5dread_real_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id
 
 int_f
 nh5dread_real_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -966,6 +1097,7 @@ nh5dread_real_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id
 
 int_f
 nh5dread_double_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -975,6 +1107,7 @@ nh5dread_double_s_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
 
 int_f
 nh5dread_double_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -984,6 +1117,7 @@ nh5dread_double_1_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
 
 int_f
 nh5dread_double_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -993,6 +1127,7 @@ nh5dread_double_2_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
 
 int_f
 nh5dread_double_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -1002,6 +1137,7 @@ nh5dread_double_3_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
 
 int_f
 nh5dread_double_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -1011,6 +1147,7 @@ nh5dread_double_4_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
 
 int_f
 nh5dread_double_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -1020,6 +1157,7 @@ nh5dread_double_5_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
 
 int_f
 nh5dread_double_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -1029,6 +1167,7 @@ nh5dread_double_6_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
 
 int_f
 nh5dread_double_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf, hsize_t_f *dims)
+
 {
      /*
       * Call h5dread_c  function.
@@ -1036,24 +1175,32 @@ nh5dread_double_7_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_
      return nh5dread_c(dset_id, mem_type_id, mem_space_id, file_space_id, xfer_prp, buf, dims);
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dread_ref_obj_c
- * Purpose:     Call H5Dread to read a dataset  of object references
- * Inputs:      dset_id - dataset identifier
+/****if* H5Df/h5dread_ref_obj_c
+ * NAME
+ *        h5dread_ref_obj_c
+ * PURPOSE
+ *     Call H5Dread to read a dataset  of object references
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              mem_space_id - memory dataspace identifier
  *              file_space_id - memory dataspace identifier
  *              xfer_pr  - identifier of transfer property list
  *              buf      - data buffer to store references to the objects.
  *              n - number of references to be stored.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, May 15, 2002
- * Modifications: This function was added to accomodate h5dread_f subroutine
+ * HISTORY
+ * This function was added to accomodate h5dread_f subroutine
  *                with the dims parameter being of INTEGER(HSIZE_T_F) size.
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dread_ref_obj_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, haddr_t_f * buf, hsize_t_f *dims)
+/******/
 {
     int ret_value = -1;
     herr_t ret = -1;
@@ -1095,24 +1242,32 @@ nh5dread_ref_obj_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dread_ref_reg_c
- * Purpose:     Call H5Dread to read a dataset of dataset region references
- * Inputs:      dset_id - dataset identifier
+/****if* H5Df/h5dread_ref_reg_c
+ * NAME
+ *        h5dread_ref_reg_c
+ * PURPOSE
+ *     Call H5Dread to read a dataset of dataset region references
+ * INPUTS
+ *      dset_id - dataset identifier
  *              mem_type_id - memory datatype identifier
  *              mem_space_id - memory dataspace identifier
  *              file_space_id - memory dataspace identifier
  *              xfer_pr  - identifier of transfer property list
  *              buf      - data buffer to store references to the objects.
  *              n - number of references to be stored.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, May 15, 2002
- * Modifications: This function was added to accomodate h5dread_f subroutine
+ * HISTORY
+ * This function was added to accomodate h5dread_f subroutine
  *                with the dims parameter being of INTEGER(HSIZE_T_F) size.
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dread_ref_reg_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, int_f * buf, hsize_t_f *dims)
+/******/
 {
      int ret_value = -1;
      herr_t ret = -1;
@@ -1157,18 +1312,26 @@ nh5dread_ref_reg_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_i
 
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5dclose_c
- * Purpose:     Call H5Dclose to close a dataset
- * Inputs:      dset_id - identifier of the dataset to be closed
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Df/h5dclose_c
+ * NAME
+ *        h5dclose_c
+ * PURPOSE
+ *     Call H5Dclose to close a dataset
+ * INPUTS
+ *      dset_id - identifier of the dataset to be closed
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 4, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dclose_c ( hid_t_f *dset_id )
+/******/
 {
   int ret_value = 0;
   hid_t c_dset_id;
@@ -1177,19 +1340,28 @@ nh5dclose_c ( hid_t_f *dset_id )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dget_space_c
- * Purpose:     Call H5Dget_space to obtain dataspace of a dataset
- * Inputs:      dset_id - identifier of the dataset
- * Outputs:     space_id - identifier of the dataset's dataspace
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Df/h5dget_space_c
+ * NAME
+ *        h5dget_space_c
+ * PURPOSE
+ *     Call H5Dget_space to obtain dataspace of a dataset
+ * INPUTS
+ *      dset_id - identifier of the dataset
+ * OUTPUTS
+ *     space_id - identifier of the dataset's dataspace
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 19, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dget_space_c ( hid_t_f *dset_id , hid_t_f *space_id)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1203,19 +1375,28 @@ nh5dget_space_c ( hid_t_f *dset_id , hid_t_f *space_id)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dget_type_c
- * Purpose:     Call H5Dget_type to obtain datatype of a dataset
- * Inputs:      dset_id - identifier of the dataset
- * Outputs:     type_id - identifier of the dataset's datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Df/h5dget_type_c
+ * NAME
+ *        h5dget_type_c
+ * PURPOSE
+ *     Call H5Dget_type to obtain datatype of a dataset
+ * INPUTS
+ *      dset_id - identifier of the dataset
+ * OUTPUTS
+ *     type_id - identifier of the dataset's datatype
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 19, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dget_type_c ( hid_t_f *dset_id , hid_t_f *type_id)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1231,20 +1412,29 @@ nh5dget_type_c ( hid_t_f *dset_id , hid_t_f *type_id)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dget_create_plist_c
- * Purpose:     Call H5Dget_create_plist to obtain creation property list
+/****if* H5Df/h5dget_create_plist_c
+ * NAME
+ *        h5dget_create_plist_c
+ * PURPOSE
+ *     Call H5Dget_create_plist to obtain creation property list
  *              of a dataset
- * Inputs:      dset_id - identifier of the dataset
- * Outputs:     plist_id - identifier of he dataset creation property list
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * INPUTS
+ *      dset_id - identifier of the dataset
+ * OUTPUTS
+ *     plist_id - identifier of he dataset creation property list
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 19, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dget_create_plist_c ( hid_t_f *dset_id , hid_t_f *plist_id)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1261,22 +1451,31 @@ nh5dget_create_plist_c ( hid_t_f *dset_id , hid_t_f *plist_id)
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5dset_extent_c
- * Purpose:     Call H5Dset_extent to extend dataset with unlimited dimensions
- * Inputs:      dset_id - identifier of the dataset
- * Outputs:     dims - array with the dimension sizes
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Df/h5dset_extent_c
+ * NAME
+ *        h5dset_extent_c
+ * PURPOSE
+ *     Call H5Dset_extent to extend dataset with unlimited dimensions
+ * INPUTS
+ *      dset_id - identifier of the dataset
+ * OUTPUTS
+ *     dims - array with the dimension sizes
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, August 19, 1999
  *
- * Modifications: Changed name from the now obsolete h5dextend
+ * HISTORY
+ * Changed name from the now obsolete h5dextend
  *                to h5dset_extent in order to match new fortran interface.
  *                -MSB- March 14, 2008
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 
 int_f
 nh5dset_extent_c ( hid_t_f *dset_id , hsize_t_f *dims)
+/******/
 {
   hid_t c_space_id;
   hsize_t c_dims[H5S_MAX_RANK];
@@ -1305,20 +1504,29 @@ nh5dset_extent_c ( hid_t_f *dset_id , hsize_t_f *dims)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        nh5dget_storage_size_c
- * Purpose:     Call H5Dget_storage_size to return the amount of storage
+/****if* H5Df/nh5dget_storage_size_c
+ * NAME
+ *        nh5dget_storage_size_c
+ * PURPOSE
+ *     Call H5Dget_storage_size to return the amount of storage
  *              required for a dataset
- * Inputs:      dset_id - identifier of the dataset
- * Outputs:     size    - the amount of storage required for a dataset
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * INPUTS
+ *      dset_id - identifier of the dataset
+ * OUTPUTS
+ *     size    - the amount of storage required for a dataset
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, October 22, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dget_storage_size_c ( hid_t_f *dset_id , hsize_t_f *size)
+/******/
 {
   int ret_value = -1;
   hsize_t c_size;
@@ -1332,21 +1540,30 @@ nh5dget_storage_size_c ( hid_t_f *dset_id , hsize_t_f *size)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        nh5dvlen_get_max_len_c
- * Purpose:     Get the maximum size of the VL dataset element
- * Inputs:      dset_id - identifier of the dataset
+/****if* H5Df/nh5dvlen_get_max_len_c
+ * NAME
+ *        nh5dvlen_get_max_len_c
+ * PURPOSE
+ *     Get the maximum size of the VL dataset element
+ * INPUTS
+ *      dset_id - identifier of the dataset
  *              type_id - datatype identifier
  *              space_id - dataspace identifier
- * Outputs:     len      - maximum length of the VL dataset element
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     len      - maximum length of the VL dataset element
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, October 22, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dvlen_get_max_len_c ( hid_t_f *dset_id ,  hid_t_f *type_id, hid_t_f *space_id, size_t_f *len)
+/******/
 {
   int ret_value = -1;
   size_t c_len;
@@ -1381,10 +1598,13 @@ DONE:
   free(c_buf);
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        nh5dwrite_vl_integer_c
- * Purpose:     Write variable length dataset
- * Inputs:      dset_id - identifier of the dataset
+/****if* H5Df/nh5dwrite_vl_integer_c
+ * NAME
+ *        nh5dwrite_vl_integer_c
+ * PURPOSE
+ *     Write variable length dataset
+ * INPUTS
+ *      dset_id - identifier of the dataset
  *              mem_type_id - datatype identifier
  *              mem_space_id - dataspace identifier
  *              file_space_id - file dataspace identifier
@@ -1394,14 +1614,19 @@ DONE:
  *                              dims[0] = MAXLENGTH
  *                              dims[1] = number of elements of VL type
  *              len           - array element lenghts
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, October 23, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dwrite_vl_integer_c ( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, int_f *buf, hsize_t_f *dims, size_t_f *len)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1446,10 +1671,13 @@ DONE:
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        nh5dread_vl_integer_c
- * Purpose:     Read variable length dataset
- * Inputs:      dset_id - identifier of the dataset
+/****if* H5Df/nh5dread_vl_integer_c
+ * NAME
+ *        nh5dread_vl_integer_c
+ * PURPOSE
+ *     Read variable length dataset
+ * INPUTS
+ *      dset_id - identifier of the dataset
  *              mem_type_id - datatype identifier
  *              mem_space_id - dataspace identifier
  *              file_space_id - file dataspace identifier
@@ -1457,16 +1685,22 @@ DONE:
  *              dims          - one-demnsional array of size 2
  *                              dims[0] = MAXLENGTH
  *                              dims[1] = number of elements of VL type
- * Outputs:     buf           - data buffer
+ * OUTPUTS
+ *     buf           - data buffer
  *              len           - array element lenghts
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, October 24, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dread_vl_integer_c ( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, int_f *buf, hsize_t_f *dims, size_t_f *len)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1509,10 +1743,13 @@ DONE:
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        nh5dwrite_vl_string_c
- * Purpose:     Write variable length strings from Fortran program
- * Inputs:      dset_id - identifier of the dataset
+/****if* H5Df/nh5dwrite_vl_string_c
+ * NAME
+ *        nh5dwrite_vl_string_c
+ * PURPOSE
+ *     Write variable length strings from Fortran program
+ * INPUTS
+ *      dset_id - identifier of the dataset
  *              mem_type_id - datatype identifier
  *              mem_space_id - dataspace identifier
  *              file_space_id - file dataspace identifier
@@ -1521,14 +1758,19 @@ DONE:
  *              dims          - one-demnsional array of size 2
  *                              dims[0] = number of strings of size max_len
  *              len           - array of strings lengths
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, October 28, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dwrite_vl_string_c( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims, size_t_f *len)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1588,10 +1830,13 @@ DONE:
   free(tmp);
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        nh5dread_vl_string_c
- * Purpose:     Read variable length strings from Fortran program
- * Inputs:      dset_id - identifier of the dataset
+/****if* H5Df/nh5dread_vl_string_c
+ * NAME
+ *        nh5dread_vl_string_c
+ * PURPOSE
+ *     Read variable length strings from Fortran program
+ * INPUTS
+ *      dset_id - identifier of the dataset
  *              mem_type_id - datatype identifier
  *              mem_space_id - dataspace identifier
  *              file_space_id - file dataspace identifier
@@ -1600,14 +1845,19 @@ DONE:
  *                              dims[0] = number of strings of size max_len
  * Output:      buf           - data buffer
  *              len           - array of strings lengths
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Friday, November 1, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dread_vl_string_c( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, _fcd buf, hsize_t_f *dims, size_t_f *len)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1663,10 +1913,13 @@ nh5dread_vl_string_c( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_spa
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        nh5dwrite_vl_real_c
- * Purpose:     Write variable length dataset
- * Inputs:      dset_id - identifier of the dataset
+/****if* H5Df/nh5dwrite_vl_real_c
+ * NAME
+ *        nh5dwrite_vl_real_c
+ * PURPOSE
+ *     Write variable length dataset
+ * INPUTS
+ *      dset_id - identifier of the dataset
  *              mem_type_id - datatype identifier
  *              mem_space_id - dataspace identifier
  *              file_space_id - file dataspace identifier
@@ -1676,14 +1929,19 @@ nh5dread_vl_string_c( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_spa
  *                              dims[0] = MAXLENGTH
  *                              dims[1] = number of elements of VL type
  *              len           - array element lenghts
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, November 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dwrite_vl_real_c ( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, real_f *buf, hsize_t_f *dims, size_t_f *len)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1728,10 +1986,13 @@ DONE:
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        nh5dread_vl_real_c
- * Purpose:     Read variable length dataset
- * Inputs:      dset_id - identifier of the dataset
+/****if* H5Df/nh5dread_vl_real_c
+ * NAME
+ *        nh5dread_vl_real_c
+ * PURPOSE
+ *     Read variable length dataset
+ * INPUTS
+ *      dset_id - identifier of the dataset
  *              mem_type_id - datatype identifier
  *              mem_space_id - dataspace identifier
  *              file_space_id - file dataspace identifier
@@ -1739,16 +2000,22 @@ DONE:
  *              dims          - one-demnsional array of size 2
  *                              dims[0] = MAXLENGTH
  *                              dims[1] = number of elements of VL type
- * Outputs:     buf           - data buffer
+ * OUTPUTS
+ *     buf           - data buffer
  *              len           - array element lenghts
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, November 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5dread_vl_real_c ( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_space_id, hid_t_f *file_space_id, hid_t_f *xfer_prp, real_f *buf, hsize_t_f *dims, size_t_f *len)
+/******/
 {
   int ret_value = -1;
   hid_t c_dset_id;
@@ -1792,21 +2059,29 @@ DONE:
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dfillc_c
- * Purpose:     Call h5fill_c to fill memory buffer with a fill value
- * Inputs:      fill_value - fill value
+/****if* H5Df/h5dfillc_c
+ * NAME
+ *        h5dfillc_c
+ * PURPOSE
+ *     Call h5fill_c to fill memory buffer with a fill value
+ * INPUTS
+ *      fill_value - fill value
  *              fill_type_id - fill value datatype identifier
  *              space_id - memory space selection identifier
  *              buf      - memory buffer to fill
  *              mem_type_id - memory buffer dtatype identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, March 12, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5dfillc_c (_fcd fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, _fcd buf, hid_t_f *mem_type_id)
+/******/
 {
      int ret_value = -1;
 
@@ -1817,22 +2092,29 @@ nh5dfillc_c (_fcd fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, _fcd buf
 
      return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5dfill_c
- * Purpose:     Call H5Dfill to fill memory buffer with a fill value
- * Inputs:      fill_value - fill value
+/****if* H5Df/h5dfill_c
+ * NAME
+ *        h5dfill_c
+ * PURPOSE
+ *     Call H5Dfill to fill memory buffer with a fill value
+ * INPUTS
+ *      fill_value - fill value
  *              fill_type_id - fill value datatype identifier
  *              space_id - memory space selection identifier
  *              buf      - memory buffer to fill
  *              mem_type_id - memory buffer dtatype identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, March 12, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5dfill_c (void * fill_value, hid_t_f *fill_type_id, hid_t_f *space_id, void * buf, hid_t_f *mem_type_id)
-
+/******/
 {
      int ret_value = -1;
      herr_t ret;
@@ -1926,19 +2208,27 @@ nh5dfill_double_c (void * fill_value, hid_t_f *fill_type_id, hid_t_f *space_id,
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dget_space_status_c
- * Purpose:     Call H5Dget_space_status to request dataspace allocation status
- * Inputs:      dset_id - dataset identifier
- * Outputs:     flag - status flag
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Df/h5dget_space_status_c
+ * NAME
+ *        h5dget_space_status_c
+ * PURPOSE
+ *     Call H5Dget_space_status to request dataspace allocation status
+ * INPUTS
+ *      dset_id - dataset identifier
+ * OUTPUTS
+ *     flag - status flag
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, March 12, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5dget_space_status_c ( hid_t_f *dset_id, int_f *flag)
-
+/******/
 {
      int ret_value = -1;
      herr_t ret;
@@ -1957,25 +2247,33 @@ nh5dget_space_status_c ( hid_t_f *dset_id, int_f *flag)
      ret_value = 0;
      return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5dcreate_anon_c
- * Purpose:     Call H5Dcreate_anon
- * Inputs:
+/****if* H5Df/h5dcreate_anon_c
+ * NAME
+ *        h5dcreate_anon_c
+ * PURPOSE
+ *     Call H5Dcreate_anon
+ * INPUTS
+ *
  *		loc_id	   - Identifier of the file or group within which to create the dataset.
  *		type_id	   - Identifier of the datatype to use when creating the dataset.
  *		space_id   - Identifier of the dataspace to use when creating the dataset.
  *              dcpl_id    - Dataset creation property list identifier.
  *              dapl_id    - Dataset access property list identifier.
- * Outputs:
+ * OUTPUTS
+ *
  *              dset_id - dataset identifier
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February, 2008
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5dcreate_anon_c (hid_t_f *loc_id, hid_t_f *type_id, hid_t_f *space_id,
 		   hid_t_f *dcpl_id, hid_t_f *dapl_id, hid_t_f *dset_id)
+/******/
 {
   int ret_value = -1;
 
@@ -1992,20 +2290,174 @@ nh5dcreate_anon_c (hid_t_f *loc_id, hid_t_f *type_id, hid_t_f *space_id,
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5dget_access_plist_c
- * Purpose:     Call H5Dget_access_plist
- * Inputs:
- *              dset_id   - dataset identifier
- * Outputs:
- *              plist_id  - the dataset access property list identifier.
+/****if* H5Df/nh5dwrite_f_c
+ * NAME
+ *        nh5dwrite_f_c
+ * PURPOSE
+ *     Call H5Dwrite to write a dataset
+ * INPUTS
+ *      dset_id - dataset identifier
+ *              mem_type_id - memory datatype identifier
+ *              mem_space_id - memory dataspace identifier
+ *              file_space_id - memory dataspace identifier
+ *              xfer_pr  - identifier of transfer property list
+ *              buf      - data buffer
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *              May 28, 2008
+ * HISTORY
+ *
+ *
+ * SOURCE
+*/
+int_f
+nh5dwrite_f_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id,
+		    hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf)
+/******/
+{
+  int ret_value = -1;
+  herr_t ret;
+  hid_t c_dset_id;
+  hid_t c_mem_type_id;
+  hid_t c_mem_space_id;
+  hid_t c_file_space_id;
+  hid_t c_xfer_prp;
+
+/*   int i, j; */
+/*   typedef struct { */
+/*     int x; */
+/*     float y; */
+/*   } r_dual_c; */
+
+/*   const r_dual_c *name=buf; */
+
+/*   r_dual_c access[4][4]; */
+
+/*   for ( i=0; i<4; ++i) */
+/*     for (j = 0; j<4; ++j) { */
+/*       access[i][j] = name[i*4+j]; */
+/*     /\* access[i].x = access[i].x + 1; *\/ */
+/*       printf("x = %i \n", access[i][j].x); */
+/*       printf("y = %f \n", access[i][j].y); */
+/*     } */
+
+  /*
+   * Define transfer property
+   */
+  c_xfer_prp = (hid_t)*xfer_prp;
+
+  /*
+   * Call H5Dwrite function.
+   */
+  c_dset_id = (hid_t)*dset_id;
+  c_mem_type_id = (hid_t)*mem_type_id;
+  c_mem_space_id = (hid_t)*mem_space_id;
+  c_file_space_id = (hid_t)*file_space_id;
+  ret = H5Dwrite(c_dset_id, c_mem_type_id, c_mem_space_id, c_file_space_id, c_xfer_prp, buf);
+
+  if (ret < 0) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+/****if* H5Df/nh5dread_f_c
+ * NAME
+ *        nh5dread_f_c
+ * PURPOSE
+ *     Read variable length dataset
+ * INPUTS
+ *      dset_id - identifier of the dataset
+ *              mem_type_id - datatype identifier
+ *              mem_space_id - dataspace identifier
+ *              file_space_id - file dataspace identifier
+ *              xfer          - file transfer property
+ *              dims          - one-demnsional array of size 2
+ *                              dims[0] = MAXLENGTH
+ *                              dims[1] = number of elements of VL type
+ * OUTPUTS
+ *     buf           - data buffer
+ *              len           - array element lenghts
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *              Wednesday, October 24, 2002
+ * HISTORY
+ *
+ * SOURCE
+*/
+
+int_f
+nh5dread_f_c ( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_space_id,
+		    hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf)
+/******/
+{
+  int ret_value = -1;
+  hid_t c_dset_id;
+  hid_t c_mem_type_id;
+  hid_t c_mem_space_id;
+  hid_t c_file_space_id;
+  hid_t c_xfer_prp;
+  herr_t status;
+
+/*   int i, j; */
+/*   typedef struct { */
+/*     int x; */
+/*     float y; */
+/*   } r_dual_c; */
+
+/*   r_dual_c *name=buf; */
+
+/*   r_dual_c access[4][4]; */
+
+  c_dset_id       = (hid_t)*dset_id;
+  c_mem_type_id   = (hid_t)*mem_type_id;
+  c_mem_space_id  = (hid_t)*mem_space_id;
+  c_file_space_id = (hid_t)*file_space_id;
+  c_xfer_prp      = (hid_t)*xfer_prp;
+  /*
+   * Call H5Dread function.
+   */
+
+/*   printf("%i %i %i %i %i \n",c_dset_id, c_mem_type_id, c_mem_space_id, c_file_space_id, c_xfer_prp); */
+
+  status = H5Dread(c_dset_id, c_mem_type_id, c_mem_space_id, c_file_space_id, c_xfer_prp, buf);
+  if ( status < 0 ) return ret_value;
+
+/*   for ( i=0; i<4; ++i) */
+/*     for (j = 0; j<4; ++j) { */
+/*       access[i][j] = name[i*4+j]; */
+/*     /\* access[i].x = access[i].x + 1; *\/ */
+/*       printf("x = %i \n", access[i][j].x); */
+/*       printf("y = %f \n", access[i][j].y); */
+/*      } */
+
+
+  ret_value = 1;
+  return ret_value;
+}
+/****if* H5Df/nh5dget_access_plist_c
+ * NAME
+ *     nh5dget_access_plist_c
+ * PURPOSE
+ *     Call H5Dget_access_plist
+ * INPUTS
+ *     dset_id   - dataset identifier
+ * OUTPUTS
+ *     plist_id  - the dataset access property list identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *     M. Scot Breitenfeld
+ *     April 13, 2009
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              April 13, 2009
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
+
 int_f
 nh5dget_access_plist_c (hid_t_f *dset_id, hid_t_f *plist_id)
+/******/
 {
   int ret_value = -1;
   /*
@@ -2020,4 +2472,38 @@ nh5dget_access_plist_c (hid_t_f *dset_id, hid_t_f *plist_id)
   return ret_value;
 }
 
+/****if* H5Df/nh5dvlen_reclaim_c
+ * NAME
+ *     nh5dvlen_reclaim_c
+ * PURPOSE
+ *     Call H5Dvlen_reclaim
+ * INPUTS
+ *    type_id  - Identifier of the datatype. 
+ *   space_id  - Identifier of the dataspace. 
+ *   plist_id  - Identifier of the property list used to create the buffer. 
+ *   buf       - Pointer to the buffer to be reclaimed.    
+ *
+ * RETURNS
+ *   0 on success, -1 on failure
+ * AUTHOR
+ *   M. Scot Breitenfeld
+ *   January 15, 2011 
+ *
+ * SOURCE
+*/
+int_f
+nh5dvlen_reclaim_c(hid_t_f *type_id, hid_t_f *space_id, hid_t_f *plist_id, void *buf)
+/******/
+{
+  int ret_value = -1;
+  herr_t status;
+
+  /*
+   * Call H5Dvlen_reclaim function.
+   */
+  status = H5Dvlen_reclaim((hid_t)*type_id, (hid_t)*space_id, (hid_t)*plist_id, buf);
+  if ( status < 0 ) return ret_value;
 
+  ret_value = 0;
+  return ret_value;
+}
diff --git a/fortran/src/H5Dff.f90 b/fortran/src/H5Dff.f90
index c4810b3..24917e7 100644
--- a/fortran/src/H5Dff.f90
+++ b/fortran/src/H5Dff.f90
@@ -1,3 +1,17 @@
+!****h* ROBODoc/H5D
+!
+! NAME
+!  MODULE H5D
+!
+! FILE
+!  fortran/src/H5Dff.f90
+!
+! PURPOSE
+!  This file contains Fortran interfaces for H5D functions. It includes
+!  all the functions that are independent on whether the Fortran 2003 functions
+!  are enabled or disabled.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,76 +27,19 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5D function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
 !
-! This file contains Fortran90 interfaces for H5D functions.
-!
+!*****
+
 MODULE H5D
   USE H5GLOBAL
 
-  INTERFACE h5dwrite_f
-
-     MODULE PROCEDURE h5dwrite_reference_obj
-     MODULE PROCEDURE h5dwrite_reference_dsetreg
-     MODULE PROCEDURE h5dwrite_integer_scalar
-     MODULE PROCEDURE h5dwrite_integer_1
-     MODULE PROCEDURE h5dwrite_integer_2
-     MODULE PROCEDURE h5dwrite_integer_3
-     MODULE PROCEDURE h5dwrite_integer_4
-     MODULE PROCEDURE h5dwrite_integer_5
-     MODULE PROCEDURE h5dwrite_integer_6
-     MODULE PROCEDURE h5dwrite_integer_7
-     MODULE PROCEDURE h5dwrite_char_scalar
-     MODULE PROCEDURE h5dwrite_char_1
-     MODULE PROCEDURE h5dwrite_char_2
-     MODULE PROCEDURE h5dwrite_char_3
-     MODULE PROCEDURE h5dwrite_char_4
-     MODULE PROCEDURE h5dwrite_char_5
-     MODULE PROCEDURE h5dwrite_char_6
-     MODULE PROCEDURE h5dwrite_char_7
-     MODULE PROCEDURE h5dwrite_real_scalar
-     MODULE PROCEDURE h5dwrite_real_1
-     MODULE PROCEDURE h5dwrite_real_2
-     MODULE PROCEDURE h5dwrite_real_3
-     MODULE PROCEDURE h5dwrite_real_4
-     MODULE PROCEDURE h5dwrite_real_5
-     MODULE PROCEDURE h5dwrite_real_6
-     MODULE PROCEDURE h5dwrite_real_7
-  END INTERFACE
-
-  INTERFACE h5dread_f
-
-     MODULE PROCEDURE h5dread_reference_obj
-     MODULE PROCEDURE h5dread_reference_dsetreg
-     MODULE PROCEDURE h5dread_integer_scalar
-     MODULE PROCEDURE h5dread_integer_1
-     MODULE PROCEDURE h5dread_integer_2
-     MODULE PROCEDURE h5dread_integer_3
-     MODULE PROCEDURE h5dread_integer_4
-     MODULE PROCEDURE h5dread_integer_5
-     MODULE PROCEDURE h5dread_integer_6
-     MODULE PROCEDURE h5dread_integer_7
-     MODULE PROCEDURE h5dread_char_scalar
-     MODULE PROCEDURE h5dread_char_1
-     MODULE PROCEDURE h5dread_char_2
-     MODULE PROCEDURE h5dread_char_3
-     MODULE PROCEDURE h5dread_char_4
-     MODULE PROCEDURE h5dread_char_5
-     MODULE PROCEDURE h5dread_char_6
-     MODULE PROCEDURE h5dread_char_7
-     MODULE PROCEDURE h5dread_real_scalar
-     MODULE PROCEDURE h5dread_real_1
-     MODULE PROCEDURE h5dread_real_2
-     MODULE PROCEDURE h5dread_real_3
-     MODULE PROCEDURE h5dread_real_4
-     MODULE PROCEDURE h5dread_real_5
-     MODULE PROCEDURE h5dread_real_6
-     MODULE PROCEDURE h5dread_real_7
-  END INTERFACE
-
-  INTERFACE h5dwrite_vl_f
-     MODULE PROCEDURE h5dwrite_vl_integer
-     MODULE PROCEDURE h5dwrite_vl_real
-     MODULE PROCEDURE h5dwrite_vl_string
+  INTERFACE h5dextend_f
+     MODULE PROCEDURE h5dset_extent_f
   END INTERFACE
 
   INTERFACE h5dread_vl_f
@@ -91,53 +48,50 @@ MODULE H5D
      MODULE PROCEDURE h5dread_vl_string
   END INTERFACE
 
-  INTERFACE h5dfill_f
-     MODULE PROCEDURE h5dfill_integer
-     MODULE PROCEDURE h5dfill_real
-     MODULE PROCEDURE h5dfill_char
-  END INTERFACE
-
-  INTERFACE h5dextend_f
-     MODULE PROCEDURE h5dset_extent_f
+  INTERFACE h5dwrite_vl_f
+     MODULE PROCEDURE h5dwrite_vl_integer
+     MODULE PROCEDURE h5dwrite_vl_real
+     MODULE PROCEDURE h5dwrite_vl_string
   END INTERFACE
 
-
 CONTAINS
 
-!----------------------------------------------------------------------
-! Name:		h5dcreate_f
 !
-! Purpose: 	Creates a dataset at the specified location
+!****s* H5D/h5dcreate_f
 !
-! Inputs:
-!		loc_id		- file or group identifier
-!		name		- dataset name
-!		type_id		- dataset datatype identifier
-!		space_id	- dataset dataspace identifier
-! Outputs:
-!		dset_id		- dataset identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!            creation_prp - Dataset creation property list
-!            lcpl_id      - Link creation property list
-!            dapl_id      - Dataset access property list
+! NAME
+!  h5dcreate_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Creates a dataset at the specified location
 !
-! Modifications:
-!                 - Explicit Fortran interfaces were added for
-!	           called C functions (it is needed for Windows
-!		   port).  February 28, 2001
+! INPUTS
+!  loc_id 	 - file or group identifier
+!  name 	 - dataset name
+!  type_id 	 - dataset datatype identifier
+!  space_id 	 - dataset dataspace identifier
+! OUTPUTS
+!  dset_id 	 - dataset identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  creation_prp  - Dataset creation property list
+!  lcpl_id 	 - Link creation property list
+!  dapl_id 	 - Dataset access property list
 !
-!                 - Added version's 1.8 new optional parameters
-!                  February, 2008
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! HISTORY
+!
+!  - Explicit Fortran interfaces were added for
+!    called C functions (it is needed for Windows
+!    port).  February 28, 2001
+!
+!  - Added version's 1.8 new optional parameters
+!    February, 2008
+!
+! SOURCE
   SUBROUTINE h5dcreate_f(loc_id, name, type_id, space_id, dset_id, &
        hdferr, dcpl_id, lcpl_id, dapl_id)
     IMPLICIT NONE
@@ -147,7 +101,7 @@ CONTAINS
     INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier
     INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier
     INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
+!*****
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dcpl_id ! Dataset creation property list
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Link creation property list
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dapl_id ! Dataset access property list
@@ -156,7 +110,7 @@ CONTAINS
     INTEGER(HID_T) :: dcpl_id_default
     INTEGER(HID_T) :: dapl_id_default
 
-    INTEGER :: namelen                     ! Name length
+    INTEGER :: namelen ! Name length
 
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -196,4176 +150,885 @@ CONTAINS
 
   END SUBROUTINE h5dcreate_f
 
-!----------------------------------------------------------------------
-! Name:		h5dopen_f
 !
-! Purpose: 	Opens an existing dataset.
+!****s* H5D/h5dopen_f
+!
+! NAME
+!  h5dopen_f
 !
-! Inputs:
-!		loc_id		- file or group identifier
-!		name		- dataset name
-! Outputs:
-!		dset_id		- dataset identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!	       dapl_id	        - Dataset access property list
+! PURPOSE
+!  Opens an existing dataset.
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! INPUTS
+!  loc_id 	 - file or group identifier
+!  name 	 - dataset name
+! OUTPUTS
+!  dset_id 	 - dataset identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  dapl_id 	 - Dataset access property list
 !
-! Modifications:  -Explicit Fortran interfaces were added for
-!		   called C functions (it is needed for Windows
-!		   port).  February 28, 2001
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-!                 -Added 1.8 (optional) parameter dapl_id
-!                  February, 2008, M. Scot Breitenfeld
+! HISTORY
+!  -Explicit Fortran interfaces were added for
+!   called C functions (it is needed for Windows
+!   port).  February 28, 2001
 !
-! Comment:
-!----------------------------------------------------------------------
+!  -Added 1.8 (optional) parameter dapl_id
+!   February, 2008, M. Scot Breitenfeld
+!
+! SOURCE
+  SUBROUTINE h5dopen_f(loc_id, name, dset_id, hdferr, dapl_id)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the dataset
+    INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dapl_id ! Dataset access property list
+!*****
+    INTEGER :: namelen                     ! Name length
+
+    INTEGER(HID_T) :: dapl_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dopen_c(loc_id, name, namelen, dapl_id_default, dset_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DOPEN_C'::h5dopen_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER :: namelen
+         INTEGER(HID_T), INTENT(IN) :: dapl_id_default
+         INTEGER(HID_T), INTENT(OUT) :: dset_id
+       END FUNCTION h5dopen_c
+    END INTERFACE
+
+    dapl_id_default = H5P_DEFAULT_F
+    IF(PRESENT(dapl_id)) dapl_id_default = dapl_id
 
-          SUBROUTINE h5dopen_f(loc_id, name, dset_id, hdferr, dapl_id)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the dataset
-            INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dapl_id ! Dataset access property list
-            INTEGER :: namelen                     ! Name length
+    namelen = LEN(name)
+    hdferr = h5dopen_c(loc_id, name, namelen, dapl_id_default, dset_id)
 
-            INTEGER(HID_T) :: dapl_id_default
+  END SUBROUTINE h5dopen_f
 
-!            INTEGER, EXTERNAL :: h5dopen_c
-!  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5dopen_c(loc_id, name, namelen, dapl_id_default, dset_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DOPEN_C'::h5dopen_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: loc_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER :: namelen
-              INTEGER(HID_T), INTENT(IN) :: dapl_id_default
-              INTEGER(HID_T), INTENT(OUT) :: dset_id
-              END FUNCTION h5dopen_c
-            END INTERFACE
-
-            dapl_id_default = H5P_DEFAULT_F
-            IF(PRESENT(dapl_id)) dapl_id_default = dapl_id
+!****s* H5D/h5dclose_f
+!
+! NAME
+!  h5dclose_f
+!
+! PURPOSE
+!  Closes a dataset.
+!
+! INPUTS
+!  dset_id 	 - dataset identifier
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! SOURCE
+  SUBROUTINE h5dclose_f(dset_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5dclose_c(dset_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DCLOSE_C'::h5dclose_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+       END FUNCTION h5dclose_c
+    END INTERFACE
 
-            namelen = LEN(name)
-            hdferr = h5dopen_c(loc_id, name, namelen, dapl_id_default, dset_id)
+    hdferr = h5dclose_c(dset_id)
 
-          END SUBROUTINE h5dopen_f
+  END SUBROUTINE h5dclose_f
 
-!----------------------------------------------------------------------
-! Name:		h5dclose_f
 !
-! Purpose: 	Closes a dataset.
+!****s* H5D/h5dget_type_f
+!
+! NAME
+!  h5dget_type_f
+!
+! PURPOSE
+!  Returns an identifier for a copy of the datatype for a
+!  dataset.
 !
-! Inputs:
-!		dset_id		- dataset identifier
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+!  dataset_id 	 - dataset identifier
+! OUTPUTS
+!  datatype_id 	 - dataspace identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
 !
-! Comment:
-!----------------------------------------------------------------------
+! NOTES
+!
+! SOURCE
+  SUBROUTINE h5dget_type_f(dataset_id, datatype_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
+    INTEGER(HID_T), INTENT(OUT) :: datatype_id    ! Datatype identifier
+    INTEGER, INTENT(OUT) :: hdferr                ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5dget_type_c (dataset_id, datatype_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_TYPE_C'::h5dget_type_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dataset_id
+         INTEGER(HID_T), INTENT(OUT) :: datatype_id
+       END FUNCTION h5dget_type_c
+    END INTERFACE
 
-          SUBROUTINE h5dclose_f(dset_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier
-            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+    hdferr = h5dget_type_c (dataset_id, datatype_id)
+  END SUBROUTINE h5dget_type_f
 
-!            INTEGER, EXTERNAL :: h5dclose_c
-!  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5dclose_c(dset_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DCLOSE_C'::h5dclose_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              END FUNCTION h5dclose_c
-            END INTERFACE
+!****s* H5D/h5dset_extent
+!
+! NAME
+!  h5dset_extent (instead of obsolete name: h5dextend_f)
+!
+! PURPOSE
+!  Extends a dataset with unlimited dimension.
+!
+! INPUTS
+!  dataset_id 	 - dataset identifier
+!  size 	 - array containing the new magnitude of
+!                  each dimension
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+!  Changed name from the now obsolete h5dextend_f
+!  to h5dset_extent_f. Provided interface to old name
+!  for backward compatability. -MSB- March 14, 2008
+!
+! SOURCE
+  SUBROUTINE h5dset_extent_f(dataset_id, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
+    INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN)  :: size
+    ! Array containing
+    ! dimensions' sizes
+    INTEGER, INTENT(OUT) :: hdferr                ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5dset_extent_c(dataset_id, size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DSET_EXTENT_C'::h5dset_extent_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dataset_id
+         INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN)  :: size
+       END FUNCTION h5dset_extent_c
+    END INTERFACE
+
+    hdferr = H5Dset_extent_c(dataset_id, size)
+  END SUBROUTINE h5dset_extent_f
 
-            hdferr = h5dclose_c(dset_id)
+!****s* H5D/h5dget_create_plist_f
+!
+! NAME
+!  h5dget_create_plist_f
+!
+! PURPOSE
+!  Returns an identifier for a copy of the dataset creation
+!  property list for a dataset.
+!
+! INPUTS
+!  dataset_id 	 - dataset identifier
+! OUTPUTS
+!  plist_id 	 - creation property list identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+! SOURCE
+  SUBROUTINE h5dget_create_plist_f(dataset_id, plist_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dataset_id   ! Dataset identifier
+    INTEGER(HID_T), INTENT(OUT) :: plist_id    ! Dataset creation
+                                               ! property list identifier
+    INTEGER, INTENT(OUT) :: hdferr             ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5dget_create_plist_c(dataset_id, plist_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_CREATE_PLIST_C'::h5dget_create_plist_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dataset_id
+         INTEGER(HID_T), INTENT(OUT) :: plist_id
+       END FUNCTION h5dget_create_plist_c
+    END INTERFACE
 
-          END SUBROUTINE h5dclose_f
+    hdferr = h5dget_create_plist_c(dataset_id, plist_id)
+  END SUBROUTINE h5dget_create_plist_f
 
-          SUBROUTINE h5dwrite_reference_obj(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims ! size of the bufffer buf
-            TYPE(hobj_ref_t_f), DIMENSION(dims(1)), INTENT(IN) :: buf ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
+!
+!****s* H5D/h5dget_storage_size_f
+!
+! NAME
+!  h5dget_storage_size_f
+!
+! PURPOSE
+!  Returns the amount of storage requires by a dataset
+!
+! INPUTS
+!  dataset_id 	 - dataset identifier
+! OUTPUTS
+!  size 	 - datastorage size
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 15, 2002
+! SOURCE
+  SUBROUTINE h5dget_storage_size_f(dataset_id, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dataset_id ! Dataset identifier
+    INTEGER(HSIZE_T),  INTENT(OUT)  :: size  ! Amount of storage
+                                             ! allocated for dataset
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5dget_storage_size_c(dataset_id, size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_STORAGE_SIZE_C'::h5dget_storage_size_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dataset_id
+         INTEGER(HSIZE_T), INTENT(OUT)  :: size
+       END FUNCTION h5dget_storage_size_c
+    END INTERFACE
 
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-            INTEGER(HADDR_T), ALLOCATABLE, DIMENSION(:) :: ref_buf
-            INTEGER :: j
+    hdferr = h5dget_storage_size_c(dataset_id, size)
+  END SUBROUTINE h5dget_storage_size_f
 
-!            INTEGER, EXTERNAL :: h5dwrite_ref_obj_c
-! MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_ref_obj_c(dset_id, mem_type_id,&
-                                                  mem_space_id_default, &
-                               file_space_id_default, xfer_prp_default, ref_buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REF_OBJ_C'::h5dwrite_ref_obj_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HADDR_T), DIMENSION(*) :: ref_buf
-              INTEGER(HSIZE_T), DIMENSION(*) :: dims
-              END FUNCTION h5dwrite_ref_obj_c
-            END INTERFACE
+!****s* H5D/h5dvlen_get_max_len_f
+!
+! NAME
+!  h5dvlen_get_max_len_f
+!
+! PURPOSE
+!  Returns maximum length of the VL array elements
+!
+! INPUTS
+!  dataset_id 	 - dataset identifier
+!  type_id 	 - datatype identifier
+!  space_id 	 - dataspace identifier
+! OUTPUTS
+!  size 	 - buffer size
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  NONE
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 15, 2002
+!
+! SOURCE
+  SUBROUTINE h5dvlen_get_max_len_f(dataset_id, type_id, space_id, len,  hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: type_id         ! Datatype identifier
+    INTEGER(HID_T), INTENT(IN) :: space_id        ! Dataspace identifier
+    INTEGER(SIZE_T),  INTENT(OUT)  :: len         ! Maximum length of the element
+    INTEGER, INTENT(OUT) :: hdferr                ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5dvlen_get_max_len_c(dataset_id, type_id, space_id, len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DVLEN_GET_MAX_LEN_C'::h5dvlen_get_max_len_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dataset_id
+         INTEGER(HID_T), INTENT(IN) :: type_id
+         INTEGER(HID_T), INTENT(IN) :: space_id
+         INTEGER(SIZE_T), INTENT(OUT)  :: len
+       END FUNCTION h5dvlen_get_max_len_c
+    END INTERFACE
 
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
+    hdferr = h5dvlen_get_max_len_c(dataset_id, type_id,  space_id, len)
+  END SUBROUTINE h5dvlen_get_max_len_f
 
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
+!
+!****s* H5D/h5dget_space_status_f
+!
+! NAME
+!  h5dget_space_status_f
+!
+! PURPOSE
+!  Returns the status of data space allocation.
+!
+! INPUTS
+!  dset_id	 - dataset identifier
+! OUTPUTS
+!  flag          - status; may have one of the following values:
+!		    H5D_SPACE_STS_ERROR_F
+!		    H5D_SPACE_STS_NOT_ALLOCATED_F
+!		    H5D_SPACE_STS_PART_ALLOCATED_F
+!		    H5D_SPACE_STS_ALLOCATED_F
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  March 12, 2003
+!
+! SOURCE
+  SUBROUTINE h5dget_space_status_f(dset_id, flag, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id  ! Dataspace identifier
+    INTEGER, INTENT(IN)        :: flag     ! Memory buffer to fill in
+    INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+  !*****
+    INTERFACE
+       INTEGER FUNCTION h5dget_space_status_c(dset_id, flag)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_SPACE_STATUS_C'::h5dget_space_status_c
+         !DEC$ENDIF
+         INTEGER(HID_T) :: dset_id
+         INTEGER        :: flag
+       END FUNCTION h5dget_space_status_c
+    END INTERFACE
 
-            allocate(ref_buf(dims(1)), stat=hdferr)
-            if (hdferr .NE. 0 ) then
-                hdferr = -1
-                return
-            else
-                do j = 1, dims(1)
-                   ref_buf(j) = buf(j)%ref
-                enddo
-            endif
-            hdferr = h5dwrite_ref_obj_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, ref_buf, dims(1))
-            deallocate(ref_buf)
+    hdferr = h5dget_space_status_c(dset_id, flag)
+  END SUBROUTINE h5dget_space_status_f
 
-          END SUBROUTINE h5dwrite_reference_obj
+!
+!****s* H5D/h5dcreate_anon_f
+!
+! NAME
+!  h5dcreate_anon_f
+!
+! PURPOSE
+!  Creates a dataset in a file without linking it into the file structure
+!
+! INPUTS
+!  loc_id	 - Identifier of the file or group within which to create the dataset.
+!  type_id	 - Identifier of the datatype to use when creating the dataset.
+!  space_id	 - Identifier of the dataspace to use when creating the dataset.
+! OUTPUTS
+!  dset_id	 - dataset identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  dcpl_id       - Dataset creation property list identifier.
+!  dapl_id  	 - Dataset access property list identifier.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 11, 2008
+!
+! SOURCE
+  SUBROUTINE h5dcreate_anon_f(loc_id, type_id, space_id, dset_id, hdferr, dcpl_id, dapl_id)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier.
+    INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier.
+    INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier.
+    INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier.
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code.
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dcpl_id  ! Dataset creation property list identifier.
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dapl_id  ! Dataset access property list identifier.
+!*****
+    INTEGER(HID_T) :: dcpl_id_default
+    INTEGER(HID_T) :: dapl_id_default
 
-          SUBROUTINE h5dwrite_reference_dsetreg(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims ! size of the bufffer buf
-            TYPE(hdset_reg_ref_t_f), DIMENSION(dims(1)), INTENT(IN) :: buf ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
+    !
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5dcreate_anon_c(loc_id, type_id, space_id, dcpl_id_default, dapl_id_default, dset_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DCREATE_ANON_C'::h5dcreate_anon_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         INTEGER(HID_T), INTENT(IN) :: type_id
+         INTEGER(HID_T), INTENT(IN) :: space_id
+         INTEGER(HID_T) :: dcpl_id_default
+         INTEGER(HID_T) :: dapl_id_default
+         INTEGER(HID_T), INTENT(OUT) :: dset_id
+       END FUNCTION h5dcreate_anon_c
+    END INTERFACE
 
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-            INTEGER, ALLOCATABLE, DIMENSION(:) :: ref_buf
-            INTEGER :: i,j
+    dcpl_id_default = H5P_DEFAULT_F
+    dapl_id_default = H5P_DEFAULT_F
 
-!            INTEGER, EXTERNAL :: h5dwrite_ref_reg_c
-! MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_ref_reg_c(dset_id, mem_type_id,&
-                                                  mem_space_id_default, &
-                               file_space_id_default, xfer_prp_default, ref_buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REF_REG_C'::h5dwrite_ref_reg_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER, DIMENSION(*) :: ref_buf
-              INTEGER(HSIZE_T), DIMENSION(*) ::  dims
-              END FUNCTION h5dwrite_ref_reg_c
-            END INTERFACE
+    IF(PRESENT(dcpl_id)) dcpl_id_default = dcpl_id
+    IF(PRESENT(dapl_id)) dapl_id_default = dapl_id
 
+    hdferr = h5dcreate_anon_c(loc_id, type_id, space_id, dcpl_id_default, dapl_id_default, dset_id)
 
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
+  END SUBROUTINE h5dcreate_anon_f
 
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
+  SUBROUTINE h5dwrite_vl_integer(dset_id, mem_type_id, buf, dims, len, &
+       hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! MAX len x num_elem
+    INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len ! Array to store
+                                                     ! the length of each
+                                                     ! element
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf   ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
 
-            allocate(ref_buf(REF_REG_BUF_LEN*dims(1)), stat=hdferr)
-            if (hdferr .NE. 0 ) then
-                hdferr = -1
-                return
-            else
-                do j = 1, dims(1)
-                  do i = 1, REF_REG_BUF_LEN
-                   ref_buf(REF_REG_BUF_LEN*(j-1) + i) = buf(j)%ref(i)
-                 enddo
-                enddo
-            endif
-            hdferr = h5dwrite_ref_reg_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, ref_buf, dims)
-            deallocate(ref_buf)
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_vl_integer_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims, len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_VL_INTEGER_C'::h5dwrite_vl_integer_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5dwrite_vl_integer_c
+    END INTERFACE
 
-          END SUBROUTINE h5dwrite_reference_dsetreg
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
 
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
 
-          SUBROUTINE h5dwrite_integer_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER, INTENT(IN) :: buf ! Data buffer
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
+    hdferr = h5dwrite_vl_integer_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims, len)
 
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
+  END SUBROUTINE h5dwrite_vl_integer
 
-!            INTEGER, EXTERNAL :: h5dwrite_integer_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_integer_s_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_S_C'::h5dwrite_integer_s_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(IN) :: buf
-              END FUNCTION h5dwrite_integer_s_c
-            END INTERFACE
+  SUBROUTINE h5dread_vl_integer(dset_id, mem_type_id, buf, dims, len, &
+       hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims  ! MAX len x num_elem
+    INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len ! Array to store
+                                                        ! the length of each
+                                                        ! element
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf   ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr ! Error code
+                                   ! -1 if failed, 0 otherwise
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    INTEGER(HID_T) :: tmp
+    INTEGER :: error
 
+    INTERFACE
+       INTEGER FUNCTION h5dread_vl_integer_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims, len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_VL_INTEGER_C'::h5dread_vl_integer_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5dread_vl_integer_c
+    END INTERFACE
 
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
+    CALL h5dget_space_f(dset_id, tmp, error)
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = tmp
+    file_space_id_default = tmp
 
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
 
-            hdferr = h5dwrite_integer_s_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
+    hdferr = h5dread_vl_integer_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims, len)
 
-          END SUBROUTINE h5dwrite_integer_scalar
+  END SUBROUTINE h5dread_vl_integer
 
-          SUBROUTINE h5dwrite_integer_1(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(IN), &
-            DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
+  SUBROUTINE h5dwrite_vl_real(dset_id, mem_type_id, buf, dims, len, &
+       hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! MAX len x num_elem
+    INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len   ! Array to store
+                                                       ! the length of each
+                                                       ! element
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2)) :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
 
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
 
-!            INTEGER, EXTERNAL :: h5dwrite_integer_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_integer_1_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_1_C'::h5dwrite_integer_1_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(IN), &
-              DIMENSION(dims(1)) :: buf
-              END FUNCTION h5dwrite_integer_1_c
-            END INTERFACE
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_vl_real_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims, len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_VL_REAL_C'::h5dwrite_vl_real_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5dwrite_vl_real_c
+    END INTERFACE
 
 
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
 
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
 
-            hdferr = h5dwrite_integer_1_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
+    hdferr = h5dwrite_vl_real_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims, len)
 
-          END SUBROUTINE h5dwrite_integer_1
+  END SUBROUTINE h5dwrite_vl_real
 
-          SUBROUTINE h5dwrite_integer_2(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(IN), &
-            DIMENSION(dims(1),dims(2)) :: buf   ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
+  SUBROUTINE h5dread_vl_real(dset_id, mem_type_id, buf, dims, len, &
+       hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims  ! MAX len x num_elem
+    INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len ! Array to store the length of each element
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)) :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                           ! -1 if failed, 0 otherwise
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
 
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    INTEGER(HID_T) :: tmp
+    INTEGER :: error
 
-!            INTEGER, EXTERNAL :: h5dwrite_integer_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_integer_2_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_2_C'::h5dwrite_integer_2_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(IN), &
+    INTERFACE
+       INTEGER FUNCTION h5dread_vl_real_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims, len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_VL_REAL_C'::h5dread_vl_real_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len
+         REAL, INTENT(INOUT), &
               DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dwrite_integer_2_c
-            END INTERFACE
+       END FUNCTION h5dread_vl_real_c
+    END INTERFACE
 
+    CALL h5dget_space_f(dset_id, tmp, error)
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = tmp
+    file_space_id_default = tmp
 
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
 
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-            hdferr = h5dwrite_integer_2_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
+    hdferr = h5dread_vl_real_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims, len)
 
-          END SUBROUTINE h5dwrite_integer_2
+  END SUBROUTINE h5dread_vl_real
 
-          SUBROUTINE h5dwrite_integer_3(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
+  SUBROUTINE h5dwrite_vl_string(dset_id, mem_type_id, buf, dims, str_len, &
+       hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims   ! Number of strings
+    INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: str_len ! Array to store the length of each element
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(2)) :: buf  ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
 
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_vl_string_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            ! xfer_prp_default, tmp_buf, dims, str_len)
+            xfer_prp_default, buf, dims, str_len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_VL_STRING_C'::h5dwrite_vl_string_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims
+         INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: str_len
+         CHARACTER(LEN=*), DIMENSION(dims(2)) :: buf
+       END FUNCTION
+    END INTERFACE
 
-!            INTEGER, EXTERNAL :: h5dwrite_integer_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_integer_3_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_3_C'::h5dwrite_integer_3_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5dwrite_integer_3_c
-            END INTERFACE
 
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
 
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
 
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
+    hdferr = h5dwrite_vl_string_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims, str_len)
 
-            hdferr = h5dwrite_integer_3_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
+  END SUBROUTINE h5dwrite_vl_string
 
-          END SUBROUTINE h5dwrite_integer_3
-
-          SUBROUTINE h5dwrite_integer_4(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_integer_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_integer_4_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_4_C'::h5dwrite_integer_4_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5dwrite_integer_4_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_integer_4_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dwrite_integer_4
-
-          SUBROUTINE h5dwrite_integer_5(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_integer_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_integer_5_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_5_C'::h5dwrite_integer_5_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5dwrite_integer_5_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_integer_5_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dwrite_integer_5
-
-          SUBROUTINE h5dwrite_integer_6(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_integer_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_integer_6_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_6_C'::h5dwrite_integer_6_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5dwrite_integer_6_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_integer_6_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dwrite_integer_6
-
-          SUBROUTINE h5dwrite_integer_7(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_integer_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_integer_7_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_7_C'::h5dwrite_integer_7_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5dwrite_integer_7_c
-            END INTERFACE
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_integer_7_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dwrite_integer_7
-
-
-          SUBROUTINE h5dwrite_char_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(IN) :: buf ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwritec_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwritec_s_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_S_C'::h5dwritec_s_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(IN) :: buf
-              END FUNCTION h5dwritec_s_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwritec_s_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_char_scalar
-
-          SUBROUTINE h5dwrite_char_1(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwritec_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwritec_1_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_1_C'::h5dwritec_1_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1)) :: buf
-              END FUNCTION h5dwritec_1_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwritec_1_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_char_1
-
-          SUBROUTINE h5dwrite_char_2(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwritec_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwritec_2_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_2_C'::h5dwritec_2_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dwritec_2_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwritec_2_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_char_2
-
-          SUBROUTINE h5dwrite_char_3(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwritec_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwritec_3_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_3_C'::h5dwritec_3_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5dwritec_3_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwritec_3_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_char_3
-
-          SUBROUTINE h5dwrite_char_4(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwritec_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwritec_4_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_4_C'::h5dwritec_4_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5dwritec_4_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwritec_4_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_char_4
-
-          SUBROUTINE h5dwrite_char_5(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwritec_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwritec_5_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_5_C'::h5dwritec_5_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5dwritec_5_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwritec_5_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_char_5
-
-          SUBROUTINE h5dwrite_char_6(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwritec_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwritec_6_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_6_C'::h5dwritec_6_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5dwritec_6_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwritec_6_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_char_6
-
-          SUBROUTINE h5dwrite_char_7(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwritec_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwritec_7_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_7_C'::h5dwritec_7_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5dwritec_7_c
-            END INTERFACE
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwritec_7_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_char_7
-
-          SUBROUTINE h5dwrite_real_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(IN) :: buf ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_real_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_real_s_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_S_C'::h5dwrite_real_s_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(IN) :: buf
-              END FUNCTION h5dwrite_real_s_c
-            END INTERFACE
-
-
-            xfer_prp_default  = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_real_s_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_real_scalar
-
-          SUBROUTINE h5dwrite_real_1(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_real_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_real_1_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_1_C'::h5dwrite_real_1_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1)) :: buf
-              END FUNCTION h5dwrite_real_1_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_real_1_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_real_1
-
-          SUBROUTINE h5dwrite_real_2(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_real_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_real_2_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_2_C'::h5dwrite_real_2_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dwrite_real_2_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_real_2_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_real_2
-
-          SUBROUTINE h5dwrite_real_3(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_real_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_real_3_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_3_C'::h5dwrite_real_3_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5dwrite_real_3_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_real_3_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_real_3
-
-          SUBROUTINE h5dwrite_real_4(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_real_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_real_4_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_4_C'::h5dwrite_real_4_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5dwrite_real_4_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_real_4_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_real_4
-
-          SUBROUTINE h5dwrite_real_5(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_real_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_real_5_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_5_C'::h5dwrite_real_5_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5dwrite_real_5_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_real_5_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_real_5
-
-          SUBROUTINE h5dwrite_real_6(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_real_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_real_6_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_6_C'::h5dwrite_real_6_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5dwrite_real_6_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_real_6_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_real_6
-
-          SUBROUTINE h5dwrite_real_7(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dwrite_real_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_real_7_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_7_C'::h5dwrite_real_7_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5dwrite_real_7_c
-            END INTERFACE
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_real_7_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dwrite_real_7
-
-!----------------------------------------------------------------------
-! Name:		h5dread_f
-!
-! Purpose: 	Reads raw data from the specified dataset into buf,
-!		converting from file datatype and dataspace to memory
-!		datatype and dataspace.
-!
-! Inputs:
-!		dset_id		- dataset identifier
-!		mem_type_id	- memory type identifier
-!		dims		- 1-dim array of size 7; dims(k) has the size
-!				- of k-th dimension of the buf array
-! Outputs:
-!		buf		- buffer to read data in
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!		mem_space_id	- memory dataspace identifier
-!		file_space_id 	- file dataspace identifier
-!		xfer_prp	- trasfer property list identifier
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-!                       dims parameter was added to make code portable;
-!                       n parameter was replaced with dims parameter in
-!			the h5dwrite_reference_obj and h5dwrite_reference_dsetreg
-!			functions.  April 2, 2001
-!
-! Comment:		This function is overloaded to read INTEGER,
-!			REAL, DOUBLE PRECISION and CHARACTER buffers
-!			up to 7 dimensions, and one dimensional buffers
-!			of the TYPE(hobj_ref_t_f) and TYPE(hdset_reg_ref_t_f)
-!			types.
-!----------------------------------------------------------------------
-          SUBROUTINE h5dread_reference_obj(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            TYPE(hobj_ref_t_f), INTENT(INOUT) , &
-            DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-            INTEGER(HADDR_T), ALLOCATABLE, DIMENSION(:) :: ref_buf
-            INTEGER :: j
-
-!            INTEGER, EXTERNAL :: h5dread_ref_obj_c
-! MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_ref_obj_c(dset_id, mem_type_id,&
-                                                  mem_space_id_default, &
-                               file_space_id_default, xfer_prp_default, ref_buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REF_OBJ_C'::h5dread_ref_obj_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER(HADDR_T), DIMENSION(*) :: ref_buf
-              END FUNCTION h5dread_ref_obj_c
-            END INTERFACE
-
-            allocate(ref_buf(dims(1)), stat=hdferr)
-            if (hdferr .NE. 0) then
-                hdferr = -1
-                return
-            endif
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_ref_obj_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, ref_buf, dims)
-             do j = 1, dims(1)
-                buf(j)%ref = ref_buf(j)
-             enddo
-             deallocate(ref_buf)
-          END SUBROUTINE h5dread_reference_obj
-
-          SUBROUTINE h5dread_reference_dsetreg(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            TYPE(hdset_reg_ref_t_f), INTENT(INOUT), &
-            DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-            INTEGER, ALLOCATABLE, DIMENSION(:) :: ref_buf
-            INTEGER :: i,j
-
-!            INTEGER, EXTERNAL :: h5dread_ref_reg_c
-! MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_ref_reg_c(dset_id, mem_type_id,&
-                                                  mem_space_id_default, &
-                               file_space_id_default, xfer_prp_default, ref_buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REF_REG_C'::h5dread_ref_reg_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, DIMENSION(*) :: ref_buf
-              END FUNCTION h5dread_ref_reg_c
-            END INTERFACE
-
-            allocate(ref_buf(REF_REG_BUF_LEN*dims(1)), stat=hdferr)
-            if (hdferr .NE. 0) then
-                hdferr = -1
-                return
-            endif
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_ref_reg_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, ref_buf, dims)
-
-            do j = 1, dims(1)
-             do i = 1, REF_REG_BUF_LEN
-                   buf(j)%ref(i) = ref_buf(REF_REG_BUF_LEN*(j-1) + i)
-             enddo
-            enddo
-            deallocate(ref_buf)
-          END SUBROUTINE h5dread_reference_dsetreg
-
-
-          SUBROUTINE h5dread_integer_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(INOUT) :: buf ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_integer_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_integer_s_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_S_C'::h5dread_integer_s_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(OUT) :: buf
-              END FUNCTION h5dread_integer_s_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_integer_s_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_integer_scalar
-
-          SUBROUTINE h5dread_integer_1(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_integer_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_integer_1_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_1_C'::h5dread_integer_1_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(OUT), &
-              DIMENSION(dims(1)) :: buf
-              END FUNCTION h5dread_integer_1_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_integer_1_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_integer_1
-
-          SUBROUTINE h5dread_integer_2(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_integer_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_integer_2_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_2_C'::h5dread_integer_2_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(OUT), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dread_integer_2_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_integer_2_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dread_integer_2
-
-          SUBROUTINE h5dread_integer_3(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_integer_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_integer_3_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_3_C'::h5dread_integer_3_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(OUT), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5dread_integer_3_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_integer_3_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dread_integer_3
-
-          SUBROUTINE h5dread_integer_4(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_integer_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_integer_4_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_4_C'::h5dread_integer_4_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(OUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5dread_integer_4_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_integer_4_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dread_integer_4
-
-          SUBROUTINE h5dread_integer_5(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_integer_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_integer_5_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_5_C'::h5dread_integer_5_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5dread_integer_5_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_integer_5_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dread_integer_5
-
-          SUBROUTINE h5dread_integer_6(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_integer_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_integer_6_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_6_C'::h5dread_integer_6_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5dread_integer_6_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_integer_6_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dread_integer_6
-
-          SUBROUTINE h5dread_integer_7(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_integer_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_integer_7_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_7_C'::h5dread_integer_7_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5dread_integer_7_c
-            END INTERFACE
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_integer_7_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims)
-
-          END SUBROUTINE h5dread_integer_7
-
-          SUBROUTINE h5dread_char_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(INOUT) :: buf ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dreadc_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dreadc_s_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_S_C'::h5dreadc_s_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(OUT) :: buf
-              END FUNCTION h5dreadc_s_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dreadc_s_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_char_scalar
-
-          SUBROUTINE h5dread_char_1(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dreadc_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dreadc_1_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_1_C'::h5dreadc_1_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1)) :: buf
-              END FUNCTION h5dreadc_1_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dreadc_1_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_char_1
-
-          SUBROUTINE h5dread_char_2(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dreadc_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dreadc_2_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_2_C'::h5dreadc_2_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dreadc_2_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dreadc_2_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_char_2
-
-          SUBROUTINE h5dread_char_3(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dreadc_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dreadc_3_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_3_C'::h5dreadc_3_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5dreadc_3_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dreadc_3_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_char_3
-
-          SUBROUTINE h5dread_char_4(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dreadc_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dreadc_4_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_4_C'::h5dreadc_4_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
-              END FUNCTION h5dreadc_4_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dreadc_4_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_char_4
-
-          SUBROUTINE h5dread_char_5(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dreadc_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dreadc_5_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_5_C'::h5dreadc_5_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5dreadc_5_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dreadc_5_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_char_5
-
-          SUBROUTINE h5dread_char_6(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dreadc_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dreadc_6_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_6_C'::h5dreadc_6_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5dreadc_6_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dreadc_6_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_char_6
-
-          SUBROUTINE h5dread_char_7(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            CHARACTER(LEN=*), INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dreadc_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dreadc_7_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_7_C'::h5dreadc_7_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              CHARACTER(LEN=*), INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5dreadc_7_c
-            END INTERFACE
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dreadc_7_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_char_7
-
-          SUBROUTINE h5dread_real_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(INOUT) :: buf ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_real_s_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_real_s_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_S_C'::h5dread_real_s_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(OUT) :: buf
-              END FUNCTION h5dread_real_s_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_real_s_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_real_scalar
-
-          SUBROUTINE h5dread_real_1(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_real_1_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_real_1_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_1_C'::h5dread_real_1_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1)) :: buf
-              END FUNCTION h5dread_real_1_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_real_1_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_real_1
-
-          SUBROUTINE h5dread_real_2(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_real_2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_real_2_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_2_C'::h5dread_real_2_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dread_real_2_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_real_2_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_real_2
-
-          SUBROUTINE h5dread_real_3(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_real_3_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_real_3_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_3_C'::h5dread_real_3_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3)) :: buf
-              END FUNCTION h5dread_real_3_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_real_3_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_real_3
-
-          SUBROUTINE h5dread_real_4(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3), dims(4)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_real_4_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_real_4_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_4_C'::h5dread_real_4_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3), dims(4)) :: buf
-              END FUNCTION h5dread_real_4_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_real_4_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_real_4
-
-          SUBROUTINE h5dread_real_5(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_real_5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_real_5_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_5_C'::h5dread_real_5_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
-              END FUNCTION h5dread_real_5_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_real_5_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_real_5
-
-          SUBROUTINE h5dread_real_6(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_real_6_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_real_6_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_6_C'::h5dread_real_6_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
-              END FUNCTION h5dread_real_6_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_real_6_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_real_6
-
-          SUBROUTINE h5dread_real_7(dset_id, mem_type_id, buf, dims, hdferr, &
-                                        mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T) :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-!            INTEGER, EXTERNAL :: h5dread_real_7_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dread_real_7_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_7_C'::h5dread_real_7_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
-              END FUNCTION h5dread_real_7_c
-            END INTERFACE
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_real_7_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, buf, dims)
-
-          END SUBROUTINE h5dread_real_7
-
-!----------------------------------------------------------------------
-! Name:		h5dget_space_f
-!
-! Purpose:	Returns an identifier for a copy of the dataspace for a
-!		dataset.
-!
-! Inputs:
-!		dataset_id	- dataset identifier
-! Outputs:
-!		dataspace_id	- dataspace identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-          SUBROUTINE h5dget_space_f(dataset_id, dataspace_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
-            INTEGER(HID_T), INTENT(OUT) :: dataspace_id   ! Dataspace identifier
-            INTEGER, INTENT(OUT) :: hdferr                ! Error code
-
-!            INTEGER, EXTERNAL :: h5dget_space_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dget_space_c(dataset_id, dataspace_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_SPACE_C'::h5dget_space_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dataset_id
-              INTEGER(HID_T), INTENT(OUT) :: dataspace_id
-              END FUNCTION h5dget_space_c
-            END INTERFACE
-
-            hdferr = h5dget_space_c(dataset_id, dataspace_id)
-          END SUBROUTINE h5dget_space_f
-
-!----------------------------------------------------------------------
-! Name:		h5dget_type_f
-!
-! Purpose:	Returns an identifier for a copy of the datatype for a
-!		dataset.
-!
-! Inputs:
-!		dataset_id	- dataset identifier
-! Outputs:
-!		datatype_id	- dataspace identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5dget_type_f(dataset_id, datatype_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
-            INTEGER(HID_T), INTENT(OUT) :: datatype_id    ! Datatype identifier
-            INTEGER, INTENT(OUT) :: hdferr                ! Error code
-!            INTEGER, EXTERNAL :: h5dget_type_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dget_type_c (dataset_id, datatype_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_TYPE_C'::h5dget_type_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dataset_id
-              INTEGER(HID_T), INTENT(OUT) :: datatype_id
-              END FUNCTION h5dget_type_c
-            END INTERFACE
-
-            hdferr = h5dget_type_c (dataset_id, datatype_id)
-          END SUBROUTINE h5dget_type_f
-
-!----------------------------------------------------------------------
-! Name:		h5dset_extent (instead of obsolete name: h5dextend_f)
-!
-! Purpose:	Extends a dataset with unlimited dimension.
-!
-! Inputs:
-!		dataset_id	- dataset identifier
-!		size		- array containing the new magnitude of
-!				  each dimension
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-!                       Changed name from the now obsolete h5dextend_f
-!                       to h5dset_extent_f. Provided interface to old name
-!                       for backward compatability. -MSB- March 14, 2008
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-  SUBROUTINE h5dset_extent_f(dataset_id, size, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
-    INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN)  :: size
-    ! Array containing
-    ! dimensions' sizes
-    INTEGER, INTENT(OUT) :: hdferr                ! Error code
-
-    !
-    !  MS FORTRAN needs explicit interface for C functions called here.
-    !
-    INTERFACE
-       INTEGER FUNCTION h5dset_extent_c(dataset_id, size)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DSET_EXTENT_C'::h5dset_extent_c
-         !DEC$ENDIF
-         INTEGER(HID_T), INTENT(IN) :: dataset_id
-         INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN)  :: size
-       END FUNCTION h5dset_extent_c
-    END INTERFACE
-
-    hdferr = H5Dset_extent_c(dataset_id, size)
-  END SUBROUTINE h5dset_extent_f
-
-
-!----------------------------------------------------------------------
-! Name:		h5dget_create_plist_f
-!
-! Purpose:	Returns an identifier for a copy of the dataset creation
-!		property list for a dataset.
-!
-! Inputs:
-!		dataset_id	- dataset identifier
-! Outputs:
-!		plist_id	- creation property list identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5dget_create_plist_f(dataset_id, plist_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
-            INTEGER(HID_T), INTENT(OUT) :: plist_id    ! Dataset creation
-                                                  ! property list identifier
-            INTEGER, INTENT(OUT) :: hdferr                ! Error code
-
-!            INTEGER, EXTERNAL :: h5dget_create_plist_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dget_create_plist_c(dataset_id, plist_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_CREATE_PLIST_C'::h5dget_create_plist_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dataset_id
-              INTEGER(HID_T), INTENT(OUT) :: plist_id
-              END FUNCTION h5dget_create_plist_c
-            END INTERFACE
-
-            hdferr = h5dget_create_plist_c(dataset_id, plist_id)
-          END SUBROUTINE h5dget_create_plist_f
-
-!----------------------------------------------------------------------
-! Name:		h5dget_storage_size_f
-!
-! Purpose:	Returns the amount of storage requires by a dataset
-!
-! Inputs:
-!		dataset_id	- dataset identifier
-! Outputs:
-!		size		- datastorage size
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		October 15, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5dget_storage_size_f(dataset_id, size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
-            INTEGER(HSIZE_T),  INTENT(OUT)  :: size
-                                                          ! Amount of storage
-                                                          ! allocated for dataset
-            INTEGER, INTENT(OUT) :: hdferr                ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5dget_storage_size_c(dataset_id, size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_STORAGE_SIZE_C'::h5dget_storage_size_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dataset_id
-              INTEGER(HSIZE_T), INTENT(OUT)  :: size
-              END FUNCTION h5dget_storage_size_c
-            END INTERFACE
-
-            hdferr = h5dget_storage_size_c(dataset_id, size)
-          END SUBROUTINE h5dget_storage_size_f
-
-!----------------------------------------------------------------------
-! Name:		h5dvlen_get_max_len_f
-!
-! Purpose:	Returns maximum lenght of the VL array elements
-!
-! Inputs:
-!		dataset_id	- dataset identifier
-!		type_id		- datatype identifier
-!		space_id	- dataspace identifier
-! Outputs:
-!		size		- buffer size
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		October 15, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5dvlen_get_max_len_f(dataset_id, type_id, space_id, len,  hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: type_id         ! Datatype identifier
-            INTEGER(HID_T), INTENT(IN) :: space_id        ! Dataspace identifier
-            INTEGER(SIZE_T),  INTENT(OUT)  :: len         ! Maximum length of the element
-            INTEGER, INTENT(OUT) :: hdferr                ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5dvlen_get_max_len_c(dataset_id, type_id, space_id, len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DVLEN_GET_MAX_LEN_C'::h5dvlen_get_max_len_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dataset_id
-              INTEGER(HID_T), INTENT(IN) :: type_id
-              INTEGER(HID_T), INTENT(IN) :: space_id
-              INTEGER(SIZE_T), INTENT(OUT)  :: len
-              END FUNCTION h5dvlen_get_max_len_c
-            END INTERFACE
-
-            hdferr = h5dvlen_get_max_len_c(dataset_id, type_id,  space_id, len)
-          END SUBROUTINE h5dvlen_get_max_len_f
-
-          SUBROUTINE h5dwrite_vl_integer(dset_id, mem_type_id, buf, dims, len, &
-                                         hdferr, &
-                                         mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! MAX len x num_elem
-            INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len ! Array to store
-                                                              ! the lenght of each
-                                                              ! element
-            INTEGER, INTENT(IN), &
-            DIMENSION(dims(1),dims(2)) :: buf   ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_vl_integer_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims, len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_VL_INTEGER_C'::h5dwrite_vl_integer_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len
-              INTEGER, INTENT(IN), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dwrite_vl_integer_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_vl_integer_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims, len)
-
-          END SUBROUTINE h5dwrite_vl_integer
-
-          SUBROUTINE h5dread_vl_integer(dset_id, mem_type_id, buf, dims, len, &
-                                         hdferr, &
-                                         mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! MAX len x num_elem
-            INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len ! Array to store
-                                                              ! the lenght of each
-                                                              ! element
-            INTEGER, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2)) :: buf   ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-                                                ! -1 if failed, 0 otherwise
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-            INTEGER(HID_T) :: tmp
-            INTEGER :: error
-
-            INTERFACE
-              INTEGER FUNCTION h5dread_vl_integer_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims, len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_VL_INTEGER_C'::h5dread_vl_integer_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len
-              INTEGER, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dread_vl_integer_c
-            END INTERFACE
-
-            CALL h5dget_space_f(dset_id, tmp, error)
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = tmp
-            file_space_id_default = tmp
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_vl_integer_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims, len)
-
-          END SUBROUTINE h5dread_vl_integer
-
-          SUBROUTINE h5dwrite_vl_real(dset_id, mem_type_id, buf, dims, len, &
-                                         hdferr, &
-                                         mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! MAX len x num_elem
-            INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len ! Array to store
-                                                              ! the lenght of each
-                                                              ! element
-            REAL, INTENT(IN), &
-            DIMENSION(dims(1),dims(2)) :: buf   ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_vl_real_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims, len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_VL_REAL_C'::h5dwrite_vl_real_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: len
-              REAL, INTENT(IN), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dwrite_vl_real_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dwrite_vl_real_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims, len)
-
-          END SUBROUTINE h5dwrite_vl_real
-
-          SUBROUTINE h5dread_vl_real(dset_id, mem_type_id, buf, dims, len, &
-                                         hdferr, &
-                                         mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! MAX len x num_elem
-            INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len ! Array to store
-                                                              ! the lenght of each
-                                                              ! element
-            REAL, INTENT(INOUT), &
-            DIMENSION(dims(1),dims(2)) :: buf   ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-                                                ! -1 if failed, 0 otherwise
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-            INTEGER(HID_T) :: tmp
-            INTEGER :: error
-
-            INTERFACE
-              INTEGER FUNCTION h5dread_vl_real_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-                                          xfer_prp_default, buf, dims, len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_VL_REAL_C'::h5dread_vl_real_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
-              INTEGER(SIZE_T), INTENT(INOUT), DIMENSION(*) :: len
-              REAL, INTENT(INOUT), &
-              DIMENSION(dims(1),dims(2)) :: buf
-              END FUNCTION h5dread_vl_real_c
-            END INTERFACE
-
-            CALL h5dget_space_f(dset_id, tmp, error)
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = tmp
-            file_space_id_default = tmp
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-
-            hdferr = h5dread_vl_real_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims, len)
-
-          END SUBROUTINE h5dread_vl_real
-
-          SUBROUTINE h5dwrite_vl_string(dset_id, mem_type_id, buf, dims, str_len, &
-                                         hdferr, &
-                                         mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! number of strings
-            INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: str_len ! Array to store
-                                                              ! the lenght of each
-                                                              ! element
-            CHARACTER(LEN=*), INTENT(IN), &
-            DIMENSION(dims(2)) :: buf           ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                                ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-!            CHARACTER, DIMENSION(dims(1)*dims(2)) :: tmp_buf
-
-            INTERFACE
-              INTEGER FUNCTION h5dwrite_vl_string_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-!                                          xfer_prp_default, tmp_buf, dims, str_len)
-                                          xfer_prp_default, buf, dims, str_len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_VL_STRING_C'::h5dwrite_vl_string_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims
-              INTEGER(SIZE_T), INTENT(IN), DIMENSION(*) :: str_len
-!              CHARACTER, INTENT(IN), &
-!              DIMENSION(dims(1)*dims(2)) :: tmp_buf
-              CHARACTER(LEN=*), DIMENSION(dims(2)) :: buf
-              END FUNCTION h5dwrite_vl_string_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-!            do i = 1, dims(2)
-!               do j = 1, dims(1)
-!               tmp_buf((i-1)*dims(1) +j) = buf(i)(j:j)
-!               enddo
-!            enddo
-!              write(*,*) (tmp_buf(j:j), j=1,dims(1)*dims(2))
-!              write(*,*) str_len(1), str_len(2), str_len(3), str_len(4)
-
-            hdferr = h5dwrite_vl_string_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims, str_len)
-
-          END SUBROUTINE h5dwrite_vl_string
-
-          SUBROUTINE h5dread_vl_string(dset_id, mem_type_id, buf, dims, str_len, &
+  SUBROUTINE h5dread_vl_string(dset_id, mem_type_id, buf, dims, str_len, &
                                          hdferr, &
                                          mem_space_id, file_space_id, xfer_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
-            INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! number of strings
-            INTEGER(SIZE_T), INTENT(OUT), DIMENSION(*) :: str_len ! Array to store
-                                                              ! the lenght of each
-                                                              ! element
-            CHARACTER(LEN=*), INTENT(OUT), &
-            DIMENSION(dims(2)) :: buf           ! Data buffer
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id
-                                               ! Memory dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id
-                                                ! File dataspace identfier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp
-                                                ! Transfer property list identifier
-
-            INTEGER(HID_T) :: xfer_prp_default
-            INTEGER(HID_T)  :: mem_space_id_default
-            INTEGER(HID_T) :: file_space_id_default
-!            CHARACTER, DIMENSION(dims(1)*dims(2)) :: tmp_buf
-!            integer i, j
-
-            INTERFACE
-              INTEGER FUNCTION h5dread_vl_string_c(dset_id, mem_type_id, &
-                                          mem_space_id_default, &
-                                          file_space_id_default, &
-!                                          xfer_prp_default, tmp_buf, dims, str_len)
-                                          xfer_prp_default, buf, dims, str_len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_VL_STRING_C'::h5dread_vl_string_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HID_T), INTENT(IN) :: mem_type_id
-              INTEGER(HID_T)  :: mem_space_id_default
-              INTEGER(HID_T) :: file_space_id_default
-              INTEGER(HID_T) :: xfer_prp_default
-              INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims
-              INTEGER(SIZE_T), INTENT(OUT), DIMENSION(*) :: str_len
-!              CHARACTER, INTENT(IN), &
-!              DIMENSION(dims(1)*dims(2)) :: tmp_buf
-              CHARACTER(LEN=*), DIMENSION(dims(2)) :: buf
-              END FUNCTION h5dread_vl_string_c
-            END INTERFACE
-
-
-            xfer_prp_default = H5P_DEFAULT_F
-            mem_space_id_default = H5S_ALL_F
-            file_space_id_default = H5S_ALL_F
-
-            if (present(xfer_prp)) xfer_prp_default = xfer_prp
-            if (present(mem_space_id))  mem_space_id_default = mem_space_id
-            if (present(file_space_id)) file_space_id_default = file_space_id
-!            do i = 1, dims(2)
-!               do j = 1, dims(1)
-!               tmp_buf((i-1)*dims(1) +j) = buf(i)(j:j)
-!               enddo
-!            enddo
-!              write(*,*) (tmp_buf(j:j), j=1,dims(1)*dims(2))
-!              write(*,*) str_len(1), str_len(2), str_len(3), str_len(4)
-
-            hdferr = h5dread_vl_string_c(dset_id, mem_type_id, mem_space_id_default, &
-                                file_space_id_default, xfer_prp_default, &
-                                buf, dims, str_len)
-          RETURN
-          END SUBROUTINE h5dread_vl_string
-
-!----------------------------------------------------------------------
-! Name:		h5dfill_integer
-!
-! Purpose:      Fills dataspace elements with a fill value in a memory buffer.
-!               Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes
-!               of the fillvalues and buffers are supported. Buffer and fillvalue
-!               are assumed to have the same datatype.
-!               Only one-dimesional buffers are supported.
-!
-! Inputs:
-!		fill_value	- fill value
-!		space_id	- memory space selection identifier
-!		buf		- data buffer iin memory ro apply selection to
-!				- of k-th dimension of the buf array
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-!
-! Programmer:	Elena Pourmal
-!		March 12, 2003
-!
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5dfill_integer(fill_value, space_id, buf,  hdferr)
-            IMPLICIT NONE
-            INTEGER, INTENT(IN) :: fill_value  ! Fill value
-            INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
-            INTEGER, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-
-            INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
-            INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
-
-!            INTEGER, EXTERNAL :: h5dfill_integer_c
-! MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dfill_integer_c(fill_value, fill_type_id, space_id, &
-                                         buf, mem_type_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DFILL_INTEGER_C'::h5dfill_integer_c
-              !DEC$ENDIF
-              INTEGER, INTENT(IN) :: fill_value  ! Fill value
-              INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
-              INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
-              INTEGER, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
-              INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
-              END FUNCTION h5dfill_integer_c
-            END INTERFACE
-            fill_type_id = H5T_NATIVE_INTEGER
-            mem_type_id  = H5T_NATIVE_INTEGER
-
-            hdferr = h5dfill_integer_c(fill_value, fill_type_id, space_id, &
-                               buf, mem_type_id)
-
-          END SUBROUTINE h5dfill_integer
-
-!----------------------------------------------------------------------
-! Name:		h5dfill_real
-!
-! Purpose:      Fills dataspace elements with a fill value in a memory buffer.
-!               Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes
-!               of the fillvalues and buffers are supported. Buffer and fillvalue
-!               are assumed to have the same datatype.
-!               Only one-dimesional buffers are supported.
-!
-! Inputs:
-!		fill_value	- fill value
-!		space_id	- memory space selection identifier
-!		buf		- data buffer iin memory ro apply selection to
-!				- of k-th dimension of the buf array
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-!
-! Programmer:	Elena Pourmal
-!		March 12, 2003
-!
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5dfill_real(fill_valuer, space_id, buf,  hdferr)
-            IMPLICIT NONE
-            REAL, INTENT(IN) :: fill_valuer  ! Fill value
-            INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
-            REAL, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-
-            INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
-            INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
-
-!            INTEGER, EXTERNAL :: h5dfill_real_c
-! MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dfill_real_c(fill_valuer, fill_type_id, space_id, &
-                                         buf, mem_type_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DFILL_REAL_C'::h5dfill_real_c
-              !DEC$ENDIF
-              REAL, INTENT(IN) :: fill_valuer  ! Fill value
-              INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
-              INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
-              REAL, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
-              INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
-              END FUNCTION h5dfill_real_c
-            END INTERFACE
-            fill_type_id = H5T_NATIVE_REAL
-            mem_type_id  = H5T_NATIVE_REAL
-
-            hdferr = h5dfill_real_c(fill_valuer, fill_type_id, space_id, &
-                               buf, mem_type_id)
-          END SUBROUTINE h5dfill_real
-
-!----------------------------------------------------------------------
-! Name:		h5dfill_char
-!
-! Purpose:      Fills dataspace elements with a fill value in a memory buffer.
-!               Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes
-!               of the fillvalues and buffers are supported. Buffer and fillvalue
-!               are assumed to have the same datatype.
-!               Only one-dimesional buffers are supported.
-!
-! Inputs:
-!		fill_value	- fill value
-!		space_id	- memory space selection identifier
-!		buf		- data buffer iin memory ro apply selection to
-!				- of k-th dimension of the buf array
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-!
-! Programmer:	Elena Pourmal
-!		March 12, 2003
-!
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5dfill_char(fill_value, space_id, buf,  hdferr)
-            IMPLICIT NONE
-            CHARACTER, INTENT(IN) :: fill_value  ! Fill value
-            INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
-            CHARACTER, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-
-            INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
-            INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
-
-!            INTEGER, EXTERNAL :: h5dfillc_c
-! MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dfillc_c(fill_value, fill_type_id, space_id, &
-                                         buf, mem_type_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DFILLC_C'::h5dfillc_c
-              !DEC$ENDIF
-              CHARACTER, INTENT(IN) :: fill_value  ! Fill value
-              INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
-              INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
-              CHARACTER, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
-              INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
-              END FUNCTION h5dfillc_c
-            END INTERFACE
-            fill_type_id = H5T_NATIVE_CHARACTER
-            mem_type_id  = H5T_NATIVE_CHARACTER
-
-            hdferr = h5dfillc_c(fill_value, fill_type_id, space_id, &
-                               buf, mem_type_id)
-
-          END SUBROUTINE h5dfill_char
-
-!----------------------------------------------------------------------
-! Name:		h5dget_space_status_f
-!
-! Purpose:      Returns the status of data space allocation.
-!
-! Inputs:
-!		dset_id		- dataset identifier
-! Outputs:
-!               flag            - status; may have one of the following values:
-!				  H5D_SPACE_STS_ERROR_F
-!				  H5D_SPACE_STS_NOT_ALLOCATED_F
-!				  H5D_SPACE_STS_PART_ALLOCATED_F
-!				  H5D_SPACE_STS_ALLOCATED_F
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-!
-! Programmer:	Elena Pourmal
-!		March 12, 2003
-!
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5dget_space_status_f(dset_id, flag, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id  ! Dataspace identifier
-            INTEGER, INTENT(IN)        :: flag     ! Memory buffer to fill in
-            INTEGER, INTENT(OUT)       :: hdferr   ! Error code
-
-!            INTEGER, EXTERNAL :: h5dget_space_status_c
-! MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5dget_space_status_c(dset_id, flag)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_SPACE_STATUS_C'::h5dget_space_status_c
-              !DEC$ENDIF
-              INTEGER(HID_T) :: dset_id
-              INTEGER        :: flag
-              END FUNCTION h5dget_space_status_c
-            END INTERFACE
-
-            hdferr = h5dget_space_status_c(dset_id, flag)
-          END SUBROUTINE h5dget_space_status_f
-
-!----------------------------------------------------------------------
-! Name:		h5dcreate_anon_f
-!
-! Purpose: 	Creates a dataset in a file without linking it into the file structure
-!
-! Inputs:
-!		loc_id		- Identifier of the file or group within which to create the dataset.
-!		type_id		- Identifier of the datatype to use when creating the dataset.
-!		space_id	- Identifier of the dataspace to use when creating the dataset.
-! Outputs:
-!		dset_id		- dataset identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!               dcpl_id         - Dataset creation property list identifier.
-!               dapl_id  	- Dataset access property list identifier.
-!
-! Programmer:   M. Scot Breitenfeld
-!		February 11, 2008
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-  SUBROUTINE h5dcreate_anon_f(loc_id, type_id, space_id, dset_id, hdferr, dcpl_id, dapl_id)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier.
-    INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier.
-    INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier.
-    INTEGER(HID_T), INTENT(OUT) :: dset_id ! Dataset identifier.
-    INTEGER, INTENT(OUT) :: hdferr         ! Error code.
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dcpl_id  ! Dataset creation property list identifier.
-    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: dapl_id  ! Dataset access property list identifier.
-
-    INTEGER(HID_T) :: dcpl_id_default
-    INTEGER(HID_T) :: dapl_id_default
+    INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims ! number of strings
+    INTEGER(SIZE_T), INTENT(OUT), DIMENSION(*) :: str_len ! Array to store
+    ! the length of each
+    ! element
+    CHARACTER(LEN=*), INTENT(OUT), &
+         DIMENSION(dims(2)) :: buf      ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
 
-!
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
-       INTEGER FUNCTION h5dcreate_anon_c(loc_id, type_id, space_id, dcpl_id_default, dapl_id_default, dset_id)
+       INTEGER FUNCTION h5dread_vl_string_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims, str_len)
          USE H5GLOBAL
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DCREATE_ANON_C'::h5dcreate_anon_c
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_VL_STRING_C'::h5dread_vl_string_c
          !DEC$ENDIF
-         INTEGER(HID_T), INTENT(IN) :: loc_id
-         INTEGER(HID_T), INTENT(IN) :: type_id
-         INTEGER(HID_T), INTENT(IN) :: space_id
-         INTEGER(HID_T) :: dcpl_id_default
-         INTEGER(HID_T) :: dapl_id_default
-         INTEGER(HID_T), INTENT(OUT) :: dset_id
-       END FUNCTION h5dcreate_anon_c
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(2) :: dims
+         INTEGER(SIZE_T), INTENT(OUT), DIMENSION(*) :: str_len
+         CHARACTER(LEN=*), DIMENSION(dims(2)) :: buf
+       END FUNCTION h5dread_vl_string_c
     END INTERFACE
 
-    dcpl_id_default = H5P_DEFAULT_F
-    dapl_id_default = H5P_DEFAULT_F
-
-    IF(PRESENT(dcpl_id)) dcpl_id_default = dcpl_id
-    IF(PRESENT(dapl_id)) dapl_id_default = dapl_id
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
 
-    hdferr = h5dcreate_anon_c(loc_id, type_id, space_id, dcpl_id_default, dapl_id_default, dset_id)
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
 
-  END SUBROUTINE h5dcreate_anon_f
+    hdferr = h5dread_vl_string_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims, str_len)
+    RETURN
+  END SUBROUTINE h5dread_vl_string
 
-!----------------------------------------------------------------------
-! Name:		h5dget_access_plist_f
 !
-! Purpose: 	Returns a copy of the dataset creation property list.
+!****s* H5D/h5dget_space_f
 !
-! Inputs:
-!		dset_id         - dataset identifier.
-! Outputs:
-!		plist_id	- the dataset access property list identifier.
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
+! NAME
+!  h5dget_space_f
 !
-! Programmer:   M. Scot Breitenfeld
-!		April 13, 2009
+! PURPOSE
+!  Returns an identifier for a copy of the dataspace for a
+!  dataset.
 !
-! Modifications:
+! INPUTS
+!  dataset_id 	 - dataset identifier
+! OUTPUTS
+!  dataspace_id  - dataspace identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-  SUBROUTINE h5dget_access_plist_f(dset_id, plist_id, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! SOURCE
+  SUBROUTINE h5dget_space_f(dataset_id, dataspace_id, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: dset_id
-    INTEGER(HID_T), INTENT(OUT) :: plist_id
-    INTEGER, INTENT(OUT) :: hdferr         ! Error code.
-
+    INTEGER(HID_T), INTENT(IN) :: dataset_id      ! Dataset identifier
+    INTEGER(HID_T), INTENT(OUT) :: dataspace_id   ! Dataspace identifier
+    INTEGER, INTENT(OUT) :: hdferr                ! Error code
+!*****
     INTERFACE
-       INTEGER FUNCTION h5dget_access_plist_c(dset_id, plist_id)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_ACCESS_PLIST_C'::h5dget_access_plist_c
-         !DEC$ENDIF
-         INTEGER(HID_T), INTENT(IN) :: dset_id
-         INTEGER(HID_T), INTENT(OUT) :: plist_id
-       END FUNCTION h5dget_access_plist_c
-    END INTERFACE
-
-    hdferr = h5dget_access_plist_c(dset_id, plist_id)
+       INTEGER FUNCTION h5dget_space_c(dataset_id, dataspace_id)
+       USE H5GLOBAL
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_SPACE_C'::h5dget_space_c
+       !DEC$ENDIF
+       INTEGER(HID_T), INTENT(IN) :: dataset_id
+       INTEGER(HID_T), INTENT(OUT) :: dataspace_id
+     END FUNCTION h5dget_space_c
+  END INTERFACE
 
-  END SUBROUTINE h5dget_access_plist_f
+  hdferr = h5dget_space_c(dataset_id, dataspace_id)
+END SUBROUTINE h5dget_space_f
+
+!****s* H5D/h5dget_access_plist_f
+!
+! NAME
+!  h5dget_access_plist_f
+!
+! PURPOSE
+!  Returns a copy of the dataset creation property list.
+!
+! INPUTS
+!  dset_id       - Dataset identifier
+!
+! OUTPUTS
+!  plist_id	 - Dataset access property list identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR   
+!  M. Scot Breitenfeld
+!  April 13, 2009
+!
+! SOURCE
+SUBROUTINE h5dget_access_plist_f(dset_id, plist_id, hdferr)
+  IMPLICIT NONE
+  INTEGER(HID_T), INTENT(IN)  :: dset_id
+  INTEGER(HID_T), INTENT(OUT) :: plist_id 
+  INTEGER       , INTENT(OUT) :: hdferr  
+!*****
+  INTERFACE
+     INTEGER FUNCTION h5dget_access_plist_c(dset_id, plist_id)
+       USE H5GLOBAL
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DGET_ACCESS_PLIST_C'::h5dget_access_plist_c
+       !DEC$ENDIF
+       INTEGER(HID_T), INTENT(IN) :: dset_id
+       INTEGER(HID_T), INTENT(OUT) :: plist_id
+     END FUNCTION h5dget_access_plist_c
+  END INTERFACE
+  
+  hdferr = h5dget_access_plist_c(dset_id, plist_id)
+  
+END SUBROUTINE h5dget_access_plist_f
 
 END MODULE H5D
 
diff --git a/fortran/src/H5Dff_F03.f90 b/fortran/src/H5Dff_F03.f90
new file mode 100644
index 0000000..61d5dfc
--- /dev/null
+++ b/fortran/src/H5Dff_F03.f90
@@ -0,0 +1,2404 @@
+!****h* ROBODoc/H5D (F03)
+!
+! NAME
+!  H5D_PROVISIONAL
+!
+! PURPOSE
+!  This file contains Fortran 90 and Fortran 2003 interfaces for H5D functions.
+!  It contains the same functions as H5Dff_F90.f90 but includes the
+!  Fortran 2003 functions and the interface listings. This file will be compiled
+!  instead of H5Dff_F90.f90 if Fortran 2003 functions are enabled.
+!
+! COPYRIGHT
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!  Copyright by The HDF Group.                                                 *
+!  Copyright by the Board of Trustees of the University of Illinois.           *
+!  All rights reserved.                                                        *
+!                                                                              *
+!  This file is part of HDF5.  The full HDF5 copyright notice, including       *
+!  terms governing use, modification, and redistribution, is contained in      *
+!  the files COPYING and Copyright.html.  COPYING can be found at the root     *
+!  of the source code distribution tree; Copyright.html can be found at the    *
+!  root level of an installed copy of the electronic HDF5 document set and     *
+!  is linked from the top-level documents page.  It can also be found at       *
+!  http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have            *
+!  access to either file, you may request a copy from help at hdfgroup.org.       *
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!  (1) The maximum rank of an array allowed in Fortran is 7, therefore
+!  we only provide an interface for arrays up to and including rank 7.
+!
+!  (2) Unfortunately we are using a generic interface and one of the factors
+!  used in determining the proper routine to select is that of the array
+!  rank being passed. Therefore, we can not create just one subroutine for
+!  each array type (integer, real, etc...) and use a
+!  rank 1 array of assumed size to handle multiple ranks, i.e.
+!  (i.e. integer, dimension(*) :: ... )
+!  (i.e. real   , dimension(*) :: ... ) etc...
+!
+!  (3) Could not place the USE, INTRINSIC :: ISO_C_BINDING in the module header because it may
+!  conflict with the USE, INTRINSIC :: ISO_C_BINDING included in the user's program. Moved
+!  the statement instead to each subroutine.
+!
+!
+!  (4) C_LOC and character strings according to the Fortran 2003 standard:
+!
+!  15.1.2.5 C_LOC(X)
+!
+!  Argument. X shall either
+!
+!  (A) have interoperable type and type parameters and be
+!  (a) a variable that has the TARGET attribute and is interoperable,
+!  (b) an allocated allocatable variable that has the TARGET attribute
+!  and is not an array of zero size, or
+!  (c) an associated scalar pointer, or
+!  (B) be a nonpolymorphic scalar, have no length type parameters, and be
+!  (a) a nonallocatable, nonpointer variable that has the TARGET attribute,
+!  (b) an allocated allocatable variable that has the TARGET attribute, or
+!  (c) an associated pointer.
+!
+!   	 - When X is a character, for interoperability the standard is:
+!
+!  15.2.1 Interoperability of intrinsic types
+!
+!  ...if the type is character, interoperability also requires that the length type parameter
+!  be omitted or be specified by an initialization expression whose value is one.
+!
+!  THEREFORE compilers that have not extended the standard require the
+!  argument in C_LOC to be of the variant:
+!
+!  CHARACTER(LEN=1), TARGET :: chr
+!  or
+!  CHARACTER, TARGET :: chr
+!  
+!                         *** IMPORTANT ***
+!  If you add a new H5D function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!
+!*****
+
+MODULE H5D_PROVISIONAL
+  USE H5GLOBAL
+
+  INTERFACE h5dwrite_f
+
+     MODULE PROCEDURE h5dwrite_reference_obj
+     MODULE PROCEDURE h5dwrite_reference_dsetreg
+     MODULE PROCEDURE h5dwrite_integer_scalar
+     MODULE PROCEDURE h5dwrite_integer_1
+     MODULE PROCEDURE h5dwrite_integer_2
+     MODULE PROCEDURE h5dwrite_integer_3
+     MODULE PROCEDURE h5dwrite_integer_4
+     MODULE PROCEDURE h5dwrite_integer_5
+     MODULE PROCEDURE h5dwrite_integer_6
+     MODULE PROCEDURE h5dwrite_integer_7
+     MODULE PROCEDURE h5dwrite_char_scalar
+     MODULE PROCEDURE h5dwrite_char_1
+     MODULE PROCEDURE h5dwrite_char_2
+     MODULE PROCEDURE h5dwrite_char_3
+     MODULE PROCEDURE h5dwrite_char_4
+     MODULE PROCEDURE h5dwrite_char_5
+     MODULE PROCEDURE h5dwrite_char_6
+     MODULE PROCEDURE h5dwrite_char_7
+     MODULE PROCEDURE h5dwrite_real_scalar
+     MODULE PROCEDURE h5dwrite_real_1
+     MODULE PROCEDURE h5dwrite_real_2
+     MODULE PROCEDURE h5dwrite_real_3
+     MODULE PROCEDURE h5dwrite_real_4
+     MODULE PROCEDURE h5dwrite_real_5
+     MODULE PROCEDURE h5dwrite_real_6
+     MODULE PROCEDURE h5dwrite_real_7
+
+     ! This is the preferred way to call h5dwrite
+     ! by passing an address
+     MODULE PROCEDURE h5dwrite_ptr
+
+  END INTERFACE
+
+  INTERFACE h5dread_f
+
+     MODULE PROCEDURE h5dread_reference_obj
+     MODULE PROCEDURE h5dread_reference_dsetreg
+     MODULE PROCEDURE h5dread_integer_scalar
+     MODULE PROCEDURE h5dread_integer_1
+     MODULE PROCEDURE h5dread_integer_2
+     MODULE PROCEDURE h5dread_integer_3
+     MODULE PROCEDURE h5dread_integer_4
+     MODULE PROCEDURE h5dread_integer_5
+     MODULE PROCEDURE h5dread_integer_6
+     MODULE PROCEDURE h5dread_integer_7
+     MODULE PROCEDURE h5dread_char_scalar
+     MODULE PROCEDURE h5dread_char_1
+     MODULE PROCEDURE h5dread_char_2
+     MODULE PROCEDURE h5dread_char_3
+     MODULE PROCEDURE h5dread_char_4
+     MODULE PROCEDURE h5dread_char_5
+     MODULE PROCEDURE h5dread_char_6
+     MODULE PROCEDURE h5dread_char_7
+     MODULE PROCEDURE h5dread_real_scalar
+     MODULE PROCEDURE h5dread_real_1
+     MODULE PROCEDURE h5dread_real_2
+     MODULE PROCEDURE h5dread_real_3
+     MODULE PROCEDURE h5dread_real_4
+     MODULE PROCEDURE h5dread_real_5
+     MODULE PROCEDURE h5dread_real_6
+     MODULE PROCEDURE h5dread_real_7
+
+     ! This is the preferred way to call h5dread
+     ! by passing an address
+     MODULE PROCEDURE h5dread_ptr
+
+  END INTERFACE
+
+!  Interface for the function used to pass the C pointer of the buffer
+!  to the C H5Dwrite routine
+
+  INTERFACE
+     INTEGER FUNCTION h5dwrite_f_c(dset_id, mem_type_id, &
+          mem_space_id_default ,                         &
+          file_space_id_default,                         &
+          xfer_prp_default, buf )
+       USE H5GLOBAL
+       USE, INTRINSIC :: ISO_C_BINDING
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_F_C'::h5dwrite_f_c
+       !DEC$ENDIF
+       INTEGER(HID_T), INTENT(IN) :: dset_id
+       INTEGER(HID_T), INTENT(IN) :: mem_type_id
+       INTEGER(HID_T) :: mem_space_id_default
+       INTEGER(HID_T) :: file_space_id_default
+       INTEGER(HID_T) :: xfer_prp_default
+       TYPE(C_PTR), VALUE :: buf
+     END FUNCTION h5dwrite_f_c
+  END INTERFACE
+
+!  Interface for the function used to pass the C pointer of the buffer
+!  to the C H5Dread routine
+
+  INTERFACE
+     INTEGER FUNCTION h5dread_f_c(dset_id, mem_type_id, &
+          mem_space_id_default,                         &
+          file_space_id_default,                        &
+          xfer_prp_default, buf)
+       USE H5GLOBAL
+       USE, INTRINSIC :: ISO_C_BINDING
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_F_C'::h5dread_f_c
+       !DEC$ENDIF
+       INTEGER(HID_T), INTENT(IN) :: dset_id
+       INTEGER(HID_T), INTENT(IN) :: mem_type_id
+       INTEGER(HID_T) :: mem_space_id_default
+       INTEGER(HID_T) :: file_space_id_default
+       INTEGER(HID_T) :: xfer_prp_default
+       TYPE(C_PTR), VALUE :: buf
+     END FUNCTION h5dread_f_c
+  END INTERFACE
+
+  INTERFACE h5dfill_f
+     MODULE PROCEDURE h5dfill_integer
+     MODULE PROCEDURE h5dfill_real
+     MODULE PROCEDURE h5dfill_char
+  END INTERFACE
+
+!  Interface for the function used to pass the C pointer of the buffer
+!  to the C H5Dfill routine
+
+  INTERFACE
+     INTEGER FUNCTION h5dfill_c(f_ptr_fill_value, fill_type_id, space_id, &
+          f_ptr_buf, mem_type_id)
+       USE H5GLOBAL
+       USE, INTRINSIC :: ISO_C_BINDING
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DFILL_C'::h5dfill_c
+       !DEC$ENDIF
+       TYPE(C_PTR), VALUE :: f_ptr_fill_value
+       INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
+       INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
+       TYPE(C_PTR), VALUE :: f_ptr_buf
+       INTEGER(HID_T) :: mem_type_id
+     END FUNCTION h5dfill_c
+  END INTERFACE
+
+CONTAINS
+
+  SUBROUTINE h5dwrite_reference_obj(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims ! size of the bufffer buf
+    TYPE(hobj_ref_t_f), DIMENSION(dims(1)), INTENT(IN), TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+
+  END SUBROUTINE h5dwrite_reference_obj
+
+  SUBROUTINE h5dwrite_reference_dsetreg(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims ! size of the bufffer buf
+    TYPE(hdset_reg_ref_t_f), DIMENSION(dims(1)), INTENT(IN), TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    INTEGER, ALLOCATABLE, DIMENSION(:) :: ref_buf
+    INTEGER :: i,j
+    TYPE(C_PTR) :: f_ptr
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_ref_reg_c(dset_id, mem_type_id,&
+            mem_space_id_default, &
+            file_space_id_default, xfer_prp_default, ref_buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REF_REG_C'::h5dwrite_ref_reg_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER, DIMENSION(*) :: ref_buf
+         INTEGER(HSIZE_T), DIMENSION(*) ::  dims
+       END FUNCTION h5dwrite_ref_reg_c
+    END INTERFACE
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1))
+
+    ALLOCATE(ref_buf(REF_REG_BUF_LEN*dims(1)), stat=hdferr)
+    IF (hdferr .NE. 0 ) THEN
+       hdferr = -1
+       RETURN
+    ELSE
+       DO j = 1, dims(1)
+          DO i = 1, REF_REG_BUF_LEN
+             ref_buf(REF_REG_BUF_LEN*(j-1) + i) = buf(j)%ref(i)
+          ENDDO
+       ENDDO
+    ENDIF
+    hdferr = h5dwrite_ref_reg_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, ref_buf, dims)
+    DEALLOCATE(ref_buf)
+
+  END SUBROUTINE h5dwrite_reference_dsetreg
+
+
+  SUBROUTINE h5dwrite_integer_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER, INTENT(IN), TARGET :: buf  ! Data buffer
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_integer_scalar
+
+  SUBROUTINE h5dwrite_integer_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_integer_1
+
+  SUBROUTINE h5dwrite_integer_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2)),TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_integer_2
+
+  SUBROUTINE h5dwrite_integer_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_integer_3
+
+  SUBROUTINE h5dwrite_integer_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr            ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_integer_4
+
+  SUBROUTINE h5dwrite_integer_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_integer_5
+
+  SUBROUTINE h5dwrite_integer_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_integer_6
+
+  SUBROUTINE h5dwrite_integer_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_integer_7
+
+  SUBROUTINE h5dwrite_char_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(*), INTENT(IN), TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+                                 
+    CALL h5dwrite_char_scalar_fix(dset_id, mem_type_id, buf, LEN(buf), dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+
+  END SUBROUTINE h5dwrite_char_scalar
+
+  SUBROUTINE h5dwrite_char_scalar_fix(dset_id, mem_type_id, buf, buf_len, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN) :: buf_len
+    CHARACTER(LEN=buf_len), INTENT(IN), TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1:1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_char_scalar_fix
+
+  SUBROUTINE h5dwrite_char_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), DIMENSION(dims(1)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1)(1:1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_char_1
+
+  SUBROUTINE h5dwrite_char_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1)(1:1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_char_2
+
+  SUBROUTINE h5dwrite_char_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1)(1:1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_char_3
+
+  SUBROUTINE h5dwrite_char_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1,1)(1:1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_char_4
+
+  SUBROUTINE h5dwrite_char_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1,1,1)(1:1))
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_char_5
+
+  SUBROUTINE h5dwrite_char_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1)(1:1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_char_6
+
+  SUBROUTINE h5dwrite_char_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1)(1:1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_char_7
+
+
+  SUBROUTINE h5dwrite_real_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default  = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_real_scalar
+
+
+  SUBROUTINE h5dwrite_real_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_real_1
+
+  SUBROUTINE h5dwrite_real_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_real_2
+
+  SUBROUTINE h5dwrite_real_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_real_3
+
+  SUBROUTINE h5dwrite_real_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_real_4
+
+  SUBROUTINE h5dwrite_real_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_real_5
+
+  SUBROUTINE h5dwrite_real_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_real_6
+
+  SUBROUTINE h5dwrite_real_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1))
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dwrite_real_7
+
+!
+! NAME		
+!  h5dread_f
+!
+! PURPOSE
+!  Reads raw data from the specified dataset into buf,
+!  converting from file datatype and dataspace to memory
+!  datatype and dataspace.
+!
+! Inputs:
+!		dset_id		- dataset identifier
+!		mem_type_id	- memory type identifier
+!		dims		- 1-dim array of size 7; dims(k) has the size
+!				- of k-th dimension of the buf array
+! Outputs:
+!		buf		- buffer to read data in
+!		hdferr:		- error code
+!				 	Success:  0
+!				 	Failure: -1
+! Optional parameters:
+!		mem_space_id	- memory dataspace identifier
+!		file_space_id 	- file dataspace identifier
+!		xfer_prp	- trasfer property list identifier
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY 	
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+!  dims parameter was added to make code portable;
+!  n parameter was replaced with dims parameter in
+!  the h5dwrite_reference_obj and h5dwrite_reference_dsetreg
+!  functions.  April 2, 2001
+!
+! NOTES	
+!  This function is overloaded to read INTEGER,
+!  REAL, DOUBLE PRECISION and CHARACTER buffers
+!  up to 7 dimensions, and one dimensional buffers
+!  of the TYPE(hobj_ref_t_f) and TYPE(hdset_reg_ref_t_f)
+!  types.
+!
+  SUBROUTINE h5dread_reference_obj(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    TYPE(hobj_ref_t_f), INTENT(INOUT) , &
+         DIMENSION(dims(1)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_reference_obj
+
+  SUBROUTINE h5dread_reference_dsetreg(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    TYPE(hdset_reg_ref_t_f), INTENT(INOUT), &
+         DIMENSION(dims(1)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    INTEGER, ALLOCATABLE, DIMENSION(:) :: ref_buf
+    INTEGER :: i,j
+    INTERFACE
+       INTEGER FUNCTION h5dread_ref_reg_c(dset_id, mem_type_id,&
+            mem_space_id_default, &
+            file_space_id_default, xfer_prp_default, ref_buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REF_REG_C'::h5dread_ref_reg_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, DIMENSION(*) :: ref_buf
+       END FUNCTION h5dread_ref_reg_c
+    END INTERFACE
+
+    ALLOCATE(ref_buf(REF_REG_BUF_LEN*dims(1)), stat=hdferr)
+    IF (hdferr .NE. 0) THEN
+       hdferr = -1
+       RETURN
+    ENDIF
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_ref_reg_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, ref_buf, dims)
+
+    DO j = 1, dims(1)
+       DO i = 1, REF_REG_BUF_LEN
+          buf(j)%ref(i) = ref_buf(REF_REG_BUF_LEN*(j-1) + i)
+       ENDDO
+    ENDDO
+    DEALLOCATE(ref_buf)
+
+  END SUBROUTINE h5dread_reference_dsetreg
+
+
+  SUBROUTINE h5dread_integer_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT) , TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+
+  END SUBROUTINE h5dread_integer_scalar
+
+  SUBROUTINE h5dread_integer_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_integer_1
+
+  SUBROUTINE h5dread_integer_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_integer_2
+
+  SUBROUTINE h5dread_integer_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_integer_3
+
+  SUBROUTINE h5dread_integer_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_integer_4
+
+  SUBROUTINE h5dread_integer_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_integer_5
+
+  SUBROUTINE h5dread_integer_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_integer_6
+
+  SUBROUTINE h5dread_integer_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_integer_7
+
+  SUBROUTINE h5dread_char_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id         ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id   ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT) :: buf     ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr             ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    CALL h5dread_char_scalar_fix(dset_id, mem_type_id, buf, LEN(buf), dims, hdferr, &
+         mem_space_id, file_space_id, xfer_prp)
+
+  END SUBROUTINE h5dread_char_scalar
+
+  SUBROUTINE h5dread_char_scalar_fix(dset_id, mem_type_id, buf, buf_len, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN)  :: buf_len
+    CHARACTER(LEN=buf_len), INTENT(INOUT), TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1:1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_char_scalar_fix
+
+  SUBROUTINE h5dread_char_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1)(1:1))
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_char_1
+
+  SUBROUTINE h5dread_char_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1)(1:1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_char_2
+
+  SUBROUTINE h5dread_char_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1)(1:1))
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_char_3
+
+  SUBROUTINE h5dread_char_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1,1)(1:1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_char_4
+
+  SUBROUTINE h5dread_char_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1,1,1)(1:1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_char_5
+
+  SUBROUTINE h5dread_char_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1)(1:1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_char_6
+
+  SUBROUTINE h5dread_char_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)), TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1)(1:1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_char_7
+
+  SUBROUTINE h5dread_real_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT) , TARGET :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf)
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_real_scalar
+
+  SUBROUTINE h5dread_real_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_real_1
+
+  SUBROUTINE h5dread_real_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_real_2
+
+  SUBROUTINE h5dread_real_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_real_3
+
+  SUBROUTINE h5dread_real_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3), dims(4)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_real_4
+
+  SUBROUTINE h5dread_real_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_real_5
+
+  SUBROUTINE h5dread_real_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_real_6
+
+  SUBROUTINE h5dread_real_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) , TARGET :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    TYPE(C_PTR) :: f_ptr
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF(PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF(PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF(PRESENT(file_space_id)) file_space_id_default = file_space_id
+    f_ptr = C_LOC(buf(1,1,1,1,1,1,1))
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, f_ptr)
+
+  END SUBROUTINE h5dread_real_7
+
+!****s* H5D (F03)/h5dwrite_f_F03
+!
+! NAME		
+!  h5dwrite_f_F03
+!
+! PURPOSE
+!  Writes raw data from a dataset into a buffer. 
+!
+! Inputs:
+!  dset_id	 - Identifier of the dataset to write to.
+!  mem_type_id	 - Identifier of the memory datatype.
+!  buf		 - Buffer with data to be written to the file.
+!  
+! Outputs:
+!  hdferr        - Returns 0 if successful and -1 if fails
+!
+! Optional parameters:
+!  mem_space_id	 - Identifier of the memory dataspace.
+!  file_space_id - Identifier of the dataset's dataspace in the file.
+!  xfer_prp	 - Identifier of a transfer property list for this I/O operation.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  September 17, 2011
+!
+! Fortran2003 Interface:
+!!  SUBROUTINE h5dwrite_f(dset_id, mem_type_id, buf, hdferr, &
+!!                        mem_space_id, file_space_id, xfer_prp)
+!!    INTEGER(HID_T), INTENT(IN)              :: dset_id
+!!    INTEGER(HID_T), INTENT(IN)              :: mem_type_id
+!!    TYPE(C_PTR)   , INTENT(IN)              :: buf
+!!    INTEGER       , INTENT(OUT)             :: hdferr
+!!    INTEGER(HID_T), INTENT(IN)   , OPTIONAL :: mem_space_id
+!!    INTEGER(HID_T), INTENT(IN)   , OPTIONAL :: file_space_id
+!!    INTEGER(HID_T), INTENT(IN)   , OPTIONAL :: xfer_prp
+!*****
+  SUBROUTINE h5dwrite_ptr(dset_id, mem_type_id, buf, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    TYPE(C_PTR), INTENT(IN) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf)
+
+  END SUBROUTINE h5dwrite_ptr
+!****s* H5D (F03)/h5dread_f_F03
+!
+! NAME		
+!  h5dread_f_F03
+!
+! PURPOSE
+!  Reads raw data from a dataset into a buffer. 
+!
+! Inputs:
+!  dset_id	 - Identifier of the dataset read from.
+!  mem_type_id	 - Identifier of the memory datatype.
+!  
+! Outputs:
+!  buf		 - Buffer to receive data read from file.
+!  hdferr        - Returns 0 if successful and -1 if fails
+!
+! Optional parameters:
+!  mem_space_id	 - Identifier of the memory dataspace.
+!  file_space_id - Identifier of the dataset's dataspace in the file.
+!  xfer_prp	 - Identifier of a transfer property list for this I/O operation.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  September 17, 2011
+!
+! Fortran2003 Interface:
+!!  SUBROUTINE h5dread_f(dset_id, mem_type_id, buf, hdferr, &
+!!                       mem_space_id, file_space_id, xfer_prp)
+!!    INTEGER(HID_T), INTENT(IN)              :: dset_id
+!!    INTEGER(HID_T), INTENT(IN)              :: mem_type_id
+!!    TYPE(C_PTR)   , INTENT(INOUT)           :: buf
+!!    INTEGER       , INTENT(OUT)             :: hdferr
+!!    INTEGER(HID_T), INTENT(IN)   , OPTIONAL :: mem_space_id
+!!    INTEGER(HID_T), INTENT(IN)   , OPTIONAL :: file_space_id
+!!    INTEGER(HID_T), INTENT(IN)   , OPTIONAL :: xfer_prp
+!*****
+  SUBROUTINE h5dread_ptr(dset_id, mem_type_id, buf, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    TYPE(C_PTR), INTENT(INOUT) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_f_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf)
+
+  END SUBROUTINE h5dread_ptr
+
+!
+! NAME		
+!  h5dfill_integer
+!
+! PURPOSE 
+!  Fills dataspace elements with a fill value in a memory buffer.
+!  Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes
+!  of the fillvalues and buffers are supported. Buffer and fillvalue
+!  are assumed to have the same datatype.
+!  Only one-dimesional buffers are supported.
+!
+! Inputs:
+!		fill_value	- fill value
+!		space_id	- memory space selection identifier
+!		buf		- data buffer iin memory ro apply selection to
+!				- of k-th dimension of the buf array
+! Outputs:
+!		hdferr:		- error code
+!				 	Success:  0
+!				 	Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  March 12, 2003
+!
+!
+
+  SUBROUTINE h5dfill_integer(fill_value, space_id, buf,  hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER, INTENT(IN), TARGET :: fill_value  ! Fill value
+    INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
+    INTEGER, INTENT(IN), DIMENSION(*), TARGET :: buf ! Memory buffer to fill in
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+
+    INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
+    INTEGER(HID_T) :: mem_type_id  ! Buffer dadtype identifier
+
+    TYPE(C_PTR) :: f_ptr_fill_value ! C pointer to fill_value
+    TYPE(C_PTR) :: f_ptr_buf        ! C pointer to buf
+
+    f_ptr_fill_value = C_LOC(fill_value)
+    f_ptr_buf = C_LOC(buf(1))
+
+    fill_type_id = H5T_NATIVE_INTEGER
+    mem_type_id  = H5T_NATIVE_INTEGER
+
+    hdferr = h5dfill_c(f_ptr_fill_value, fill_type_id, space_id, &
+         f_ptr_buf, mem_type_id)
+
+  END SUBROUTINE h5dfill_integer
+
+!
+! NAME
+!  h5dfill_real
+!
+! PURPOSE
+!  Fills dataspace elements with a fill value in a memory buffer.
+!  Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes
+!  of the fillvalues and buffers are supported. Buffer and fillvalue
+!  are assumed to have the same datatype.
+!  Only one-dimesional buffers are supported.
+!
+! Inputs:
+!		fill_value	- fill value
+!		space_id	- memory space selection identifier
+!		buf		- data buffer iin memory ro apply selection to
+!				- of k-th dimension of the buf array
+! Outputs:
+!		hdferr:		- error code
+!				 	Success:  0
+!				 	Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  March 12, 2003
+!
+  SUBROUTINE h5dfill_real(fill_valuer, space_id, buf,  hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    REAL, INTENT(IN), TARGET :: fill_valuer  ! Fill value
+    INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
+    REAL, INTENT(IN), DIMENSION(*), TARGET :: buf ! Memory buffer to fill in
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+
+    INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
+    INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
+
+    TYPE(C_PTR) :: f_ptr_fill_valuer ! C pointer to fill_value
+    TYPE(C_PTR) :: f_ptr_buf ! C pointer to buf
+
+    f_ptr_fill_valuer = C_LOC(fill_valuer)
+    f_ptr_buf = C_LOC(buf(1))
+
+    fill_type_id = H5T_NATIVE_REAL
+    mem_type_id  = H5T_NATIVE_REAL
+
+    hdferr = h5dfill_c(f_ptr_fill_valuer, fill_type_id, space_id, &
+         f_ptr_buf, mem_type_id)
+
+  END SUBROUTINE h5dfill_real
+
+!
+! NAME		
+!  h5dfill_char
+!
+! PURPOSE 
+!  Fills dataspace elements with a fill value in a memory buffer.
+!  Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes
+!  of the fillvalues and buffers are supported. Buffer and fillvalue
+!  are assumed to have the same datatype.
+!  Only one-dimesional buffers are supported.
+!
+! Inputs:
+!		fill_value	- fill value
+!		space_id	- memory space selection identifier
+!		buf		- data buffer iin memory ro apply selection to
+!				- of k-th dimension of the buf array
+! Outputs:
+!		hdferr:		- error code
+!				 	Success:  0
+!				 	Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  March 12, 2003
+!
+  SUBROUTINE h5dfill_char(fill_value, space_id, buf,  hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    CHARACTER, INTENT(IN), TARGET :: fill_value  ! Fill value
+    INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
+    CHARACTER, INTENT(IN), DIMENSION(*), TARGET :: buf ! Memory buffer to fill in
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+
+    INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
+    INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
+
+    TYPE(C_PTR) :: f_ptr_fill_value ! C pointer to fill_value
+    TYPE(C_PTR) :: f_ptr_buf ! C pointer to buf
+
+    f_ptr_fill_value = C_LOC(fill_value)
+    f_ptr_buf = C_LOC(buf(1))
+
+    hdferr = h5dfill_c(f_ptr_fill_value, fill_type_id, space_id, &
+         f_ptr_buf, mem_type_id)
+
+  END SUBROUTINE h5dfill_char
+!
+!****s* H5D (F03)/h5dvlen_reclaim_f
+! NAME
+!  h5dvlen_reclaim_f
+!
+! PURPOSE 
+!  Reclaims VL datatype memory buffers. 
+!
+! Inputs:
+!
+!  type_id  - Identifier of the datatype. 
+!  space_id - Identifier of the dataspace. 
+!  plist_id - Identifier of the property list used to create the buffer. 
+!  buf      - Pointer to the buffer to be reclaimed. 
+!
+! Outputs:
+!  hdferr   - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+! M. Scot Breitenfeld
+! January 11, 2011
+!
+! Fortran2003 Interface:
+  SUBROUTINE h5dvlen_reclaim_f(type_id, space_id, plist_id, buf, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN)    :: type_id
+    INTEGER(HID_T), INTENT(IN)    :: space_id
+    INTEGER(HID_T), INTENT(IN)    :: plist_id
+    TYPE(C_PTR)   , INTENT(INOUT) :: buf
+    INTEGER       , INTENT(OUT)   :: hdferr
+!*****
+
+    INTERFACE
+       INTEGER FUNCTION h5dvlen_reclaim_c(type_id, space_id, plist_id, buf)
+         USE H5GLOBAL
+         USE, INTRINSIC :: ISO_C_BINDING
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DVLEN_RECLAIM_C'::h5dvlen_reclaim_c
+         !DEC$ENDIF
+         INTEGER(HID_T) :: type_id
+         INTEGER(HID_T) :: space_id
+         INTEGER(HID_T) :: plist_id
+         TYPE(C_PTR), VALUE :: buf
+       END FUNCTION h5dvlen_reclaim_c
+    END INTERFACE
+
+    hdferr = H5Dvlen_reclaim_c(type_id, space_id, plist_id, buf)
+
+  END SUBROUTINE H5Dvlen_reclaim_f
+
+END MODULE H5D_PROVISIONAL
+
+
diff --git a/fortran/src/H5Dff_F90.f90 b/fortran/src/H5Dff_F90.f90
new file mode 100644
index 0000000..3bb0fc0
--- /dev/null
+++ b/fortran/src/H5Dff_F90.f90
@@ -0,0 +1,3002 @@
+!****h* ROBODoc/H5D (F90)
+!
+! NAME
+!
+!  H5D_PROVISIONAL
+!
+! PURPOSE
+!
+!  This file contains Fortran 90 interfaces for H5D functions. It contains
+!  the same functions as H5Dff_F03.f90 but excludes the Fortran 2003 functions
+!  and the interface listings. This file will be compiled instead of H5Dff_F03.f90
+!  if Fortran 2003 functions are not enabled.
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!  (1) The maximum rank of an array allowed in Fortran is 7, therefore
+!  we only provide an interface for arrays up to and including rank 7.
+!
+!  (2) Unfortunately we are using a generic interface and one of the factors
+!  used in determining the proper routine to select is that of the array
+!  rank being passed, therefore we can not create just one subroutine for
+!  each array type (integer, real, etc...) of various ranks and then use a
+!  rank 1 array of assumed size in the just one subroutine,
+!  (i.e. integer, dimension(*) :: ... )
+!  (i.e. real   , dimension(*) :: ... ) etc...
+!
+!  (3)
+!                         *** IMPORTANT ***
+!  If you add a new H5D function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!*****
+
+MODULE H5D_PROVISIONAL
+  USE H5GLOBAL
+
+  INTERFACE h5dwrite_f
+
+     MODULE PROCEDURE h5dwrite_reference_obj
+     MODULE PROCEDURE h5dwrite_reference_dsetreg
+     MODULE PROCEDURE h5dwrite_integer_scalar
+     MODULE PROCEDURE h5dwrite_integer_1
+     MODULE PROCEDURE h5dwrite_integer_2
+     MODULE PROCEDURE h5dwrite_integer_3
+     MODULE PROCEDURE h5dwrite_integer_4
+     MODULE PROCEDURE h5dwrite_integer_5
+     MODULE PROCEDURE h5dwrite_integer_6
+     MODULE PROCEDURE h5dwrite_integer_7
+     MODULE PROCEDURE h5dwrite_char_scalar
+     MODULE PROCEDURE h5dwrite_char_1
+     MODULE PROCEDURE h5dwrite_char_2
+     MODULE PROCEDURE h5dwrite_char_3
+     MODULE PROCEDURE h5dwrite_char_4
+     MODULE PROCEDURE h5dwrite_char_5
+     MODULE PROCEDURE h5dwrite_char_6
+     MODULE PROCEDURE h5dwrite_char_7
+     MODULE PROCEDURE h5dwrite_real_scalar
+     MODULE PROCEDURE h5dwrite_real_1
+     MODULE PROCEDURE h5dwrite_real_2
+     MODULE PROCEDURE h5dwrite_real_3
+     MODULE PROCEDURE h5dwrite_real_4
+     MODULE PROCEDURE h5dwrite_real_5
+     MODULE PROCEDURE h5dwrite_real_6
+     MODULE PROCEDURE h5dwrite_real_7
+
+  END INTERFACE
+
+  INTERFACE h5dread_f
+
+     MODULE PROCEDURE h5dread_reference_obj
+     MODULE PROCEDURE h5dread_reference_dsetreg
+     MODULE PROCEDURE h5dread_integer_scalar
+     MODULE PROCEDURE h5dread_integer_1
+     MODULE PROCEDURE h5dread_integer_2
+     MODULE PROCEDURE h5dread_integer_3
+     MODULE PROCEDURE h5dread_integer_4
+     MODULE PROCEDURE h5dread_integer_5
+     MODULE PROCEDURE h5dread_integer_6
+     MODULE PROCEDURE h5dread_integer_7
+     MODULE PROCEDURE h5dread_char_scalar
+     MODULE PROCEDURE h5dread_char_1
+     MODULE PROCEDURE h5dread_char_2
+     MODULE PROCEDURE h5dread_char_3
+     MODULE PROCEDURE h5dread_char_4
+     MODULE PROCEDURE h5dread_char_5
+     MODULE PROCEDURE h5dread_char_6
+     MODULE PROCEDURE h5dread_char_7
+     MODULE PROCEDURE h5dread_real_scalar
+     MODULE PROCEDURE h5dread_real_1
+     MODULE PROCEDURE h5dread_real_2
+     MODULE PROCEDURE h5dread_real_3
+     MODULE PROCEDURE h5dread_real_4
+     MODULE PROCEDURE h5dread_real_5
+     MODULE PROCEDURE h5dread_real_6
+     MODULE PROCEDURE h5dread_real_7
+  END INTERFACE
+
+  INTERFACE h5dfill_f
+     MODULE PROCEDURE h5dfill_integer
+     MODULE PROCEDURE h5dfill_real
+     MODULE PROCEDURE h5dfill_char
+  END INTERFACE
+
+CONTAINS
+
+!****s* H5D/h5dread_f
+!
+! NAME
+!  h5dread_f
+!
+! PURPOSE
+!  Reads raw data from the specified dataset into buf,
+!  converting from file datatype and dataspace to memory
+!  datatype and dataspace.
+!
+! INPUTS
+!  dset_id 	 - dataset identifier
+!  mem_type_id 	 - memory type identifier
+!  dims 	 - 1-dim array of size 7; dims(k) has the size
+!   	           of k-th dimension of the buf array
+! OUTPUTS
+!  buf 	   - buffer to read data in
+!  hdferr: - error code
+!             Success:  0
+!             Failure: -1
+!
+! OPTIONAL PARAMETERS
+!  mem_space_id  - memory dataspace identifier
+!  file_space_id - file dataspace identifier
+!  xfer_prp 	 - trasfer property list identifier
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+!  dims parameter was added to make code portable;
+!  n parameter was replaced with dims parameter in
+!  the h5dwrite_reference_obj and h5dwrite_reference_dsetreg
+!  functions.  April 2, 2001
+!
+! NOTES
+!  This function is overloaded to read INTEGER,
+!  REAL, DOUBLE PRECISION and CHARACTER buffers
+!  up to 7 dimensions, and one dimensional buffers
+!  of the TYPE(hobj_ref_t_f) and TYPE(hdset_reg_ref_t_f) types.
+!*****
+  SUBROUTINE h5dread_reference_obj(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    TYPE(hobj_ref_t_f), INTENT(INOUT) , &
+         DIMENSION(dims(1)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    INTEGER(HADDR_T), ALLOCATABLE, DIMENSION(:) :: ref_buf
+    INTEGER :: j
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_ref_obj_c(dset_id, mem_type_id,&
+            mem_space_id_default, &
+            file_space_id_default, xfer_prp_default, ref_buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REF_OBJ_C'::h5dread_ref_obj_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER(HADDR_T), DIMENSION(*) :: ref_buf
+       END FUNCTION h5dread_ref_obj_c
+    END INTERFACE
+
+    ALLOCATE(ref_buf(dims(1)), stat=hdferr)
+    IF (hdferr .NE. 0) THEN
+       hdferr = -1
+       RETURN
+    ENDIF
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_ref_obj_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, ref_buf, dims)
+    DO j = 1, dims(1)
+       buf(j)%ref = ref_buf(j)
+    ENDDO
+    DEALLOCATE(ref_buf)
+  END SUBROUTINE h5dread_reference_obj
+
+  SUBROUTINE h5dread_reference_dsetreg(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    TYPE(hdset_reg_ref_t_f), INTENT(INOUT), &
+         DIMENSION(dims(1)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    INTEGER, ALLOCATABLE, DIMENSION(:) :: ref_buf
+    INTEGER :: i,j
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_ref_reg_c(dset_id, mem_type_id,&
+            mem_space_id_default, &
+            file_space_id_default, xfer_prp_default, ref_buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REF_REG_C'::h5dread_ref_reg_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, DIMENSION(*) :: ref_buf
+       END FUNCTION h5dread_ref_reg_c
+    END INTERFACE
+
+    ALLOCATE(ref_buf(REF_REG_BUF_LEN*dims(1)), stat=hdferr)
+    IF (hdferr .NE. 0) THEN
+       hdferr = -1
+       RETURN
+    ENDIF
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_ref_reg_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, ref_buf, dims)
+
+    DO j = 1, dims(1)
+       DO i = 1, REF_REG_BUF_LEN
+          buf(j)%ref(i) = ref_buf(REF_REG_BUF_LEN*(j-1) + i)
+       ENDDO
+    ENDDO
+    DEALLOCATE(ref_buf)
+  END SUBROUTINE h5dread_reference_dsetreg
+
+  SUBROUTINE h5dread_integer_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT) :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_integer_s_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_S_C'::h5dread_integer_s_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(OUT) :: buf
+       END FUNCTION h5dread_integer_s_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_integer_s_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_integer_scalar
+
+  SUBROUTINE h5dread_integer_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), DIMENSION(dims(1)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_integer_1_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_1_C'::h5dread_integer_1_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(OUT), DIMENSION(dims(1)) :: buf
+       END FUNCTION h5dread_integer_1_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_integer_1_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_integer_1
+
+  SUBROUTINE h5dread_integer_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), DIMENSION(dims(1),dims(2)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_integer_2_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_2_C'::h5dread_integer_2_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(OUT), DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5dread_integer_2_c
+    END INTERFACE
+
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_integer_2_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dread_integer_2
+
+  SUBROUTINE h5dread_integer_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    !
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5dread_integer_3_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_3_C'::h5dread_integer_3_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(OUT), DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5dread_integer_3_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_integer_3_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dread_integer_3
+
+  SUBROUTINE h5dread_integer_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    !
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5dread_integer_4_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_4_C'::h5dread_integer_4_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(OUT), DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5dread_integer_4_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_integer_4_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dread_integer_4
+
+  SUBROUTINE h5dread_integer_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    !
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5dread_integer_5_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_5_C'::h5dread_integer_5_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5dread_integer_5_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_integer_5_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dread_integer_5
+
+  SUBROUTINE h5dread_integer_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_integer_6_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_6_C'::h5dread_integer_6_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5dread_integer_6_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_integer_6_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dread_integer_6
+
+  SUBROUTINE h5dread_integer_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_integer_7_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_INTEGER_7_C'::h5dread_integer_7_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5dread_integer_7_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_integer_7_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dread_integer_7
+
+  SUBROUTINE h5dread_char_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT) :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dreadc_s_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_S_C'::h5dreadc_s_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(OUT) :: buf
+       END FUNCTION h5dreadc_s_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dreadc_s_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_char_scalar
+
+  SUBROUTINE h5dread_char_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dreadc_1_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_1_C'::h5dreadc_1_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1)) :: buf
+       END FUNCTION h5dreadc_1_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dreadc_1_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_char_1
+
+  SUBROUTINE h5dread_char_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+
+    INTERFACE
+       INTEGER FUNCTION h5dreadc_2_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_2_C'::h5dreadc_2_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5dreadc_2_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dreadc_2_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_char_2
+
+  SUBROUTINE h5dread_char_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dreadc_3_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_3_C'::h5dreadc_3_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5dreadc_3_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dreadc_3_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_char_3
+
+  SUBROUTINE h5dread_char_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dreadc_4_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_4_C'::h5dreadc_4_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5dreadc_4_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dreadc_4_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_char_4
+
+  SUBROUTINE h5dread_char_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dreadc_5_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_5_C'::h5dreadc_5_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5dreadc_5_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dreadc_5_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_char_5
+
+  SUBROUTINE h5dread_char_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dreadc_6_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_6_C'::h5dreadc_6_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5dreadc_6_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dreadc_6_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_char_6
+
+  SUBROUTINE h5dread_char_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dreadc_7_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREADC_7_C'::h5dreadc_7_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5dreadc_7_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dreadc_7_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_char_7
+
+  SUBROUTINE h5dread_real_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT) :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_real_s_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_S_C'::h5dread_real_s_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(OUT) :: buf
+       END FUNCTION h5dread_real_s_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_real_s_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_real_scalar
+
+  SUBROUTINE h5dread_real_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    !            INTEGER, EXTERNAL :: h5dread_real_1_c
+    !  MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5dread_real_1_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_1_C'::h5dread_real_1_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1)) :: buf
+       END FUNCTION h5dread_real_1_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_real_1_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_real_1
+
+  SUBROUTINE h5dread_real_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_real_2_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_2_C'::h5dread_real_2_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5dread_real_2_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_real_2_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_real_2
+
+  SUBROUTINE h5dread_real_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_real_3_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_3_C'::h5dread_real_3_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5dread_real_3_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_real_3_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_real_3
+
+  SUBROUTINE h5dread_real_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3), dims(4)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_real_4_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_4_C'::h5dread_real_4_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3), dims(4)) :: buf
+       END FUNCTION h5dread_real_4_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_real_4_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_real_4
+
+  SUBROUTINE h5dread_real_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_real_5_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_5_C'::h5dread_real_5_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5dread_real_5_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_real_5_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_real_5
+
+  SUBROUTINE h5dread_real_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_real_6_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_6_C'::h5dread_real_6_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5dread_real_6_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_real_6_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_real_6
+
+  SUBROUTINE h5dread_real_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(INOUT), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dread_real_7_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DREAD_REAL_7_C'::h5dread_real_7_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(INOUT), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5dread_real_7_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dread_real_7_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dread_real_7
+
+  SUBROUTINE h5dwrite_reference_obj(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims ! size of the bufffer buf
+    TYPE(hobj_ref_t_f), DIMENSION(dims(1)), INTENT(IN) :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    INTEGER(HADDR_T), ALLOCATABLE, DIMENSION(:) :: ref_buf
+    INTEGER :: j
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_ref_obj_c(dset_id, mem_type_id,&
+            mem_space_id_default, &
+            file_space_id_default, xfer_prp_default, ref_buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REF_OBJ_C'::h5dwrite_ref_obj_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HADDR_T), DIMENSION(*) :: ref_buf
+         INTEGER(HSIZE_T), DIMENSION(*) :: dims
+       END FUNCTION h5dwrite_ref_obj_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    ALLOCATE(ref_buf(dims(1)), stat=hdferr)
+    IF (hdferr .NE. 0 ) THEN
+       hdferr = -1
+       RETURN
+    ELSE
+       DO j = 1, dims(1)
+          ref_buf(j) = buf(j)%ref
+       ENDDO
+    ENDIF
+    hdferr = h5dwrite_ref_obj_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, ref_buf, dims(1))
+    DEALLOCATE(ref_buf)
+
+  END SUBROUTINE h5dwrite_reference_obj
+
+  SUBROUTINE h5dwrite_reference_dsetreg(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims ! size of the bufffer buf
+    TYPE(hdset_reg_ref_t_f), DIMENSION(dims(1)), INTENT(IN) :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+    INTEGER, ALLOCATABLE, DIMENSION(:) :: ref_buf
+    INTEGER :: i,j
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_ref_reg_c(dset_id, mem_type_id,&
+            mem_space_id_default, &
+            file_space_id_default, xfer_prp_default, ref_buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REF_REG_C'::h5dwrite_ref_reg_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER, DIMENSION(*) :: ref_buf
+         INTEGER(HSIZE_T), DIMENSION(*) ::  dims
+       END FUNCTION h5dwrite_ref_reg_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    ALLOCATE(ref_buf(REF_REG_BUF_LEN*dims(1)), stat=hdferr)
+    IF (hdferr .NE. 0 ) THEN
+       hdferr = -1
+       RETURN
+    ELSE
+       DO j = 1, dims(1)
+          DO i = 1, REF_REG_BUF_LEN
+             ref_buf(REF_REG_BUF_LEN*(j-1) + i) = buf(j)%ref(i)
+          ENDDO
+       ENDDO
+    ENDIF
+    hdferr = h5dwrite_ref_reg_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, ref_buf, dims)
+    DEALLOCATE(ref_buf)
+
+  END SUBROUTINE h5dwrite_reference_dsetreg
+
+  SUBROUTINE h5dwrite_integer_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER, INTENT(IN) :: buf ! Data buffer
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_integer_s_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_S_C'::h5dwrite_integer_s_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(IN) :: buf
+       END FUNCTION h5dwrite_integer_s_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_integer_s_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_integer_scalar
+
+  SUBROUTINE h5dwrite_integer_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_integer_1_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_1_C'::h5dwrite_integer_1_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1)) :: buf
+       END FUNCTION h5dwrite_integer_1_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_integer_1_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_integer_1
+
+  SUBROUTINE h5dwrite_integer_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2)) :: buf   ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_integer_2_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_2_C'::h5dwrite_integer_2_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5dwrite_integer_2_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+    hdferr = h5dwrite_integer_2_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dwrite_integer_2
+
+  SUBROUTINE h5dwrite_integer_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_integer_3_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_3_C'::h5dwrite_integer_3_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5dwrite_integer_3_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_integer_3_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dwrite_integer_3
+
+  SUBROUTINE h5dwrite_integer_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_integer_4_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_4_C'::h5dwrite_integer_4_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5dwrite_integer_4_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_integer_4_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dwrite_integer_4
+
+  SUBROUTINE h5dwrite_integer_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_integer_5_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_5_C'::h5dwrite_integer_5_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5dwrite_integer_5_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_integer_5_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dwrite_integer_5
+
+  SUBROUTINE h5dwrite_integer_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_integer_6_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_6_C'::h5dwrite_integer_6_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5dwrite_integer_6_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_integer_6_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dwrite_integer_6
+
+  SUBROUTINE h5dwrite_integer_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    INTEGER, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T)  :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_integer_7_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_INTEGER_7_C'::h5dwrite_integer_7_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         INTEGER, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5dwrite_integer_7_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_integer_7_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, &
+         buf, dims)
+
+  END SUBROUTINE h5dwrite_integer_7
+
+
+  SUBROUTINE h5dwrite_char_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN) :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwritec_s_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_S_C'::h5dwritec_s_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(IN) :: buf
+       END FUNCTION h5dwritec_s_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwritec_s_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_char_scalar
+
+  SUBROUTINE h5dwrite_char_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwritec_1_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_1_C'::h5dwritec_1_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1)) :: buf
+       END FUNCTION h5dwritec_1_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwritec_1_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_char_1
+
+  SUBROUTINE h5dwrite_char_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwritec_2_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_2_C'::h5dwritec_2_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5dwritec_2_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwritec_2_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_char_2
+
+  SUBROUTINE h5dwrite_char_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwritec_3_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_3_C'::h5dwritec_3_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5dwritec_3_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwritec_3_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_char_3
+
+  SUBROUTINE h5dwrite_char_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwritec_4_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_4_C'::h5dwritec_4_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5dwritec_4_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwritec_4_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_char_4
+
+  SUBROUTINE h5dwrite_char_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwritec_5_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_5_C'::h5dwritec_5_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5dwritec_5_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwritec_5_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_char_5
+
+  SUBROUTINE h5dwrite_char_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwritec_6_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_6_C'::h5dwritec_6_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5dwritec_6_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwritec_6_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_char_6
+
+  SUBROUTINE h5dwrite_char_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    CHARACTER(LEN=*), INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwritec_7_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITEC_7_C'::h5dwritec_7_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         CHARACTER(LEN=*), INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5dwritec_7_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwritec_7_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_char_7
+
+  SUBROUTINE h5dwrite_real_scalar(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN) :: buf ! Data buffer
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_real_s_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_S_C'::h5dwrite_real_s_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(IN) :: buf
+       END FUNCTION h5dwrite_real_s_c
+    END INTERFACE
+
+    xfer_prp_default  = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_real_s_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_real_scalar
+
+  SUBROUTINE h5dwrite_real_1(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_real_1_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_1_C'::h5dwrite_real_1_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1)) :: buf
+       END FUNCTION h5dwrite_real_1_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_real_1_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_real_1
+
+  SUBROUTINE h5dwrite_real_2(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_real_2_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_2_C'::h5dwrite_real_2_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2)) :: buf
+       END FUNCTION h5dwrite_real_2_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_real_2_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_real_2
+
+  SUBROUTINE h5dwrite_real_3(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_real_3_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_3_C'::h5dwrite_real_3_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3)) :: buf
+       END FUNCTION h5dwrite_real_3_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_real_3_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_real_3
+
+  SUBROUTINE h5dwrite_real_4(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_real_4_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_4_C'::h5dwrite_real_4_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4)) :: buf
+       END FUNCTION h5dwrite_real_4_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_real_4_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_real_4
+
+  SUBROUTINE h5dwrite_real_5(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_real_5_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_5_C'::h5dwrite_real_5_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5)) :: buf
+       END FUNCTION h5dwrite_real_5_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_real_5_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_real_5
+
+  SUBROUTINE h5dwrite_real_6(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_real_6_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_6_C'::h5dwrite_real_6_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6)) :: buf
+       END FUNCTION h5dwrite_real_6_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_real_6_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_real_6
+
+  SUBROUTINE h5dwrite_real_7(dset_id, mem_type_id, buf, dims, hdferr, &
+       mem_space_id, file_space_id, xfer_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id     ! Dataset identifier
+    INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
+    INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+    REAL, INTENT(IN), &
+         DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: mem_space_id  ! Memory dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: file_space_id ! File dataspace identfier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: xfer_prp      ! Transfer property list identifier
+    INTEGER(HID_T) :: xfer_prp_default
+    INTEGER(HID_T) :: mem_space_id_default
+    INTEGER(HID_T) :: file_space_id_default
+
+    INTERFACE
+       INTEGER FUNCTION h5dwrite_real_7_c(dset_id, mem_type_id, &
+            mem_space_id_default, &
+            file_space_id_default, &
+            xfer_prp_default, buf, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DWRITE_REAL_7_C'::h5dwrite_real_7_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HID_T), INTENT(IN) :: mem_type_id
+         INTEGER(HID_T)  :: mem_space_id_default
+         INTEGER(HID_T) :: file_space_id_default
+         INTEGER(HID_T) :: xfer_prp_default
+         INTEGER(HSIZE_T), INTENT(IN), DIMENSION(*) :: dims
+         REAL, INTENT(IN), &
+              DIMENSION(dims(1),dims(2),dims(3),dims(4),dims(5),dims(6),dims(7)) :: buf
+       END FUNCTION h5dwrite_real_7_c
+    END INTERFACE
+
+    xfer_prp_default = H5P_DEFAULT_F
+    mem_space_id_default = H5S_ALL_F
+    file_space_id_default = H5S_ALL_F
+
+    IF (PRESENT(xfer_prp)) xfer_prp_default = xfer_prp
+    IF (PRESENT(mem_space_id))  mem_space_id_default = mem_space_id
+    IF (PRESENT(file_space_id)) file_space_id_default = file_space_id
+
+    hdferr = h5dwrite_real_7_c(dset_id, mem_type_id, mem_space_id_default, &
+         file_space_id_default, xfer_prp_default, buf, dims)
+
+  END SUBROUTINE h5dwrite_real_7
+
+!
+! NAME
+!  h5dfill_integer
+!
+! PURPOSE
+!  Fills dataspace elements with a fill value in a memory buffer.
+!  Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes
+!  of the fillvalues and buffers are supported. Buffer and fillvalue
+!  are assumed to have the same datatype.
+!  Only one-dimesional buffers are supported.
+!
+! INPUTS
+!		fill_value	- fill value
+!		space_id	- memory space selection identifier
+!		buf		- data buffer iin memory ro apply selection to
+!				- of k-th dimension of the buf array
+! OUTPUTS
+!		hdferr:		- error code
+!				 	Success:  0
+!				 	Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  March 12, 2003
+!
+!
+
+  SUBROUTINE h5dfill_integer(fill_value, space_id, buf, hdferr)
+    IMPLICIT NONE
+    INTEGER, INTENT(IN) :: fill_value  ! Fill value
+    INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
+    INTEGER, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+
+    INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
+    INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
+
+    !            INTEGER, EXTERNAL :: h5dfill_integer_c
+    ! MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5dfill_integer_c(fill_value, fill_type_id, space_id, &
+            buf, mem_type_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DFILL_INTEGER_C'::h5dfill_integer_c
+         !DEC$ENDIF
+         INTEGER, INTENT(IN) :: fill_value  ! Fill value
+         INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
+         INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
+         INTEGER, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
+         INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
+       END FUNCTION h5dfill_integer_c
+    END INTERFACE
+    fill_type_id = H5T_NATIVE_INTEGER
+    mem_type_id  = H5T_NATIVE_INTEGER
+
+    hdferr = h5dfill_integer_c(fill_value, fill_type_id, space_id, &
+         buf, mem_type_id)
+
+  END SUBROUTINE h5dfill_integer
+
+!
+! NAME
+!  h5dfill_real
+!
+! PURPOSE
+!  Fills dataspace elements with a fill value in a memory buffer.
+!  Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes
+!  of the fillvalues and buffers are supported. Buffer and fillvalue
+!  are assumed to have the same datatype.
+!  Only one-dimesional buffers are supported.
+!
+! INPUTS
+!		fill_value	- fill value
+!		space_id	- memory space selection identifier
+!		buf		- data buffer iin memory ro apply selection to
+!				- of k-th dimension of the buf array
+! OUTPUTS
+!		hdferr:		- error code
+!				 	Success:  0
+!				 	Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  March 12, 2003
+!
+!
+
+  SUBROUTINE h5dfill_real(fill_valuer, space_id, buf, hdferr)
+    IMPLICIT NONE
+    REAL, INTENT(IN) :: fill_valuer  ! Fill value
+    INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
+    REAL, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+
+    INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
+    INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
+
+    !            INTEGER, EXTERNAL :: h5dfill_real_c
+    ! MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5dfill_real_c(fill_valuer, fill_type_id, space_id, &
+            buf, mem_type_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DFILL_REAL_C'::h5dfill_real_c
+         !DEC$ENDIF
+         REAL, INTENT(IN) :: fill_valuer  ! Fill value
+         INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
+         INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
+         REAL, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
+         INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
+       END FUNCTION h5dfill_real_c
+    END INTERFACE
+    fill_type_id = H5T_NATIVE_REAL
+    mem_type_id  = H5T_NATIVE_REAL
+
+    hdferr = h5dfill_real_c(fill_valuer, fill_type_id, space_id, &
+         buf, mem_type_id)
+  END SUBROUTINE h5dfill_real
+
+!
+! NAME
+!  h5dfill_char
+!
+! PURPOSE
+!  Fills dataspace elements with a fill value in a memory buffer.
+!  Only INTEGER, CHARACTER, REAL and DOUBLE PRECISION datatypes
+!  of the fillvalues and buffers are supported. Buffer and fillvalue
+!  are assumed to have the same datatype.
+!  Only one-dimesional buffers are supported.
+!
+! INPUTS
+!		fill_value	- fill value
+!		space_id	- memory space selection identifier
+!		buf		- data buffer iin memory ro apply selection to
+!				- of k-th dimension of the buf array
+! OUTPUTS
+!		hdferr:		- error code
+!				 	Success:  0
+!				 	Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  March 12, 2003
+!
+!
+
+  SUBROUTINE h5dfill_char(fill_value, space_id, buf, hdferr)
+    IMPLICIT NONE
+    CHARACTER, INTENT(IN) :: fill_value    ! Fill value
+    INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
+    CHARACTER, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+
+    INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
+    INTEGER(HID_T) :: mem_type_id  ! Buffer dadtype identifier
+
+    !            INTEGER, EXTERNAL :: h5dfillc_c
+    ! MS FORTRAN needs explicit interface for C functions called here.
+    !
+    INTERFACE
+       INTEGER FUNCTION h5dfillc_c(fill_value, fill_type_id, space_id, &
+            buf, mem_type_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DFILLC_C'::h5dfillc_c
+         !DEC$ENDIF
+         CHARACTER, INTENT(IN) :: fill_value  ! Fill value
+         INTEGER(HID_T) :: fill_type_id ! Fill value datatype identifier
+         INTEGER(HID_T), INTENT(IN) :: space_id ! Memory dataspace selection identifier
+         CHARACTER, INTENT(IN), DIMENSION(*) :: buf ! Memory buffer to fill in
+         INTEGER(HID_T) :: mem_type_id !  Buffer dadtype identifier
+       END FUNCTION h5dfillc_c
+    END INTERFACE
+    fill_type_id = H5T_NATIVE_CHARACTER
+    mem_type_id  = H5T_NATIVE_CHARACTER
+
+    hdferr = h5dfillc_c(fill_value, fill_type_id, space_id, &
+         buf, mem_type_id)
+
+  END SUBROUTINE h5dfill_char
+
+
+END MODULE H5D_PROVISIONAL
diff --git a/fortran/src/H5Ef.c b/fortran/src/H5Ef.c
index c6d860c..64ecdc4 100644
--- a/fortran/src/H5Ef.c
+++ b/fortran/src/H5Ef.c
@@ -1,4 +1,9 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* H5Ef/H5Ef
+ * PURPOSE
+ *   This file contains C stubs for H5E Fortran APIs
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,53 +16,70 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This files contains C stubs for H5E Fortran APIs */
-
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 #include "H5f90.h"
 #include "H5Eprivate.h"
 
-/*----------------------------------------------------------------------------
- * Name:        h5eclear_c
- * Purpose:     Call H5Eclear to clear the error stack for the current thread
- * Inputs:
- * Outputs:
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
- *              Wednesday, March 29, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
-
+/****if* H5Ef/h5eclear_c
+ * NAME
+ *  h5eclear_c
+ * PURPOSE
+ *  Call H5Eclear to clear the error stack for the current thread
+ * INPUTS
+ *
+ * OUTPUTS
+ *
+ * RETURNS
+ *  0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
+ *  Wednesday, March 29, 2000
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
-nh5eclear_c(void)
+nh5eclear_c(hid_t_f *estack_id )
+/******/
 {
-    int_f ret_value = 0;
+  int_f ret_value = 0;
 
-    /*
-     * Call H5Eclear function.
-     */
-    if(H5Eclear2(H5E_DEFAULT) < 0)
-        HGOTO_DONE(FAIL)
+  /*
+   * Call H5Eclear function.
+   */
+  if(H5Eclear2((hid_t)*estack_id) < 0)
+      HGOTO_DONE(FAIL)
 
 done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5eprint_c1
- * Purpose:     Call H5Eprint to print the error stack in a default manner.
- * Inputs:      name - file name
- *              namelen - length of name
- * Outputs:
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
- *              Wednesday, March 29, 2000
- * Modifications: Bug fix: Added call to close the file with the error messages
- *                EP 11/26/01
- *---------------------------------------------------------------------------*/
+/****if* H5Ef/h5eprint_c1
+ * NAME
+ *  h5eprint_c1
+ * PURPOSE
+ *  Call H5Eprint to print the error stack in a default manner.
+ * INPUTS
+ *  name    - file name
+ *  namelen - length of name
+ * OUTPUTS
+ *
+ * RETURNS
+ *  0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
+ *  Wednesday, March 29, 2000
+ * HISTORY
+ *  Bug fix: Added call to close the file with the error messages
+ *  EP 11/26/01
+ * SOURCE
+*/
 int_f
 nh5eprint_c1(_fcd name, int_f* namelen)
+/******/
 {
     FILE *file = NULL;
     char *c_name = NULL;
@@ -83,20 +105,27 @@ done:
     return ret_value;
 }
 
-
-/*----------------------------------------------------------------------------
- * Name:        h5eprint_c2
- * Purpose:     Call H5Eprint to print the error stack to stderr
- *              in a default manner.
- * Inputs:
- * Outputs:
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
- *              Wednesday, March 29, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+/****if* H5Ef/h5eprint_c2
+ * NAME
+ *  h5eprint_c2
+ * PURPOSE
+ *  Call H5Eprint to print the error stack to stderr
+ *  in a default manner.
+ * INPUTS
+ *
+ * OUTPUTS
+ *
+ * RETURNS
+ *  0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
+ *  Wednesday, March 29, 2000
+ *
+ * SOURCE
+*/
 int_f
 nh5eprint_c2(void)
+/******/
 {
     int_f ret_value = 0;
 
@@ -110,19 +139,28 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5eget_major_c
- * Purpose:     Call H5Eget_major to get a character string
- *              describing an error specified by a major error number.
- * Inputs:      error_no - Major error number
- * Outputs:     name - character string describing the error
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
- *              Wednesday, March 29, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+/****if* H5Ef/h5eget_major_c
+ * NAME
+ *  h5eget_major_c
+ * PURPOSE
+ *  Call H5Eget_major to get a character string
+ *  describing an error specified by a major error number.
+ * INPUTS
+ *  error_no - Major error number
+ * OUTPUTS
+ *  name - character string describing the error
+ * RETURNS
+ *  0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
+ *  Wednesday, March 29, 2000
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5eget_major_c(int_f* error_no, _fcd name, size_t_f* namelen)
+/******/
 {
     char *c_name = NULL;
     size_t c_namelen = (size_t)*namelen;
@@ -149,19 +187,28 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5eget_minor_c
- * Purpose:     Call H5Eget_minor to get a character string
- *              describing an error specified by a minor error number.
- * Inputs:      error_no - Major error number
- * Outputs:     name - character string describing the error
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
- *              Wednesday, March 29, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+/****if* H5Ef/h5eget_minor_c
+ * NAME
+ *  h5eget_minor_c
+ * PURPOSE
+ *  Call H5Eget_minor to get a character string
+ *  describing an error specified by a minor error number.
+ * INPUTS
+ *  error_no - Major error number
+ * OUTPUTS
+ *  name - character string describing the error
+ * RETURNS
+ *  0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
+ *  Wednesday, March 29, 2000
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5eget_minor_c(int_f* error_no, _fcd name, size_t_f* namelen)
+/******/
 {
     char *c_name = NULL;
     size_t c_namelen = (size_t)*namelen;
@@ -188,18 +235,27 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5eset_auto_c
- * Purpose:     Call H5Eset_auto to turn automatic error printing on or off.
- * Inputs:      printflag - flag to turn automatic error printing on or off.
- * Outputs:
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              Friday, November 17, 2000
- * Modifications:  major bug fix. Function never disabled printing.
- *---------------------------------------------------------------------------*/
+/****if* H5Ef/h5eset_auto_c
+ * NAME
+ *  h5eset_auto_c
+ * PURPOSE
+ *  Call H5Eset_auto to turn automatic error printing on or off.
+ * INPUTS
+ *  printflag - flag to turn automatic error printing on or off.
+ * OUTPUTS
+ *
+ * RETURNS
+ *  0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  Friday, November 17, 2000
+ * HISTORY
+ *  Major bug fix: Function never disabled printing.
+ * SOURCE
+*/
 int_f
 nh5eset_auto_c(int_f* printflag)
+/******/
 {
     herr_t status = -1;
     int_f ret_value = 0;
@@ -215,3 +271,39 @@ done:
     return ret_value;
 }
 
+
+/****if* H5Ef/h5eset_auto2_c
+ * NAME
+ *   h5eset_auto2_c
+ * PURPOSE
+ *   Calls H5Eset_auto2
+ * INPUTS
+ *   estack_id    - Error stack identifier.
+ *   func 	 - Function to be called upon an error condition.
+ *   client_data - Data passed to the error function.
+ *   
+ * RETURNS
+ *   0 on success, -1 on failure
+ * AUTHOR
+ *   M. Scot Breitenfeld
+ *   July 22, 2009
+ * SOURCE
+*/
+
+int_f
+nh5eset_auto2_c(int_f *printflag, hid_t_f *estack_id, H5E_auto2_t func, void *client_data)
+/******/
+{
+  int ret_val = -1;
+  herr_t status = -1;
+
+  if (*printflag == 1 && *estack_id == -1)
+    status = H5Eset_auto2(H5E_DEFAULT, H5Eprint2, stderr);
+  else if (*printflag == 1)
+    status = H5Eset_auto2((hid_t)*estack_id, func, client_data);
+  else if (*printflag == 0)
+    status = H5Eset_auto2(H5E_DEFAULT, NULL, NULL);
+  if (status >= 0) ret_val = 0;
+
+  return ret_val;
+}
diff --git a/fortran/src/H5Eff.f90 b/fortran/src/H5Eff.f90
index c33f9c1..2e137df 100644
--- a/fortran/src/H5Eff.f90
+++ b/fortran/src/H5Eff.f90
@@ -1,10 +1,13 @@
-!****h* fortran/src/H5Eff.f90
+!****h* ROBODoc/H5E
 !
 ! NAME
-!   H5E
+!  MODULE H5E
 !
-! FUNCTION
-!   This file contains Fortran interfaces for H5E functions.
+! FILE
+!  fortran/src/H5Eff.f90
+!
+! PURPOSE
+!  This Module contains Fortran interfaces for H5E functions.
 !
 ! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
@@ -23,10 +26,10 @@
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
 ! NOTES
-!                          *** IMPORTANT ***
-!   If you add a new H5E function you must add the function name to the
-!   Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
-!   This is needed for Windows based operating systems.
+!                         *** IMPORTANT ***
+!  If you add a new H5E function to the module you must add the function name
+!  to the Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
 !
 !*****
 
@@ -42,76 +45,82 @@ MODULE H5E
 
 CONTAINS
 
-!----------------------------------------------------------------------
-! Name:		h5eclear_f
-!
-! Purpose:	Clears the error stack for the current thread.
-!
-! Inputs:
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!
-!
-!
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+!****s* H5E/h5eclear_f
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  April 6, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-  SUBROUTINE h5eclear_f(hdferr)
+! NAME
+!  h5eclear_f
+!
+! PURPOSE
+!  Clears the error stack for the current thread.
+!
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  estack_id     - Error Stack id
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  April 6, 2001
+!
+!  Added optional error stack identifier in order to bring
+!  the function in line with the h5eclear2 routine.
+!  MSB, July 9, 2009
+!
+! SOURCE
+  SUBROUTINE h5eclear_f(hdferr, estack_id)
     IMPLICIT NONE
     INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: estack_id
+!*****
+    INTEGER(HID_T) :: estack_id_default
 
-!            INTEGER, EXTERNAL :: h5eclear_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
-       INTEGER FUNCTION h5eclear_c()
+       INTEGER FUNCTION h5eclear_c(estack_id_default)
          USE H5GLOBAL
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
          !DEC$ATTRIBUTES C,reference,decorate,alias:'H5ECLEAR_C'::h5eclear_c
          !DEC$ENDIF
+         INTEGER(HID_T) :: estack_id_default
        END FUNCTION h5eclear_c
     END INTERFACE
-    hdferr = h5eclear_c()
+
+    estack_id_default = H5E_DEFAULT_F
+    IF(PRESENT(estack_id)) estack_id_default = estack_id
+
+    hdferr = h5eclear_c(estack_id_default)
   END SUBROUTINE h5eclear_f
 
-!----------------------------------------------------------------------
-! Name:		h5h5eprint_f
+!****s* H5E/h5eprint_f
 !
-! Purpose:	Prints the error stack in a default manner.
+! NAME
+!  h5eprint_f
 !
-! Inputs:
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!		name		- name of the file that
-!				  contains print output
+! PURPOSE
+!  Prints the error stack in a default manner.
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  April 6, 2001
+! OPTIONAL PARAMETERS
+!  name 	 - name of the file that contains print output
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  April 6, 2001
+!
+! SOURCE
   SUBROUTINE h5eprint_f(hdferr, name)
     CHARACTER(LEN=*), OPTIONAL, INTENT(IN) :: name ! File name
     INTEGER, INTENT(OUT) :: hdferr          ! Error code
+!*****
     INTEGER :: namelen
 
     INTERFACE
@@ -141,40 +150,41 @@ CONTAINS
        hdferr = h5eprint_c2()
     ENDIF
   END SUBROUTINE h5eprint_f
-
-!----------------------------------------------------------------------
-! Name:		h5eget_major_f
-!
-! Purpose:	Returns a character string describing an error specified
-!		by a major error number.
-!
-! Inputs:
-!		error_no	- mojor error number
-! Outputs:
-!		name		- character string describing the error
-!		namelen		- number of characters in the name buffer
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  April 6, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
+!****s* H5E/h5eget_major_f
+!
+! NAME
+!  h5eget_major_f
+!
+! PURPOSE
+!  Returns a character string describing an error specified
+!  by a major error number.
+!
+! INPUTS
+!  error_no 	 - major error number
+!
+! OUTPUTS
+!  name 	 - character string describing the error
+!  namelen 	 - number of characters in the name buffer
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  April 6, 2001
+!
+! SOURCE
   SUBROUTINE h5eget_major_f(error_no, name, namelen, hdferr)
-    INTEGER, INTENT(IN) :: error_no ! Major error number
-    CHARACTER(LEN=*), INTENT(OUT) :: name ! Character string describing
-                                          ! the error.
-    INTEGER(SIZE_T), INTENT(IN) :: namelen !Anticipated number of characters in name.
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
+    INTEGER, INTENT(IN) :: error_no        ! Major error number
+    CHARACTER(LEN=*), INTENT(OUT) :: name  ! Character string describing
+                                           ! the error.
+    INTEGER(SIZE_T), INTENT(IN) :: namelen ! Anticipated number of characters
+                                           ! in name.
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
     INTERFACE
        INTEGER FUNCTION h5eget_major_c(error_no, name, namelen)
          USE H5GLOBAL
@@ -190,41 +200,38 @@ CONTAINS
 
     hdferr = h5eget_major_c(error_no, name, namelen)
   END SUBROUTINE h5eget_major_f
-
-!----------------------------------------------------------------------
-! Name:		h5eget_minor_f
-!
-! Purpose:	Returns a character string describing an error specified
-!		by a minor error number.
+!****s* H5E/h5eget_minor_f
 !
-! Inputs:
-!		error_no	- minor error number
-! Outputs:
-!		name		- character string describing the error
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
+! NAME
+!  h5eget_minor_f
 !
+! PURPOSE
+!  Returns a character string describing an error specified
+!  by a minor error number.
 !
+! INPUTS
+!  error_no 	 - minor error number
 !
+! OUTPUTS
+!  name 	 - character string describing the error
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  April 6, 2001
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  April 6, 2001
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! SOURCE
   SUBROUTINE h5eget_minor_f(error_no, name, hdferr)
-    INTEGER, INTENT(IN) :: error_no !Major error number
+    INTEGER, INTENT(IN) :: error_no       ! Major error number
     CHARACTER(LEN=*), INTENT(OUT) :: name ! Character string describing
                                           ! the error
     INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
+!*****
     INTERFACE
        INTEGER FUNCTION h5eget_minor_c(error_no, name)
          USE H5GLOBAL
@@ -239,55 +246,6 @@ CONTAINS
 
     hdferr = h5eget_minor_c(error_no, name)
   END SUBROUTINE h5eget_minor_f
-!----------------------------------------------------------------------
-! Name:		h5eset_auto_f
-!
-! Purpose:	Turns automatic error printing on or off
-!
-! Inputs:
-!		printflag	- flag to turn automatic error
-!				- Possible values are:
-!				- 1 (on), 0 (off)
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!
-!
-!
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  April 6, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-  SUBROUTINE h5eset_auto_f(printflag, hdferr)
-    INTEGER, INTENT(IN) :: printflag  !flag to turn automatic error
-                                      !printing on or off
-                                      !possible values are:
-                                      !printon (1)
-                                      !printoff(0)
-    INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-    INTERFACE
-       INTEGER FUNCTION h5eset_auto_c(printflag)
-         USE H5GLOBAL
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5ESET_AUTO_C'::h5eset_auto_c
-         !DEC$ENDIF
-         INTEGER :: printflag
-       END FUNCTION h5eset_auto_c
-    END INTERFACE
-
-    hdferr = h5eset_auto_c(printflag)
-  END SUBROUTINE h5eset_auto_f
 
 END MODULE H5E
 
diff --git a/fortran/src/H5Eff_F03.f90 b/fortran/src/H5Eff_F03.f90
new file mode 100644
index 0000000..3a40a55
--- /dev/null
+++ b/fortran/src/H5Eff_F03.f90
@@ -0,0 +1,110 @@
+!****h* ROBODoc/H5E (F03)
+!
+! NAME
+!  H5L_PROVISIONAL
+!
+! FILE
+!  src/fortran/src/H5Eff_F03.f90 
+!
+! PURPOSE
+!
+!  This file contains Fortran 90 and Fortran 2003 interfaces for H5E functions.
+!  It contains the same functions as H5Eff_DEPRECIATE.f90 but includes the
+!  Fortran 2003 functions and the interface listings. This file will be compiled
+!  instead of H5Eff_DEPRECIATE.f90 if Fortran 2003 functions are enabled.
+!
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5E function to the module you must add the function name
+!  to the Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!
+!*****
+
+MODULE H5E_PROVISIONAL
+
+  USE H5GLOBAL
+
+CONTAINS
+
+!****s* H5E/h5eset_auto2_f
+!
+! NAME
+!  h5eset_auto2_f
+!
+! PURPOSE
+!  Returns settings for automatic error stack traversal function and its data.
+!
+! Inputs:
+!  printflag   - Flag to turn automatic error printing on or off;
+!                possible values are:
+!                  printon (1)
+!                  printoff(0)
+!  estack_id   - Error stack identifier.
+!  func        - Function to be called upon an error condition.
+!  client_data - Data passed to the error function
+!  
+! Outputs:
+!  hdferr      - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  July 10, 2009
+!
+! Signature:
+  SUBROUTINE h5eset_auto_f(printflag, hdferr, estack_id, func, client_data)
+    USE ISO_C_BINDING
+    INTEGER       , INTENT(IN)            :: printflag
+    INTEGER       , INTENT(OUT)           :: hdferr
+    INTEGER(HID_T), INTENT(IN) , OPTIONAL :: estack_id
+    TYPE(C_FUNPTR), INTENT(IN) , OPTIONAL :: func
+    TYPE(C_PTR)   , INTENT(IN) , OPTIONAL :: client_data
+!*****
+    INTEGER(HID_T) :: estack_id_default
+    TYPE(C_FUNPTR) :: func_default
+    TYPE(C_PTR)    :: client_data_default
+    INTERFACE
+       INTEGER FUNCTION h5eset_auto2_c(printflag, estack_id, func, client_data)
+         USE ISO_C_BINDING
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5ESET_AUTO2_C'::h5eset_auto2_c
+         !DEC$ENDIF
+         INTEGER :: printflag
+         INTEGER(HID_T) :: estack_id
+!!$         TYPE(C_FUNPTR) :: func
+!!$         TYPE(C_PTR), VALUE :: client_data
+         TYPE(C_FUNPTR), VALUE :: func
+         TYPE(C_PTR), VALUE :: client_data
+       END FUNCTION h5eset_auto2_c
+    END INTERFACE
+
+    estack_id_default = -1
+    func_default = C_NULL_FUNPTR
+    client_data_default = C_NULL_PTR
+
+    IF(PRESENT(estack_id)) estack_id_default = estack_id
+    IF(PRESENT(func)) func_default = func
+    IF(PRESENT(client_data)) client_data_default = client_data
+
+    hdferr = h5eset_auto2_c(printflag, estack_id_default, func_default, client_data_default)
+  END SUBROUTINE h5eset_auto_f
+
+END MODULE H5E_PROVISIONAL
diff --git a/fortran/src/H5Eff_F90.f90 b/fortran/src/H5Eff_F90.f90
new file mode 100644
index 0000000..e698a84
--- /dev/null
+++ b/fortran/src/H5Eff_F90.f90
@@ -0,0 +1,89 @@
+!****h* ROBODoc/H5E (F90)
+!
+! NAME
+!  MODULE H5E_PROVISIONAL
+!
+! PURPOSE
+!  This file contains Fortran 90 interfaces for H5E functions. It contains
+!  the same functions as H5Eff_F03.f90 but excludes the Fortran 2003 functions
+!  and the interface listings. This file will be compiled instead of H5Eff_F03.f90
+!  if Fortran 2003 functions are not enabled.
+!
+!
+! COPYRIGHT
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!  Copyright by The HDF Group.                                               *
+!  Copyright by the Board of Trustees of the University of Illinois.         *
+!  All rights reserved.                                                      *
+!  *
+!  This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!  terms governing use, modification, and redistribution, is contained in    *
+!  the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!  of the source code distribution tree; Copyright.html can be found at the  *
+!  root level of an installed copy of the electronic HDF5 document set and   *
+!  is linked from the top-level documents page.  It can also be found at     *
+!  http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!  access to either file, you may request a copy from help at hdfgroup.org.     *
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+!                         *** IMPORTANT ***
+!  If you add a new H5D function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!*****
+
+MODULE H5E_PROVISIONAL
+
+  USE H5GLOBAL
+
+CONTAINS
+
+!****s* H5E/h5eset_auto_f
+!
+! NAME
+!  h5eset_auto_f
+!
+! PURPOSE
+!  Turns automatic error printing on or off.
+!
+! INPUTS
+!  printflag 	 - Flag to turn automatic error printing on or off;
+!                  possible values are:
+!                    printon (1)
+!                    printoff(0)
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  April 6, 2001
+!
+! SOURCE
+  SUBROUTINE h5eset_auto_f(printflag, hdferr)
+    INTEGER, INTENT(IN) :: printflag  ! flag to turn automatic error
+                                      ! printing on or off
+                                      ! possible values are:
+                                      !     printon (1)
+                                      !     printoff(0)
+    INTEGER, INTENT(OUT) :: hdferr    ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5eset_auto_c(printflag)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5ESET_AUTO_C'::h5eset_auto_c
+         !DEC$ENDIF
+         INTEGER :: printflag
+       END FUNCTION h5eset_auto_c
+    END INTERFACE
+
+    hdferr = h5eset_auto_c(printflag)
+  END SUBROUTINE h5eset_auto_f
+
+
+END MODULE H5E_PROVISIONAL
diff --git a/fortran/src/H5FDmpiof.c b/fortran/src/H5FDmpiof.c
index 2f22b55..89b4180 100644
--- a/fortran/src/H5FDmpiof.c
+++ b/fortran/src/H5FDmpiof.c
@@ -1,4 +1,10 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* H5FDmpiof/H5FDmpiof
+ *
+ * PURPOSE
+ *   This file contains C stubs for Parallel Fortran APIs
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,9 +17,10 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This files contains C stubs for Parallel Fortran APIs */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include "H5f90.h"
 #include <mpi.h>
@@ -30,20 +37,28 @@
 #define MPI_Info_f2c(info) (MPI_Info)(info)
 #endif /*MPI Info*/
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_fapl_mpio_c
- * Purpose:     Call H5Pset_fapl_mpio to set mode for parallel I/O and the user
+/****if* H5FDmpiof/h5pset_fapl_mpio_c
+ * NAME
+ *        h5pset_fapl_mpio_c
+ * PURPOSE
+ *     Call H5Pset_fapl_mpio to set mode for parallel I/O and the user
  *              supplied communicator and info object
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              comm   - MPI communicator
  *              info   - MPI info object
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, October 26, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_fapl_mpio_c(hid_t_f *prp_id, int_f* comm, int_f* info)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -62,20 +77,27 @@ nh5pset_fapl_mpio_c(hid_t_f *prp_id, int_f* comm, int_f* info)
      ret_value = 0;
      return ret_value;
 }
-
-/*----------------------------------------------------------------------------
- * Name:        h5pget_fapl_mpio_c
- * Purpose:     Call H5Pget_fapl_mpio to retrieve communicator and info object
- * Inputs:      prp_id - property list identifier
+/****if* H5FDmpiof/h5pget_fapl_mpio_c
+ * NAME
+ *        h5pget_fapl_mpio_c
+ * PURPOSE
+ *     Call H5Pget_fapl_mpio to retrieve communicator and info object
+ * INPUTS
+ *      prp_id - property list identifier
  *              comm   - buffer to return MPI communicator
  *              info   - buffer to return MPI info object
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, October 26, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_fapl_mpio_c(hid_t_f *prp_id, int_f* comm, int_f* info)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -94,19 +116,27 @@ nh5pget_fapl_mpio_c(hid_t_f *prp_id, int_f* comm, int_f* info)
      ret_value = 0;
      return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pset_dxpl_mpio_c
- * Purpose:     Call H5Pset_dxpl_mpio to set transfer mode of the dataset
+/****if* H5FDmpiof/h5pset_dxpl_mpio_c
+ * NAME
+ *        h5pset_dxpl_mpio_c
+ * PURPOSE
+ *     Call H5Pset_dxpl_mpio to set transfer mode of the dataset
  *              trasfer property list
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              data_xfer_mode - transfer mode
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, October 26, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_dxpl_mpio_c(hid_t_f *prp_id, int_f* data_xfer_mode)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -137,19 +167,27 @@ nh5pset_dxpl_mpio_c(hid_t_f *prp_id, int_f* data_xfer_mode)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_dxpl_mpio_c
- * Purpose:     Call H5Pget_dxpl_mpio to get transfer mode of the dataset
+/****if* H5FDmpiof/h5pget_dxpl_mpio_c
+ * NAME
+ *        h5pget_dxpl_mpio_c
+ * PURPOSE
+ *     Call H5Pget_dxpl_mpio to get transfer mode of the dataset
  *              trasfer property list
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              data_xfer_mode  - buffer to retrieve transfer mode
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, June 15, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_dxpl_mpio_c(hid_t_f *prp_id, int_f* data_xfer_mode)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -182,20 +220,28 @@ nh5pget_dxpl_mpio_c(hid_t_f *prp_id, int_f* data_xfer_mode)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_fapl_mpiposix_c
- * Purpose:     Call H5Pset_fapl_mpiposix to set mode for parallel I/O and the user
+/****if* H5FDmpiof/h5pset_fapl_mpiposix_c
+ * NAME
+ *        h5pset_fapl_mpiposix_c
+ * PURPOSE
+ *     Call H5Pset_fapl_mpiposix to set mode for parallel I/O and the user
  *              supplied communicator
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              comm   - MPI communicator
  *              flag   - flag to use GPFS hints
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, May 6, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_fapl_mpiposix_c(hid_t_f *prp_id, int_f* comm, int_f* flag)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -214,19 +260,28 @@ nh5pset_fapl_mpiposix_c(hid_t_f *prp_id, int_f* comm, int_f* flag)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_fapl_mpiposix_c
- * Purpose:     Call H5Pget_fapl_mpiposix to retrieve communicator and info object
- * Inputs:      prp_id - property list identifier
- * Outputs:     comm   - buffer to return MPI communicator
+/****if* H5FDmpiof/h5pget_fapl_mpiposix_c
+ * NAME
+ *        h5pget_fapl_mpiposix_c
+ * PURPOSE
+ *     Call H5Pget_fapl_mpiposix to retrieve communicator and info object
+ * INPUTS
+ *      prp_id - property list identifier
+ * OUTPUTS
+ *     comm   - buffer to return MPI communicator
  *              flag - flag to use GPFS hints
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, May 6, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_fapl_mpiposix_c(hid_t_f *prp_id, int_f* comm, int_f* flag)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
diff --git a/fortran/src/H5FDmpioff.f90 b/fortran/src/H5FDmpioff.f90
index 787f0d5..ea9283c 100644
--- a/fortran/src/H5FDmpioff.f90
+++ b/fortran/src/H5FDmpioff.f90
@@ -1,3 +1,13 @@
+!****h* ROBODoc/H5FDMPIO
+!
+! NAME
+!  MODULE H5FDMPIO
+!
+! PURPOSE
+!  This file contains Fortran interfaces for H5P functions needed by
+!  parallel MPI programs.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,238 +23,215 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
-!
-! This file contains Fortran90 interfaces for H5P functions needed by || MPI programs.
-!
-     MODULE H5FDMPIO
-         USE H5GLOBAL
-         CONTAINS
-
-!----------------------------------------------------------------------
-! Name:		h5pset_fapl_mpio_f
-!
-! Purpose: 	Stores MPI IO communicator information to the file
-!		access property list.
-!
-! Inputs:
-!		prp_id		- file access property list identifier
-!		comm		- MPI-2 communicator
-!		info		- MPI-2 info object
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		November, 2000
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-         SUBROUTINE h5pset_fapl_mpio_f(prp_id, comm, info, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(IN) :: comm ! MPI communicator to be used for file open
-                                        ! as defined in MPI_FILE_OPEN of MPI-2
-            INTEGER, INTENT(IN) :: info ! MPI info object to be used for file open
-                                        ! as defined in MPI_FILE_OPEN of MPI-2
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-            INTEGER, EXTERNAL :: h5pset_fapl_mpio_c
-            hdferr = h5pset_fapl_mpio_c(prp_id, comm, info)
-          END SUBROUTINE h5pset_fapl_mpio_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_fapl_mpio_f
-!
-! Purpose: 	Returns MPI communicator information.
-!
-! Inputs:
-!		prp_id		- file access property list identifier
-! Outputs:
-!		comm		- MPI-2 communicator
-!		info		- MPI-2 info object
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		November, 2000
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_fapl_mpio_f(prp_id, comm, info, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(OUT) :: comm ! buffer to return communicator
-            INTEGER, INTENT(OUT) :: info ! buffer to return info object
-                                        ! as defined in MPI_FILE_OPEN of MPI-2
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-            INTEGER, EXTERNAL :: h5pget_fapl_mpio_c
-            hdferr = h5pget_fapl_mpio_c(prp_id, comm, info)
-          END SUBROUTINE h5pget_fapl_mpio_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_dxpl_mpio_f
-!
-! Purpose: 	Sets data transfer mode.
-!
-! Inputs:
-!		prp_id		- data transfer property list identifier
-!		data_xfer_mode	- transfer mode
-!				  Possible values are:
-!				  H5FD_MPIO_INDEPENDENT_F
-!				  H5FD_MPIO_COLLECTIVE_F
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		November, 2000
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-         SUBROUTINE h5pset_dxpl_mpio_f(prp_id, data_xfer_mode, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(IN) :: data_xfer_mode ! Data transfer mode. Possible values are:
-                                                  ! H5FD_MPIO_INDEPENDENT_F
-                                                  ! H5FD_MPIO_COLLECTIVE_F
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-            INTEGER, EXTERNAL :: h5pset_dxpl_mpio_c
-            hdferr = h5pset_dxpl_mpio_c(prp_id, data_xfer_mode)
-          END SUBROUTINE h5pset_dxpl_mpio_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_dxpl_mpio_f
-!
-! Purpose: 	Returns the data transfer mode.
-!
-! Inputs:
-!		prp_id		- data transfer property list identifier
-! Outputs:
-!		data_xfer_mode	- transfer mode
-!				  Possible values are:
-!				  H5FD_MPIO_INDEPENDENT_F
-!				  H5FD_MPIO_COLLECTIVE_F
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		November, 2000
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-         SUBROUTINE h5pget_dxpl_mpio_f(prp_id, data_xfer_mode, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(OUT) :: data_xfer_mode ! Data transfer mode. Possible values are:
-                                                  ! H5FD_MPIO_INDEPENDENT_F
-                                                  ! H5FD_MPIO_COLLECTIVE_F
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-            INTEGER, EXTERNAL :: h5pget_dxpl_mpio_c
-            hdferr = h5pget_dxpl_mpio_c(prp_id, data_xfer_mode)
-          END SUBROUTINE h5pget_dxpl_mpio_f
-
-
-!----------------------------------------------------------------------
-! Name:		h5pset_fapl_mpiposix_f
-!
-! Purpose: 	Stores MPI IO communicator information to the file
-!		access property list.
-!
-! Inputs:
-!		prp_id		- file access property list identifier
-!		comm		- MPI-2 communicator
-!		use_gpfs	- logical flag to use the GPFS hints
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		May 6, 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-         SUBROUTINE h5pset_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(IN) :: comm ! MPI communicator to be used for file open
-                                        ! as defined in MPI_FILE_OPEN of MPI-2
-            LOGICAL, INTENT(IN) :: use_gpfs
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: flag
-
-            INTEGER, EXTERNAL :: h5pset_fapl_mpiposix_c
-            flag = 0
-            if(use_gpfs) flag = 1
-            hdferr = h5pset_fapl_mpiposix_c(prp_id, comm, flag)
-          END SUBROUTINE h5pset_fapl_mpiposix_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_fapl_mpiposix_f
-!
-! Purpose: 	Returns MPI communicator information.
-!
-! Inputs:
-!		prp_id		- file access property list identifier
-! Outputs:
-!		comm		- MPI-2 communicator
-!		use_gpfs        - flag to use GPFS hints
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		May 6, 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(OUT) :: comm ! buffer to return communicator
-            LOGICAL, INTENT(OUT) :: use_gpfs
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: flag
-
-            INTEGER, EXTERNAL :: h5pget_fapl_mpiposix_c
-            hdferr = h5pget_fapl_mpiposix_c(prp_id, comm, flag)
-            use_gpfs = .FALSE.
-            if (flag .eq. 1) use_gpfs = .TRUE.
-          END SUBROUTINE h5pget_fapl_mpiposix_f
-
-    END MODULE H5FDMPIO
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5P function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!
+!*****
+
+MODULE H5FDMPIO
+  USE H5GLOBAL
+CONTAINS
+
+!****s* H5FDMPIO/h5pset_fapl_mpio_f
+!
+! NAME
+!  h5pset_fapl_mpio_f
+!
+! PURPOSE
+!  Stores MPI IO communicator information to the file
+!  access property list.
+!
+! INPUTS
+!  prp_id 	 - file access property list identifier
+!  comm 	 - MPI-2 communicator
+!  info 	 - MPI-2 info object
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  November, 2000
+!
+! SOURCE
+  SUBROUTINE h5pset_fapl_mpio_f(prp_id, comm, info, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+    INTEGER, INTENT(IN) :: comm ! MPI communicator to be used for file open
+                                ! as defined in MPI_FILE_OPEN of MPI-2
+    INTEGER, INTENT(IN) :: info ! MPI info object to be used for file open
+                                ! as defined in MPI_FILE_OPEN of MPI-2
+    INTEGER, INTENT(OUT) :: hdferr ! Error code
+!*****
+    INTEGER, EXTERNAL :: h5pset_fapl_mpio_c
+    hdferr = h5pset_fapl_mpio_c(prp_id, comm, info)
+  END SUBROUTINE h5pset_fapl_mpio_f
+
+!****s* H5FDMPIO/h5pget_fapl_mpio_f
+!
+! NAME
+!  h5pget_fapl_mpio_f
+!
+! PURPOSE
+!  Returns MPI communicator information.
+!
+! INPUTS
+!  prp_id 	 - file access property list identifier
+! OUTPUTS
+!  comm 	 - MPI-2 communicator
+!  info 	 - MPI-2 info object
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  November, 2000
+!
+! SOURCE
+  SUBROUTINE h5pget_fapl_mpio_f(prp_id, comm, info, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+    INTEGER, INTENT(OUT) :: comm ! buffer to return communicator
+    INTEGER, INTENT(OUT) :: info ! buffer to return info object
+                                 ! as defined in MPI_FILE_OPEN of MPI-2
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+!*****
+    INTEGER, EXTERNAL :: h5pget_fapl_mpio_c
+    hdferr = h5pget_fapl_mpio_c(prp_id, comm, info)
+  END SUBROUTINE h5pget_fapl_mpio_f
+
+!****s* H5FDMPIO/h5pset_dxpl_mpio_f
+!
+! NAME
+!  h5pset_dxpl_mpio_f
+!
+! PURPOSE
+!  Sets data transfer mode.
+!
+! INPUTS
+!  prp_id 	  - data transfer property list identifier
+!  data_xfer_mode - transfer mode; possible values are:
+!                     H5FD_MPIO_INDEPENDENT_F
+!                     H5FD_MPIO_COLLECTIVE_F
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  November, 2000
+!
+! SOURCE
+  SUBROUTINE h5pset_dxpl_mpio_f(prp_id, data_xfer_mode, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    INTEGER, INTENT(IN) :: data_xfer_mode ! Data transfer mode. Possible values are:
+                                          ! H5FD_MPIO_INDEPENDENT_F
+                                          ! H5FD_MPIO_COLLECTIVE_F
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
+    INTEGER, EXTERNAL :: h5pset_dxpl_mpio_c
+    hdferr = h5pset_dxpl_mpio_c(prp_id, data_xfer_mode)
+  END SUBROUTINE h5pset_dxpl_mpio_f
+!****s* H5FDMPIO/h5pget_dxpl_mpio_f
+!
+! NAME
+!  h5pget_dxpl_mpio_f
+!
+! PURPOSE
+!  Returns the data transfer mode.
+!
+! INPUTS
+!  prp_id 	 - data transfer property list identifier
+! OUTPUTS
+!  data_xfer_mode- transfer mode; possible values are:
+!                     H5FD_MPIO_INDEPENDENT_F
+!                     H5FD_MPIO_COLLECTIVE_F
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  November, 2000
+!
+! SOURCE
+  SUBROUTINE h5pget_dxpl_mpio_f(prp_id, data_xfer_mode, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id   ! Property list identifier
+    INTEGER, INTENT(OUT) :: data_xfer_mode ! Data transfer mode. Possible values are:
+                                           ! H5FD_MPIO_INDEPENDENT_F
+                                           ! H5FD_MPIO_COLLECTIVE_F
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
+    INTEGER, EXTERNAL :: h5pget_dxpl_mpio_c
+    hdferr = h5pget_dxpl_mpio_c(prp_id, data_xfer_mode)
+  END SUBROUTINE h5pget_dxpl_mpio_f
+
+!****s* H5FDMPIO/h5pset_fapl_mpiposix_f
+!
+! NAME
+!  h5pset_fapl_mpiposix_f
+!
+! PURPOSE
+!  Stores MPI IO communicator information to the file
+!  access property list.
+!
+! INPUTS
+!  prp_id 	 - file access property list identifier
+!  comm 	 - MPI-2 communicator
+!  use_gpfs 	 - logical flag to use the GPFS hints
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  May 6, 2003
+!
+! SOURCE
+  SUBROUTINE h5pset_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+    INTEGER, INTENT(IN) :: comm ! MPI communicator to be used for file open
+                                ! as defined in MPI_FILE_OPEN of MPI-2
+    LOGICAL, INTENT(IN) :: use_gpfs
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+!*****
+    INTEGER :: flag
+    INTEGER, EXTERNAL :: h5pset_fapl_mpiposix_c
+    flag = 0
+    IF(use_gpfs) flag = 1
+    hdferr = h5pset_fapl_mpiposix_c(prp_id, comm, flag)
+  END SUBROUTINE h5pset_fapl_mpiposix_f
+
+!****s* H5FDMPIO/h5pget_fapl_mpiposix_f
+!
+! NAME
+!  h5pget_fapl_mpiposix_f
+!
+! PURPOSE
+!  Returns MPI communicator information.
+!
+! INPUTS
+!  prp_id 	 - file access property list identifier
+! OUTPUTS
+!  comm 	 - MPI-2 communicator
+!  use_gpfs 	 - flag to use GPFS hints
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  May 6, 2003
+!
+! SOURCE
+  SUBROUTINE h5pget_fapl_mpiposix_f(prp_id, comm, use_gpfs, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+    INTEGER, INTENT(OUT) :: comm         ! Buffer to return communicator
+    LOGICAL, INTENT(OUT) :: use_gpfs
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+!*****
+    INTEGER :: flag
+
+    INTEGER, EXTERNAL :: h5pget_fapl_mpiposix_c
+    hdferr = h5pget_fapl_mpiposix_c(prp_id, comm, flag)
+    use_gpfs = .FALSE.
+    IF (flag .EQ. 1) use_gpfs = .TRUE.
+  END SUBROUTINE h5pget_fapl_mpiposix_f
+
+END MODULE H5FDMPIO
diff --git a/fortran/src/H5Ff.c b/fortran/src/H5Ff.c
index 3cfc9e3..1259d4d 100644
--- a/fortran/src/H5Ff.c
+++ b/fortran/src/H5Ff.c
@@ -1,4 +1,9 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* H5Ff/H5Ff
+ * PURPOSE
+ *   This file contains C stubs for H5F Fortran APIs
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,29 +16,37 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This files contains C stubs for H5F Fortran APIs */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include "H5f90.h"
 #include "H5Eprivate.h"
 
-/*----------------------------------------------------------------------------
- * Name:        h5fcreate_c
- * Purpose:     Call H5Fcreate to create the file
- * Inputs:      name - name of the file
+/****if* H5Ff/h5fcreate_c
+ * NAME
+ *        h5fcreate_c
+ * PURPOSE
+ *     Call H5Fcreate to create the file
+ * INPUTS
+ *      name - name of the file
  *              namelen - name length
  *              access_flags - file access  flags
  *              crt_pr  - identifier of creation property list
  *              acc_prp - identifier of access property list
- * Outputs:     file_id - file identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     file_id - file identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, July 26, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5fcreate_c(_fcd name, int_f *namelen, int_f *access_flags, hid_t_f* crt_prp, hid_t_f *acc_prp, hid_t_f *file_id)
+/******/
 {
      int ret_value = -1;
      char *c_name;
@@ -80,20 +93,26 @@ nh5fcreate_c(_fcd name, int_f *namelen, int_f *access_flags, hid_t_f* crt_prp, h
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5fflush_c
- * Purpose:     Call H5Fflush to flush the object
- * Inputs:      object_id - identifier of either a file, a dataset,
+/****if* H5Ff/h5fflush_c
+ * NAME
+ *        h5fflush_c
+ * PURPOSE
+ *     Call H5Fflush to flush the object
+ * INPUTS
+ *      object_id - identifier of either a file, a dataset,
  *                          a group, an attribute or a named data type
  *              scope - integer to specify the flushing action, either
  *                      H5F_SCOPE_GLOBAL or H5F_SCOPE_LOCAL
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, November 5, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5fflush_c (hid_t_f *object_id, int_f *scope)
+/******/
 {
      int ret_value = -1;
      hid_t c_file_id;
@@ -115,21 +134,27 @@ nh5fflush_c (hid_t_f *object_id, int_f *scope)
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5fmount_c
- * Purpose:     Call H5Fmount to mount the file
- * Inputs:      loc_id - Identifier for file or group
+/****if* H5Ff/h5fmount_c
+ * NAME
+ *        h5fmount_c
+ * PURPOSE
+ *     Call H5Fmount to mount the file
+ * INPUTS
+ *      loc_id - Identifier for file or group
  *              dsetname - name of dataset
  *              namelen - dsetname length
  *              file_id - file identifier for the file to be mounted
  *              acc_prp - identifier of access property list
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Monday, October 25, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+*/
 int_f
 nh5fmount_c (hid_t_f *loc_id, _fcd dsetname, int_f *namelen, hid_t_f *file_id, hid_t_f *acc_prp)
+/******/
 {
      int ret_value = -1;
      char *c_name;
@@ -167,19 +192,25 @@ nh5fmount_c (hid_t_f *loc_id, _fcd dsetname, int_f *namelen, hid_t_f *file_id, h
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5funmount_c
- * Purpose:     Call H5Funmount to unmount the file
- * Inputs:      loc_id - Identifier for file or group
+/****if* H5Ff/h5funmount_c
+ * NAME
+ *        h5funmount_c
+ * PURPOSE
+ *     Call H5Funmount to unmount the file
+ * INPUTS
+ *      loc_id - Identifier for file or group
  *              dsetname - name of dataset
  *              namelen - dsetname length
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Monday, October 25, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5funmount_c (hid_t_f *loc_id, _fcd dsetname, int_f *namelen)
+/******/
 {
      int ret_value = -1;
      char *c_name;
@@ -209,21 +240,28 @@ nh5funmount_c (hid_t_f *loc_id, _fcd dsetname, int_f *namelen)
 
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5fopen_c
- * Purpose:     Call H5Fopen to open the file
- * Inputs:      name - name of the file
+/****if* H5Ff/h5fopen_c
+ * NAME
+ *        h5fopen_c
+ * PURPOSE
+ *     Call H5Fopen to open the file
+ * INPUTS
+ *      name - name of the file
  *              namelen - name length
  *              access_flags - file access  flags
  *              acc_prp - identifier of access property list
- * Outputs:     file_id - file identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     file_id - file identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, August 3, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5fopen_c (_fcd name, int_f *namelen, int_f *access_flags, hid_t_f *acc_prp, hid_t_f *file_id)
+/******/
 {
      int ret_value = -1;
      char *c_name;
@@ -265,18 +303,25 @@ nh5fopen_c (_fcd name, int_f *namelen, int_f *access_flags, hid_t_f *acc_prp, hi
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5freopen_c
- * Purpose:     Call H5Freopen to open the file
- * Inputs:      file_id1 - file identifier
- * Outputs:     file_id2 - file identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+/****if* H5Ff/h5freopen_c
+ * NAME
+ *        h5freopen_c
+ * PURPOSE
+ *     Call H5Freopen to open the file
+ * INPUTS
+ *      file_id1 - file identifier
+ * OUTPUTS
+ *     file_id2 - file identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Wednesday, November 3, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5freopen_c (hid_t_f *file_id1, hid_t_f *file_id2)
+/******/
 {
      int ret_value = -1;
      hid_t c_file_id1, c_file_id2;
@@ -291,18 +336,25 @@ nh5freopen_c (hid_t_f *file_id1, hid_t_f *file_id2)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5fget_create_plist_c
- * Purpose:     Call H5Fget_create_plist to get the file creation property list
- * Inputs:      file_id - file identifier
- * Outputs:     prop_id - creation property list identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal, Xiangyang Su
+/****if* H5Ff/h5fget_create_plist_c
+ * NAME
+ *        h5fget_create_plist_c
+ * PURPOSE
+ *     Call H5Fget_create_plist to get the file creation property list
+ * INPUTS
+ *      file_id - file identifier
+ * OUTPUTS
+ *     prop_id - creation property list identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal, Xiangyang Su
  *              Wednesday, November 3, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5fget_create_plist_c (hid_t_f *file_id, hid_t_f *prop_id)
+/******/
 {
      int ret_value = -1;
      hid_t c_file_id, c_prop_id;
@@ -317,18 +369,27 @@ nh5fget_create_plist_c (hid_t_f *file_id, hid_t_f *prop_id)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5fget_access_plist_c
- * Purpose:     Call H5Fget_access_plist to get the file access property list
- * Inputs:      file_id - file identifier
- * Outputs:     access_id - access property list identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Ff/h5fget_access_plist_c
+ * NAME
+ *        h5fget_access_plist_c
+ * PURPOSE
+ *     Call H5Fget_access_plist to get the file access property list
+ * INPUTS
+ *      file_id - file identifier
+ * OUTPUTS
+ *     access_id - access property list identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, September 30, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5fget_access_plist_c (hid_t_f *file_id, hid_t_f *access_id)
+/******/
 {
      int ret_value = -1;
      hid_t c_file_id, c_access_id;
@@ -343,20 +404,29 @@ nh5fget_access_plist_c (hid_t_f *file_id, hid_t_f *access_id)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5fis_hdf5_c
- * Purpose:     Call H5Fis_hdf5 to determone if the file is an HDF5 file
- * Inputs:      name - name of the file
+/****if* H5Ff/h5fis_hdf5_c
+ * NAME
+ *        h5fis_hdf5_c
+ * PURPOSE
+ *     Call H5Fis_hdf5 to determone if the file is an HDF5 file
+ * INPUTS
+ *      name - name of the file
  *              namelen - name length
- * Outputs:     flag - 0 if file is not HDF5 file , positive if a file
+ * OUTPUTS
+ *     flag - 0 if file is not HDF5 file , positive if a file
  *                     is an HDF5 file, and negative on failure.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, August 3, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5fis_hdf5_c (_fcd name, int_f *namelen, int_f *flag)
+/******/
 {
      int ret_value = -1;
      char *c_name;
@@ -380,18 +450,26 @@ nh5fis_hdf5_c (_fcd name, int_f *namelen, int_f *flag)
      HDfree(c_name);
      return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5fclose_c
- * Purpose:     Call H5Fclose to close the file
- * Inputs:      file_id - identifier of the file to be closed
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Ff/h5fclose_c
+ * NAME
+ *        h5fclose_c
+ * PURPOSE
+ *     Call H5Fclose to close the file
+ * INPUTS
+ *      file_id - identifier of the file to be closed
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, July 26, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5fclose_c ( hid_t_f *file_id )
+/******/
 {
   int ret_value = 0;
   hid_t c_file_id;
@@ -400,22 +478,30 @@ nh5fclose_c ( hid_t_f *file_id )
   if ( H5Fclose(c_file_id) < 0  ) ret_value = -1;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5fget_obj_count_c
- * Purpose:     Call H5Fget_obj_count to get number of open objects within a file
- * Inputs:      file_id - identifier of the file to be closed
+/****if* H5Ff/h5fget_obj_count_c
+ * NAME
+ *        h5fget_obj_count_c
+ * PURPOSE
+ *     Call H5Fget_obj_count to get number of open objects within a file
+ * INPUTS
+ *      file_id - identifier of the file to be closed
  *              obj_type - type of the object
- * Returns:     obj_count - number of objects
+ * RETURNS
+ *     obj_count - number of objects
  *              0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, September 30, 2002
- * Modifications:
+ * HISTORY
+ *
  *              Changed type of obj_count to size_t_f
  *              Thursday, September 25, 2008
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 
 int_f
 nh5fget_obj_count_c ( hid_t_f *file_id , int_f *obj_type, size_t_f * obj_count)
+/******/
 {
   int ret_value = 0;
   hid_t c_file_id;
@@ -429,23 +515,32 @@ nh5fget_obj_count_c ( hid_t_f *file_id , int_f *obj_type, size_t_f * obj_count)
   *obj_count = (size_t_f)c_obj_count;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5fget_obj_ids_c
- * Purpose:     Call H5Fget_obj_count to get number of open objects within a file
- * Inputs:      file_id - identifier of the file to be closed
- *              obj_type - type of the object
- * Returns:     obj_ids  - iarray of open objects identifiers
+/****if* H5Ff/h5fget_obj_ids_c
+ * NAME
+ *  h5fget_obj_ids_c
+ * PURPOSE
+ *  Call H5Fget_obj_count to get number of open objects within a file
+ * INPUTS
+ *  file_id  - identifier of the file to be closed
+ *  obj_type - type of the object
+ * RETURNS
+ *  obj_ids  - iarray of open objects identifiers
  *              0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              Monday, September 30, 2002
- * Modifications:
- *              Changed type of max_obj to size_t_f; added parameter for the
- *              number of open objects
- *              Thursday, September 25, 2008 EIP
- *---------------------------------------------------------------------------*/
+ * AUTHOR
+ *  Elena Pourmal
+ *  Monday, September 30, 2002
+ * HISTORY
+ *
+ *  Changed type of max_obj to size_t_f; added parameter for the
+ *  number of open objects
+ *  Thursday, September 25, 2008 EIP
+ *	
+ * SOURCE
+*/
 int_f
-nh5fget_obj_ids_c(hid_t_f *file_id, int_f *obj_type, size_t_f *max_objs,
+nh5fget_obj_ids_c ( hid_t_f *file_id , int_f *obj_type, size_t_f *max_objs, 
     hid_t_f *obj_ids, size_t_f *num_objs)
+/******/
 {
     int ret_value = 0;
     hid_t c_file_id;
@@ -472,20 +567,25 @@ nh5fget_obj_ids_c(hid_t_f *file_id, int_f *obj_type, size_t_f *max_objs,
     return ret_value;
 }
 
-
-/*----------------------------------------------------------------------------
- * Name:        h5fget_freespace_c
- * Purpose:     Call H5Fget_freespace to get amount of free space within a file
- * Inputs:      file_id - identifier of the file to query
- * Returns:     free_space  - amount of free space in file
+/****if* H5Ff/h5fget_freespace_c
+ * NAME
+ *        h5fget_freespace_c
+ * PURPOSE
+ *     Call H5Fget_freespace to get amount of free space within a file
+ * INPUTS
+ *      file_id - identifier of the file to query
+ * RETURNS
+ *     free_space  - amount of free space in file
  *              0 on success, -1 on failure
- * Programmer:  Quincey Koziol
+ * AUTHOR
+ *  Quincey Koziol
  *              Tuesday, October 7, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 
 int_f
 nh5fget_freespace_c ( hid_t_f *file_id , hssize_t_f *free_space)
+/******/
 {
   int ret_value = 0;
   hid_t c_file_id;
@@ -497,20 +597,27 @@ nh5fget_freespace_c ( hid_t_f *file_id , hssize_t_f *free_space)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5fget_name_c
- * Purpose:     Call H5Fget_name to get file's name
- * Inputs:      obj_id - object identifier
+/****if* H5Ff/h5fget_name_c
+ * NAME
+ *        h5fget_name_c
+ * PURPOSE
+ *     Call H5Fget_name to get file's name
+ * INPUTS
+ *      obj_id - object identifier
  *              buflen -size of the buffer
- * Outputs:     buf - buffer to hold the name
+ * OUTPUTS
+ *     buf - buffer to hold the name
  *              size - size of the file's name
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, July 6, 2004
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5fget_name_c(hid_t_f *obj_id, size_t_f *size, _fcd buf, size_t_f *buflen)
+/******/
 {
     char *c_buf = NULL;           /* Buffer to hold C string */
     ssize_t size_c = -1;
@@ -539,18 +646,25 @@ done:
       return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5fget_filesize_c
- * Purpose:     Call H5Fget_filesize to get file size
- * Inputs:      file_id - file identifier
- * Outputs:     size - size of the file
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Ff/h5fget_filesize_c
+ * NAME
+ *        h5fget_filesize_c
+ * PURPOSE
+ *     Call H5Fget_filesize to get file size
+ * INPUTS
+ *      file_id - file identifier
+ * OUTPUTS
+ *     size - size of the file
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, July 7, 2004
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5fget_filesize_c(hid_t_f *file_id, hsize_t_f *size)
+/******/
 {
     hsize_t size_c;
     herr_t ret_value=0;          /* Return value */
diff --git a/fortran/src/H5Fff.f90 b/fortran/src/H5Fff.f90
index dcd6ff6..0c70ad4 100644
--- a/fortran/src/H5Fff.f90
+++ b/fortran/src/H5Fff.f90
@@ -1,3 +1,15 @@
+!****h* ROBODoc/H5F
+!
+! NAME
+!  MODULE H5F
+!
+! FILE
+!  H5Fff.f90
+!
+! PURPOSE
+!  This file contains Fortran interfaces for H5F functions.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,863 +25,810 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
-!
-! This file contains Fortran90 interfaces for H5F functions.
-!
-      MODULE H5F
-      USE H5GLOBAL
-
-        CONTAINS
-
-!----------------------------------------------------------------------
-! Name:		h5fcreate_f
-!
-! Purpose:	Creates HDF5 files.
-!
-! Inputs:
-!		name		- name of the file to create
-!		access_flags	- File access flags. Allowable values are:
-!				  H5F_ACC_TRUNC_F
-!				  H5F_ACC_EXCL_F
-! Outputs:
-!		file_id		- file identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!		creation_prp	- file creation property list identifier
-!		access_prp	- file access property list identifier
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-          SUBROUTINE h5fcreate_f(name, access_flags, file_id, hdferr, &
-                                 creation_prp, access_prp)
-            IMPLICIT NONE
-            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the file
-            INTEGER, INTENT(IN) :: access_flags    ! File access flags
-            INTEGER(HID_T), INTENT(OUT) :: file_id ! File identifier
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: creation_prp
-                                                   ! File creation propertly
-                                                   ! list identifier
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp
-                                                   ! File access property list
-                                                   ! identifier
-            INTEGER(HID_T) :: creation_prp_default
-            INTEGER(HID_T) :: access_prp_default
-            INTEGER :: namelen ! Length of the name character string
-
-!            INTEGER, EXTERNAL :: h5fcreate_c
-!  Interface is needed for MS FORTRAN
-!
-            INTERFACE
-              INTEGER FUNCTION h5fcreate_c(name, namelen, access_flags, &
-                               creation_prp_default, access_prp_default, file_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FCREATE_C':: h5fcreate_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN) :: access_flags
-              INTEGER(HID_T), INTENT(OUT) :: file_id
-              INTEGER(HID_T), INTENT(IN) :: creation_prp_default
-              INTEGER(HID_T), INTENT(IN) :: access_prp_default
-              INTEGER :: namelen
-              END FUNCTION h5fcreate_c
-            END INTERFACE
-
-            creation_prp_default = H5P_DEFAULT_F
-            access_prp_default = H5P_DEFAULT_F
-
-            if (present(creation_prp)) creation_prp_default = creation_prp
-            if (present(access_prp))   access_prp_default   = access_prp
-            namelen = LEN_TRIM(name)
-
-            hdferr = h5fcreate_c(name, namelen, access_flags, &
-                     creation_prp_default, access_prp_default, file_id)
-
-          END SUBROUTINE h5fcreate_f
-
-!----------------------------------------------------------------------
-! Name:		h5fflush_f
-!
-! Purpose:	Flushes all buffers associated with a file to disk
-!
-! Inputs:
-!		object_id	- identifier of object used to identify
-!				  the file.
-!		scope		- specifies the scope of the flushing action.
-!				  Possible values are:
-!				  H5F_SCOPE_GLOBAL_F
-!				  H5F_SCOPE_LOCAL_F
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!		creation_prp	- file creation property list identifier
-!		access_prp	- file access property list identifier
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-          SUBROUTINE h5fflush_f(object_id, scope, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: object_id !identifier for any object
-                                                    !associate with a file,
-                                                    !including the file itself,
-                                                    !a dataset, a group, an
-                                                    !attribute, or a named
-                                                    !data type
-
-            INTEGER, INTENT(IN) :: scope            !scope of the flushing
-                                                    !action, possible values
-                                                    !are: H5F_SCOPE_GLOBAL_F
-                                                    ! which flushes the entire
-                                                    !virtual file,
-                                                    !and H5F_SCOPE_LOCAL_F
-                                                    !which flushes only the
-                                                    !specified file.
-
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5fflush_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5fflush_c(object_id, scope)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FFLUSH_C':: h5fflush_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: object_id
-              INTEGER, INTENT(IN) :: scope
-              END FUNCTION h5fflush_c
-            END INTERFACE
-
-           hdferr = h5fflush_c(object_id, scope)
-
-          END SUBROUTINE h5fflush_f
-
-!----------------------------------------------------------------------
-! Name:		h5fmount_f
-!
-! Purpose:	Mounts a file.
-!
-! Inputs:
-!		loc_id		- the identifier for of file or group in
-!				  which name is defined
-!		name		- the name of the group onto which the file
-!				  specified by child_id is to be mounted.
-!		child_id	- the identifier of the file to be mounted.
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!		access_prp	- the identifier of the property list to be used
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5fmount_f(loc_id, name, child_id, hdferr, access_prp)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: loc_id   ! Identifier for file or group
-                                                   ! in which dsetname is defined
-            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of the group
-            INTEGER(HID_T), INTENT(IN) :: child_id ! File identifier for the
-                                                   ! file to be mounted
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp
-                                                   ! File access property list
-                                                   ! identifier
-            INTEGER(HID_T) :: access_prp_default
-            INTEGER :: namelen ! Length of the name character string
-
-!            INTEGER, EXTERNAL :: h5fmount_c
-!  Interface is needed for MS FORTRAN
-!
-            INTERFACE
-              INTEGER FUNCTION h5fmount_c(loc_id, name, namelen, &
-                                          child_id, access_prp_default)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FMOUNT_C':: h5fmount_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: loc_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER(HID_T), INTENT(IN) :: child_id
-              INTEGER(HID_T), INTENT(IN) :: access_prp_default
-              INTEGER :: namelen
-              END FUNCTION h5fmount_c
-            END INTERFACE
-
-            access_prp_default = H5P_DEFAULT_F
-            if (present(access_prp))   access_prp_default   = access_prp
-            namelen = LEN(name)
-            hdferr = h5fmount_c(loc_id, name, namelen, child_id, access_prp_default)
-
-          END SUBROUTINE h5fmount_f
-
-
-!----------------------------------------------------------------------
-! Name:		h5funmount_f
-!
-! Purpose:	Unmounts a file.
-!
-! Inputs:
-!		loc_id		- the identifier for of file or group in
-!				  which name is defined
-!		name		- the name of the mount point
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5funmount_f(loc_id, name, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: loc_id   ! Identifier for file or group
-                                                   ! at which the specified file
-                                                   ! is to be unmounted
-            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the mount point
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
-            INTEGER :: namelen ! Length of the name character string
-
-!            INTEGER, EXTERNAL :: h5fumount_c
-!  Interface is needed for MS FORTRAN
-!
-            INTERFACE
-              INTEGER FUNCTION h5funmount_c(loc_id, name, namelen)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FUNMOUNT_C':: h5funmount_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: loc_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER :: namelen
-              END FUNCTION h5funmount_c
-            END INTERFACE
-
-            namelen = LEN(name)
-            hdferr = h5funmount_c(loc_id, name, namelen)
-
-          END SUBROUTINE h5funmount_f
-
-!----------------------------------------------------------------------
-! Name:		h5fopen_f
-!
-! Purpose:	Opens HDF5 file.
-!
-! Inputs:
-!		name		- name of the file to acecss
-!		access_flags	- File access flags. Allowable values are:
-!				  H5F_ACC_RDWR_F
-!				  H5F_ACC_RDONLY_F
-! Outputs:
-!		file_id		- file identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!		access_prp	- file access property list identifier
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-          SUBROUTINE h5fopen_f(name, access_flags, file_id, hdferr, &
-                               access_prp)
-            IMPLICIT NONE
-            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the file
-            INTEGER, INTENT(IN) :: access_flags    ! File access flags
-            INTEGER(HID_T), INTENT(OUT) :: file_id ! File identifier
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
-            INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp
-                                                   ! File access property list
-                                                   ! identifier
-            INTEGER(HID_T) :: access_prp_default
-            INTEGER :: namelen ! Length of the name character string
-
-!            INTEGER, EXTERNAL :: h5fopen_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5fopen_c(name, namelen, access_flags, &
-                               access_prp_default, file_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FOPEN_C':: h5fopen_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER :: namelen
-              INTEGER, INTENT(IN) :: access_flags
-              INTEGER(HID_T), INTENT(IN) :: access_prp_default
-              INTEGER(HID_T), INTENT(OUT) :: file_id
-              END FUNCTION h5fopen_c
-            END INTERFACE
-
-            access_prp_default = H5P_DEFAULT_F
-            if (present(access_prp))   access_prp_default   = access_prp
-            namelen = LEN(name)
-            hdferr = h5fopen_c(name, namelen, access_flags, &
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5F function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!
+!*****
+
+MODULE H5F
+  USE H5GLOBAL
+
+CONTAINS
+!****s* H5F/h5fcreate_f
+!
+! NAME
+!  h5fcreate_f
+!
+! PURPOSE
+!  Creates HDF5 files.
+!
+! INPUTS
+!  name 	 - name of the file to create
+!  access_flags  - File access flags. Allowable values are:
+!                   H5F_ACC_TRUNC_F
+!                   H5F_ACC_EXCL_F
+! OUTPUTS
+!  file_id 	 - file identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! OPTIONAL PARAMETERS
+!  creation_prp  - file creation property list identifier
+!  access_prp 	 - file access property list identifier
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! SOURCE
+  SUBROUTINE h5fcreate_f(name, access_flags, file_id, hdferr, &
+       creation_prp, access_prp)
+    IMPLICIT NONE
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the file
+    INTEGER, INTENT(IN) :: access_flags    ! File access flags
+    INTEGER(HID_T), INTENT(OUT) :: file_id ! File identifier
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: creation_prp
+                                           ! File creation propertly
+                                           ! list identifier
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp
+                                           ! File access property list
+                                           ! identifier
+!*****
+    INTEGER(HID_T) :: creation_prp_default
+    INTEGER(HID_T) :: access_prp_default
+    INTEGER :: namelen ! Length of the name character string
+
+    INTERFACE
+       INTEGER FUNCTION h5fcreate_c(name, namelen, access_flags, &
+            creation_prp_default, access_prp_default, file_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FCREATE_C':: h5fcreate_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN) :: access_flags
+         INTEGER(HID_T), INTENT(OUT) :: file_id
+         INTEGER(HID_T), INTENT(IN) :: creation_prp_default
+         INTEGER(HID_T), INTENT(IN) :: access_prp_default
+         INTEGER :: namelen
+       END FUNCTION h5fcreate_c
+    END INTERFACE
+
+    creation_prp_default = H5P_DEFAULT_F
+    access_prp_default = H5P_DEFAULT_F
+
+    IF (PRESENT(creation_prp)) creation_prp_default = creation_prp
+    IF (PRESENT(access_prp))   access_prp_default   = access_prp
+    namelen = LEN_TRIM(name)
+    hdferr = h5fcreate_c(name, namelen, access_flags, &
+         creation_prp_default, access_prp_default, file_id)
+
+  END SUBROUTINE h5fcreate_f
+!****s* H5F/h5fflush_f
+!
+! NAME
+!  h5fflush_f
+!
+! PURPOSE
+!  Flushes all buffers associated WITH a file to disk
+!
+! INPUTS
+!  object_id 	 - identifier of object used to identify the file.
+!  scope 	 - specifies the scope of the flushing action.
+!                  Possible values are:
+!                    H5F_SCOPE_GLOBAL_F
+!                    H5F_SCOPE_LOCAL_F
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! OPTIONAL PARAMETERS
+!  creation_prp  - file creation property list identifier
+!  access_prp 	 - file access property list identifier
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! SOURCE
+  SUBROUTINE h5fflush_f(object_id, scope, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: object_id !identifier for any object
+                                            !associate with a file,
+                                            !including the file itself,
+                                            !a dataset, a group, an
+                                            !attribute, or a named
+                                            !data type
+
+    INTEGER, INTENT(IN) :: scope            !scope of the flushing
+                                            !action, possible values
+                                            !are: H5F_SCOPE_GLOBAL_F
+                                            ! which flushes the entire
+                                            !virtual file,
+                                            !and H5F_SCOPE_LOCAL_F
+                                            !which flushes only the
+                                            !specified file.
+
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5fflush_c(object_id, scope)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FFLUSH_C':: h5fflush_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: object_id
+         INTEGER, INTENT(IN) :: scope
+       END FUNCTION h5fflush_c
+    END INTERFACE
+
+    hdferr = h5fflush_c(object_id, scope)
+
+  END SUBROUTINE h5fflush_f
+!****s* H5F/h5fmount_f
+!
+! NAME
+!  h5fmount_f
+!
+! PURPOSE
+!  Mounts a file.
+!
+! INPUTS
+!  loc_id 	 - the identifier for of file or group in
+!                  which name is defined
+!  name 	 - the name of the group onto which the file
+!                  specified by child_id is to be mounted.
+!  child_id 	 - the identifier of the file to be mounted.
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  access_prp 	 - the identifier of the property list to be used
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! SOURCE
+  SUBROUTINE h5fmount_f(loc_id, name, child_id, hdferr, access_prp)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! Identifier for file or group
+                                           ! in which dsetname is defined
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the group
+    INTEGER(HID_T), INTENT(IN) :: child_id ! File identifier for the
+                                           ! file to be mounted
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp
+                                           ! File access property list
+                                           ! identifier
+!*****
+    INTEGER(HID_T) :: access_prp_default
+    INTEGER :: namelen ! Length of the name character string
+
+    INTERFACE
+       INTEGER FUNCTION h5fmount_c(loc_id, name, namelen, &
+            child_id, access_prp_default)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FMOUNT_C':: h5fmount_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER(HID_T), INTENT(IN) :: child_id
+         INTEGER(HID_T), INTENT(IN) :: access_prp_default
+         INTEGER :: namelen
+       END FUNCTION h5fmount_c
+    END INTERFACE
+
+    access_prp_default = H5P_DEFAULT_F
+    IF (PRESENT(access_prp))   access_prp_default   = access_prp
+    namelen = LEN_TRIM(name)
+    hdferr = h5fmount_c(loc_id, name, namelen, child_id, access_prp_default)
+
+  END SUBROUTINE h5fmount_f
+
+!****s* H5F/h5funmount_f
+!
+! NAME
+!  h5funmount_f
+!
+! PURPOSE
+!  Unmounts a file.
+!
+! INPUTS
+!  loc_id 	 - the identifier for of file or group in
+!                  which name is defined
+!  name 	 - the name of the mount point
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! SOURCE
+  SUBROUTINE h5funmount_f(loc_id, name, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! Identifier for file or group
+                                           ! at which the specified file
+                                           ! is to be unmounted
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the mount point
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
+    INTEGER :: namelen ! Length of the name character string
+
+    INTERFACE
+       INTEGER FUNCTION h5funmount_c(loc_id, name, namelen)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FUNMOUNT_C':: h5funmount_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER :: namelen
+       END FUNCTION h5funmount_c
+    END INTERFACE
+
+    namelen = LEN_TRIM(name)
+    hdferr = h5funmount_c(loc_id, name, namelen)
+
+  END SUBROUTINE h5funmount_f
+!****s* H5F/h5fopen_f
+!
+! NAME
+!  h5fopen_f
+!
+! PURPOSE
+!  Opens HDF5 file.
+!
+! INPUTS
+!  name 	 - name of the file to acecss
+!  access_flags  - File access flags. Allowable values are:
+!                   H5F_ACC_RDWR_F
+!                   H5F_ACC_RDONLY_F
+! OUTPUTS
+!  file_id 	 - file identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  access_prp 	 - file access property list identifier
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! SOURCE
+  SUBROUTINE h5fopen_f(name, access_flags, file_id, hdferr, access_prp)
+    IMPLICIT NONE
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the file
+    INTEGER, INTENT(IN) :: access_flags    ! File access flags
+    INTEGER(HID_T), INTENT(OUT) :: file_id ! File identifier
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: access_prp
+                                           ! File access property list
+                                           ! identifier
+!*****
+    INTEGER(HID_T) :: access_prp_default
+    INTEGER :: namelen ! Length of the name character string
+
+    INTERFACE
+       INTEGER FUNCTION h5fopen_c(name, namelen, access_flags, &
+            access_prp_default, file_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FOPEN_C':: h5fopen_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER :: namelen
+         INTEGER, INTENT(IN) :: access_flags
+         INTEGER(HID_T), INTENT(IN) :: access_prp_default
+         INTEGER(HID_T), INTENT(OUT) :: file_id
+       END FUNCTION h5fopen_c
+    END INTERFACE
+
+    access_prp_default = H5P_DEFAULT_F
+    IF (PRESENT(access_prp))   access_prp_default   = access_prp
+    namelen = LEN_TRIM(name)
+    hdferr = h5fopen_c(name, namelen, access_flags, &
                                access_prp_default, file_id)
-
-          END SUBROUTINE h5fopen_f
-
-!----------------------------------------------------------------------
-! Name:		h5freopen_f
-!
-! Purpose:	Reopens HDF5 file.
-!
-! Inputs:
-!		file_id		- identifier of a file for which an
-!				  additional identifier is required
-! Outputs:
-!		ret_file_id	- new file identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5freopen_f(file_id, ret_file_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: file_id      ! File identifier
-            INTEGER(HID_T), INTENT(OUT) :: ret_file_id ! New File identifier
-            INTEGER, INTENT(OUT) :: hdferr             ! Error code
-
-!            INTEGER, EXTERNAL :: h5freopen_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5freopen_c(file_id, ret_file_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FREOPEN_C':: h5freopen_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: file_id
-              INTEGER(HID_T), INTENT(OUT) :: ret_file_id
-              END FUNCTION h5freopen_c
-            END INTERFACE
-
-            hdferr = h5freopen_c(file_id, ret_file_id)
-
-          END SUBROUTINE h5freopen_f
-
-!----------------------------------------------------------------------
-! Name:		h5fget_create_plist_f
-!
-! Purpose:	Returns a file creation property list identifier.
-!
-! Inputs:
-!		file_id		- identifier of a file to get
-!				  get creation property list of
-! Outputs:
-!		prop_id 	- creation property list identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5fget_create_plist_f(file_id, prop_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: file_id    ! File identifier
-            INTEGER(HID_T), INTENT(OUT) :: prop_id   ! File creation property
-                                                     ! list identifier
-            INTEGER, INTENT(OUT) :: hdferr           ! Error code
-
-!            INTEGER, EXTERNAL :: h5fget_create_plist_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5fget_create_plist_c(file_id, prop_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-!DEC$ATTRIBUTES C,reference,decorate,alias:'H5FGET_CREATE_PLIST_C':: h5fget_create_plist_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: file_id
-              INTEGER(HID_T), INTENT(OUT) :: prop_id
-              END FUNCTION h5fget_create_plist_c
-            END INTERFACE
-
-            hdferr = h5fget_create_plist_c(file_id, prop_id)
-
-          END SUBROUTINE h5fget_create_plist_f
-
-!----------------------------------------------------------------------
-! Name:		h5fget_access_plist_f
-!
-! Purpose:	Returns a file access property list identifier.
-!
-! Inputs:
-!		file_id		- identifier of a file to get
-!				  get creation property list of
-! Outputs:
-!		access_id 	- access property list identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5fget_access_plist_f(file_id, access_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: file_id      ! File identifier
-            INTEGER(HID_T), INTENT(OUT) :: access_id   ! File access property
-                                                       ! list identifier
-            INTEGER, INTENT(OUT) :: hdferr             ! Error code
-
-!            INTEGER, EXTERNAL :: h5fget_access_plist_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5fget_access_plist_c(file_id, access_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-!DEC$ATTRIBUTES C,reference,decorate,alias:'H5FGET_CREATE_PLIST_C':: h5fget_access_plist_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: file_id
-              INTEGER(HID_T), INTENT(OUT) :: access_id
-              END FUNCTION h5fget_access_plist_c
-            END INTERFACE
-
-
-            hdferr = h5fget_access_plist_c(file_id, access_id)
-
-          END SUBROUTINE h5fget_access_plist_f
-
-!----------------------------------------------------------------------
-! Name:		h5fis_hdf5_f
-!
-! Purpose:	Determines whether a file is in the HDF5 format.
-!
-! Inputs:
-!		name		- name of the file to check
-! Outputs:
-!		status		- indicates if file is and HDF5 file
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5fis_hdf5_f(name, status, hdferr)
-            IMPLICIT NONE
-            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the file
-            LOGICAL, INTENT(OUT) :: status         ! Indicates if file
-                                                   ! is an HDF5 file
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
-            INTEGER :: namelen ! Length of the name character string
-            INTEGER :: flag    ! "TRUE/FALSE" flag from C routine
-                               ! to define status value.
-
-!            INTEGER, EXTERNAL :: h5fis_hdf5_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5fis_hdf5_c(name, namelen, flag)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FIS_HDF5_C':: h5fis_hdf5_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER :: namelen
-              INTEGER :: flag
-              END FUNCTION h5fis_hdf5_c
-            END INTERFACE
-
-            namelen = LEN(name)
-            hdferr = h5fis_hdf5_c(name, namelen, flag)
-            status = .TRUE.
-            if (flag .EQ. 0) status = .FALSE.
-
-          END SUBROUTINE h5fis_hdf5_f
-
-!----------------------------------------------------------------------
-! Name:		h5fclose_f
-!
-! Purpose:	Closes HDF5 file.
-!
-! Inputs:
-!		file_id		- file identifier
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5fclose_f(file_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
-            INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5fclose_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5fclose_c(file_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FCLOSE_C':: h5fclose_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: file_id
-              END FUNCTION h5fclose_c
-            END INTERFACE
-
-            hdferr = h5fclose_c(file_id)
-
-          END SUBROUTINE h5fclose_f
-
-!----------------------------------------------------------------------
-! Name:		h5fget_obj_count_f
-!
-! Purpose:	Gets number of the objects open within a file
-!
-! Inputs:
-!		file_id		- file identifier
-!               obj_type        - type of the object; possible values are:
-!                                 H5F_OBJ_FILE_F
-!                                 H5F_OBJ_DATASET_F
-!                                 H5F_OBJ_GROUP_F
-!                                 H5F_OBJ_DATATYPE_F
-!                                 H5F_OBJ_ALL_F
-! Outputs:
-!               obj_count       - number of open objects
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		September 30, 2002
-!
-! Modifications:
-!               Changed the type of obj_count to INTEGER(SIZE_T)
-!                               September 25, 2008 EIP
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5fget_obj_count_f(file_id, obj_type, obj_count, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
-            INTEGER, INTENT(IN)  :: obj_type      ! Object type
-            INTEGER(SIZE_T), INTENT(OUT) :: obj_count
-                                                  ! Number of open objects
-            INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5fget_obj_count_c(file_id, obj_type, obj_count)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FGET_OBJ_COUNT_C':: h5fget_obj_count_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: file_id
-              INTEGER, INTENT(IN)  :: obj_type      ! Object type
-              INTEGER(SIZE_T), INTENT(OUT) :: obj_count
-                                                    ! Number of open objects
-              END FUNCTION h5fget_obj_count_c
-            END INTERFACE
-
-            hdferr = h5fget_obj_count_c(file_id, obj_type, obj_count)
-
-          END SUBROUTINE h5fget_obj_count_f
-
-!----------------------------------------------------------------------
-! Name:		h5fget_obj_ids_f
-!
-! Purpose:	Get list of open objects identifiers within a file
-!
-! Inputs:
-!		file_id		- file identifier
-!               obj_type        - type of the object; possible values are:
-!                                 H5F_OBJ_FILE_F
-!                                 H5F_OBJ_DATASET_F
-!                                 H5F_OBJ_GROUP_F
-!                                 H5F_OBJ_DATATYPE_F
-!                                 H5F_OBJ_ALL_F
-! Outputs:
-!               obj_ids         - array of open object identifiers
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		September 30, 2002
-!
-! Modifications:
-!               Added optional parameter num_objs for number of open objects
-!               of the specified type and changed type of max_obj to
-!               INTEGER(SIZE_T)
-!                               September 25, 2008 EIP
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5fget_obj_ids_f(file_id, obj_type, max_objs, obj_ids, hdferr, num_objs)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
-            INTEGER, INTENT(IN)  :: obj_type   ! Object type
-            INTEGER(SIZE_T), INTENT(IN)  :: max_objs   ! Maximum # of objects to retrieve
-            INTEGER(HID_T), DIMENSION(*), INTENT(INOUT) :: obj_ids
+  END SUBROUTINE h5fopen_f
+!****s* H5F/h5freopen_f
+!
+! NAME
+!  h5freopen_f
+!
+! PURPOSE
+!  Reopens HDF5 file.
+!
+! INPUTS
+!  file_id 	 - identifier of a file for which an
+!                  additional identifier is required
+! OUTPUTS
+!  ret_file_id 	 - new file identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! SOURCE
+  SUBROUTINE h5freopen_f(file_id, ret_file_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: file_id      ! File identifier
+    INTEGER(HID_T), INTENT(OUT) :: ret_file_id ! New File identifier
+    INTEGER, INTENT(OUT) :: hdferr             ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5freopen_c(file_id, ret_file_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FREOPEN_C':: h5freopen_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: file_id
+         INTEGER(HID_T), INTENT(OUT) :: ret_file_id
+       END FUNCTION h5freopen_c
+    END INTERFACE
+
+    hdferr = h5freopen_c(file_id, ret_file_id)
+
+  END SUBROUTINE h5freopen_f
+!****s* H5F/h5fget_create_plist_f
+!
+! NAME
+!  h5fget_create_plist_f
+!
+! PURPOSE
+!  Returns a file creation property list identifier.
+!
+! INPUTS
+!  file_id 	 - identifier of a file to creation property list of
+! OUTPUTS
+!  prop_id 	 - creation property list identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! SOURCE
+  SUBROUTINE h5fget_create_plist_f(file_id, prop_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: file_id    ! File identifier
+    INTEGER(HID_T), INTENT(OUT) :: prop_id   ! File creation property
+                                             ! list identifier
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5fget_create_plist_c(file_id, prop_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FGET_CREATE_PLIST_C':: h5fget_create_plist_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: file_id
+         INTEGER(HID_T), INTENT(OUT) :: prop_id
+       END FUNCTION h5fget_create_plist_c
+    END INTERFACE
+
+    hdferr = h5fget_create_plist_c(file_id, prop_id)
+
+  END SUBROUTINE h5fget_create_plist_f
+!****s* H5F/h5fget_access_plist_f
+!
+! NAME
+!  h5fget_access_plist_f
+!
+! PURPOSE
+!  Returns a file access property list identifier.
+!
+! INPUTS
+!  file_id 	 - identifier of a file to creation property list of
+! OUTPUTS
+!  access_id 	 - access property list identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! SOURCE
+  SUBROUTINE h5fget_access_plist_f(file_id, access_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: file_id      ! File identifier
+    INTEGER(HID_T), INTENT(OUT) :: access_id   ! File access property
+                                               ! list identifier
+    INTEGER, INTENT(OUT) :: hdferr             ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5fget_access_plist_c(file_id, access_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FGET_CREATE_PLIST_C':: h5fget_access_plist_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: file_id
+         INTEGER(HID_T), INTENT(OUT) :: access_id
+       END FUNCTION h5fget_access_plist_c
+    END INTERFACE
+
+    hdferr = h5fget_access_plist_c(file_id, access_id)
+
+  END SUBROUTINE h5fget_access_plist_f
+
+!****s* H5F/h5fis_hdf5_f
+!
+! NAME
+!  h5fis_hdf5_f
+!
+! PURPOSE
+!  Determines whether a file is in the HDF5 format.
+!
+! INPUTS
+!  name 	 - name of the file to check
+! OUTPUTS
+!  status 	 - indicates if file is and HDF5 file
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! SOURCE
+  SUBROUTINE h5fis_hdf5_f(name, status, hdferr)
+    IMPLICIT NONE
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the file
+    LOGICAL, INTENT(OUT) :: status         ! Indicates if file
+                                           ! is an HDF5 file
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
+    INTEGER :: namelen ! Length of the name character string
+    INTEGER :: flag    ! "TRUE/FALSE" flag from C routine
+                       ! to define status value.
+
+    INTERFACE
+       INTEGER FUNCTION h5fis_hdf5_c(name, namelen, flag)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FIS_HDF5_C':: h5fis_hdf5_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER :: namelen
+         INTEGER :: flag
+       END FUNCTION h5fis_hdf5_c
+    END INTERFACE
+
+    namelen = LEN_TRIM(name)
+    hdferr = h5fis_hdf5_c(name, namelen, flag)
+    status = .TRUE.
+    IF (flag .EQ. 0) status = .FALSE.
+
+  END SUBROUTINE h5fis_hdf5_f
+!****s* H5F/h5fclose_f
+!
+! NAME
+!  h5fclose_f
+!
+! PURPOSE
+!  Closes HDF5 file.
+!
+! INPUTS
+!  file_id 	 - file identifier
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! SOURCE
+  SUBROUTINE h5fclose_f(file_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5fclose_c(file_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FCLOSE_C':: h5fclose_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: file_id
+       END FUNCTION h5fclose_c
+    END INTERFACE
+
+    hdferr = h5fclose_c(file_id)
+
+  END SUBROUTINE h5fclose_f
+
+!****s* H5F/h5fget_obj_count_f
+!
+! NAME
+!  h5fget_obj_count_f
+!
+! PURPOSE
+!  Gets number of the objects open within a file
+!
+! INPUTS
+!  file_id 	 - file identifier
+!  obj_type 	 - type of the object; possible values are:
+!                    H5F_OBJ_FILE_F
+!                    H5F_OBJ_DATASET_F
+!                    H5F_OBJ_GROUP_F
+!                    H5F_OBJ_DATATYPE_F
+!                    H5F_OBJ_ALL_F
+! OUTPUTS
+!  obj_count 	 - number of open objects
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  September 30, 2002
+!
+! HISTORY
+!  Changed the type of obj_count to INTEGER(SIZE_T)
+!  September 25, 2008 EIP
+!
+! SOURCE
+  SUBROUTINE h5fget_obj_count_f(file_id, obj_type, obj_count, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
+    INTEGER, INTENT(IN)  :: obj_type      ! Object type
+    INTEGER(SIZE_T), INTENT(OUT) :: obj_count
+                                          ! Number of open objects
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5fget_obj_count_c(file_id, obj_type, obj_count)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FGET_OBJ_COUNT_C':: h5fget_obj_count_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: file_id
+         INTEGER, INTENT(IN)  :: obj_type      ! Object type
+         INTEGER(SIZE_T), INTENT(OUT) :: obj_count
+         ! Number of open objects
+       END FUNCTION h5fget_obj_count_c
+    END INTERFACE
+
+    hdferr = h5fget_obj_count_c(file_id, obj_type, obj_count)
+
+  END SUBROUTINE h5fget_obj_count_f
+
+!****s* H5F/h5fget_obj_ids_f
+!
+! NAME
+!  h5fget_obj_ids_f
+!
+! PURPOSE
+!  Get list of open objects identifiers within a file
+!
+! INPUTS
+!  file_id 	 - file identifier
+!  obj_type 	 - type of the object; possible values are:
+!                    H5F_OBJ_FILE_F
+!                    H5F_OBJ_DATASET_F
+!                    H5F_OBJ_GROUP_F
+!                    H5F_OBJ_DATATYPE_F
+!                    H5F_OBJ_ALL_F
+! OUTPUTS
+!  obj_ids 	 - array of open object identifiers
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! OPTIONAL PARAMETERS
+!  num_objs 	 - number of open objects
+!
+! AUTHOR
+!  Elena Pourmal
+!  September 30, 2002
+!
+! HISTORY
+!  Added optional parameter num_objs for number of open objects
+!  of the specified type and changed type of max_obj to
+!  INTEGER(SIZE_T)
+!  September 25, 2008 EIP
+!
+! SOURCE
+  SUBROUTINE h5fget_obj_ids_f(file_id, obj_type, max_objs, obj_ids, hdferr, num_objs)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: file_id      ! File identifier
+    INTEGER, INTENT(IN)  :: obj_type           ! Object type
+    INTEGER(SIZE_T), INTENT(IN)  :: max_objs   ! Maximum # of objects to retrieve
+    INTEGER(HID_T), DIMENSION(*), INTENT(INOUT) :: obj_ids
                                                ! Array of open objects iidentifiers
-            INTEGER, INTENT(OUT) :: hdferr     ! Error code
-            INTEGER(SIZE_T), INTENT(OUT), OPTIONAL :: num_objs
-            INTEGER(SIZE_T) :: c_num_objs
-                              ! Number of open objects of the specified type
-
-            INTERFACE
-              INTEGER FUNCTION h5fget_obj_ids_c(file_id, obj_type, max_objs, obj_ids, c_num_objs)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FGET_OBJ_IDS_C':: h5fget_obj_ids_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: file_id
-              INTEGER, INTENT(IN)  :: obj_type
-              INTEGER(SIZE_T), INTENT(IN)  :: max_objs
-              INTEGER(HID_T), DIMENSION(*), INTENT(INOUT) :: obj_ids
-              INTEGER(SIZE_T), INTENT(OUT) :: c_num_objs
-              END FUNCTION h5fget_obj_ids_c
-            END INTERFACE
-
-            hdferr = h5fget_obj_ids_c(file_id, obj_type, max_objs, obj_ids, c_num_objs)
-            if (present(num_objs)) num_objs= c_num_objs
-
-          END SUBROUTINE h5fget_obj_ids_f
-
-!----------------------------------------------------------------------
-! Name:		h5fget_freespace_f
-!
-! Purpose:	Get amount of free space within a file
-!
-! Inputs:
-!		file_id		- file identifier
-! Outputs:
-!               free_space      - amount of free space in file
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Quincey Koziol
-!		October 7, 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5fget_freespace_f(file_id, free_space, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
-            INTEGER(HSSIZE_T), INTENT(OUT) :: free_space
-                                             !amount of free space in file
-            INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5fget_freespace_c(file_id, free_space)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FGET_FREESPACE_C':: h5fget_freespace_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: file_id
-              INTEGER(HSSIZE_T), INTENT(OUT) :: free_space
-              END FUNCTION h5fget_freespace_c
-            END INTERFACE
-
-            hdferr = h5fget_freespace_c(file_id, free_space)
-
-          END SUBROUTINE h5fget_freespace_f
-
-!----------------------------------------------------------------------
-! Name:		h5fget_name_f
-!
-! Purpose: 	Gets the name of the file from the object identifier
-!
-! Inputs:
-!		obj_id		- object identifier
-! Inputs/Outputs:
-!		buf		- buffer to read name in
-! Outputs:
-!		size		- actual size of the name
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!
-! Programmer:	Elena Pourmal
-!		July 6, 2004
-!
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5fget_name_f(obj_id, buf, size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: obj_id   ! Object identifier
-            CHARACTER(LEN=*), INTENT(INOUT) :: buf
-                                                   ! Buffer to hold file name
-            INTEGER(SIZE_T), INTENT(OUT) :: size   ! Size of the file name
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code: 0 on success,
-                                                   ! -1 if fail
-            INTEGER(SIZE_T) :: buflen
-!            INTEGER, EXTERNAL :: h5fget_name_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5fget_name_c(obj_id, size, buf, buflen)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FGET_NAME_C'::h5fget_name_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: obj_id
-              INTEGER(SIZE_T), INTENT(OUT) :: size
-              INTEGER(SIZE_T) :: buflen
-              CHARACTER(LEN=*), INTENT(OUT) :: buf
-              END FUNCTION h5fget_name_c
-            END INTERFACE
-            buflen = LEN(buf)
-            hdferr = h5fget_name_c(obj_id, size, buf, buflen)
-          END SUBROUTINE h5fget_name_f
-
-!----------------------------------------------------------------------
-! Name:		h5fget_filesize_f
-!
-! Purpose: 	Retrieves the file size of the HDF5 file.
-!
-! Inputs:
-!		file_id		- file identifier
-! Outputs:
-!		size		- file size
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!
-! Programmer:	Elena Pourmal
-!		July 7, 2004
-!
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5fget_filesize_f(file_id, size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: file_id  ! file identifier
-            INTEGER(HSIZE_T), INTENT(OUT) :: size  ! Size of the file
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code: 0 on success,
-                                                   ! -1 if fail
-!            INTEGER, EXTERNAL :: h5fget_filesize_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5fget_filesize_c(file_id, size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FGET_FILESIZE_C'::h5fget_filesize_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: file_id
-              INTEGER(HSIZE_T), INTENT(OUT) :: size
-              END FUNCTION h5fget_filesize_c
-            END INTERFACE
-            hdferr = h5fget_filesize_c(file_id, size)
-          END SUBROUTINE h5fget_filesize_f
-
-
-      END MODULE H5F
+    INTEGER, INTENT(OUT) :: hdferr             ! Error code
+    INTEGER(SIZE_T), INTENT(OUT), OPTIONAL :: num_objs ! number of open objects
+!*****
+    INTEGER(SIZE_T) :: c_num_objs ! Number of open objects of the specified type
+
+    INTERFACE
+       INTEGER FUNCTION h5fget_obj_ids_c(file_id, obj_type, max_objs, obj_ids, c_num_objs)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FGET_OBJ_IDS_C':: h5fget_obj_ids_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: file_id
+         INTEGER, INTENT(IN)  :: obj_type
+         INTEGER(SIZE_T), INTENT(IN)  :: max_objs
+         INTEGER(HID_T), DIMENSION(*), INTENT(INOUT) :: obj_ids
+         INTEGER(SIZE_T), INTENT(OUT) :: c_num_objs
+       END FUNCTION h5fget_obj_ids_c
+    END INTERFACE
+
+    hdferr = h5fget_obj_ids_c(file_id, obj_type, max_objs, obj_ids, c_num_objs)
+    IF (PRESENT(num_objs)) num_objs= c_num_objs
+
+  END SUBROUTINE h5fget_obj_ids_f
+!****s* H5F/h5fget_freespace_f
+!
+! NAME
+!  h5fget_freespace_f
+!
+! PURPOSE
+!  Get amount of free space within a file
+!
+! INPUTS
+!  file_id 	 - file identifier
+! OUTPUTS
+!  free_space 	 - amount of free space in file
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Quincey Koziol
+!  October 7, 2003
+!
+! SOURCE
+  SUBROUTINE h5fget_freespace_f(file_id, free_space, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: file_id ! File identifier
+    INTEGER(HSSIZE_T), INTENT(OUT) :: free_space
+                                          ! amount of free space in file
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5fget_freespace_c(file_id, free_space)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FGET_FREESPACE_C':: h5fget_freespace_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: file_id
+         INTEGER(HSSIZE_T), INTENT(OUT) :: free_space
+       END FUNCTION h5fget_freespace_c
+    END INTERFACE
+
+    hdferr = h5fget_freespace_c(file_id, free_space)
+
+  END SUBROUTINE h5fget_freespace_f
+!****s* H5F/h5fget_name_f
+!
+! NAME
+!  h5fget_name_f
+!
+! PURPOSE
+!  Gets the name of the file from the object identifier
+!
+! INPUTS
+!  obj_id 	 - object identifier
+! OUTPUTS
+!  buf 	         - buffer to store the read name
+!  size 	 - actual size of the name
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  July 6, 2004
+!
+! SOURCE
+  SUBROUTINE h5fget_name_f(obj_id, buf, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: obj_id   ! Object identifier
+    CHARACTER(LEN=*), INTENT(INOUT) :: buf
+                                           ! Buffer to hold file name
+    INTEGER(SIZE_T), INTENT(OUT) :: size   ! Size of the file name
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code: 0 on success,
+                                           !   	 -1 if fail
+!*****
+    INTEGER(SIZE_T) :: buflen
+
+    INTERFACE
+       INTEGER FUNCTION h5fget_name_c(obj_id, size, buf, buflen)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FGET_NAME_C'::h5fget_name_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: obj_id
+         INTEGER(SIZE_T), INTENT(OUT) :: size
+         INTEGER(SIZE_T) :: buflen
+         CHARACTER(LEN=*), INTENT(OUT) :: buf
+       END FUNCTION h5fget_name_c
+    END INTERFACE
+    buflen = LEN_TRIM(buf)
+    hdferr = h5fget_name_c(obj_id, size, buf, buflen)
+  END SUBROUTINE h5fget_name_f
+!****s* H5F/h5fget_filesize_f
+!
+! NAME
+!  h5fget_filesize_f
+!
+! PURPOSE
+!  Retrieves the file size of the HDF5 file.
+!
+! INPUTS
+!  file_id 	 - file identifier
+! OUTPUTS
+!  size 	 - file size
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  July 7, 2004
+!
+! SOURCE
+  SUBROUTINE h5fget_filesize_f(file_id, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: file_id  ! file identifier
+    INTEGER(HSIZE_T), INTENT(OUT) :: size  ! Size of the file
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code: 0 on success,
+                                           !   	 -1 if fail
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5fget_filesize_c(file_id, size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5FGET_FILESIZE_C'::h5fget_filesize_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: file_id
+         INTEGER(HSIZE_T), INTENT(OUT) :: size
+       END FUNCTION h5fget_filesize_c
+    END INTERFACE
+    hdferr = h5fget_filesize_c(file_id, size)
+  END SUBROUTINE h5fget_filesize_f
+
+
+END MODULE H5F
diff --git a/fortran/src/H5Gf.c b/fortran/src/H5Gf.c
index f40b595..5ebb3e7 100644
--- a/fortran/src/H5Gf.c
+++ b/fortran/src/H5Gf.c
@@ -1,4 +1,9 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* H5Gf/H5Gf
+ * PURPOSE
+ *   This file contains C stubs for H5G Fortran APIs
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,32 +16,42 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This files contains C stubs for H5G Fortran APIs */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include "H5f90.h"
 #include "H5Eprivate.h"
 
-/*----------------------------------------------------------------------------
- * Name:        h5gcreate_c
- * Purpose:     Call H5Gcreate to create a group
- * Inputs:      loc_id - file or group identifier
+/****if* H5Gf/h5gcreate_c
+ * NAME
+ *        h5gcreate_c
+ * PURPOSE
+ *     Call H5Gcreate to create a group
+ * INPUTS
+ *      loc_id - file or group identifier
  *              name - name of the group
  *              namelen - name length
  *              size_hint - length of names in the group
- * Outputs:     grp_id - group identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     grp_id - group identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 5, 1999
- * Modifications:
+ * HISTORY
+ *
  *              Changed to call H5Gcreate2 because H5Gcreate flip-flops and
  *              H5Gcreate1 can be compiled out of the library
  *              QAK - 2007/08/23
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5gcreate_c(hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *size_hint,
 	     hid_t_f *grp_id, hid_t_f *lcpl_id, hid_t_f *gcpl_id, hid_t_f *gapl_id )
+/******/
 {
     hid_t c_gcpl_id = -1;          /* Group creation property list */
     char *c_name = NULL;
@@ -81,21 +96,29 @@ DONE:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5gopen_c
- * Purpose:     Call H5Gopen to open a dataset
- * Inputs:      loc_id - file or group identifier
+/****if* H5Gf/h5gopen_c
+ * NAME
+ *        h5gopen_c
+ * PURPOSE
+ *     Call H5Gopen to open a dataset
+ * INPUTS
+ *      loc_id - file or group identifier
  *              name - name of the group
  *              namelen - name length
  *              gapl_id - Group access property list identifier
- * Outputs:     grp_id - group identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     grp_id - group identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 5, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ *
+ * SOURCE
+*/
 int_f
 nh5gopen_c(hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *gapl_id, hid_t_f *grp_id)
+/******/
 {
      char *c_name = NULL;
      hid_t c_grp_id;
@@ -123,25 +146,32 @@ DONE:
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5gget_obj_info_idx_c
- * Purpose:     Call H5Gget_obj_info to return name and the type of group
+/****if* H5Gf/h5gget_obj_info_idx_c
+ * NAME
+ *        h5gget_obj_info_idx_c
+ * PURPOSE
+ *     Call H5Gget_obj_info to return name and the type of group
  *              member
- * Inputs:      loc_id - file or group identifier
+ * INPUTS
+ *      loc_id - file or group identifier
  *              name - name of the group
  *              namelen - name length
  *              idx - index of the group member
- * Outputs:     obj_name - buffer to store member's name
+ * OUTPUTS
+ *     obj_name - buffer to store member's name
  *              obj_namelen - length of the buffer
  *              obj_type - type of the object
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 5, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5gget_obj_info_idx_c(hid_t_f *loc_id, _fcd name, int_f *namelen, int_f *idx,
     _fcd obj_name, int_f *obj_namelen, int_f *obj_type)
+/******/
 {
     H5O_info_t oinfo;
     hid_t c_loc_id = (hid_t)*loc_id;
@@ -199,20 +229,27 @@ DONE:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5gn_members_c
- * Purpose:     Call H5Gget_info_by_name to find number of objects in the group
- * Inputs:      loc_id - file or group identifier
+/****if* H5Gf/h5gn_members_c
+ * NAME
+ *        h5gn_members_c
+ * PURPOSE
+ *     Call H5Gget_info_by_name to find number of objects in the group
+ * INPUTS
+ *      loc_id - file or group identifier
  *              name - name of the group
  *              namelen - name length
- * Outputs:     nmemebers - number of members
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     nmemebers - number of members
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 5, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5gn_members_c(hid_t_f *loc_id, _fcd name, int_f *namelen, int_f *nmembers)
+/******/
 {
     char *c_name = NULL;
     H5G_info_t ginfo;
@@ -237,18 +274,24 @@ DONE:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5gclose_c
- * Purpose:     Call H5Gclose to close the group
- * Inputs:      grp_id - identifier of the group to be closed
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Gf/h5gclose_c
+ * NAME
+ *        h5gclose_c
+ * PURPOSE
+ *     Call H5Gclose to close the group
+ * INPUTS
+ *      grp_id - identifier of the group to be closed
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 5, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 
 int_f
 nh5gclose_c(hid_t_f *grp_id)
+/******/
 {
     int ret_value = 0;
 
@@ -258,25 +301,31 @@ nh5gclose_c(hid_t_f *grp_id)
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5glink_c
- * Purpose:     Call H5Glink to link the specified type
- * Inputs:      loc_id - identifier of file or group
+/****if* H5Gf/h5glink_c
+ * NAME
+ *        h5glink_c
+ * PURPOSE
+ *     Call H5Glink to link the specified type
+ * INPUTS
+ *      loc_id - identifier of file or group
  *              link_type - link type
  *              current_name - name of the existing object for hard link,
  *                             anything for the soft link
  *              current_namelen - current name lenghth
  *              new_name - new name for the object
  *              new_namelen - new_name lenghth
- * Returns:     0 on success, -1 on failure
- * Programmer:  Mingshi Chen
- *              Friday, August 6, 1999
- * Modifications: Elena Pourmal
- *---------------------------------------------------------------------------*/
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Mingshi Chen
+ *  Friday, August 6, 1999
+ * SOURCE
+*/
 
 int_f
 nh5glink_c(hid_t_f *loc_id, int_f *link_type, _fcd current_name,
     int_f *current_namelen, _fcd new_name, int_f *new_namelen)
+/******/
 {
     char *c_current_name = NULL, *c_new_name = NULL;
     int ret_value = -1;
@@ -317,10 +366,13 @@ DONE:
     return ret_value ;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5glink2_c
- * Purpose:     Call H5Glink2 to link the specified type
- * Inputs:      cur_loc_id - identifier of file or group
+/****if* H5Gf/h5glink2_c
+ * NAME
+ *        h5glink2_c
+ * PURPOSE
+ *     Call H5Glink2 to link the specified type
+ * INPUTS
+ *      cur_loc_id - identifier of file or group
  *              cur_name - name of the existing object for hard link releative
  *                         to cur_loc_id location,
  *                         anything for the soft link
@@ -330,15 +382,20 @@ DONE:
  *              new_name - new name for the object releative to the new_loc_id
  *                         location
  *              new_namelen - new_name lenghth
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, September 25, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5glink2_c(hid_t_f *cur_loc_id, _fcd cur_name, int_f *cur_namelen,
     int_f *link_type, hid_t_f *new_loc_id, _fcd new_name, int_f *new_namelen)
+/******/
 {
     char *c_cur_name = NULL, *c_new_name = NULL;
     int ret_value = -1;
@@ -378,19 +435,25 @@ DONE:
     return ret_value ;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5gunlink_c
- * Purpose:     Call H5Gunlink to remove  the specified name
- * Inputs:      loc_id - identifier of file or group
+/****if* H5Gf/h5gunlink_c
+ * NAME
+ *        h5gunlink_c
+ * PURPOSE
+ *     Call H5Gunlink to remove  the specified name
+ * INPUTS
+ *      loc_id - identifier of file or group
  *              name - name of the object to unlink
- * Returns:     0 on success, -1 on failure
- * Programmer:  Mingshi Chen
- *              Friday, August 6, 1999
- * Modifications: Elena Pourmal
- *---------------------------------------------------------------------------*/
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Mingshi Chen
+ *  Friday, August 6, 1999
+ * SOURCE
+*/
 
 int_f
 nh5gunlink_c(hid_t_f *loc_id, _fcd name, int_f *namelen)
+/******/
 {
     char *c_name = NULL;
     int ret_value = -1;
@@ -414,22 +477,28 @@ DONE:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5gmove_c
- * Purpose:     Call H5Gmove to rename an object within an HDF5 file
- * Inputs:      loc_id - identifier of file or group
+/****if* H5Gf/h5gmove_c
+ * NAME
+ *        h5gmove_c
+ * PURPOSE
+ *     Call H5Gmove to rename an object within an HDF5 file
+ * INPUTS
+ *      loc_id - identifier of file or group
  *              src_name - name of the original object
  *              src_namelen - original name lenghth
  *              dst_name - new name for the object
  *              dst_namelen - new name lenghth
- * Returns:     0 on success, -1 on failure
- * Programmer:  Mingshi Chen
- *              Friday, August 6, 1999
- * Modifications: Elena Pourmal
- *---------------------------------------------------------------------------*/
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Mingshi Chen
+ *  Friday, August 6, 1999
+ * SOURCE
+*/
 
 int_f
 nh5gmove_c(hid_t_f *loc_id, _fcd src_name, int_f *src_namelen, _fcd dst_name, int_f*dst_namelen)
+/******/
 {
     char *c_src_name = NULL, *c_dst_name = NULL;
     int ret_value = -1;
@@ -458,23 +527,30 @@ DONE:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5gmove2_c
- * Purpose:     Call H5Gmove2 to rename an object within an HDF5 file
- * Inputs:      src_loc_id - identifier of file or group
+/****if* H5Gf/h5gmove2_c
+ * NAME
+ *        h5gmove2_c
+ * PURPOSE
+ *     Call H5Gmove2 to rename an object within an HDF5 file
+ * INPUTS
+ *      src_loc_id - identifier of file or group
  *              src_name - name of the original object relative to src_loc_id
  *              src_namelen - original name lenghth
  *              dst_loc_id - new location identifier
  *              dst_name - new name for the object relative to dst_loc_id
  *              dst_namelen - new name lenghth
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              Wednesday, September 25, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  Wednesday, September 25, 2002
+ *
+ * SOURCE
+*/
 
 int_f
 nh5gmove2_c(hid_t_f *src_loc_id, _fcd src_name, int_f *src_namelen, hid_t_f *dst_loc_id, _fcd dst_name, int_f*dst_namelen)
+/******/
 {
     char *c_src_name = NULL, *c_dst_name = NULL;
     int ret_value = -1;
@@ -503,23 +579,30 @@ DONE:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5gget_linkval_c
- * Purpose:     Call H5Gget_linkval to return the name of object
- * Inputs:      loc_id - identifier of file or group
+/****if* H5Gf/h5gget_linkval_c
+ * NAME
+ *        h5gget_linkval_c
+ * PURPOSE
+ *     Call H5Gget_linkval to return the name of object
+ * INPUTS
+ *      loc_id - identifier of file or group
  *              name - name of the object that symbolic link points to
  *              namelen - the name lenghth
  *              size - lenghth of retrurned value
- * Outputs:     value - name to be returned
- * Returns:     0 on success, -1 on failure
- * Programmer:  Mingshi Chen
- *              Friday, August 6, 1999
- * Modifications: Elena Pourmal
- *---------------------------------------------------------------------------*/
+ * OUTPUTS
+ *     value - name to be returned
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Mingshi Chen
+ *  Friday, August 6, 1999
+ * SOURCE
+*/
 
 int_f
 nh5gget_linkval_c(hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *size,
     _fcd value)
+/******/
 {
     char *c_name = NULL;
     char *c_value = NULL;
@@ -560,23 +643,30 @@ DONE:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5gset_comment_c
- * Purpose:     Call H5Oset_comment_by_name to set comments for the specified object
- * Inputs:      loc_id - identifier of file or group
+/****if* H5Gf/h5gset_comment_c
+ * NAME
+ *        h5gset_comment_c
+ * PURPOSE
+ *     Call H5Oset_comment_by_name to set comments for the specified object
+ * INPUTS
+ *      loc_id - identifier of file or group
  *              name - name of object whose comment is to be set or reset
  *              namelen - the name lenghth
  *              comment - the new comment
  *              commentlen - new comment lenghth
- * Returns:     0 on success, -1 on failure
- * Programmer:  Mingshi Chen
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Mingshi Chen
  *              Friday, August 6, 1999
- * Modifications: Elena Pourmal
- *---------------------------------------------------------------------------*/
-
+ * HISTORY
+ * Elena Pourmal
+ * SOURCE
+*/
 int_f
 nh5gset_comment_c(hid_t_f *loc_id, _fcd name, int_f *namelen, _fcd comment,
     int_f *commentlen)
+/******/
 {
     char *c_name = NULL, *c_comment = NULL;
     int ret_value = -1;
@@ -604,23 +694,28 @@ DONE:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5gget_comment_c
- * Purpose:     Call H5Oget_comment_by_name to retrieve comments for the specified object
- * Inputs:      loc_id - identifier of file or group
+/****if* H5Gf/h5gget_comment_c
+ * NAME
+ *        h5gget_comment_c
+ * PURPOSE
+ *     Call H5Oget_comment_by_name to retrieve comments for the specified object
+ * INPUTS
+ *      loc_id - identifier of file or group
  *              name - name of object whose comment is to be set or reset
  *              namelen - the name lenghth
  *              bufsize - at most bufsize characters
  *              comment - the new comment
- * Returns:     0 on success, -1 on failure
- * Programmer:  Mingshi Chen
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Mingshi Chen
  *              Friday, August 6, 1999
- * Modifications: Elena Pourmal
- *---------------------------------------------------------------------------*/
-
+ * SOURCE
+*/
 int_f
 nh5gget_comment_c(hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *bufsize,
     _fcd comment)
+/******/
 {
     char *c_name = NULL, *c_comment = NULL;
     size_t c_bufsize;
@@ -661,22 +756,29 @@ DONE:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5gcreate_anon_c
- * Purpose:     Call H5Gcreate_anon
- * Inputs:
+/****if* H5Gf/h5gcreate_anon_c
+ * NAME
+ *        h5gcreate_anon_c
+ * PURPOSE
+ *     Call H5Gcreate_anon
+ * INPUTS
+ *
  *              loc_id  - Location identifier
  *              gcpl_id - Group creation property list identifier
  *              gapl_id - Group access property list identifier
  *
- * Outputs:     grp_id - group identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              February 15, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * OUTPUTS
+ *     grp_id - group identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  February 15, 2008
+ * SOURCE
+*/
 int_f
 nh5gcreate_anon_c(hid_t_f *loc_id, hid_t_f *gcpl_id, hid_t_f *gapl_id, hid_t_f *grp_id)
+/******/
 {
 
   int_f ret_value=0;          /* Return value */
@@ -688,20 +790,27 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5gget_create_plist_c
- * Purpose:     Call H5Gget_create_plist
- * Inputs:
+/****if* H5Gf/h5gget_create_plist_c
+ * NAME
+ *        h5gget_create_plist_c
+ * PURPOSE
+ *     Call H5Gget_create_plist
+ * INPUTS
+ *
  *              grp_id - group identifier
  *
- * Outputs:     gcpl_id - Group creation property list identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              February 15, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * OUTPUTS
+ *     gcpl_id - Group creation property list identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  February 15, 2008
+ * SOURCE
+*/
 int_f
 nh5gget_create_plist_c(hid_t_f *grp_id, hid_t_f *gcpl_id )
+/******/
 {
   int_f ret_value=0; /* Return value */
 
@@ -713,11 +822,15 @@ done:
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:      h5gget_info_c
- * Purpose:   Call H5Gget_info
- * Inputs:    group_id - Group identifier
- * Outputs:
+/****if* H5Gf/h5gget_info_c
+ * NAME
+ *      h5gget_info_c
+ * PURPOSE
+ *   Call H5Gget_info
+ * INPUTS
+ *    group_id - Group identifier
+ * OUTPUTS
+ *
  *            storage_type - Type of storage for links in group:
  *                             H5G_STORAGE_TYPE_COMPACT: Compact storage
  *                             H5G_STORAGE_TYPE_DENSE: Indexed storage
@@ -727,16 +840,21 @@ done:
  *              max_corder - Current maximum creation order value for group
  *                 mounted - Whether group has a file mounted on it (0 = false, 1 = true)
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February 15, 2008
- * Modifications:
+ * HISTORY
+ *
  *          - Added 'mounted' paramater
- *            M.S. Breitenfeld
+ *            M. Scot Breitenfeld
  *            July 16, 2008
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5gget_info_c (hid_t_f *group_id, int_f *storage_type, int_f *nlinks, int_f *max_corder, int_f *mounted )
+/******/
 {
 
     int_f ret_value = 0;          /* Return value */
@@ -761,10 +879,13 @@ done:
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:      h5gget_info_by_idx_c
- * Purpose:   Call H5Gget_info_by_idx
- * Inputs:
+/****if* H5Gf/h5gget_info_by_idx_c
+ * NAME
+ *      h5gget_info_by_idx_c
+ * PURPOSE
+ *   Call H5Gget_info_by_idx
+ * INPUTS
+ *
  *          loc_id - File or group identifier
  *      group_name - Name of group containing group for which information is to be retrieved
  *   group_namelen - name length
@@ -772,7 +893,8 @@ done:
  *           order - Order of the count in the index
  *               n - Position in the index of the group for which information is retrieved
  *         lapl_id - Link access property list
- * Outputs:
+ * OUTPUTS
+ *
  *            storage_type - Type of storage for links in group:
  *                             H5G_STORAGE_TYPE_COMPACT: Compact storage
  *                             H5G_STORAGE_TYPE_DENSE: Indexed storage
@@ -782,19 +904,23 @@ done:
  *              max_corder - Current maximum creation order value for group
  *                 mounted - Whether group has a file mounted on it (0 = false, 1 = true)
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February 18, 2008
- * Modifications:
+ * HISTORY
+ *
  *          - Added 'mounted' paramater
- *            M.S. Breitenfeld
+ *            M. Scot Breitenfeld
  *            July 16, 2008
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5gget_info_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen,
 		      int_f *index_type, int_f *order, hsize_t_f *n, hid_t_f *lapl_id,
 		      int_f *storage_type, int_f *nlinks, int_f *max_corder, int_f *mounted )
-
+/******/
 {
   char *c_group_name = NULL;          /* Buffer to hold group name C string */
   int_f ret_value = 0;          /* Return value */
@@ -826,15 +952,19 @@ nh5gget_info_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen,
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:      h5gget_info_by_name_c
- * Purpose:   Call H5Gget_info_by_name
- * Inputs:
+/****if* H5Gf/h5gget_info_by_name_c
+ * NAME
+ *      h5gget_info_by_name_c
+ * PURPOSE
+ *   Call H5Gget_info_by_name
+ * INPUTS
+ *
  *          loc_id - File or group identifier
  *      group_name - Name of group containing group for which information is to be retrieved
  *   group_namelen - name length
  *         lapl_id - Link access property list
- * Outputs:
+ * OUTPUTS
+ *
  *            storage_type - Type of storage for links in group:
  *                             H5G_STORAGE_TYPE_COMPACT: Compact storage
  *                             H5G_STORAGE_TYPE_DENSE: Indexed storage
@@ -844,18 +974,22 @@ nh5gget_info_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen,
  *              max_corder - Current maximum creation order value for group
  *                 mounted - Whether group has a file mounted on it (0 = false, 1 = true)
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February 18, 2008
- * Modifications:
+ * HISTORY
+ *
  *          - Added 'mounted' paramater
- *            M.S. Breitenfeld
+ *            M. Scot Breitenfeld
  *            July 16, 2008
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5gget_info_by_name_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen, hid_t_f *lapl_id,
 		       int_f *storage_type, int_f *nlinks, int_f *max_corder, int_f *mounted)
-
+/******/
 {
   char *c_group_name = NULL;          /* Buffer to hold group name C string */
   int_f ret_value = 0;          /* Return value */
@@ -885,4 +1019,3 @@ nh5gget_info_by_name_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen
     HDfree(c_group_name);
   return ret_value;
 }
-
diff --git a/fortran/src/H5Gff.f90 b/fortran/src/H5Gff.f90
index 2e769ad..6bcee7c 100644
--- a/fortran/src/H5Gff.f90
+++ b/fortran/src/H5Gff.f90
@@ -1,3 +1,15 @@
+!****h* ROBODoc/H5G
+!
+! NAME
+!  MODULE H5G
+!
+! FILE
+!  fortran/src/H5Gff.f90
+!
+! PURPOSE
+!  This file contains Fortran interfaces for H5G functions.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,55 +25,61 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5G function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
 !
-! This file contains Fortran90 interfaces for H5F functions.
-!
+!*****
+
 MODULE H5G
   USE H5GLOBAL
 
-! PRIVATE :: h5gcreate1_f
+!  PRIVATE :: h5gcreate1_f
 !  PRIVATE :: h5gcreate2_f
 
 !  INTERFACE h5gcreate_f
-!    MODULE PROCEDURE h5gcreate1_f
-!     MODULE PROCEDURE h5gcreate2_f
+!  MODULE PROCEDURE h5gcreate1_f
+!  MODULE PROCEDURE h5gcreate2_f
 !  END INTERFACE
 
 CONTAINS
 
-!----------------------------------------------------------------------
-! Name:		h5gcreate_f
-!
-! Purpose:	Creates a new group.
-!
-! Inputs:
-!		loc_id		- location identifier
-!		name		- group name at the specified location
-! Outputs:
-!		grp_id		- group identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!		      size_hint	- a parameter indicating the number of bytes
-!				  to reserve for the names that will appear
-!				  in the group
-!                       lcpl_id - Property list for link creation
-!                       gcpl_id - Property list for group creation
-!                       gapl_id - Property list for group access
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 5, 2001
-!
-!                       Added additional optional paramaters in 1.8
-!                       MSB - February 27, 2008
-!
-! Comment:
-!----------------------------------------------------------------------
+!****s* H5G/h5gcreate_f
+!
+! NAME
+!  h5gcreate_f
+!
+! PURPOSE
+!  Creates a new group.
+!
+! INPUTS
+!  loc_id 	 - location identifier
+!  name 	 - group name at the specified location
+! OUTPUTS
+!  grp_id 	 - group identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  size_hint 	 - a parameter indicating the number of bytes to
+!                  reserve for the names that will appear in the group
+!  lcpl_id 	 - Property list for link creation
+!  gcpl_id 	 - Property list for group creation
+!  gapl_id 	 - Property list for group access
+!
+! AUTHOR	
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY 	
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 5, 2001
+!
+!  Added additional optional paramaters in 1.8
+!  MSB - February 27, 2008
+!
+! SOURCE
   SUBROUTINE h5gcreate_f(loc_id, name, grp_id, hdferr, size_hint, lcpl_id, gcpl_id, gapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
@@ -80,7 +98,7 @@ CONTAINS
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id  ! Property list for link creation
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gcpl_id  ! Property list for group creation
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gapl_id  ! Property list for group access
-
+!*****
     INTEGER(HID_T) :: lcpl_id_default
     INTEGER(HID_T) :: gcpl_id_default
     INTEGER(HID_T) :: gapl_id_default
@@ -88,8 +106,6 @@ CONTAINS
     INTEGER :: namelen ! Length of the name character string
     INTEGER(SIZE_T) :: size_hint_default
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5gcreate_c(loc_id, name, namelen, &
             size_hint_default, grp_id, lcpl_id_default, gcpl_id_default, gapl_id_default)
@@ -125,33 +141,37 @@ CONTAINS
 
   END SUBROUTINE h5gcreate_f
 
-!!$!----------------------------------------------------------------------
-!!$! Name:		h5gcreate2_f
 !!$!
-!!$! Purpose:	Creates a new group.
+!!$!****s* H5G/
 !!$!
-!!$! Inputs:
+!!$! NAME
+!!$!  h5gcreate2_f
+!!$!
+!!$! PURPOSE
+!!$!	Creates a new group.
+!!$!
+!!$! INPUTS
 !!$!		loc_id		- location identifier
 !!$!		name		- group name at the specified location
-!!$! Outputs:
+!!$! OUTPUTS
 !!$!		grp_id		- group identifier
 !!$!		hdferr:		- error code
 !!$!				 	Success:  0
 !!$!				 	Failure: -1
-!!$! Optional parameters:
+!!$! OPTIONAL PARAMETERS
 !!$!
 !!$!    lcpl_id  - Property list for link creation
 !!$!    gcpl_id  - Property list for group creation
 !!$!    gapl_id  - Property list for group access
 !!$!
-!!$! Programmer:	M.S. BREITENFELD
+!!$! AUTHOR	M. Scot Breitenfeld
 !!$!		February 27, 2008
 !!$!
-!!$! Modifications:
+!!$! HISTORY
 !!$!
-!!$! Comment: Needed to switch the first 2 arguments to avoid conflect
+!!$! NOTES Needed to switch the first 2 arguments to avoid conflect
 !!$!          with h5gcreate1_f
-!!$!----------------------------------------------------------------------
+!!$!
 !!$
 !!$  SUBROUTINE h5gcreate2_f(name, loc_id, grp_id, hdferr, &
 !!$        lcpl_id, gcpl_id, gapl_id)
@@ -169,14 +189,16 @@ CONTAINS
 !!$    INTEGER(HID_T) :: gcpl_id_default
 !!$    INTEGER(HID_T) :: gapl_id_default
 !!$
-!!$    INTEGER(SIZE_T) :: OBJECT_NAMELEN_DEFAULT ! Dummy argument to pass to c call
+!!$    INTEGER(SIZE_T) :: OBJECT_NAME
+!  LEN_DEFAULT ! Dummy argument to pass to c call
 !!$    INTEGER :: namelen ! Length of the name character string
 !!$
 !!$!  MS FORTRAN needs explicit interface for C functions called here.
 !!$!
 !!$    INTERFACE
 !!$       INTEGER FUNCTION h5gcreate_c(loc_id, name, namelen, &
-!!$            OBJECT_NAMELEN_DEFAULT, grp_id, lcpl_id_default, gcpl_id_default, gapl_id_default)
+!!$            OBJECT_NAME
+!  LEN_DEFAULT, grp_id, lcpl_id_default, gcpl_id_default, gapl_id_default)
 !!$         USE H5GLOBAL
 !!$         !DEC$IF DEFINED(HDF5F90_WINDOWS)
 !!$         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GCREATE_C'::h5gcreate_c
@@ -185,7 +207,8 @@ CONTAINS
 !!$         INTEGER(HID_T), INTENT(IN) :: loc_id
 !!$         CHARACTER(LEN=*), INTENT(IN) :: name
 !!$         INTEGER :: namelen
-!!$         INTEGER(SIZE_T) :: OBJECT_NAMELEN_DEFAULT
+!!$         INTEGER(SIZE_T) :: OBJECT_NAME
+!  LEN_DEFAULT
 !!$         INTEGER(HID_T) :: lcpl_id_default
 !!$         INTEGER(HID_T) :: gcpl_id_default
 !!$         INTEGER(HID_T) :: gapl_id_default
@@ -194,7 +217,9 @@ CONTAINS
 !!$    END INTERFACE
 !!$
 !!$    namelen = LEN(name)
-!!$    OBJECT_NAMELEN_DEFAULT = OBJECT_NAMELEN_DEFAULT_F
+!!$    OBJECT_NAME
+!  LEN_DEFAULT = OBJECT_NAME
+!  LEN_DEFAULT_F
 !!$
 !!$    lcpl_id_default = H5P_DEFAULT_F
 !!$    IF(PRESENT(lcpl_id)) lcpl_id_default = lcpl_id
@@ -204,40 +229,43 @@ CONTAINS
 !!$    IF(PRESENT(gapl_id)) gapl_id_default = gapl_id
 !!$
 !!$
-!!$    hdferr = h5gcreate_c(loc_id, name, namelen, OBJECT_NAMELEN_DEFAULT, grp_id, &
+!!$    hdferr = h5gcreate_c(loc_id, name, namelen, OBJECT_NAME
+!  LEN_DEFAULT, grp_id, &
 !!$         lcpl_id_default, gcpl_id_default, gapl_id_default)
 !!$
 !!$  END SUBROUTINE h5gcreate2_f
 
-
-!----------------------------------------------------------------------
-! Name:		h5gopen_f
 !
-! Purpose: 	Opens an existing group.
+!****s* H5G/h5gopen_f
+!
+! NAME
+!  h5gopen_f
 !
-! Inputs:
-!		loc_id		- location identifier
-!		name 		- name of the group to open
-! Outputs:
-!		grp_id		- group identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!               gapl_id         - Group access property list identifier
+! PURPOSE
+!  Opens an existing group.
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! INPUTS
+!  loc_id 	 - location identifier
+!  name 	 - name of the group to open
+! OUTPUTS
+!  grp_id 	 - group identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  gapl_id 	 - Group access property list identifier
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 5, 2001
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-!                       Added 1.8 (optional) parameter gapl_id
-!                       February, 2008 M.S. Breitenfeld
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 5, 2001
 !
-! Comment:
-!----------------------------------------------------------------------
+!  Added 1.8 (optional) parameter gapl_id
+!  February, 2008 M. Scot Breitenfeld
+!
+! SOURCE
   SUBROUTINE h5gopen_f(loc_id, name, grp_id, hdferr, gapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
@@ -245,13 +273,10 @@ CONTAINS
     INTEGER(HID_T), INTENT(OUT) :: grp_id  ! File identifier
     INTEGER, INTENT(OUT) :: hdferr         ! Error code
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gapl_id  ! Group access property list identifier
-
+!*****
     INTEGER(HID_T) :: gapl_id_default
     INTEGER :: namelen ! Length of the name character string
 
-!            INTEGER, EXTERNAL :: h5gopen_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5gopen_c(loc_id, name, namelen, gapl_id_default, grp_id)
          USE H5GLOBAL
@@ -274,163 +299,150 @@ CONTAINS
     hdferr = h5gopen_c(loc_id, name, namelen, gapl_id_default, grp_id)
 
   END SUBROUTINE h5gopen_f
-
-!----------------------------------------------------------------------
-! Name:		h5gclose_f
 !
-! Purpose:	Closes the specified group.
+!****s* H5G/h5gclose_f
 !
-! Inputs:
-!		grp_id		- group identifier
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5gclose_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Closes the specified group.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 5, 2001
+! INPUTS
+!  grp_id 	 - group identifier
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-          SUBROUTINE h5gclose_f(grp_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: grp_id  ! Group identifier
-            INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5gclose_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 5, 2001
 !
-            INTERFACE
-              INTEGER FUNCTION h5gclose_c(grp_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GCLOSE_C'::h5gclose_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: grp_id
-              END FUNCTION h5gclose_c
-            END INTERFACE
-
-            hdferr = h5gclose_c(grp_id)
-
-          END SUBROUTINE h5gclose_f
+! SOURCE
+  SUBROUTINE h5gclose_f(grp_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: grp_id  ! Group identifier
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5gclose_c(grp_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GCLOSE_C'::h5gclose_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: grp_id
+       END FUNCTION h5gclose_c
+    END INTERFACE
 
+    hdferr = h5gclose_c(grp_id)
 
-!----------------------------------------------------------------------
-! Name:		h5gget_obj_info_idx_f
+  END SUBROUTINE h5gclose_f
 !
-! Purpose:	Returns name and type of the group member identified by
-!		its index.
+!****s* H5G/h5gget_obj_info_idx_f
 !
-! Inputs:
-!		loc_id		- location identifier
-!		name		- name of the group at the specified location
-!		idx		- object index (zero-based)
-! Outputs:
-!		obj_name	- object name
-!		obj_type	- object type
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5gget_obj_info_idx_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Returns name and type of the group member identified by
+!  its index.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 5, 2001
+! INPUTS
+!  loc_id 	 - location identifier
+!  name 	 - name of the group at the specified location
+!  idx 	         - object index (zero-based)
+! OUTPUTS
+!  obj_name 	 - object name
+!  obj_type 	 - object type
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-          SUBROUTINE h5gget_obj_info_idx_f(loc_id, name, idx, &
-                                           obj_name, obj_type, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the group
-            INTEGER, INTENT(IN) :: idx             ! Index of member object
-            CHARACTER(LEN=*), INTENT(OUT) :: obj_name   ! Name of the object
-            INTEGER, INTENT(OUT) :: obj_type       ! Object type
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
-            INTEGER :: namelen ! Length of the name character string
-            INTEGER :: obj_namelen ! Length of the obj_name character string
-
-!            INTEGER, EXTERNAL :: h5gget_obj_info_idx_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 5, 2001
 !
-            INTERFACE
-              INTEGER FUNCTION h5gget_obj_info_idx_c(loc_id, name, &
-                               namelen, idx, &
-                               obj_name, obj_namelen, obj_type)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GGET_OBJ_INFO_IDX_C'::h5gget_obj_info_idx_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              !DEC$ATTRIBUTES reference :: obj_name
-              INTEGER(HID_T), INTENT(IN) :: loc_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER :: namelen
-              INTEGER, INTENT(IN) :: idx
-              CHARACTER(LEN=*), INTENT(OUT) :: obj_name
-              INTEGER :: obj_namelen
-              INTEGER, INTENT(OUT) :: obj_type
-              END FUNCTION h5gget_obj_info_idx_c
-            END INTERFACE
+! SOURCE
+  SUBROUTINE h5gget_obj_info_idx_f(loc_id, name, idx, &
+       obj_name, obj_type, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the group
+    INTEGER, INTENT(IN) :: idx             ! Index of member object
+    CHARACTER(LEN=*), INTENT(OUT) :: obj_name   ! Name of the object
+    INTEGER, INTENT(OUT) :: obj_type       ! Object type
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
+    INTEGER :: namelen ! Length of the name character string
+    INTEGER :: obj_namelen ! Length of the obj_name character string
 
-            namelen = LEN(name)
-            obj_namelen = LEN(obj_name)
-            hdferr = h5gget_obj_info_idx_c(loc_id, name, namelen, idx, &
-                                           obj_name, obj_namelen, obj_type)
+    INTERFACE
+       INTEGER FUNCTION h5gget_obj_info_idx_c(loc_id, name, &
+            namelen, idx, &
+            obj_name, obj_namelen, obj_type)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GGET_OBJ_INFO_IDX_C'::h5gget_obj_info_idx_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         !DEC$ATTRIBUTES reference :: obj_name
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER :: namelen
+         INTEGER, INTENT(IN) :: idx
+         CHARACTER(LEN=*), INTENT(OUT) :: obj_name
+         INTEGER :: obj_namelen
+         INTEGER, INTENT(OUT) :: obj_type
+       END FUNCTION h5gget_obj_info_idx_c
+    END INTERFACE
 
-          END SUBROUTINE h5gget_obj_info_idx_f
+    namelen = LEN(name)
+    obj_namelen = LEN(obj_name)
+    hdferr = h5gget_obj_info_idx_c(loc_id, name, namelen, idx, &
+                                           obj_name, obj_namelen, obj_type)
+  END SUBROUTINE h5gget_obj_info_idx_f
 
-!----------------------------------------------------------------------
-! Name:		h5gn_members_f
 !
-! Purpose: 	Returns the number of group members.
+!****s* H5G/h5gn_members_f
 !
-! Inputs:
-!		loc_id		- location identifier
-!		name		- name of the group at the specified location
-! Outputs:
-!		nmembers	- number of group members
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5gn_members_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Returns the number of group members.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 5, 2001
+! INPUTS
+!  loc_id 	 - location identifier
+!  name 	 - name of the group at the specified location
+! OUTPUTS
+!  nmembers 	 - number of group members
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5gn_members_f(loc_id, name, nmembers, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 5, 2001
+!
+! SOURCE
+  SUBROUTINE h5gn_members_f(loc_id, name, nmembers, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
             CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the group
             INTEGER, INTENT(OUT) :: nmembers       ! Number of members in the
                                                    ! group
             INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
+!*****
             INTEGER :: namelen ! Length of the name character string
 
-!            INTEGER, EXTERNAL :: h5gn_members_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5gn_members_c(loc_id, name, namelen, nmembers)
               USE H5GLOBAL
@@ -449,548 +461,516 @@ CONTAINS
             hdferr = h5gn_members_c(loc_id, name, namelen, nmembers)
 
           END SUBROUTINE h5gn_members_f
-
-!----------------------------------------------------------------------
-! Name:		h5glink_f
-!
-! Purpose: 	Creates a link of the specified type from new_name
-!		to current_name.
-!
-! Inputs:
-!		loc_id		- location identifier
-!		link_type	- link type
-!				  Possible values are:
-!				  H5G_LINK_HARD_F (0) or
-!				  H5G_LINK_SOFT_F (1)
-!		current_name	- name of the existing object if link is a
-!				  hard link. Can be anything for the soft link.
-!		new_name	- new name for the object
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 5, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5glink_f(loc_id, link_type, current_name, &
-                                                   new_name, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
-            INTEGER, INTENT(IN) :: link_type       ! link type
+!
+!****s* H5G/h5glink_f
+!
+! NAME
+!  h5glink_f
+!
+! PURPOSE
+!  Creates a link of the specified type from new_name
+!  to current_name.
+!
+! INPUTS
+!  loc_id 	 - location identifier
+!  link_type 	 - link type; possible values are:
+!                    H5G_LINK_HARD_F (0)
+!                    H5G_LINK_SOFT_F (1)
+!  current_name  - name of the existing object if link is a
+!                  hard link. Can be anything for the soft link
+!  new_name 	 - new name for the object
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 5, 2001
+!
+! SOURCE
+  SUBROUTINE h5glink_f(loc_id, link_type, current_name, &
+       new_name, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
+    INTEGER, INTENT(IN) :: link_type       ! link type
                                                    ! Possible values are:
                                                    ! H5G_LINK_HARD_F (0) or
                                                    ! H5G_LINK_SOFT_F (1)
 
-            CHARACTER(LEN=*), INTENT(IN) :: current_name
+    CHARACTER(LEN=*), INTENT(IN) :: current_name
                                                    ! Current name of an object
-            CHARACTER(LEN=*), INTENT(IN) :: new_name ! New name of an object
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
-            INTEGER :: current_namelen ! Lenghth of the current_name string
-            INTEGER :: new_namelen     ! Lenghth of the new_name string
-
-!            INTEGER, EXTERNAL :: h5glink_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5glink_c(loc_id, link_type, current_name, &
-                               current_namelen, new_name, new_namelen)
+    CHARACTER(LEN=*), INTENT(IN) :: new_name ! New name of an object
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
 
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GLINK_C'::h5glink_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: current_name
-              !DEC$ATTRIBUTES reference :: new_name
-              INTEGER(HID_T), INTENT(IN) :: loc_id
-              INTEGER, INTENT(IN) :: link_type
-              CHARACTER(LEN=*), INTENT(IN) :: current_name
-              INTEGER :: current_namelen
-              CHARACTER(LEN=*), INTENT(IN) :: new_name
-              INTEGER :: new_namelen
-              END FUNCTION h5glink_c
-            END INTERFACE
+    INTEGER :: current_namelen ! Lenghth of the current_name string
+    INTEGER :: new_namelen     ! Lenghth of the new_name string
 
-            current_namelen = LEN(current_name)
-            new_namelen = LEN(new_name)
-            hdferr = h5glink_c(loc_id, link_type, current_name, &
-                               current_namelen, new_name, new_namelen)
-          END SUBROUTINE h5glink_f
-
-!----------------------------------------------------------------------
-! Name:		h5glink2_f
-!
-! Purpose: 	Creates a link of the specified type from new_name
-!		to current_name. current_name and new_name are interpreted
-!               releative to current and new location identifiers.
-!
-! Inputs:
-!		cur_loc_id	- location identifier
-!		cur_name	- name of the existing object if link is a
-!				  hard link. Can be anything for the soft link.
-!		link_type	- link type
-!				  Possible values are:
-!				  H5G_LINK_HARD_F (0) or
-!				  H5G_LINK_SOFT_F (1)
-!		new_loc_id	- new location identifier
-!		new_name	- new name for the object
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		September 25, 2002
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5glink2_f(cur_loc_id, cur_name, link_type, new_loc_id, &
-                                                   new_name, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: cur_loc_id   ! File or group identifier
-            CHARACTER(LEN=*), INTENT(IN) :: cur_name
-                                                   ! Current name of an object
-            INTEGER, INTENT(IN) :: link_type       ! link type
-                                                   ! Possible values are:
-                                                   ! H5G_LINK_HARD_F (0) or
-                                                   ! H5G_LINK_SOFT_F (1)
+    INTERFACE
+       INTEGER FUNCTION h5glink_c(loc_id, link_type, current_name, &
+            current_namelen, new_name, new_namelen)
 
-            INTEGER(HID_T), INTENT(IN) :: new_loc_id ! File or group identifier
-            CHARACTER(LEN=*), INTENT(IN) :: new_name ! New name of an object
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GLINK_C'::h5glink_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: current_name
+         !DEC$ATTRIBUTES reference :: new_name
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         INTEGER, INTENT(IN) :: link_type
+         CHARACTER(LEN=*), INTENT(IN) :: current_name
+         INTEGER :: current_namelen
+         CHARACTER(LEN=*), INTENT(IN) :: new_name
+         INTEGER :: new_namelen
+       END FUNCTION h5glink_c
+    END INTERFACE
 
-            INTEGER :: cur_namelen ! Lenghth of the current_name string
-            INTEGER :: new_namelen ! Lenghth of the new_name string
+    current_namelen = LEN(current_name)
+    new_namelen = LEN(new_name)
+    hdferr = h5glink_c(loc_id, link_type, current_name, &
+         current_namelen, new_name, new_namelen)
+  END SUBROUTINE h5glink_f
+
+!
+!****s* H5G/h5glink2_f
+!
+! NAME
+!  h5glink2_f
+!
+! PURPOSE
+!  Creates a link of the specified type from new_name
+!  to current_name. current_name and new_name are interpreted
+!  releative to current and new location identifiers.
+!
+! INPUTS
+!  cur_loc_id 	 - location identifier
+!  cur_name 	 - name of the existing object if link is a
+!                  hard link. Can be anything for the soft link.
+!  link_type 	 - link type; possible values are:
+!                    H5G_LINK_HARD_F (0)
+!                    H5G_LINK_SOFT_F (1)
+!  new_loc_id 	 - new location identifier
+!  new_name 	 - new name for the object
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  September 25, 2002
+!
+! SOURCE
+  SUBROUTINE h5glink2_f(cur_loc_id, cur_name, link_type, new_loc_id, &
+       new_name, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: cur_loc_id ! File or group identifier
+    CHARACTER(LEN=*), INTENT(IN) :: cur_name
+                                             ! Current name of an object
+    INTEGER, INTENT(IN) :: link_type         ! link type
+                                                 ! Possible values are:
+                                                 ! H5G_LINK_HARD_F (0) or
+                                                 ! H5G_LINK_SOFT_F (1)
+
+    INTEGER(HID_T), INTENT(IN) :: new_loc_id ! File or group identifier
+    CHARACTER(LEN=*), INTENT(IN) :: new_name ! New name of an object
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+!*****
+
+    INTEGER :: cur_namelen ! Lenghth of the current_name string
+    INTEGER :: new_namelen ! Lenghth of the new_name string
 
-            INTERFACE
-              INTEGER FUNCTION h5glink2_c(cur_loc_id, cur_name, cur_namelen, &
-                               link_type, new_loc_id, &
-                               new_name, new_namelen)
+    INTERFACE
+       INTEGER FUNCTION h5glink2_c(cur_loc_id, cur_name, cur_namelen, &
+            link_type, new_loc_id, &
+            new_name, new_namelen)
 
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GLINK2_C'::h5glink2_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: cur_name
-              !DEC$ATTRIBUTES reference :: new_name
-              INTEGER(HID_T), INTENT(IN) :: cur_loc_id
-              INTEGER(HID_T), INTENT(IN) :: new_loc_id
-              INTEGER, INTENT(IN) :: link_type
-              CHARACTER(LEN=*), INTENT(IN) :: cur_name
-              CHARACTER(LEN=*), INTENT(IN) :: new_name
-              INTEGER :: cur_namelen
-              INTEGER :: new_namelen
-              END FUNCTION h5glink2_c
-            END INTERFACE
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GLINK2_C'::h5glink2_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: cur_name
+         !DEC$ATTRIBUTES reference :: new_name
+         INTEGER(HID_T), INTENT(IN) :: cur_loc_id
+         INTEGER(HID_T), INTENT(IN) :: new_loc_id
+         INTEGER, INTENT(IN) :: link_type
+         CHARACTER(LEN=*), INTENT(IN) :: cur_name
+         CHARACTER(LEN=*), INTENT(IN) :: new_name
+         INTEGER :: cur_namelen
+         INTEGER :: new_namelen
+       END FUNCTION h5glink2_c
+    END INTERFACE
 
-            cur_namelen = LEN(cur_name)
-            new_namelen = LEN(new_name)
-            hdferr = h5glink2_c(cur_loc_id, cur_name, cur_namelen, link_type, &
-                               new_loc_id, new_name, new_namelen)
-          END SUBROUTINE h5glink2_f
+    cur_namelen = LEN(cur_name)
+    new_namelen = LEN(new_name)
+    hdferr = h5glink2_c(cur_loc_id, cur_name, cur_namelen, link_type, &
+         new_loc_id, new_name, new_namelen)
+  END SUBROUTINE h5glink2_f
 
-!----------------------------------------------------------------------
-! Name:		h5gunlink_f
 !
-! Purpose: 	Removes the specified name from the group graph and
-!		decrements the link count for the object to which name
-!		points
+!****s* H5G/h5gunlink_f
+!
+! NAME
+!  h5gunlink_f
+!
+! PURPOSE
+!  Removes the specified name from the group graph and
+!  decrements the link count for the object to which name
+!  points
 !
-! Inputs:
-!		loc_id		- location identifier
-!		name		- name of the object to unlink
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+!  loc_id 	 - location identifier
+!  name 	 - name of the object to unlink
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 5, 2001
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 5, 2001
 !
-! Comment:
-!----------------------------------------------------------------------
+! SOURCE
+  SUBROUTINE h5gunlink_f(loc_id, name, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of an object
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
+    INTEGER :: namelen ! Lenghth of the name character string
 
-          SUBROUTINE h5gunlink_f(loc_id, name, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of an object
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5gunlink_c(loc_id, name, namelen)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GUNLINK_C'::h5gunlink_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER :: namelen
+       END FUNCTION h5gunlink_c
+    END INTERFACE
 
-            INTEGER :: namelen ! Lenghth of the name character string
+    namelen = LEN(name)
+    hdferr = h5gunlink_c(loc_id, name, namelen)
+  END SUBROUTINE h5gunlink_f
 
-!            INTEGER, EXTERNAL :: h5gunlink_c
-!  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5gunlink_c(loc_id, name, namelen)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GUNLINK_C'::h5gunlink_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: loc_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER :: namelen
-              END FUNCTION h5gunlink_c
-            END INTERFACE
-
-            namelen = LEN(name)
-            hdferr = h5gunlink_c(loc_id, name, namelen)
-          END SUBROUTINE h5gunlink_f
-
-!----------------------------------------------------------------------
-! Name:		h5gmove_f
+!****s* H5G/h5gmove_f
 !
-! Purpose:	Renames an object within an HDF5 file.
+! NAME
+!  h5gmove_f
 !
-! Inputs:
-!		loc_id		- location identifier
-!		name		- object's name at specified location
-!		new_name	- object's new name
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Renames an object within an HDF5 file.
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! INPUTS
+!  loc_id 	 - location identifier
+!  name 	 - object's name at specified location
+!  new_name 	 - object's new name
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 5, 2001
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5gmove_f(loc_id, name, new_name, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name   ! Current name of an object
-            CHARACTER(LEN=*), INTENT(IN) :: new_name ! New name of an object
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
-            INTEGER :: namelen         ! Lenghth of the current_name string
-            INTEGER :: new_namelen     ! Lenghth of the new_name string
-
-!            INTEGER, EXTERNAL :: h5gmove_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 5, 2001
 !
-            INTERFACE
-              INTEGER FUNCTION h5gmove_c(loc_id, name, namelen, new_name, new_namelen)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GMOVE_C'::h5gmove_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              !DEC$ATTRIBUTES reference :: new_name
-              INTEGER(HID_T), INTENT(IN) :: loc_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER :: namelen
-              CHARACTER(LEN=*), INTENT(IN) :: new_name
-              INTEGER :: new_namelen
-              END FUNCTION h5gmove_c
-            END INTERFACE
-
-            namelen = LEN(name)
-            new_namelen = LEN(new_name)
-            hdferr = h5gmove_c(loc_id, name, namelen, new_name, new_namelen)
-          END SUBROUTINE h5gmove_f
+! SOURCE
+  SUBROUTINE h5gmove_f(loc_id, name, new_name, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id     ! File or group identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name     ! Current name of an object
+    CHARACTER(LEN=*), INTENT(IN) :: new_name ! New name of an object
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+!*****
+    INTEGER :: namelen         ! Lenghth of the current_name string
+    INTEGER :: new_namelen     ! Lenghth of the new_name string
+    
+    INTERFACE
+       INTEGER FUNCTION h5gmove_c(loc_id, name, namelen, new_name, new_namelen)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GMOVE_C'::h5gmove_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         !DEC$ATTRIBUTES reference :: new_name
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER :: namelen
+         CHARACTER(LEN=*), INTENT(IN) :: new_name
+         INTEGER :: new_namelen
+       END FUNCTION h5gmove_c
+    END INTERFACE
+    
+    namelen = LEN(name)
+    new_namelen = LEN(new_name)
+    hdferr = h5gmove_c(loc_id, name, namelen, new_name, new_namelen)
+  END SUBROUTINE h5gmove_f
+!
+!****s* H5G/h5gmove2_f
+!
+! NAME
+!  h5gmove2_f
+!
+! PURPOSE
+!  Renames an object within an HDF5 file.
+!
+! INPUTS
+!  src_loc_id 	 - original location identifier
+!  src_name 	 - object's name at specified original location
+!  dst_loc_id 	 - original location identifier
+!  dst_name 	 - object's new name
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  September 25, 2002
+!
+! SOURCE
+  SUBROUTINE h5gmove2_f(src_loc_id, src_name, dst_loc_id, dst_name, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN)   :: src_loc_id  ! File or group identifier
+    CHARACTER(LEN=*), INTENT(IN) :: src_name    ! Original name of an object
+    INTEGER(HID_T), INTENT(IN)   :: dst_loc_id  ! File or group identifier
+    CHARACTER(LEN=*), INTENT(IN) :: dst_name    ! New name of an object
+    INTEGER, INTENT(OUT)         :: hdferr      ! Error code
+!*****
+    INTEGER :: src_namelen         ! Length of the current_name string
+    INTEGER :: dst_namelen         ! Lenghth of the new_name string
+    
+    INTERFACE
+       INTEGER FUNCTION h5gmove2_c(src_loc_id, src_name, src_namelen, &
+            dst_loc_id, dst_name, dst_namelen)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GMOVE2_C'::h5gmove2_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: src_name
+         !DEC$ATTRIBUTES reference :: dst_name
+         INTEGER(HID_T), INTENT(IN) :: src_loc_id
+         INTEGER(HID_T), INTENT(IN) :: dst_loc_id
+         CHARACTER(LEN=*), INTENT(IN) :: src_name
+         CHARACTER(LEN=*), INTENT(IN) :: dst_name
+         INTEGER :: src_namelen
+         INTEGER :: dst_namelen
+       END FUNCTION h5gmove2_c
+    END INTERFACE
+    
+    src_namelen = LEN(src_name)
+    dst_namelen = LEN(dst_name)
+    hdferr = h5gmove2_c(src_loc_id, src_name, src_namelen, dst_loc_id, dst_name, dst_namelen)
+  END SUBROUTINE h5gmove2_f
+!
+!****s* H5G/h5gget_linkval_f
+!
+! NAME
+!  h5gget_linkval_f
+!
+! PURPOSE
+!  Returns the name of the object that the symbolic link
+!  points to.
+!
+! INPUTS
+!  loc_id 	 - location identifier
+!  name 	 - symbolic link to the object whose name
+!                  is to be returned.
+!  size 	 - maximum number of characters to be returned
+! OUTPUTS
+!  buffer 	 - a buffer to hold the name of the object
+!  being sought
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 5, 2001
+!
+! SOURCE
+  SUBROUTINE h5gget_linkval_f(loc_id, name, size, buffer, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Current name of an object
+    INTEGER(SIZE_T), INTENT(IN) :: size    ! Maximum number of buffer
+    CHARACTER(LEN=size), INTENT(OUT) :: buffer
+                                           ! Buffer to hold a name of
+                                           ! the object symbolic link
+                                           ! points to
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
+    INTEGER :: namelen ! Lenghth of the current_name string
+    
+    INTERFACE
+       INTEGER FUNCTION h5gget_linkval_c(loc_id, name, namelen, size, buffer)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GGET_LINKVAL_C'::h5gget_linkval_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         !DEC$ATTRIBUTES reference :: buffer
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER :: namelen
+         INTEGER(SIZE_T), INTENT(IN) :: size
+         CHARACTER(LEN=*), INTENT(OUT) :: buffer
+       END FUNCTION h5gget_linkval_c
+    END INTERFACE
+    
+    namelen = LEN(name)
+    hdferr = h5gget_linkval_c(loc_id, name, namelen, size, buffer)
+  END SUBROUTINE h5gget_linkval_f
 
-!----------------------------------------------------------------------
-! Name:		h5gmove2_f
 !
-! Purpose:	Renames an object within an HDF5 file.
+!****s* H5G/h5gset_comment_f
 !
-! Inputs:
-!		src_loc_id	- original location identifier
-!		src_name	- object's name at specified original location
-!		dst_loc_id	- original location identifier
-!		dst_name	- object's new name
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5gset_comment_f
 !
-! Programmer:	Elena Pourmal
-!		September 25, 2002
+! PURPOSE
+!  Sets comment for specified object.
 !
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5gmove2_f(src_loc_id, src_name, dst_loc_id, dst_name, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN)   :: src_loc_id  ! File or group identifier
-            CHARACTER(LEN=*), INTENT(IN) :: src_name    ! Original name of an object
-            INTEGER(HID_T), INTENT(IN)   :: dst_loc_id  ! File or group identifier
-            CHARACTER(LEN=*), INTENT(IN) :: dst_name    ! New name of an object
-            INTEGER, INTENT(OUT)         :: hdferr      ! Error code
-
-            INTEGER :: src_namelen         ! Length of the current_name string
-            INTEGER :: dst_namelen         ! Lenghth of the new_name string
-
-!            INTEGER, EXTERNAL :: h5gmove2_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! INPUTS
+!  loc_id 	 - location identifier
+!  name 	 - name of the object
+!  comment 	 - comment to set for the object
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-            INTERFACE
-              INTEGER FUNCTION h5gmove2_c(src_loc_id, src_name, src_namelen, &
-                               dst_loc_id, dst_name, dst_namelen)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GMOVE2_C'::h5gmove2_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: src_name
-              !DEC$ATTRIBUTES reference :: dst_name
-              INTEGER(HID_T), INTENT(IN) :: src_loc_id
-              INTEGER(HID_T), INTENT(IN) :: dst_loc_id
-              CHARACTER(LEN=*), INTENT(IN) :: src_name
-              CHARACTER(LEN=*), INTENT(IN) :: dst_name
-              INTEGER :: src_namelen
-              INTEGER :: dst_namelen
-              END FUNCTION h5gmove2_c
-            END INTERFACE
-
-            src_namelen = LEN(src_name)
-            dst_namelen = LEN(dst_name)
-            hdferr = h5gmove2_c(src_loc_id, src_name, src_namelen,&
-                    dst_loc_id,  dst_name, dst_namelen)
-          END SUBROUTINE h5gmove2_f
-
-!----------------------------------------------------------------------
-! Name:		h5gget_linkval_f
-!
-! Purpose: 	Returns the name of the object that the symbolic link
-! 		points to.
-!
-! Inputs:
-!		loc_id		- location identifier
-!		name		- symbolic link to the object whose name
-!				  is to be returned.
-!		size		- maximum number of characters to be returned
-! Outputs:
-!		buffer		- a buffer to hold the name of the object
-!				  being sought
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 5, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5gget_linkval_f(loc_id, name, size, buffer, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name   ! Current name of an object
-            INTEGER(SIZE_T), INTENT(IN) :: size    ! Maximum number of buffer
-            CHARACTER(LEN=size), INTENT(OUT) :: buffer
-                                                   ! Buffer to hold a name of
-                                                   ! the object symbolic link
-                                                   ! points to
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
-            INTEGER :: namelen ! Lenghth of the current_name string
-
-!            INTEGER, EXTERNAL :: h5gget_linkval_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-            INTERFACE
-              INTEGER FUNCTION h5gget_linkval_c(loc_id, name, namelen, size, buffer)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GGET_LINKVAL_C'::h5gget_linkval_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              !DEC$ATTRIBUTES reference :: buffer
-              INTEGER(HID_T), INTENT(IN) :: loc_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER :: namelen
-              INTEGER(SIZE_T), INTENT(IN) :: size
-              CHARACTER(LEN=*), INTENT(OUT) :: buffer
-              END FUNCTION h5gget_linkval_c
-            END INTERFACE
-
-            namelen = LEN(name)
-            hdferr = h5gget_linkval_c(loc_id, name, namelen, size, buffer)
-          END SUBROUTINE h5gget_linkval_f
-
-!----------------------------------------------------------------------
-! Name:		h5gset_comment_f
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 5, 2001
 !
-! Purpose: 	Sets comment for specified object.
+! SOURCE
+  SUBROUTINE h5gset_comment_f(loc_id, name, comment, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Current name of an object
+    CHARACTER(LEN=*), INTENT(IN) :: comment ! New name of an object
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
+    INTEGER :: namelen ! Lenghth of the current_name string
+    INTEGER :: commentlen     ! Lenghth of the comment string
+    
+    INTERFACE
+       INTEGER FUNCTION h5gset_comment_c(loc_id, name, namelen, &
+            comment, commentlen)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GSET_COMMENT_C'::h5gset_comment_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         !DEC$ATTRIBUTES reference :: comment
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER :: namelen
+         CHARACTER(LEN=*), INTENT(IN) :: comment
+         INTEGER :: commentlen
+       END FUNCTION h5gset_comment_c
+    END INTERFACE
+    
+    namelen = LEN(name)
+    commentlen = LEN(comment)
+    hdferr = h5gset_comment_c(loc_id, name, namelen, comment, commentlen)
+  END SUBROUTINE h5gset_comment_f
 !
-! Inputs:
-!		loc_id		- location identifier
-!		name		- name of the object
-!		comment		- comment to set for the object
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+!****s* H5G/h5gget_comment_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! NAME
+!  h5gget_comment_f
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 5, 2001
+! PURPOSE
+!  Retrieves comment for specified object.
 !
-! Comment:
-!----------------------------------------------------------------------
-
-           SUBROUTINE h5gset_comment_f(loc_id, name, comment, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name   ! Current name of an object
-            CHARACTER(LEN=*), INTENT(IN) :: comment ! New name of an object
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
-            INTEGER :: namelen ! Lenghth of the current_name string
-            INTEGER :: commentlen     ! Lenghth of the comment string
-
-!            INTEGER, EXTERNAL :: h5gset_comment_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! INPUTS
+!  loc_id 	 - location identifier
+!  name 	 - name of the object at specified location
+!  size 	 - size of the buffer required to hold comment
+! OUTPUTS
+!  buffer 	 - buffer to hold object's comment
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-            INTERFACE
-              INTEGER FUNCTION h5gset_comment_c(loc_id, name, namelen, &
-                                                comment, commentlen)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GSET_COMMENT_C'::h5gset_comment_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              !DEC$ATTRIBUTES reference :: comment
-              INTEGER(HID_T), INTENT(IN) :: loc_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER :: namelen
-              CHARACTER(LEN=*), INTENT(IN) :: comment
-              INTEGER :: commentlen
-              END FUNCTION h5gset_comment_c
-            END INTERFACE
-
-            namelen = LEN(name)
-            commentlen = LEN(comment)
-            hdferr = h5gset_comment_c(loc_id, name, namelen, comment, commentlen)
-          END SUBROUTINE h5gset_comment_f
-
-!----------------------------------------------------------------------
-! Name:		h5gget_comment_f
-!
-! Purpose:	Retrieves comment for specified object.
-!
-! Inputs:
-!		loc_id		- location identifier
-!		name		- name of the object at specified location
-!		size		- size of the buffer required to hold comment
-! Outputs:
-!		buffer		- buffer to hold object's comment
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 5, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5gget_comment_f(loc_id, name, size, buffer, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name   ! Current name of an object
-            INTEGER(SIZE_T), INTENT(IN) :: size    ! Maximum number of buffer
-            CHARACTER(LEN=size), INTENT(OUT) :: buffer
-                                                   ! Buffer to hold a comment
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 5, 2001
+!
+! SOURCE
+  SUBROUTINE h5gget_comment_f(loc_id, name, size, buffer, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Current name of an object
+    INTEGER(SIZE_T), INTENT(IN) :: size    ! Maximum number of buffer
+    CHARACTER(LEN=size), INTENT(OUT) :: buffer
+                                           ! Buffer to hold a comment
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
+    INTEGER :: namelen ! Lenghth of the current_name string
 
-            INTEGER :: namelen ! Lenghth of the current_name string
+    INTERFACE
+       INTEGER FUNCTION h5gget_comment_c(loc_id, name, namelen, size, buffer)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GGET_COMMENT_C'::h5gget_comment_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name, buffer
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER :: namelen
+         INTEGER(SIZE_T), INTENT(IN) :: size
+         CHARACTER(LEN=*), INTENT(OUT) :: buffer
+       END FUNCTION h5gget_comment_c
+    END INTERFACE
 
-!            INTEGER, EXTERNAL :: h5gget_comment_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5gget_comment_c(loc_id, name, namelen, &
-                                                size, buffer)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GGET_COMMENT_C'::h5gget_comment_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name, buffer
-              INTEGER(HID_T), INTENT(IN) :: loc_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER :: namelen
-              INTEGER(SIZE_T), INTENT(IN) :: size
-              CHARACTER(LEN=*), INTENT(OUT) :: buffer
-              END FUNCTION h5gget_comment_c
-            END INTERFACE
+    namelen = LEN(name)
+    hdferr = h5gget_comment_c(loc_id, name, namelen, size, buffer)
 
-            namelen = LEN(name)
-            hdferr = h5gget_comment_c(loc_id, name, namelen, size, buffer)
   END SUBROUTINE h5gget_comment_f
-
-!----------------------------------------------------------------------
-! Name:		H5Gcreate_anon_f
 !
-! Purpose:	Creates a new empty group without linking it into the file structure.
+!****s* H5G/H5Gcreate_anon_f
 !
-! Inputs:
-!		loc_id		- Location identifier
-! Outputs:
-!		grp_id		- group identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!               gcpl_id   	- Group creation property list identifier
-!               gapl_id         - Group access property list identifier
+! NAME
+!  H5Gcreate_anon_f
 !
-! Programmer:	M.S. Breitenfeld
-!		February 15, 2008
+! PURPOSE
+!  Creates a new empty group without linking it into the file structure.
 !
-! Modifications:
+! INPUTS
+!  loc_id 	 - Location identifier
+! OUTPUTS
+!  grp_id 	 - group identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  gcpl_id 	 - Group creation property list identifier
+!  gapl_id 	 - Group access property list identifier
 !
-! Comment:
-!----------------------------------------------------------------------
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 15, 2008
+!
+! SOURCE
   SUBROUTINE h5Gcreate_anon_f(loc_id, grp_id, hdferr, gcpl_id, gapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id   ! File or group identifier
@@ -998,7 +978,7 @@ CONTAINS
     INTEGER, INTENT(OUT) :: hdferr         ! Error code
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gcpl_id  ! Property list for group creation
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: gapl_id  ! Property list for group access
-
+!*****
     INTEGER(HID_T) :: gcpl_id_default
     INTEGER(HID_T) :: gapl_id_default
 
@@ -1024,36 +1004,31 @@ CONTAINS
     hdferr = h5gcreate_anon_c(loc_id, gcpl_id_default, gapl_id_default, grp_id)
 
   END SUBROUTINE h5Gcreate_anon_f
-
-!----------------------------------------------------------------------
-! Name:		H5Gget_create_plist_f
 !
-! Purpose:	Gets a group creation property list identifier.
+!****s* H5G/H5Gget_create_plist_f
 !
-! Inputs:
-!		grp_id		- group identifier
-! Outputs:
-!               gcpl_id   	- Group creation property list identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
+! NAME
+!  H5Gget_create_plist_f
 !
-! Programmer:	M.S. Breitenfeld
-!		February 15, 2008
+! PURPOSE
+!  Gets a group creation property list identifier.
 !
-! Modifications:
+! INPUTS
+!  grp_id 	 - group identifier
+! OUTPUTS
+!  gcpl_id 	 - Group creation property list identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 15, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
+! SOURCE
   SUBROUTINE h5gget_create_plist_f(grp_id, gcpl_id, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN)  :: grp_id  ! Group identifier
     INTEGER(HID_T), INTENT(OUT) :: gcpl_id ! Property list for group creation
     INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
     INTERFACE
        INTEGER FUNCTION h5gget_create_plist_c(grp_id, gcpl_id )
          USE H5GLOBAL
@@ -1069,56 +1044,59 @@ CONTAINS
 
   END SUBROUTINE h5gget_create_plist_f
 
-!----------------------------------------------------------------------
-! Name:		h5gget_info_f
 !
-! Purpose:  	Retrieves information about a group
+!****s* H5G/h5gget_info_f
 !
-! Inputs:
-!		group_id - Group identifier
+! NAME
+!  h5gget_info_f
 !
-! Outputs:  NOTE: In C it is defined as a structure: H5G_info_t
+! PURPOSE
+!  Retrieves information about a group
 !
-!      storage_type - Type of storage for links in group
-!                       H5G_STORAGE_TYPE_COMPACT: Compact storage
-!                       H5G_STORAGE_TYPE_DENSE: Indexed storage
-!                       H5G_STORAGE_TYPE_SYMBOL_TABLE: Symbol tables, the original HDF5 structure
-!            nlinks - Number of links in group
-!     	 max_corder - Current maximum creation order value for group
-!            hdferr - error code
-!		          Success:  0
-!		          Failure: -1
-! Optional parameters:
-!	    mounted - Whether group has a file mounted on it
+! INPUTS
+!  group_id 	 - Group identifier
 !
-! Programmer:	M. S. Breitenfeld
-!		February 15, 2008
+! OUTPUTS  
+!  storage_type  - Type of storage for links in group
+!                    H5G_STORAGE_TYPE_COMPACT: Compact storage
+!                    H5G_STORAGE_TYPE_DENSE: Indexed storage
+!                    H5G_STORAGE_TYPE_SYMBOL_TABLE: Symbol tables, the original HDF5 structure
+!  nlinks 	 - Number of links in group
+!  max_corder 	 - Current maximum creation order value for group
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  mounted 	 - Whether group has a file mounted on it
 !
-! Modifications:
-!          - Added 'mounted' paramater
-!            M.S. Breitenfeld
-!            July 16, 2008
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 15, 2008
 !
-!----------------------------------------------------------------------
-
+! NOTES
+!  In C the output is defined as a structure: H5G_info_t
+!
+! HISTORY
+!
+!  - Added 'mounted' paramater
+!    M. Scot Breitenfeld
+!    July 16, 2008
+!
+! SOURCE
   SUBROUTINE h5gget_info_f(group_id, storage_type, nlinks, max_corder, hdferr, mounted)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: group_id ! Group identifier
 
-    INTEGER, INTENT(OUT) :: storage_type ! Type of storage for links in group:
+    INTEGER, INTENT(OUT) :: storage_type  ! Type of storage for links in group:
                                           ! H5G_STORAGE_TYPE_COMPACT_F: Compact storage
                                           ! H5G_STORAGE_TYPE_DENSE_F: Indexed storage
                                           ! H5G_STORAGE_TYPE_SYMBOL_TABLE_F: Symbol tables, the original HDF5 structure
-    INTEGER, INTENT(OUT) :: nlinks ! Number of links in group
-    INTEGER, INTENT(OUT) :: max_corder ! Current maximum creation order value for group
-    INTEGER, INTENT(OUT) :: hdferr       ! Error code:
-                                         ! 0 on success and -1 on failure
-    LOGICAL, INTENT(OUT), OPTIONAL :: mounted      ! Whether group has a file mounted on it
-
+    INTEGER, INTENT(OUT) :: nlinks        ! Number of links in group
+    INTEGER, INTENT(OUT) :: max_corder    ! Current maximum creation order value for group
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code:
+                                          ! 0 on success and -1 on failure
+    LOGICAL, INTENT(OUT), OPTIONAL :: mounted  ! Whether group has a file mounted on it
+!*****
     INTEGER :: mounted_c
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5gget_info_c(group_id, storage_type, nlinks, max_corder, mounted_c)
          USE H5GLOBAL
@@ -1144,70 +1122,71 @@ CONTAINS
     ENDIF
 
   END SUBROUTINE h5gget_info_f
-
-!----------------------------------------------------------------------
-! Name:		h5gget_info_by_idx_f
-!
-! Purpose:  	Retrieves information about a group, according to the group’s position within an index.
-!
-! Inputs:
-!          loc_id - File or group identifier
-!      group_name - Name of group containing group for which information is to be retrieved
-!      index_type - Index type
-!           order - Order of the count in the index
-!               n - Position in the index of the group for which information is retrieved
-!
-! Outputs:  NOTE: In C the following are defined as a structure: H5G_info_t
-!
-!      storage_type - Type of storage for links in group
-!                       H5G_STORAGE_TYPE_COMPACT: Compact storage
-!                       H5G_STORAGE_TYPE_DENSE: Indexed storage
-!                       H5G_STORAGE_TYPE_SYMBOL_TABLE: Symbol tables, the original HDF5 structure
-!            nlinks - Number of links in group
-!     	 max_corder - Current maximum creation order value for group
-!            hdferr - error code
-!		          Success:  0
-!		          Failure: -1
-! Optional parameters:
-!         lapl_id - Link access property list
-!	  mounted - Whether group has a file mounted on it
 !
-! Programmer:	M. S. Breitenfeld
-!		February 18, 2008
-!
-! Modifications:
-!          - Added 'mounted' paramater
-!            M.S. Breitenfeld
-!            July 16, 2008
-!
-!----------------------------------------------------------------------
-
+!****s* H5G/h5gget_info_by_idx_f
+!
+! NAME
+!  h5gget_info_by_idx_f
+!
+! PURPOSE
+!  Retrieves information about a group, according to the group’s position within an index.
+!
+! INPUTS
+!  loc_id 	 - File or group identifier
+!  group_name 	 - Name of group containing group for which information is to be retrieved
+!  index_type 	 - Index type
+!  order 	 - Order of the count in the index
+!  n 	         - Position in the index of the group for which information is retrieved
+!
+! OUTPUTS
+!  storage_type  - Type of storage for links in group
+!                    H5G_STORAGE_TYPE_COMPACT: Compact storage
+!                    H5G_STORAGE_TYPE_DENSE: Indexed storage
+!                    H5G_STORAGE_TYPE_SYMBOL_TABLE: Symbol tables, the original HDF5 structure
+!  nlinks 	 - Number of links in group
+!  max_corder 	 - Current maximum creation order value for group
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Link access property list
+!  mounted 	 - Whether group has a file mounted on it
+!
+! NOTES
+!  In C the output is defined as a structure: H5G_info_t
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 18, 2008
+!
+! HISTORY
+!  Added 'mounted' paramater
+!  M. Scot Breitenfeld
+!  July 16, 2008
+!
+! SOURCE
   SUBROUTINE h5gget_info_by_idx_f(loc_id, group_name, index_type, order, n, &
        storage_type, nlinks, max_corder, hdferr, lapl_id, mounted)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: loc_id     ! File or group identifier
+    INTEGER(HID_T), INTENT(IN) :: loc_id       ! File or group identifier
     CHARACTER(LEN=*), INTENT(IN) :: group_name ! Name of group containing group for which information is to be retrieved
     INTEGER, INTENT(IN) :: index_type ! Index type
     INTEGER, INTENT(IN) :: order      ! Order of the count in the index
-    INTEGER(HSIZE_T), INTENT(IN) :: n          ! Position in the index of the group for which information is retrieved
+    INTEGER(HSIZE_T), INTENT(IN) :: n ! Position in the index of the group for which information is retrieved
 
     INTEGER, INTENT(OUT) :: storage_type ! Type of storage for links in group:
-                                          ! H5G_STORAGE_TYPE_COMPACT_F: Compact storage
-                                          ! H5G_STORAGE_TYPE_DENSE_F: Indexed storage
-                                          ! H5G_STORAGE_TYPE_SYMBOL_TABLE_F: Symbol tables, the original HDF5 structure
-    INTEGER, INTENT(OUT) :: nlinks ! Number of links in group
-    INTEGER, INTENT(OUT) :: max_corder ! Current maximum creation order value for group
-    INTEGER, INTENT(OUT) :: hdferr       ! Error code:
-                                         ! 0 on success and -1 on failure
+                                         !   H5G_STORAGE_TYPE_COMPACT_F: Compact storage
+                                         !   H5G_STORAGE_TYPE_DENSE_F: Indexed storage
+                                         !   H5G_STORAGE_TYPE_SYMBOL_TABLE_F: Symbol tables, the original HDF5 structure
+    INTEGER, INTENT(OUT) :: nlinks      ! Number of links in group
+    INTEGER, INTENT(OUT) :: max_corder  ! Current maximum creation order value for group
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code:
+                                        ! 0 on success and -1 on failure
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list
-    LOGICAL, INTENT(OUT), OPTIONAL :: mounted      ! Whether group has a file mounted on it
-
+    LOGICAL, INTENT(OUT), OPTIONAL :: mounted       ! Whether group has a file mounted on it
+!*****
     INTEGER :: mounted_c
     INTEGER(HID_T) :: lapl_id_default
     INTEGER(SIZE_T) :: group_name_len ! length of group name
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5gget_info_by_idx_c(loc_id, group_name, group_name_len, index_type, order, n, lapl_id_default, &
             storage_type, nlinks, max_corder, mounted_c)
@@ -1215,7 +1194,7 @@ CONTAINS
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
          !DEC$ATTRIBUTES C,reference,decorate,alias:'H5GGET_INFO_BY_IDX_C'::h5gget_info_by_idx_c
          !DEC$ENDIF
-
+         
          !DEC$ATTRIBUTES reference :: group_name
          INTEGER(HID_T), INTENT(IN) :: loc_id
          CHARACTER(LEN=*), INTENT(IN) :: group_name
@@ -1251,63 +1230,65 @@ CONTAINS
     ENDIF
 
   END SUBROUTINE h5gget_info_by_idx_f
-
-!----------------------------------------------------------------------
-! Name:		h5gget_info_by_name_f
 !
-! Purpose:  	Retrieves information about a group.
+!****s* H5G/h5gget_info_by_name_f
 !
-! Inputs:
-!          loc_id - File or group identifier
-!      group_name - Name of group containing group for which information is to be retrieved
+! NAME
+!  h5gget_info_by_name_f
 !
-! Outputs:  NOTE: In C the following are defined as a structure: H5G_info_t
+! PURPOSE
+!  Retrieves information about a group.
 !
-!      storage_type - Type of storage for links in group
-!                       H5G_STORAGE_TYPE_COMPACT: Compact storage
-!                       H5G_STORAGE_TYPE_DENSE: Indexed storage
-!                       H5G_STORAGE_TYPE_SYMBOL_TABLE: Symbol tables, the original HDF5 structure
-!            nlinks - Number of links in group
-!     	 max_corder - Current maximum creation order value for group
-!            hdferr - error code
-!		          Success:  0
-!		          Failure: -1
-! Optional parameters:
-!         lapl_id - Link access property list
-!	  mounted - Whether group has a file mounted on it
+! INPUTS
+!  loc_id 	 - File or group identifier
+!  group_name 	 - Name of group containing group for which information is to be retrieved
 !
-! Programmer:	M. S. Breitenfeld
-!		February 18, 2008
+! OUTPUTS
 !
-! Modifications:
-!          - Added 'mounted' paramater
-!            M.S. Breitenfeld
-!            July 16, 2008
-!----------------------------------------------------------------------
-
+!  storage_type  - Type of storage for links in group
+!                    H5G_STORAGE_TYPE_COMPACT: Compact storage
+!                    H5G_STORAGE_TYPE_DENSE: Indexed storage
+!                    H5G_STORAGE_TYPE_SYMBOL_TABLE: Symbol tables, the original HDF5 structure
+!  nlinks 	 - Number of links in group
+!  max_corder 	 - Current maximum creation order value for group
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Link access property list
+!  mounted 	 - Whether group has a file mounted on it
+!
+! NOTES
+!  In C the output is defined as a structure: H5G_info_t
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 18, 2008
+!
+! HISTORY
+!  Added 'mounted' paramater
+!  M. Scot Breitenfeld
+!  July 16, 2008
+! SOURCE
   SUBROUTINE h5gget_info_by_name_f(loc_id, group_name, &
        storage_type, nlinks, max_corder, hdferr, lapl_id, mounted)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: loc_id     ! File or group identifier
+    INTEGER(HID_T), INTENT(IN) :: loc_id       ! File or group identifier
     CHARACTER(LEN=*), INTENT(IN) :: group_name ! Name of group containing group for which information is to be retrieved
 
-    INTEGER, INTENT(OUT) :: storage_type ! Type of storage for links in group:
+    INTEGER, INTENT(OUT) :: storage_type  ! Type of storage for links in group:
                                           ! H5G_STORAGE_TYPE_COMPACT_F: Compact storage
                                           ! H5G_STORAGE_TYPE_DENSE_F: Indexed storage
                                           ! H5G_STORAGE_TYPE_SYMBOL_TABLE_F: Symbol tables, the original HDF5 structure
-    INTEGER, INTENT(OUT) :: nlinks ! Number of links in group
-    INTEGER, INTENT(OUT) :: max_corder ! Current maximum creation order value for group
-    INTEGER, INTENT(OUT) :: hdferr       ! Error code:
-                                         ! 0 on success and -1 on failure
+    INTEGER, INTENT(OUT) :: nlinks        ! Number of links in group
+    INTEGER, INTENT(OUT) :: max_corder    ! Current maximum creation order value for group
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code:
+                                          !   0 on success and -1 on failure
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list
-    LOGICAL, INTENT(OUT), OPTIONAL :: mounted      ! Whether group has a file mounted on it
-
+    LOGICAL, INTENT(OUT), OPTIONAL :: mounted       ! Whether group has a file mounted on it
+!*****
     INTEGER :: mounted_c
     INTEGER(HID_T) :: lapl_id_default
     INTEGER(SIZE_T) :: group_name_len ! length of group name
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5gget_info_by_name_c(loc_id, group_name, group_name_len, lapl_id_default, &
             storage_type, nlinks, max_corder, mounted_c)
diff --git a/fortran/src/H5If.c b/fortran/src/H5If.c
index 5f11fde..55868dd 100644
--- a/fortran/src/H5If.c
+++ b/fortran/src/H5If.c
@@ -1,4 +1,9 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* H5If/H5If
+ * PURPOSE
+ *   This file contains C stubs for H5I Fortran APIs
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,25 +16,34 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This files contains C stubs for H5I Fortran APIs */
-
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 #include "H5f90.h"
 #include "H5Eprivate.h"
 
-/*----------------------------------------------------------------------------
- * Name:        h5iget_type_c
- * Purpose:     Call H5Iget_type to get the type of an object
- * Inputs:      obj_id - object identifier
- * Outputs:     type - object type
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
- *              Thursday, March 24, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+/****if* H5If/h5iget_type_c
+ * NAME
+ *        h5iget_type_c
+ * PURPOSE
+ *     Call H5Iget_type to get the type of an object
+ * INPUTS
+ *      obj_id - object identifier
+ * OUTPUTS
+ *     type - object type
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
+ *  Thursday, March 24, 2000
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5iget_type_c (hid_t_f *obj_id, int_f *type)
+/******/
 {
      int ret_value = -1;
      hid_t c_obj_id;
@@ -45,23 +59,32 @@ nh5iget_type_c (hid_t_f *obj_id, int_f *type)
      ret_value = 0;
      return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5iget_name_c
- * Purpose:     Call H5Iget_name to get object's name
- * Inputs:      obj_id - object identifier
+/****if* H5If/h5iget_name_c
+ * NAME
+ *        h5iget_name_c
+ * PURPOSE
+ *     Call H5Iget_name to get object's name
+ * INPUTS
+ *      obj_id - object identifier
  *              buf_size - size of the buffer
- * Outputs:     buf - buffer to hold the name
- * Returns:     length of the name on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     buf - buffer to hold the name
+ * RETURNS
+ *     length of the name on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, March 12, 2003
- * Modifications:
+ * HISTORY
+ *
  *               Changed the size of c_buf_size to c_buf_size + 1, which
  *               fixes the problem of truncating the string by 1 if the
  *               exact size of the string (buf_size) is passed in.
- *               M.S. Breitenfeld, April 21, 2008
- *---------------------------------------------------------------------------*/
+ *               M. Scot Breitenfeld, April 21, 2008
+ * SOURCE
+*/
 int_f
 nh5iget_name_c(hid_t_f *obj_id, _fcd buf, size_t_f *buf_size, size_t_f *name_size)
+/******/
 {
      int ret_value = -1;
      hid_t c_obj_id;
@@ -95,18 +118,25 @@ DONE:
       return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5iinc_ref_c
- * Purpose:     Call H5Iinc_ref to increment object's reference count
- * Inputs:      obj_id - object identifier
- * Outputs:     ref_count - Reference count of ID
- * Returns:     current reference count on success, -1 on failure
- * Programmer:  Quincey Koziol
- *              Tuesday, December  9, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+/****if* H5If/h5iinc_ref_c
+ * NAME
+ *        h5iinc_ref_c
+ * PURPOSE
+ *     Call H5Iinc_ref to increment object's reference count
+ * INPUTS
+ *      obj_id - object identifier
+ * OUTPUTS
+ *     ref_count - Reference count of ID
+ * RETURNS
+ *     current reference count on success, -1 on failure
+ * AUTHOR
+ *  Quincey Koziol
+ *  Tuesday, December  9, 2003
+ * SOURCE
+*/
 int_f
 nh5iinc_ref_c(hid_t_f *obj_id, int_f *ref_count)
+/******/
 {
      int ret_value;
 
@@ -124,18 +154,25 @@ done:
       return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5idec_ref_c
- * Purpose:     Call H5Idec_ref to decrement object's reference count
- * Inputs:      obj_id - object identifier
- * Outputs:     ref_count - Reference count of ID
- * Returns:     current reference count on success, -1 on failure
- * Programmer:  Quincey Koziol
+/****if* H5If/h5idec_ref_c
+ * NAME
+ *        h5idec_ref_c
+ * PURPOSE
+ *     Call H5Idec_ref to decrement object's reference count
+ * INPUTS
+ *      obj_id - object identifier
+ * OUTPUTS
+ *     ref_count - Reference count of ID
+ * RETURNS
+ *     current reference count on success, -1 on failure
+ * AUTHOR
+ *  Quincey Koziol
  *              Tuesday, December  9, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5idec_ref_c(hid_t_f *obj_id, int_f *ref_count)
+/******/
 {
      int ret_value;
 
@@ -153,18 +190,26 @@ done:
       return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5iget_ref_c
- * Purpose:     Call H5Iget_ref to retrieve object's reference count
- * Inputs:      obj_id - object identifier
- * Outputs:     ref_count - Reference count of ID
- * Returns:     current reference count on success, -1 on failure
- * Programmer:  Quincey Koziol
- *              Tuesday, December  9, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+/****if* H5If/h5iget_ref_c
+ * NAME
+ *        h5iget_ref_c
+ * PURPOSE
+ *     Call H5Iget_ref to retrieve object's reference count
+ * INPUTS
+ *      obj_id - object identifier
+ * OUTPUTS
+ *     ref_count - Reference count of ID
+ * RETURNS
+ *     current reference count on success, -1 on failure
+ * AUTHOR
+ *  Quincey Koziol
+ *  Tuesday, December  9, 2003
+ *
+ * SOURCE
+*/
 int_f
 nh5iget_ref_c(hid_t_f *obj_id, int_f *ref_count)
+/******/
 {
      int ret_value;
 
@@ -182,18 +227,26 @@ done:
       return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5iget_file_id_c
- * Purpose:     Call H5Iget_file_id to obtain file identifier from object identifier
- * Inputs:      obj_id - object identifier
- * Outputs:     file_id - file identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              Tuesday, August 24, 2004
- * Modifications:
- *---------------------------------------------------------------------------*/
+/****if* H5If/h5iget_file_id_c
+ * NAME
+ *        h5iget_file_id_c
+ * PURPOSE
+ *     Call H5Iget_file_id to obtain file identifier from object identifier
+ * INPUTS
+ *      obj_id - object identifier
+ * OUTPUTS
+ *     file_id - file identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  Tuesday, August 24, 2004
+ *
+ * SOURCE
+*/
 int_f
 nh5iget_file_id_c(hid_t_f *obj_id, hid_t_f *file_id)
+/******/
 {
      int ret_value;
      hid_t c_file_id;
diff --git a/fortran/src/H5Iff.f90 b/fortran/src/H5Iff.f90
index a082d5a..86e88b9 100644
--- a/fortran/src/H5Iff.f90
+++ b/fortran/src/H5Iff.f90
@@ -1,352 +1,352 @@
-! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-!   Copyright by The HDF Group.                                               *
-!   Copyright by the Board of Trustees of the University of Illinois.         *
-!   All rights reserved.                                                      *
-!                                                                             *
-!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
-!   terms governing use, modification, and redistribution, is contained in    *
-!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
-!   of the source code distribution tree; Copyright.html can be found at the  *
-!   root level of an installed copy of the electronic HDF5 document set and   *
-!   is linked from the top-level documents page.  It can also be found at     *
-!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
-!   access to either file, you may request a copy from help at hdfgroup.org.     *
-! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-!
-!
-! This file contains FORTRAN90 interfaces for H5I functions
-!
-      MODULE H5I
+!****h* ROBODoc/H5I
+!
+! NAME
+!  MODULE H5I
+!
+!  FILE
+!  fortran/src/H5Iff.f90
+!
+! PURPOSE
+!  This file contains Fortran interfaces for H5I functions.
+!
+! COPYRIGHT
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!  Copyright by The HDF Group.                                               *
+!  Copyright by the Board of Trustees of the University of Illinois.         *
+!  All rights reserved.                                                      *
+!  *
+!  This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!  terms governing use, modification, and redistribution, is contained in    *
+!  the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!  of the source code distribution tree; Copyright.html can be found at the  *
+!  root level of an installed copy of the electronic HDF5 document set and   *
+!  is linked from the top-level documents page.  It can also be found at     *
+!  http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!  access to either file, you may request a copy from help at hdfgroup.org.     *
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5I function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!
+!*****
 
-        USE H5GLOBAL
+MODULE H5I
 
-      CONTAINS
+  USE H5GLOBAL
 
-!----------------------------------------------------------------------
-! Name:		h5iget_type_f
-!
-! Purpose:	Retrieves the type of an object.
-!
-! Inputs: 	obj_id		- object identifier
-! Outputs:
-!		type		- type of the object, possible values:
-!				  H5I_FILE_F
-!				  H5I_GROUP_F
-!				  H5I_DATATYPE_F
-!				  H5I_DATASPACE_F
-!				  H5I_DATASET_F
-!				  H5I_ATTR_F
-!				  H5I_BADID_F
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 5, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-          SUBROUTINE h5iget_type_f(obj_id, type, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: obj_id  !Object identifier
-            INTEGER, INTENT(OUT) :: type !type of an object.
-                                         !possible values are:
-                                         !H5I_FILE_F
-                                         !H5I_GROUP_F
-                                         !H5I_DATATYPE_F
-                                         !H5I_DATASPACE_F
-                                         !H5I_DATASET_F
-                                         !H5I_ATTR_F
-                                         !H5I_BADID_F
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+CONTAINS
 
-!            INTEGER, EXTERNAL :: h5iget_type_c
-!  Interface is needed for MS FORTRAN
-!
-            INTERFACE
-              INTEGER FUNCTION h5iget_type_c(obj_id, type)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5IGET_TYPE_C':: h5iget_type_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: obj_id
-              INTEGER, INTENT(OUT) :: type
-              END FUNCTION h5iget_type_c
-            END INTERFACE
-            hdferr = h5iget_type_c(obj_id, type)
-          END SUBROUTINE h5iget_type_f
+!****s* H5I/h5iget_type_f
+!
+! NAME
+!  h5iget_type_f
+!
+! PURPOSE
+!  Retrieves the type of an object.
+!
+! INPUTS
+!  obj_id   - object identifier
+! OUTPUTS
+!  type     - type of the object, possible values:
+!              H5I_FILE_F
+!              H5I_GROUP_F
+!              H5I_DATATYPE_F
+!              H5I_DATASPACE_F
+!              H5I_DATASET_F
+!              H5I_ATTR_F
+!              H5I_BADID_F
+!  hdferr:  - error code
+!              Success:  0
+!              Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 5, 2001
+!
+! SOURCE
+  SUBROUTINE h5iget_type_f(obj_id, TYPE, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: obj_id  ! Object identifier
+    INTEGER, INTENT(OUT) :: TYPE ! type of an object.
+                                 ! possible values are:
+                                 !   H5I_FILE_F
+                                 !   H5I_GROUP_F
+                                 !   H5I_DATATYPE_F
+                                 !   H5I_DATASPACE_F
+                                 !   H5I_DATASET_F
+                                 !   H5I_ATTR_F
+                                 !   H5I_BADID_F
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5iget_type_c(obj_id, TYPE)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5IGET_TYPE_C':: h5iget_type_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: obj_id
+         INTEGER, INTENT(OUT) :: TYPE
+       END FUNCTION h5iget_type_c
+    END INTERFACE
+    hdferr = h5iget_type_c(obj_id, TYPE)
+  END SUBROUTINE h5iget_type_f
 
-!----------------------------------------------------------------------
-! Name:		h5iget_name_f
-!
-! Purpose: 	Gets a name of an object specified by its idetifier.
-!
-! Inputs:
-!		obj_id		- attribute identifier
-!		buf_size	- size of a buffer to read name in
-! Outputs:
-!		buf		- buffer to read name in, name will be truncated if
-!                                 buffer is not big enough
-!               name_size       - name size
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		March 12, 2003
-!
-! Modifications:
-!
-!----------------------------------------------------------------------
+!****s* H5I/h5iget_name_f
+!
+! NAME
+!  h5iget_name_f
+!
+! PURPOSE
+!  Gets a name of an object specified by its idetifier.
+!
+! INPUTS
+!  obj_id    - attribute identifier
+!  buf_size  - size of a buffer to read name in
+! OUTPUTS
+!  buf 	     - buffer to read name in, name will be truncated if
+!              buffer is not big enough
+!  name_size - name size
+!  hdferr:   - error code
+!               Success:  0
+!               Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  March 12, 2003
+! SOURCE
+  SUBROUTINE h5iget_name_f(obj_id, buf, buf_size, name_size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: obj_id      ! Object identifier
+    INTEGER(SIZE_T), INTENT(IN) :: buf_size   ! Buffer size
+    CHARACTER(LEN=*), INTENT(OUT) :: buf      ! Buffer to hold object name
+    INTEGER(SIZE_T), INTENT(OUT) :: name_size ! Actual name size
+    INTEGER, INTENT(OUT) :: hdferr            ! Error code:
+                                              !   0 if successful,
+                                              !   -1 if fail
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5iget_name_c(obj_id, buf, buf_size, name_size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5IGET_NAME_C'::h5iget_name_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: buf
+         INTEGER(HID_T), INTENT(IN) :: obj_id
+         CHARACTER(LEN=*), INTENT(OUT) :: buf
+         INTEGER(SIZE_T), INTENT(IN) :: buf_size
+         INTEGER(SIZE_T), INTENT(OUT) :: name_size
+       END FUNCTION h5iget_name_c
+    END INTERFACE
 
+    hdferr = h5iget_name_c(obj_id, buf, buf_size, name_size)
+  END SUBROUTINE h5iget_name_f
 
-          SUBROUTINE h5iget_name_f(obj_id, buf, buf_size, name_size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: obj_id     ! Object identifier
-            INTEGER(SIZE_T), INTENT(IN) :: buf_size  ! Buffer size
-            CHARACTER(LEN=*), INTENT(OUT) :: buf   ! Buffer to hold object name
-            INTEGER(SIZE_T), INTENT(OUT) :: name_size ! Actual name size
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code:
-                                                   ! 0 if successful,
-                                                   ! -1 if fail
-!            INTEGER, EXTERNAL :: h5iget_name_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5iget_name_c(obj_id, buf, buf_size, name_size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5IGET_NAME_C'::h5iget_name_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: buf
-              INTEGER(HID_T), INTENT(IN) :: obj_id
-              CHARACTER(LEN=*), INTENT(OUT) :: buf
-              INTEGER(SIZE_T), INTENT(IN) :: buf_size
-              INTEGER(SIZE_T), INTENT(OUT) :: name_size
-              END FUNCTION h5iget_name_c
-            END INTERFACE
+!****s* H5I/h5iinc_ref_f
+!
+! NAME
+!  h5iinc_ref_f
+!
+! PURPOSE
+!  Increments the reference count of an ID
+!
+! INPUTS
+!  obj_id 	 - object identifier
+! OUTPUTS
+!  ref_count 	 - Current reference count of the ID
+!  hdferr:		- error code
+!  Success:  0
+!  Failure: -1
+! AUTHOR
+!  Quincey Koziol
+!  December  9, 2003
+!
+! SOURCE
+  SUBROUTINE h5iinc_ref_f(obj_id, ref_count, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: obj_id ! Object identifier
+    INTEGER, INTENT(OUT) :: ref_count    ! Current reference count of ID
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5iinc_ref_c(obj_id, ref_count)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5IINC_REF_C':: h5iinc_ref_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: obj_id
+         INTEGER, INTENT(OUT) :: ref_count
+       END FUNCTION h5iinc_ref_c
+    END INTERFACE
+    hdferr = h5iinc_ref_c(obj_id, ref_count)
+  END SUBROUTINE h5iinc_ref_f
 
-            hdferr = h5iget_name_c(obj_id, buf, buf_size, name_size)
-          END SUBROUTINE h5iget_name_f
+!****s* H5I/h5idec_ref_f
+!
+! NAME
+!  h5idec_ref_f
+!
+! PURPOSE
+!  Decrements the reference count of an ID
+!
+! INPUTS
+!  obj_id 	 - Object identifier
+! OUTPUTS
+!  ref_count 	 - Current reference count of the ID
+!  hdferr:	 - Error code
+!                   Success:  0
+!                   Failure: -1
+! AUTHOR
+!  Quincey Koziol
+!  December  9, 2003
+!
+! SOURCE
+  SUBROUTINE h5idec_ref_f(obj_id, ref_count, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: obj_id ! Object identifier
+    INTEGER, INTENT(OUT) :: ref_count    ! Current reference count of ID
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5idec_ref_c(obj_id, ref_count)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5IDEC_REF_C':: h5idec_ref_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: obj_id
+         INTEGER, INTENT(OUT) :: ref_count
+       END FUNCTION h5idec_ref_c
+    END INTERFACE
+    hdferr = h5idec_ref_c(obj_id, ref_count)
+  END SUBROUTINE h5idec_ref_f
 
-!----------------------------------------------------------------------
-! Name:		h5iinc_ref_f
-!
-! Purpose:	Increments the reference count of an ID
-!
-! Inputs: 	obj_id		- object identifier
-! Outputs:
-!		ref_count       - Current reference count of the ID
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Quincey Koziol
-!		December  9, 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-          SUBROUTINE h5iinc_ref_f(obj_id, ref_count, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: obj_id  !Object identifier
-            INTEGER, INTENT(OUT) :: ref_count !Current reference count of ID
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-!            INTEGER, EXTERNAL :: h5iinc_ref_c
-!  Interface is needed for MS FORTRAN
-!
-            INTERFACE
-              INTEGER FUNCTION h5iinc_ref_c(obj_id, ref_count)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5IINC_REF_C':: h5iinc_ref_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: obj_id
-              INTEGER, INTENT(OUT) :: ref_count
-              END FUNCTION h5iinc_ref_c
-            END INTERFACE
-            hdferr = h5iinc_ref_c(obj_id, ref_count)
-          END SUBROUTINE h5iinc_ref_f
-
-!----------------------------------------------------------------------
-! Name:		h5idec_ref_f
-!
-! Purpose:	Decrements the reference count of an ID
-!
-! Inputs: 	obj_id		- object identifier
-! Outputs:
-!		ref_count       - Current reference count of the ID
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Quincey Koziol
-!		December  9, 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-          SUBROUTINE h5idec_ref_f(obj_id, ref_count, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: obj_id  !Object identifier
-            INTEGER, INTENT(OUT) :: ref_count !Current reference count of ID
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-!            INTEGER, EXTERNAL :: h5idec_ref_c
-!  Interface is needed for MS FORTRAN
-!
-            INTERFACE
-              INTEGER FUNCTION h5idec_ref_c(obj_id, ref_count)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5IDEC_REF_C':: h5idec_ref_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: obj_id
-              INTEGER, INTENT(OUT) :: ref_count
-              END FUNCTION h5idec_ref_c
-            END INTERFACE
-            hdferr = h5idec_ref_c(obj_id, ref_count)
-          END SUBROUTINE h5idec_ref_f
-
-!----------------------------------------------------------------------
-! Name:		h5iget_ref_f
-!
-! Purpose:	Retrieves the reference count of an ID
-!
-! Inputs: 	obj_id		- object identifier
-! Outputs:
-!		ref_count       - Current reference count of the ID
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Quincey Koziol
-!		December  9, 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-          SUBROUTINE h5iget_ref_f(obj_id, ref_count, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: obj_id  !Object identifier
-            INTEGER, INTENT(OUT) :: ref_count !Current reference count of ID
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-!            INTEGER, EXTERNAL :: h5iget_ref_c
-!  Interface is needed for MS FORTRAN
-!
-            INTERFACE
-              INTEGER FUNCTION h5iget_ref_c(obj_id, ref_count)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5IGET_REF_C':: h5iget_ref_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: obj_id
-              INTEGER, INTENT(OUT) :: ref_count
-              END FUNCTION h5iget_ref_c
-            END INTERFACE
-            hdferr = h5iget_ref_c(obj_id, ref_count)
-          END SUBROUTINE h5iget_ref_f
-
-!----------------------------------------------------------------------
-! Name:		h5iget_file_id_f
-!
-! Purpose:	Obtains file identifier from the object identifier
-!
-! Inputs: 	obj_id		- object identifier
-! Outputs:
-!		file_id         - file identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 23, 2004
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-          SUBROUTINE h5iget_file_id_f(obj_id, file_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN)  :: obj_id   ! Object identifier
-            INTEGER(HID_T), INTENT(OUT) :: file_id  ! File identifier
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5iget_file_id_c(obj_id, file_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5IGET_FILE_ID_C':: h5iget_file_id_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN)  :: obj_id
-              INTEGER(HID_T), INTENT(OUT) :: file_id
-              END FUNCTION h5iget_file_id_c
-            END INTERFACE
-            hdferr = h5iget_file_id_c(obj_id, file_id)
-          END SUBROUTINE h5iget_file_id_f
-
-!----------------------------------------------------------------------
-! Name:		H5Iis_valid_f
-!
-! Purpose:	Check if an ID is valid without producing an error message
-!
-! Inputs: 	id		- identifier
-! Outputs:
-!		valid           - status of id as a valid identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Programmer:	M. Scot Breitenfeld
-!		April 13, 2009
-!
-! Comment:
-!----------------------------------------------------------------------
-          SUBROUTINE h5iis_valid_f(id, valid, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN)  :: id   ! Identifier
-            LOGICAL, INTENT(OUT) :: valid    ! Status of id as a valid identifier
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER  :: c_valid ! 0 = .false, 1 = .true.
-
-            INTERFACE
-               INTEGER FUNCTION h5iis_valid_c(id, c_valid)
-                 USE H5GLOBAL
-                 !DEC$IF DEFINED(HDF5F90_WINDOWS)
-                 !DEC$ATTRIBUTES C,reference,decorate,alias:'H5IIS_VALID_C':: h5iis_valid_c
-                 !DEC$ENDIF
-                 INTEGER(HID_T), INTENT(IN)  :: id   ! Identifier
-                 INTEGER  :: c_valid
-               END FUNCTION h5iis_valid_c
-            END INTERFACE
-
-            hdferr = h5iis_valid_c(id, c_valid)
-
-            valid = .FALSE. ! Default
-            IF(c_valid.EQ.1) valid = .TRUE.
-
-          END SUBROUTINE h5iis_valid_f
-
-
-      END MODULE H5I
+!****s* H5I/h5iget_ref_f
+! NAME
+!  h5iget_ref_f
+!
+! PURPOSE
+!  Retrieves the reference count of an ID
+!
+! INPUTS
+!  obj_id 	 - object identifier
+!
+! OUTPUTS
+!  ref_count 	 - Current reference count of the ID
+!  hdferr:	   - error code
+!  Success:  0
+!  Failure: -1
+! AUTHOR
+!  Quincey Koziol
+!  December  9, 2003
+!
+! SOURCE
+  SUBROUTINE h5iget_ref_f(obj_id, ref_count, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: obj_id ! Object identifier
+    INTEGER, INTENT(OUT) :: ref_count    ! Current reference count of ID
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5iget_ref_c(obj_id, ref_count)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5IGET_REF_C':: h5iget_ref_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: obj_id
+         INTEGER, INTENT(OUT) :: ref_count
+       END FUNCTION h5iget_ref_c
+    END INTERFACE
+    hdferr = h5iget_ref_c(obj_id, ref_count)
+  END SUBROUTINE h5iget_ref_f
+!
+!****s* H5I/h5iget_file_id_f
+! NAME
+!  h5iget_file_id_f
+!
+! PURPOSE
+!  Obtains file identifier from the object identifier
+!
+! INPUTS
+!  obj_id 	 - object identifier
+! OUTPUTS
+!  file_id 	 - file identifier
+!  hdferr:       - error code
+!                    Success:  0
+!                    Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 23, 2004
+! SOURCE
+  SUBROUTINE h5iget_file_id_f(obj_id, file_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN)  :: obj_id   ! Object identifier
+    INTEGER(HID_T), INTENT(OUT) :: file_id  ! File identifier
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5iget_file_id_c(obj_id, file_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5IGET_FILE_ID_C':: h5iget_file_id_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN)  :: obj_id
+         INTEGER(HID_T), INTENT(OUT) :: file_id
+       END FUNCTION h5iget_file_id_c
+    END INTERFACE
+    hdferr = h5iget_file_id_c(obj_id, file_id)
+  END SUBROUTINE h5iget_file_id_f
+!
+!****s* H5I/h5iis_valid_f
+! NAME
+!  h5iget_file_id_f
+!
+! PURPOSE
+!  Check if an ID is valid without producing an error message
+!
+! INPUTS
+!  id		- identifier 
+! OUTPUTS       
+!  valid        - status of id as a valid identifier
+!  hdferr:	- error code		
+!		   Success:  0
+!		   Failure: -1
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  April 13, 2009
+! SOURCE
+  SUBROUTINE h5iis_valid_f(id, valid, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN)  :: id ! Identifier 
+    LOGICAL, INTENT(OUT) :: valid     ! Status of id as a valid identifier
+    INTEGER, INTENT(OUT) :: hdferr    ! Error code
+!*****
+    INTEGER  :: c_valid ! 0 = .false, 1 = .true.
+    
+    INTERFACE
+       INTEGER FUNCTION h5iis_valid_c(id, c_valid)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5IIS_VALID_C':: h5iis_valid_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN)  :: id   ! Identifier 
+         INTEGER  :: c_valid
+       END FUNCTION h5iis_valid_c
+    END INTERFACE
+    
+    hdferr = h5iis_valid_c(id, c_valid)
+    
+    valid = .FALSE. ! Default
+    IF(c_valid.EQ.1) valid = .TRUE.
+    
+  END SUBROUTINE h5iis_valid_f
+END MODULE H5I
 
diff --git a/fortran/src/H5Lf.c b/fortran/src/H5Lf.c
index c971d5e..e5b01ed 100644
--- a/fortran/src/H5Lf.c
+++ b/fortran/src/H5Lf.c
@@ -1,4 +1,9 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* H5Lf/H5Lf
+ * PURPOSE
+ *   This file contains C stubs for H5L Fortran APIs
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,17 +16,21 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This files contains C stubs for H5L Fortran APIs */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include "H5f90.h"
 #include "H5Eprivate.h"
 
-/*----------------------------------------------------------------------------
- * Name:        h5lcopy_c
- * Purpose:     Call H5Lcopy
- * Inputs:
+/****if* H5Lf/h5lcopy_c
+ * NAME
+ *        h5lcopy_c
+ * PURPOSE
+ *     Call H5Lcopy
+ * INPUTS
+ *
  *     src_loc_id - Location identifier of the source link
  *       src_name - Name of the link to be copied
  *    src_namelen - length of the name
@@ -33,16 +42,21 @@
  *        lcpl_id - Link creation property list identifier
  *        lapl_id - Link access property list identifier
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5lcopy_c(hid_t_f *src_loc_id, _fcd src_name, size_t_f *src_namelen, hid_t_f *dest_loc_id,
 	     _fcd dest_name, size_t_f *dest_namelen,
 	     hid_t_f *lcpl_id, hid_t_f *lapl_id)
+/******/
 {
     char *c_src_name = NULL;
     char *c_dest_name = NULL;
@@ -72,10 +86,13 @@ done:
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5lcreate_external_c
- * Purpose:     Call H5Lcreate_external_c
- * Inputs:
+/****if* H5Lf/h5lcreate_external_c
+ * NAME
+ *        h5lcreate_external_c
+ * PURPOSE
+ *     Call H5Lcreate_external_c
+ * INPUTS
+ *
  *    file_name - Name of the file containing the target object. Neither the file nor the target object is
  *                required to exist. May be the file the link is being created in.
  *     obj_name - Path within the target file to the target object.
@@ -84,17 +101,19 @@ done:
  *      lcpl_id - Link creation property list identifier.
  *      lapl_id - Link access property list identifier.
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              February 29, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  February 29, 2008
+ * SOURCE
+*/
 
 int_f
 nh5lcreate_external_c(_fcd file_name, size_t_f *file_namelen, _fcd obj_name, size_t_f *obj_namelen,
 		      hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen,
 		      hid_t_f *lcpl_id, hid_t_f *lapl_id)
-
+/******/
 {
   char *c_file_name = NULL;
   char *c_obj_name = NULL;
@@ -129,24 +148,30 @@ done:
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5ldelete_c
- * Purpose:     Call H5Ldelete
- * Inputs:
+/****if* H5Lf/h5ldelete_c
+ * NAME
+ *        h5ldelete_c
+ * PURPOSE
+ *     Call H5Ldelete
+ * INPUTS
+ *
  *
  *    loc_id  - Identifier of the file or group containing the object
  *    name    - Name of the link to delete
  *    lapl_id - Link access property list identifier
  *    namelen - length of name
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 
 int_f
 nh5ldelete_c ( hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id )
+/******/
 {
   char *c_name = NULL;
   int_f ret_value = 0;
@@ -170,10 +195,13 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5lcreate_soft_c
- * Purpose:     Call H5Lcreate_soft
- * Inputs:
+/****if* H5Lf/h5lcreate_soft_c
+ * NAME
+ *        h5lcreate_soft_c
+ * PURPOSE
+ *     Call H5Lcreate_soft
+ * INPUTS
+ *
  *
  *       target_path - Path to the target object, which is not required to exist.
  *       link_loc_id - The file or group identifier for the new link.
@@ -181,17 +209,20 @@ done:
  *       lcpl_id     - Link creation property list identifier.
  *       lapl_id     - Link access property list identifier.
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February 20, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 
 int_f
 nh5lcreate_soft_c(_fcd target_path, size_t_f *target_path_len,
 		  hid_t_f *link_loc_id,
 		  _fcd link_name, size_t_f *link_name_len,
 		  hid_t_f *lcpl_id, hid_t_f *lapl_id )
+/******/
 {
   char *c_target_path = NULL;
   char *c_link_name = NULL;
@@ -220,10 +251,13 @@ nh5lcreate_soft_c(_fcd target_path, size_t_f *target_path_len,
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5lcreate_hard_c
- * Purpose:     Call H5Lcreate_hard
- * Inputs:
+/****if* H5Lf/h5lcreate_hard_c
+ * NAME
+ *        h5lcreate_hard_c
+ * PURPOSE
+ *     Call H5Lcreate_hard
+ * INPUTS
+ *
  *       obj_loc_id  - The file or group identifier for the target object.
  *       obj_name    - Name of the target object, which must already exist.
  *       obj_namelen - Name length
@@ -233,17 +267,19 @@ nh5lcreate_soft_c(_fcd target_path, size_t_f *target_path_len,
  *       lcpl_id     - Link creation property list identifier.
  *       lapl_id     - Link access property list identifier.
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              February 27, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
-
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  February 27, 2008
+ * SOURCE
+*/
 int_f
 nh5lcreate_hard_c(hid_t_f *obj_loc_id, _fcd obj_name, size_t_f *obj_namelen,
 		  hid_t_f *link_loc_id,
 		  _fcd link_name, size_t_f *link_namelen,
 		  hid_t_f *lcpl_id, hid_t_f *lapl_id )
+/******/
 {
   char *c_obj_name = NULL;
   char *c_link_name = NULL;
@@ -272,10 +308,13 @@ nh5lcreate_hard_c(hid_t_f *obj_loc_id, _fcd obj_name, size_t_f *obj_namelen,
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5ldelete_by_idx_c
- * Purpose:     Calls h5ldelete_by_idx
- * Inputs:
+/****if* H5Lf/h5ldelete_by_idx_c
+ * NAME
+ *        h5ldelete_by_idx_c
+ * PURPOSE
+ *     Calls h5ldelete_by_idx
+ * INPUTS
+ *
  *          loc_id - File or group identifier specifying location of subject group
  *      group_name - Name of subject group
  *   group_namelen - Name length
@@ -293,15 +332,21 @@ nh5lcreate_hard_c(hid_t_f *obj_loc_id, _fcd obj_name, size_t_f *obj_namelen,
  *               n - Link for which to retrieve information
  *         lapl_id - Link access property list
  *
- * Outputs:     N/A
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * OUTPUTS
+ *     N/A
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February 29, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5ldelete_by_idx_c (hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen,
 		     int_f *index_field, int_f *order, hsize_t_f *n, hid_t_f *lapl_id)
+/******/
 {
     char *c_group_name = NULL;          /* Buffer to hold C string */
     H5_index_t c_index_field;
@@ -329,22 +374,31 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5lexists_c
- * Purpose:     Calls H5Lexists
- * Inputs:
+/****if* H5Lf/h5lexists_c
+ * NAME
+ *        h5lexists_c
+ * PURPOSE
+ *     Calls H5Lexists
+ * INPUTS
+ *
  *      loc_id - Identifier of the file or group to query.
  *        name - Link name to check
  *     lapl_id - Link access property list identifier.
- * Outputs:
+ * OUTPUTS
+ *
  *     link_exists_c  - returns a positive value, for TRUE, or 0 (zero), for FALSE.
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February 29, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5lexists_c (hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id, int_f *link_exists)
+/******/
 {
   char *c_name = NULL;          /* Buffer to hold C string */
   int_f ret_value = 0;          /* Return value */
@@ -367,15 +421,19 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5lget_info_c
- * Purpose:     Call  H5Lget_info
- * Inputs:
+/****if* H5Lf/h5lget_info_c
+ * NAME
+ *        h5lget_info_c
+ * PURPOSE
+ *     Call  H5Lget_info
+ * INPUTS
+ *
  *		link_loc_id - File or group identifier.
  *                link_name - Name of the link for which information is being sought
  *             link_namelen - Name length
  *                  lapl_id - Link access property list
- * Outputs:
+ * OUTPUTS
+ *
  *
  *              cset - indicates the character set used for link’s name.
  *            corder - specifies the link’s creation order position.
@@ -388,20 +446,25 @@ done:
  *           address - If the link is a hard link, address specifies the file address that the link points to
  *          val_size - If the link is a symbolic link, val_size will be the length of the link value
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5lget_info_c(hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen,
 		int_f *cset, int_f *corder, int_f *corder_valid, int_f *link_type,
 		haddr_t_f *address, size_t_f *val_size,
 		hid_t_f *lapl_id)
+/******/
 {
     char *c_link_name = NULL;          /* Buffer to hold C string */
-    H5L_info_t link_buff;
     int_f ret_value = 0;          /* Return value */
+    H5L_info_t link_buff;
 
     /*
      * Convert FORTRAN name to C name
@@ -431,10 +494,13 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5lget_info_by_idx_c
- * Purpose:     Call  H5Lget_info_by_idx
- * Inputs:
+/****if* H5Lf/h5lget_info_by_idx_c
+ * NAME
+ *        h5lget_info_by_idx_c
+ * PURPOSE
+ *     Call  H5Lget_info_by_idx
+ * INPUTS
+ *
  *	loc_id  - File or group identifier specifying location of subject group
  *   group_name - Name of subject group
  *group_namelen - Name length
@@ -442,43 +508,54 @@ done:
  *        order - Order within field or index
  *            n - Link for which to retrieve information
  *      lapl_id - Link access property list
- * Outputs:
+ * OUTPUTS
+ *
  *        corder_valid - Indicates whether the the creation order data is valid for this attribute
  *              corder - Is a positive integer containing the creation order of the attribute
  *                cset - Indicates the character set used for the attribute’s name
  *           data_size - indicates the size, in the number of characters, of the attribute
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5lget_info_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen,
 		      int_f *index_field, int_f *order, hsize_t_f *n,
 		      int_f *link_type, int_f *corder_valid, int_f *corder, int_f *cset,  haddr_t_f *address, size_t_f *val_size, hid_t_f *lapl_id)
+/******/
 {
     char *c_group_name = NULL;          /* Buffer to hold C string */
-    H5L_info_t link_buff;
+    H5_index_t c_index_field;
+    H5_iter_order_t c_order;
     int_f ret_value = 0;          /* Return value */
+    H5L_info_t link_buff;
 
     /*
      * Convert FORTRAN name to C name
      */
-    if(NULL == (c_group_name = HD5f2cstring(group_name, (size_t)*group_namelen)))
-        HGOTO_DONE(FAIL)
+    if((c_group_name = HD5f2cstring(group_name, (size_t)*group_namelen)) == NULL)
+      HGOTO_DONE(FAIL);
 
+    c_index_field = (H5_index_t)*index_field;
+    c_order = (H5_iter_order_t)*order;
      /*
       * Call H5Linfo_by_idx function.
       */
-    if(H5Lget_info_by_idx((hid_t)*loc_id, c_group_name, (H5_index_t)*index_field, (H5_iter_order_t)*order, (hsize_t)*n,
+    if(H5Lget_info_by_idx((hid_t)*loc_id, c_group_name, c_index_field, c_order, (hsize_t)*n,
 			  &link_buff, (hid_t)*lapl_id) < 0)
-        HGOTO_DONE(FAIL)
+      HGOTO_DONE(FAIL);
 
     /* Unpack the structure */
+
     *corder_valid = 0;
-    if(link_buff.corder_valid > 0)
-        *corder_valid = 1;
+    if(link_buff.corder_valid > 0) *corder_valid = 1;
+
     *corder = (int_f)link_buff.corder;
     *cset = (int_f)link_buff.cset;
     *link_type = (int_f)link_buff.type;
@@ -486,27 +563,33 @@ nh5lget_info_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen,
     *val_size = (size_t_f)link_buff.u.val_size;
 
 done:
-    if(c_group_name)
-        HDfree(c_group_name);
-
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        H5Lis_registered_c
- * Purpose:     Call H5Lis_registered
- * Inputs:
+/****if* H5Lf/H5Lis_registered_c
+ * NAME
+ *        H5Lis_registered_c
+ * PURPOSE
+ *     Call H5Lis_registered
+ * INPUTS
+ *
  *  link_cls_id - User-defined link class identifier
- * Outputs:     NONE
+ * OUTPUTS
+ *     NONE
  *
- * Returns:     Returns a positive value if the link class has been registered
+ * RETURNS
+ *     Returns a positive value if the link class has been registered
  *              and zero if it is unregistered. Otherwise returns a negative value
- * Programmer:  M.S. Breitenfeld
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 3, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 int_f
 nh5lis_registered_c(int_f *link_cls_id)
+/******/
 {
     int_f ret_value;      /* Return value */
 
@@ -518,28 +601,51 @@ nh5lis_registered_c(int_f *link_cls_id)
     return ret_value;
 }
 
+/* { not sure what this is fix -scot- */
+/*   int_f ret_value = 0;      /\* Return value *\/ */
+/*   H5L_type_t c_link_cls_id; /\* User-defined link class identifier *\/ */
+/*   htri_t registered; /\* registration status *\/ */
+
 
-/*----------------------------------------------------------------------------
- * Name:        h5lmove_c
- * Purpose:     Call  H5Lmove
- * Inputs:
+/*   c_link_cls_id = (H5L_type_t)*link_cls_id; */
+/*   /\* */
+/*    * Call H5Lis_registered */
+/*    *\/ */
+/*   registered = H5Lis_registered(c_link_cls_id); */
+
+/*   ret_value = (int_f)registered; */
+
+/*   return ret_value; */
+/* } */
+
+
+/****if* H5Lf/h5lmove_c
+ * NAME
+ *        h5lmove_c
+ * PURPOSE
+ *     Call  H5Lmove
+ * INPUTS
+ *
  *    src_loc_id   - Original file or group identifier.
  *    src_name     - Original link name.
  *    src_namelen  - name length
  *    dest_loc_id  - Destination file or group identifier.
  *    dest_name    - NEW link name.
  *    dest_namelen - name length
- * Outputs:
+ * OUTPUTS
+ *
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 3, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5lmove_c(hid_t_f *src_loc_id, _fcd src_name, size_t_f *src_namelen, hid_t_f *dest_loc_id,
 	   _fcd dest_name, size_t_f *dest_namelen, hid_t_f *lcpl_id, hid_t_f *lapl_id)
-
+/******/
 {
     char *c_src_name = NULL;  /* Buffer to hold C string */
     char *c_dest_name = NULL; /* Buffer to hold C string */
@@ -569,10 +675,13 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5lget_name_by_idx_c
- * Purpose:     Call  H5Lget_name_by_idx
- * Inputs:
+/****if* H5Lf/h5lget_name_by_idx_c
+ * NAME
+ *        h5lget_name_by_idx_c
+ * PURPOSE
+ *     Call  H5Lget_name_by_idx
+ * INPUTS
+ *
  *   loc_id      - File or group identifier specifying location of subject group
  *   group_name  - Name of subject group
  *   index_field - Index or field which determines the order
@@ -580,18 +689,22 @@ done:
  *   n           - Link for which to retrieve information
  *   size        - Maximum number of characters of link value to be returned.
  *   lapl_id     - Link access property list
- * Outputs:
+ * OUTPUTS
+ *
  *   name        - Buffer in which link value is returned
  *   size        - The size of the link name on success
- * Returns:      0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *      0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 10, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5lget_name_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f *group_namelen,
 		      int_f *index_field, int_f *order, hsize_t_f *n,
 		      size_t_f *size, _fcd name, hid_t_f *lapl_id)
+/******/
 {
     char *c_group_name = NULL;          /* Buffer to hold C string */
     char *c_name = NULL;          /* Buffer to hold C string */
@@ -631,34 +744,98 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        H5Lregistered_c
- * Purpose:     Call H5Lregistered
- * Inputs:
- *
- * Inputs:
- *     version         - Version number of this struct
- *     class_id        - Link class identifier
- *     comment         - Comment for debugging
- *     comment_len     - Comment for debugging
- *     create_func     - Callback during link creation
- *     create_func_len - length
- *    move_func        - Callback after moving link
- *    move_func_len    - length
- *     copy_func       - Callback after copying link
- *     copy_func_len   - length
- *     trav_func       - The main traversal function
- *     trav_func_len   - length
- *     del_func        - Callback for link deletion
- *     del_func_len    - length
- *     query_func      - Callback for queries
- *     query_func_len  - length
- *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              February 3, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+
+/* /\****if* H5Lf/h5lget_val_c */
+/*  * NAME */
+/*  *        h5lget_val_c */
+/*  * PURPOSE */
+/*  *     Call  H5Lget_val */
+/*  * INPUTS */
+/*  * */
+/*  *		link_loc_id - File or group identifier. */
+/*  *                link_name - Name of the link for which valrmation is being sought */
+/*  *             link_namelen - Name length */
+/*  *                     size - Maximum number of characters of link value to be returned. */
+/*  *                  lapl_id - Link access property list */
+/*  * OUTPUTS */
+/*  * */
+/*  *             linkval_buff - The buffer to hold the returned link value. */
+/*  * */
+/*  * RETURNS */
+/*  *     0 on success, -1 on failure */
+/*  * AUTHOR */
+/*  *  M. Scot Breitenfeld */
+/*  *              March 3, 2008 */
+/*  * HISTORY */
+/*  * N/A */
+/*  * SOURCE */
+/* *\/ */
+/* int_f */
+/* nh5lget_val_c (hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen, */
+/* 	       size_t_f *size, _fcd linkval_buff, */
+/* 	       hid_t_f *lapl_id) */
+/* { */
+/*     char *c_link_name = NULL;   /\* Buffer to hold C string *\/ */
+/*     int_f ret_value = 0;        /\* Return value *\/ */
+/*     void *c_linkval_buff = NULL; */
+
+/*     /\* */
+/*      * Convert FORTRAN name to C name */
+/*      *\/ */
+/*     if((c_link_name = HD5f2cstring(link_name, (size_t)*link_namelen)) == NULL) */
+/*       HGOTO_DONE(FAIL); */
+/*     /\* */
+/*      * Call H5Lval function. */
+/*      *\/ */
+/*     if(H5Lget_val((hid_t)*link_loc_id, c_link_name, &linkval_buff, (size_t)*size, (hid_t)*lapl_id) < 0) */
+/*       HGOTO_DONE(FAIL); */
+/*   /\* */
+/*    * Convert C name to FORTRAN  */
+/*    *\/ */
+/*     HD5packFstring(c_buf, _fcdtocp(buf), c_bufsize-1); */
+
+
+/* done: */
+/*     return ret_value; */
+/* } */
+
+
+/* /\****if* H5Lf/ */
+/*  * NAME */
+/*  *        H5Lregistered_c */
+/*  * PURPOSE */
+/*  *     Call H5Lregistered */
+/*  * INPUTS */
+/*  * */
+/*  * */
+/*  * INPUTS */
+/*  * */
+/*  *     version         - Version number of this struct */
+/*  *     class_id        - Link class identifier */
+/*  *     comment         - Comment for debugging */
+/*  *     comment_len     - Comment for debugging */
+/*  *     create_func     - Callback during link creation */
+/*  *     create_func_len - length */
+/*  *    move_func        - Callback after moving link */
+/*  *    move_func_len    - length */
+/*  *     copy_func       - Callback after copying link */
+/*  *     copy_func_len   - length */
+/*  *     trav_func       - The main traversal function */
+/*  *     trav_func_len   - length */
+/*  *     del_func        - Callback for link deletion */
+/*  *     del_func_len    - length */
+/*  *     query_func      - Callback for queries */
+/*  *     query_func_len  - length */
+/*  * */
+/*  * RETURNS */
+/*  *     0 on success, -1 on failure */
+/*  * AUTHOR */
+/*  *  M. Scot Breitenfeld */
+/*  *              February 3, 2008 */
+/*  * HISTORY */
+/*  * */
+/*  * SOURCE */
+/* *\/ */
 
 /* int_f */
 
@@ -681,7 +858,7 @@ done:
 
 /*   H5L_class_t class_t; */
 
-/*   int ret_value = 0; */
+/*   int_f ret_value = 0; */
 
 /*   /\* */
 /*    * Convert FORTRAN name to C name */
@@ -734,27 +911,34 @@ done:
 /*   return ret_value; */
 /* } */
 
-/*----------------------------------------------------------------------------
- * Name:        h5lget_val_c
- * Purpose:     Call H5Lget_val_c
- * Inputs:
+/****if* H5Lf/h5lget_val_c
+ * NAME
+ *        h5lget_val_c
+ * PURPOSE
+ *     Call H5Lget_val
+ * INPUTS
+ *
  *               link_loc_id - File or group identifier.
  *                 link_name - Link whose value is to be returned.
  *             link_name_len - length of link_name
  *                      size - Maximum number of characters of link value to be returned.
  *                  lapl_id  - List access property list identifier
- * Outputs:
+ * OUTPUTS
+ *
  *             linkval_buff  - The buffer to hold the returned link value.
  *
- * Returns:      0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *      0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              April 11, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5lget_val_c(hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen, size_t_f *size,
 	      void *linkval_buff, hid_t_f *lapl_id)
-{
+/******/
+{    
     char *c_link_name = NULL; /* Buffer to hold C string */
     int_f ret_value = 0;       /* Return value */
 
@@ -777,3 +961,112 @@ done:
     return ret_value;
 }
 
+/****if* H5Lf/h5literate_c
+ * NAME
+ *  h5literate_c
+ * PURPOSE
+ *  Calls H5Literate
+ * INPUTS
+ *
+ *     group_id - Identifier specifying subject group
+ *   index_type - Type of index which determines the order
+ *        order - Order within index
+ *          idx - Iteration position at which to start
+ *           op - Callback function passing data regarding the link to the calling application
+ *      op_data - User-defined pointer to data required by the application for its processing of the link
+ *
+ * OUTPUTS
+ *
+ *          idx - Position at which an interrupted iteration may be restarted
+ *
+ * RETURNS
+ *  >0 on success, 0< on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  July 8, 2008
+ * SOURCE
+*/
+int_f
+nh5literate_c(hid_t_f *group_id, int_f *index_type, int_f *order, hsize_t_f *idx, H5L_iterate_t op, void *op_data )
+/******/
+{
+  int_f ret_value = -1;  /* Return value */
+  herr_t func_ret_value; /* H5Linterate return value */
+  hsize_t idx_c = 0;
+
+  idx_c = (hsize_t)*idx;
+
+  /*
+   * Call H5Linterate
+   */
+
+  func_ret_value = H5Literate( (hid_t)*group_id, (H5_index_t)*index_type, (H5_iter_order_t)*order, &idx_c, op, op_data);
+
+  ret_value = (int_f)func_ret_value;
+  *idx = (hsize_t_f)idx_c;
+
+  return ret_value;
+}
+
+/****if* H5Lf/h5literate_by_name_c
+ * NAME
+ *        h5literate_by_name_c
+ * PURPOSE
+ *     Call H5Literate_by_name
+ * INPUTS
+ *
+ *     loc_id - Identifier specifying subject group
+ *         name - Name of subject group
+ *      namelen - Name length
+ *   index_type - Type of index which determines the order
+ *        order - Order within index
+ *          idx - Iteration position at which to start
+ *           op - Callback function passing data regarding the link to the calling application
+ *      op_data - User-defined pointer to data required by the application for its processing of the link
+ *      lapl_id - List access property list identifier
+ *
+ * OUTPUTS
+ *
+ *          idx - Position at which an interrupted iteration may be restarted
+ *
+ * RETURNS
+ *     >0 on success, 0< on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *              Augest 18, 2008
+ * SOURCE
+*/
+int_f
+nh5literate_by_name_c(hid_t_f *loc_id, _fcd name, size_t_f *namelen, int_f *index_type, int_f *order, hsize_t_f *idx, H5L_iterate_t op, void *op_data, hid_t_f *lapl_id)
+/******/
+{
+  int_f ret_value = -1;       /* Return value */
+  herr_t func_ret_value; /* H5Linterate return value */
+  hsize_t idx_c = 0;
+  char *c_name = NULL;        /* Buffer to hold C string */
+
+  /*
+   * Convert FORTRAN name to C name
+   */
+  if((c_name = HD5f2cstring(name, (size_t)*namelen)) == NULL)
+    return ret_value=-1;
+
+  idx_c = (hsize_t)*idx;
+
+  /*
+   * Call H5Linterate
+   */
+
+  func_ret_value = H5Literate_by_name((hid_t)*loc_id, c_name,(H5_index_t)*index_type,(H5_iter_order_t)*order,&idx_c,op,op_data,(hid_t)*lapl_id);
+
+  ret_value = (int_f)func_ret_value;
+  *idx = (hsize_t_f)idx_c;
+
+  if(c_name) HDfree(c_name);
+
+  return ret_value;
+}
+
+
+
+
diff --git a/fortran/src/H5Lff.f90 b/fortran/src/H5Lff.f90
index 8d30c20..8043d74 100644
--- a/fortran/src/H5Lff.f90
+++ b/fortran/src/H5Lff.f90
@@ -1,3 +1,14 @@
+!****h* ROBODoc/H5L
+!
+! NAME
+!  MODULE H5L
+!
+! PURPOSE
+!  This file contains Fortran interfaces for H5L functions. It includes
+!  all the functions that are independent on whether the Fortran 2003 functions
+!  are enabled or disabled.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,43 +24,48 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5L function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
 !
-! This file contains Fortran90 interfaces for H5L functions.
-!
+!*****
+
 MODULE H5L
 
   USE H5GLOBAL
 
 CONTAINS
 
-!----------------------------------------------------------------------
-! Name:		h5lcopy_f
 !
-! Purpose: 	Copies a link from one location to another.
+!****s* H5L/h5lcopy_f
+!
+! NAME
+!  h5lcopy_f
 !
-! Inputs:
-!     src_loc_id - Location identifier of the source link
-!       src_name - Name of the link to be copied
-!    dest_loc_id - Location identifier specifying the destination of the copy
-!      dest_name - Name to be assigned to the NEW copy
-!         loc_id - Identifier of the file or group containing the object
-!           name - Name of the link to delete
+! PURPOSE
+!  Copies a link from one location to another.
 !
-! Outputs:
-!         hdferr - error code:
-!			Success:  0
-!			Failure: -1
-! Optional parameters:
-!        lcpl_id - Link creation property list identifier
-!        lapl_id - Link access property list identifier
+! INPUTS
+!  src_loc_id 	 - Location identifier of the source link
+!  src_name 	 - Name of the link to be copied
+!  dest_loc_id 	 - Location identifier specifying the destination of the copy
+!  dest_name 	 - Name to be assigned to the NEW copy
+!  loc_id 	 - Identifier of the file or group containing the object
+!  name 	 - Name of the link to delete
 !
-! Programmer:	M.S. Breitenfeld
-!		February 27, 2008
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lcpl_id 	 - Link creation property list identifier
+!  lapl_id 	 - Link access property list identifier
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 27, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
+! SOURCE
   SUBROUTINE h5lcopy_f(src_loc_id, src_name, dest_loc_id, dest_name, hdferr, &
        lcpl_id, lapl_id)
     IMPLICIT NONE
@@ -62,16 +78,13 @@ CONTAINS
                                           ! 0 on success and -1 on failure
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Link creation property list identifier
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier
-
+!*****
     INTEGER(HID_T) :: lcpl_id_default
     INTEGER(HID_T) :: lapl_id_default
 
     INTEGER(SIZE_T) :: src_namelen
     INTEGER(SIZE_T) :: dest_namelen
 
-
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5lcopy_c(src_loc_id, src_name, src_namelen, dest_loc_id, dest_name, dest_namelen, &
             lcpl_id_default, lapl_id_default)
@@ -106,29 +119,29 @@ CONTAINS
 
   END SUBROUTINE h5lcopy_f
 
-!----------------------------------------------------------------------
-! Name:		h5ldelete_f
 !
-! Purpose: 	Removes a link from a group.
+!****s* H5L/h5ldelete_f
 !
-! Inputs:
-!         loc_id   - Identifier of the file or group containing the object
-!         name     - Name of the link to delete
+! NAME
+!  h5ldelete_f
 !
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!         lapl_id  - Link access property list identifier
+! PURPOSE
+!  Removes a link from a group.
 !
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
+! INPUTS
+!  loc_id 	 - Identifier of the file or group containing the object
+!  name 	 - Name of the link to delete
 !
-! Modifications:
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Link access property list identifier
 !
-! Comment:
-!----------------------------------------------------------------------
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+!
+! SOURCE
   SUBROUTINE h5ldelete_f(loc_id, name, hdferr, lapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id  ! Identifier of the file or group containing the object
@@ -136,12 +149,10 @@ CONTAINS
     INTEGER, INTENT(OUT) :: hdferr        ! Error code:
                                           ! 0 on success and -1 on failure
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier
+!*****
     INTEGER(HID_T) :: lapl_id_default
     INTEGER(SIZE_T) :: namelen
 
-
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5ldelete_c(loc_id, name, namelen, lapl_id_default)
          USE H5GLOBAL
@@ -165,48 +176,46 @@ CONTAINS
 
   END SUBROUTINE h5ldelete_f
 
-!----------------------------------------------------------------------
-! Name:		H5Lcreate_soft_f
 !
-! Purpose: 	Creates a soft link to an object.
+!****s* H5L/H5Lcreate_soft_f
 !
-! Inputs:
-!       target_path - Path to the target object, which is not required to exist.
-!       link_loc_id - The file or group identifier for the new link.
-!       link_name   - The name of the new link.
+! NAME
+!  H5Lcreate_soft_f
 !
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!       lcpl_id     - Link creation property list identifier.
-!       lapl_id     - Link access property list identifier.
+! PURPOSE
+!  Creates a soft link to an object.
 !
-! Programmer:	M.S. Breitenfeld
-!		February 20, 2008
+! INPUTS
+!  target_path 	 - Path to the target object, which is not required to exist.
+!  link_loc_id 	 - The file or group identifier for the new link.
+!  link_name 	 - The name of the new link.
 !
-! Modifications:
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lcpl_id 	 - Link creation property list identifier.
+!  lapl_id 	 - Link access property list identifier.
 !
-! Comment:
-!----------------------------------------------------------------------
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 20, 2008
+!
+! SOURCE
   SUBROUTINE h5lcreate_soft_f(target_path, link_loc_id, link_name, hdferr, lcpl_id, lapl_id)
     IMPLICIT NONE
-    CHARACTER(LEN=*), INTENT(IN) :: target_path     ! Path to the target object, which is not required to exist.
+    CHARACTER(LEN=*), INTENT(IN) :: target_path   ! Path to the target object, which is not required to exist.
     INTEGER(HID_T), INTENT(IN) :: link_loc_id     ! The file or group identifier for the new link.
-    CHARACTER(LEN=*), INTENT(IN) :: link_name       ! The name of the new link.
-    INTEGER, INTENT(OUT) :: hdferr        ! Error code:
-                                          ! 0 on success and -1 on failure
+    CHARACTER(LEN=*), INTENT(IN) :: link_name     ! The name of the new link.
+    INTEGER, INTENT(OUT) :: hdferr                ! Error code:
+                                                  !   0 on success and -1 on failure
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Link creation property list identifier.
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier.
-
+!*****
     INTEGER(HID_T) :: lcpl_id_default
     INTEGER(HID_T) :: lapl_id_default
     INTEGER(SIZE_T) :: target_path_len
     INTEGER(SIZE_T) :: link_name_len
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5lcreate_soft_c(target_path, target_path_len, &
             link_loc_id, &
@@ -242,33 +251,33 @@ CONTAINS
 
   END SUBROUTINE h5lcreate_soft_f
 
-!----------------------------------------------------------------------
-! Name:		H5Lcreate_hard_f
 !
-! Purpose: 	Creates a hard link to an object.
+!****s* H5L/H5Lcreate_hard_f
 !
-! Inputs:
+! NAME
+!  H5Lcreate_hard_f
 !
-!    obj_loc_id - The file or group identifier for the target object.
-!      obj_name - Name of the target object, which must already exist.
-!   link_loc_id - The file or group identifier for the new link.
-!     link_name - The name of the new link.
+! PURPOSE
+!  Creates a hard link to an object.
 !
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!       lcpl_id     - Link creation property list identifier.
-!       lapl_id     - Link access property list identifier.
+! INPUTS
 !
-! Programmer:	M.S. Breitenfeld
-!		February 27, 2008
+!  obj_loc_id 	 - The file or group identifier for the target object.
+!  obj_name 	 - Name of the target object, which must already exist.
+!  link_loc_id 	 - The file or group identifier for the new link.
+!  link_name 	 - The name of the new link.
 !
-! Modifications:
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lcpl_id 	 - Link creation property list identifier.
+!  lapl_id 	 - Link access property list identifier.
 !
-! Comment:
-!----------------------------------------------------------------------
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 27, 2008
+!
+! SOURCE
   SUBROUTINE h5lcreate_hard_f(obj_loc_id, obj_name, link_loc_id, link_name, hdferr, lcpl_id, lapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: obj_loc_id  ! The file or group identifier for the target object.
@@ -281,15 +290,13 @@ CONTAINS
 
     INTEGER(HID_T), OPTIONAL, INTENT(IN) ::   lcpl_id         ! Link creation property list identifier.
     INTEGER(HID_T), OPTIONAL, INTENT(IN) ::   lapl_id         ! Link access property list identifier.
-
+!*****
     INTEGER(HID_T) :: lcpl_id_default
     INTEGER(HID_T) :: lapl_id_default
 
     INTEGER(SIZE_T) :: obj_namelen
     INTEGER(SIZE_T) :: link_namelen
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5lcreate_hard_c(obj_loc_id, obj_name, obj_namelen, &
             link_loc_id, link_name, link_namelen, lcpl_id_default, lapl_id_default)
@@ -322,37 +329,36 @@ CONTAINS
 
   END SUBROUTINE h5lcreate_hard_f
 
-!----------------------------------------------------------------------
-! Name:		H5Lcreate_external_f
 !
-! Purpose: 	Creates a soft link to an object in a different file.
+!****s* H5L/H5Lcreate_external_f
 !
-! Inputs:
+! NAME
+!  H5Lcreate_external_f
 !
-!    file_name - Name of the file containing the target object. Neither the file nor the target object is
-!                required to exist. May be the file the link is being created in.
-!     obj_name - Path within the target file to the target object.
-!  link_loc_id - The file or group identifier for the new link.
-!    link_name - The name of the new link.
+! PURPOSE
+!  Creates a soft link to an object in a different file.
 !
-! Outputs:
-!		hdferr:	- error code
-!  		            Success:  0
-!		            Failure: -1
-! Optional parameters:
-!       lcpl_id     - Link creation property list identifier.
-!       lapl_id     - Link access property list identifier.
+! INPUTS
 !
-! Programmer:	M.S. Breitenfeld
-!		February 27, 2008
+!  file_name 	 - Name of the file containing the target object. Neither the file nor the target object is
+!  required to exist. May be the file the link is being created in.
+!  obj_name 	 - Path within the target file to the target object.
+!  link_loc_id 	 - The file or group identifier for the new link.
+!  link_name 	 - The name of the new link.
 !
-! Modifications:
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lcpl_id 	 - Link creation property list identifier.
+!  lapl_id 	 - Link access property list identifier.
 !
-! Comment:
-!----------------------------------------------------------------------
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 27, 2008
+! SOURCE
   SUBROUTINE h5lcreate_external_f(file_name, obj_name, link_loc_id, link_name, hdferr, lcpl_id, lapl_id)
     IMPLICIT NONE
-    CHARACTER(LEN=*), INTENT(IN) :: file_name  ! Name of the file containing the target object. Neither
+    CHARACTER(LEN=*), INTENT(IN) :: file_name ! Name of the file containing the target object. Neither
                                               ! the file nor the target object is required to exist.
                                               ! May be the file the link is being created in.
     CHARACTER(LEN=*), INTENT(IN) :: obj_name  ! Name of the target object, which must already exist.
@@ -364,7 +370,7 @@ CONTAINS
 
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Link creation property list identifier.
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier.
-
+!*****
     INTEGER(HID_T) :: lcpl_id_default
     INTEGER(HID_T) :: lapl_id_default
 
@@ -372,8 +378,6 @@ CONTAINS
     INTEGER(SIZE_T) :: obj_namelen
     INTEGER(SIZE_T) :: link_namelen
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5lcreate_external_c(file_name, file_namelen, obj_name, obj_namelen, &
             link_loc_id, link_name, link_namelen, lcpl_id_default, lapl_id_default)
@@ -408,42 +412,40 @@ CONTAINS
 
   END SUBROUTINE h5lcreate_external_f
 
-!----------------------------------------------------------------------
-! Name:		h5ldelete_by_idx_f
-!
-! Purpose:  	Removes the nth link in a group.
-! Inputs:
-!		loc_id     - File or group identifier specifying location of subject group
-!               group_name - Name of subject group
-!               index_field   - Type of index; Possible values are:
-!
-!                  H5_INDEX_UNKNOWN_F = -1  - Unknown index type
-!                  H5_INDEX_NAME_F          - Index on names
-!                  H5_INDEX_CRT_ORDER_F     - Index on creation order
-!                  H5_INDEX_N_F	            - Number of indices defined
-!
-!               order - Order within field or index; Possible values are:
-!
-!                  H5_ITER_UNKNOWN_F   - Unknown order
-!                  H5_ITER_INC_F       - Increasing order
-!                  H5_ITER_DEC_F       - Decreasing order
-!                  H5_ITER_NATIVE_F    - No particular order, whatever is fastest
-!                  H5_ITER_N_F	       - Number of iteration orders
-!
-!               n           - Link for which to retrieve information
-! Outputs:
-!		hdferr:     - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!               lapl_id    - Link access property list
 !
-! Programmer:	M.S. Breitenfeld
-!		February 29, 2008
-!
-! Modifications: N/A
-!
-!----------------------------------------------------------------------
+!****s* H5L/h5ldelete_by_idx_f
+!
+! NAME
+!  h5ldelete_by_idx_f
+!
+! PURPOSE
+!  Removes the nth link in a group.
+! INPUTS
+!  loc_id 	 - File or group identifier specifying location of subject group
+!  group_name 	 - Name of subject group
+!  index_field 	 - Type of index; Possible values are:
+!                    H5_INDEX_UNKNOWN_F = -1  - Unknown index type
+!                    H5_INDEX_NAME_F 	      - Index on names
+!                    H5_INDEX_CRT_ORDER_F     - Index on creation order
+!                    H5_INDEX_N_F 	      - Number of indices defined
+!
+!  order 	 - Order within field or index; Possible values are:
+!                    H5_ITER_UNKNOWN_F 	 - Unknown order
+!                    H5_ITER_INC_F 	 - Increasing order
+!                    H5_ITER_DEC_F 	 - Decreasing order
+!                    H5_ITER_NATIVE_F 	 - No particular order, whatever is fastest
+!                    H5_ITER_N_F 	 - Number of iteration orders
+!
+!  n 	         - Link for which to retrieve information
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Link access property list
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 29, 2008
+! SOURCE
   SUBROUTINE h5ldelete_by_idx_f(loc_id, group_name, index_field, order, n, hdferr, lapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id       ! Identifer for object to which attribute is attached
@@ -464,12 +466,10 @@ CONTAINS
     INTEGER, INTENT(OUT) :: hdferr         ! Error code:
                                            ! 0 on success and -1 on failure
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id     ! Link access property list
-
+!*****
     INTEGER(HID_T) :: lapl_id_default
     INTEGER(SIZE_T) :: group_namelen
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5ldelete_by_idx_c(loc_id, group_name, group_namelen, index_field, order, n, lapl_id_default)
          USE H5GLOBAL
@@ -495,29 +495,30 @@ CONTAINS
 
   END SUBROUTINE h5ldelete_by_idx_f
 
-!----------------------------------------------------------------------
-! Name:	        H5Lexists_f
 !
-! Purpose:  	Check if a link with a particular name exists in a group.
+!****s* H5L/H5Lexists_f
+!
+! NAME
+!  H5Lexists_f
 !
-! Inputs:
-!      loc_id - Identifier of the file or group to query.
-!        name - Link name to check
+! PURPOSE
+!  Check if a link with a particular name exists in a group.
 !
-! Outputs:
-!   link_exists  - link exists status (.TRUE.,.FALSE.)
-!        hdferr  - error code
-!	              Success:  0
-!		      Failure: -1
-! Optional parameters:
-!	 lapl_id - Link access property list identifier.
+! INPUTS
+!  loc_id 	 - Identifier of the file or group to query.
+!  name 	 - Link name to check
 !
-! Programmer:	M. S. Breitenfeld
-!		February 29, 2008
+! OUTPUTS
+!  link_exists 	 - link exists status (.TRUE.,.FALSE.)
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Link access property list identifier.
 !
-! Modifications:  N/A
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 29, 2008
 !
-!----------------------------------------------------------------------
+! SOURCE
   SUBROUTINE h5lexists_f(loc_id, name, link_exists, hdferr, lapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id  ! Identifier of the file or group to query.
@@ -527,12 +528,11 @@ CONTAINS
                                           ! 0 on success and -1 on failure
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id
                                           ! Link access property list identifier.
+!*****
     INTEGER :: link_exists_c
     INTEGER(HID_T) :: lapl_id_default
     INTEGER(SIZE_T)  :: namelen
-!
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+
     INTERFACE
        INTEGER FUNCTION h5lexists_c(loc_id, name, namelen, lapl_id_default, link_exists_c)
          USE H5GLOBAL
@@ -561,46 +561,50 @@ CONTAINS
 
   END SUBROUTINE h5lexists_f
 
-!----------------------------------------------------------------------
-! Name:		h5lget_info_f
-!
-! Purpose:  	Returns information about a link.
-!
-! Inputs:
-!		link_loc_id - File or group identifier.
-!               link_name - Name of the link for which information is being sought
-!
-! Outputs:  NOTE: In C these are contained in the structure H5L_info_t
-!
-!              cset - indicates the character set used for link’s name.
-!      corder - specifies the link’s creation order position.
-!f_corder_valid - indicates whether the value in corder is valid.
-!         link_type -  specifies the link class:
-!     	                H5L_TYPE_HARD_F      - Hard link
-!     	                H5L_TYPE_SOFT_F      - Soft link
-!     	                H5L_TYPE_EXTERNAL_F  - External link
-!     	                H5L_TYPE_ERROR_F    - Error
-!           address - If the link is a hard link, address specifies the file address that the link points to
-!          val_size - If the link is a symbolic link, val_size will be the length of the link value, e.g.,
-!                     the length of the name of the pointed-to object with a null terminator.
-!            hdferr - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!      lapl_id - Link access property list
-!
-! Programmer:	M. S. Breitenfeld
-!		February 29, 2008
-!
-! Modifications:
+!
+!****s* H5L/h5lget_info_f
+!
+! NAME
+!  h5lget_info_f
+!
+! PURPOSE
+!  Returns information about a link.
+!
+! INPUTS
+!  link_loc_id 	 - File or group identifier.
+!  link_name 	 - Name of the link for which information is being sought
+!
+! OUTPUTS  
+!            NOTE: In C these are contained in the structure H5L_info_t
+!
+!  cset 	 - indicates the character set used for link’s name.
+!  corder 	 - specifies the link’s creation order position.
+!  corder_valid  - indicates whether the value in corder is valid.
+!  link_type 	 - specifies the link class:
+!                    H5L_TYPE_HARD_F 	 - Hard link
+!                    H5L_TYPE_SOFT_F 	 - Soft link
+!                    H5L_TYPE_EXTERNAL_F - External link
+!                    H5L_TYPE_ERROR_ F   - Error
+!  address 	 - If the link is a hard link, address specifies the file address that the link points to
+!  val_size 	 - If the link is a symbolic link, val_size will be the length of the link value, e.g., 
+!                  the length of the name of the pointed-to object with a null terminator. 
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Link access property list
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 29, 2008
+!
+! HISTORY
 !   Changed the link_type names to match those in C (bug 1720) from,
 !   H5L_LINK_HARD_F, H5L_LINK_SOFT_F,H5L_LINK_EXTERNAL_F,H5L_LINK_ERROR_F
 !   to
 !   H5L_TYPE_HARD_F, H5L_TYPE_SOFT_F,H5L_TYPE_EXTERNAL_F,H5L_TYPE_ERROR_F
 !   MSB January 8, 2010.
 !
-!----------------------------------------------------------------------
-
+! SOURCE
   SUBROUTINE h5lget_info_f(link_loc_id, link_name, &
        cset, corder, f_corder_valid, link_type, address, val_size, &
        hdferr, lapl_id)
@@ -609,7 +613,7 @@ CONTAINS
     INTEGER(HID_T), INTENT(IN) :: link_loc_id ! File or group identifier.
     CHARACTER(LEN=*), INTENT(IN) :: link_name ! Name of the link for which information is being sought
 
-! Outputs:  NOTE: In C these are contained in the structure H5L_info_t
+! OUTPUTS  NOTE: In C these are contained in the structure H5L_info_t
     INTEGER, INTENT(OUT) :: cset ! Indicates the character set used for the link’s name.
     INTEGER, INTENT(OUT) :: corder ! Specifies the link’s creation order position.
     LOGICAL, INTENT(OUT) :: f_corder_valid ! Indicates whether the value in corder is valid.
@@ -618,19 +622,17 @@ CONTAINS
      	                              !  H5L_TYPE_SOFT_F      - Soft link
      	                              !  H5L_TYPE_EXTERNAL_F  - External link
      	                              !  H5L_TYPE_ERROR _F    - Error
-    INTEGER(HADDR_T), INTENT(OUT) :: address  ! If the link is a hard link, address specifies the file address that the link points to
-    INTEGER(SIZE_T), INTENT(OUT) :: val_size ! If the link is a symbolic link, val_size will be the length of the link value, e.g.,
-                                             ! the length of the name of the pointed-to object with a null terminator.
+    INTEGER(HADDR_T), INTENT(OUT) :: address ! If the link is a hard link, address specifies the file address that the link points to
+    INTEGER(SIZE_T), INTENT(OUT) :: val_size ! If the link is a symbolic link, val_size will be the length of the link value, e.g., 
+                                             ! the length of the name of the pointed-to object with a null terminator. 
     INTEGER, INTENT(OUT) :: hdferr       ! Error code:
                                          ! 0 on success and -1 on failure
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id  ! Link access property list
-
+!*****
     INTEGER(SIZE_T) :: link_namelen
     INTEGER(HID_T) :: lapl_id_default
     INTEGER :: corder_valid
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5lget_info_c(link_loc_id, link_name, link_namelen, &
             cset, corder, corder_valid, link_type, address, val_size, &
@@ -668,46 +670,51 @@ CONTAINS
 
   END SUBROUTINE h5lget_info_f
 
-!----------------------------------------------------------------------
-! Name:	   h5lget_info_by_idx_f
-!
-! Purpose:  Retrieves metadata for a link in a group, according to the order within a field or index.
-!
-! Inputs:
-!	loc_id - File or group identifier specifying location of subject group
-!   group_name - Name of subject group
-!  index_field - Index or field which determines the order
-!        order - Order within field or index
-!            n - Link for which to retrieve information
-!
-! Outputs:  NOTE: In C these are defined as a structure: H5L_info_t
-!    corder_valid   - indicates whether the creation order data is valid for this attribute
-!    corder         - is a positive integer containing the creation order of the attribute
-!    cset           - indicates the character set used for the attribute’s name
-!    address        - If the link is a hard link, address specifies the file address that the link points to
-!    val_size       - If the link is a symbolic link, val_size will be the length of the link value, e.g.,
-!                     the length of the name of the pointed-to object with a null terminator.
-!    hdferr         - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!      lapl_id - Link access property list
-!
-! Programmer: M.S. Breitenfeld
-!	      February 29, 2008
-!
-! Modifications:
+!
+!****s* H5L/h5lget_info_by_idx_f
+!
+! NAME
+!  h5lget_info_by_idx_f
+!
+! PURPOSE
+!  Retrieves metadata for a link in a group, according to the order within a field or index.
+!
+! INPUTS
+!  loc_id 	 - File or group identifier specifying location of subject group
+!  group_name 	 - Name of subject group
+!  index_field 	 - Index or field which determines the order
+!  order 	 - Order within field or index
+!  n 	         - Link for which to retrieve information
+!
+! OUTPUTS  
+!            NOTE: In C these are defined as a structure: H5L_info_t
+!  corder_valid  - Indicates whether the creation order data is valid for this attribute
+!  corder 	 - Is a positive integer containing the creation order of the attribute
+!  cset 	 - Indicates the character set used for the attribute’s name 
+! address        - If the link is a hard link, address specifies the file address that the link points to
+! val_size       - If the link is a symbolic link, val_size will be the length of the link value, e.g., 
+!                  the length of the name of the pointed-to object with a null terminator.
+! hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Link access property list
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 29, 2008
+!
+! HISTORY
 !   Changed the link_type names to match those in C (bug 1720) from,
 !   H5L_LINK_HARD_F, H5L_LINK_SOFT_F,H5L_LINK_EXTERNAL_F,H5L_LINK_ERROR_F
 !   to
 !   H5L_TYPE_HARD_F, H5L_TYPE_SOFT_F,H5L_TYPE_EXTERNAL_F,H5L_TYPE_ERROR_F
-!   MSB January 8, 2010.
+!   MSB January 8, 2010.  
 !
-!----------------------------------------------------------------------
+! SOURCE
   SUBROUTINE h5lget_info_by_idx_f(loc_id, group_name, index_field, order, n, &
        link_type, f_corder_valid, corder, cset, address, val_size, hdferr, lapl_id)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: loc_id  ! File or group identifier specifying location of subject group
+    INTEGER(HID_T), INTENT(IN) :: loc_id       ! File or group identifier specifying location of subject group  
     CHARACTER(LEN=*), INTENT(IN) :: group_name ! Name of subject group
     INTEGER, INTENT(IN) :: index_field  ! Index or field which determines the order
                                         !    H5_INDEX_UNKNOWN_F   - Unknown index type
@@ -725,15 +732,16 @@ CONTAINS
      	                              !  H5L_TYPE_SOFT_F      - Soft link
      	                              !  H5L_TYPE_EXTERNAL_F  - External link
      	                              !  H5L_TYPE_ERROR _F    - Error
-    LOGICAL, INTENT(OUT) :: f_corder_valid ! Indicates whether the creation order data is valid for this attribute
-    INTEGER, INTENT(OUT) :: corder ! Is a positive integer containing the creation order of the attribute
-    INTEGER, INTENT(OUT) :: cset ! Indicates the character set used for the attribute’s name
+    LOGICAL, INTENT(OUT) :: f_corder_valid ! Indicates whether the creation order data is valid for this attribute 
+    INTEGER, INTENT(OUT) :: corder         ! Is a positive integer containing the creation order of the attribute
+    INTEGER, INTENT(OUT) :: cset           ! Indicates the character set used for the attribute’s name
     INTEGER(HADDR_T), INTENT(OUT) :: address  ! If the link is a hard link, address specifies the file address that the link points to
-    INTEGER(SIZE_T), INTENT(OUT) :: val_size  ! If the link is a symbolic link, val_size will be the length of the link value, e.g.,
-                                              ! the length of the name of the pointed-to object with a null terminator.
+    INTEGER(SIZE_T), INTENT(OUT) :: val_size  ! If the link is a symbolic link, val_size will be the length of the link value, e.g., 
+                                              ! the length of the name of the pointed-to object with a null terminator. 
     INTEGER, INTENT(OUT) :: hdferr       ! Error code:
                                          ! 0 on success and -1 on failure
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id  ! Link access property list
+!*****
     INTEGER :: corder_valid
     INTEGER(SIZE_T)  :: group_namelen
     INTEGER(HID_T) :: lapl_id_default
@@ -755,7 +763,7 @@ CONTAINS
          INTEGER, INTENT(IN) :: order
          INTEGER(HSIZE_T), INTENT(IN) :: n
          INTEGER, INTENT(OUT) :: link_type
-         INTEGER :: corder_valid
+         INTEGER :: corder_valid 
          INTEGER, INTENT(OUT) :: corder
          INTEGER, INTENT(OUT) :: cset
          INTEGER(HADDR_T), INTENT(OUT) :: address
@@ -777,29 +785,30 @@ CONTAINS
 
   END SUBROUTINE h5lget_info_by_idx_f
 
-!----------------------------------------------------------------------
-! Name:	   h5lis_registered_f
 !
-! Purpose:  Determines whether a class of user-defined links is registered.
+!****s* H5L/h5lis_registered_f
 !
-! Inputs:
-!      link_cls_id - User-defined link class identifier
+! NAME
+!  h5lis_registered_f
 !
-! Outputs:
-!       registered - .TRUE. - if the link class has been registered
-!                    .FALSE. - if it is unregistered
-!           hdferr - Error code
-!		       Success:  0
-!	               Failure: -1
-! Optional parameters:
-!                      None
+! PURPOSE
+!  Determines whether a class of user-defined links is registered.
 !
-! Programmer: M.S. Breitenfeld
-!	      February 29, 2008
+! INPUTS
+!  link_cls_id 	 - User-defined link class identifier
 !
-! Modifications:  N/A
+! OUTPUTS
+!  registered 	 - .TRUE.  - if the link class has been registered
+!                  .FALSE. - if it is unregistered
+!  hdferr 	 - Error code
+!  Success:  0
+!  Failure: -1
 !
-!----------------------------------------------------------------------
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 29, 2008
+!
+! SOURCE
   SUBROUTINE h5lis_registered_f(link_cls_id, registered, hdferr)
     IMPLICIT NONE
     INTEGER, INTENT(IN) :: link_cls_id  ! User-defined link class identifier
@@ -807,9 +816,7 @@ CONTAINS
                                         ! .FALSE. - if it is unregistered
     INTEGER, INTENT(OUT) :: hdferr      ! Error code:
                                         ! 0 on success and -1 on failure
-!
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
     INTERFACE
        INTEGER FUNCTION h5lis_registered_c(link_cls_id)
          USE H5GLOBAL
@@ -830,31 +837,34 @@ CONTAINS
 
   END SUBROUTINE h5lis_registered_f
 
-!----------------------------------------------------------------------
-! Name:	   h5lmove_f
 !
-! Purpose:  Renames a link within an HDF5 file.
+!****s* H5L/h5lmove_f
+!
+! NAME
+!  h5lmove_f
+!
+! PURPOSE
+!  Renames a link within an HDF5 file.
 !
-! Inputs:
-!    src_loc_id  - Original file or group identifier.
-!    src_name    - Original link name.
-!    dest_loc_id - Destination file or group identifier.
-!    dest_name   - NEW link name.
+! INPUTS
+!  src_loc_id 	 - Original file or group identifier.
+!  src_name 	 - Original link name.
+!  dest_loc_id 	 - Destination file or group identifier.
+!  dest_name 	 - NEW link name.
 !
-! Outputs:
-!         hdferr - Error code
-!		     Success:  0
-!	             Failure: -1
-! Optional parameters:
-!    lcpl_id  - Link creation property list identifier to be associated WITH the NEW link.
-!    lapl_id  - Link access property list identifier to be associated WITH the NEW link.
+! OUTPUTS
+!  hdferr 	 - Error code:
+!                   0 on success and -1 on failure
 !
-! Programmer: M.S. Breitenfeld
-!	      March 3, 2008
+! OPTIONAL PARAMETERS
+!  lcpl_id 	 - Link creation property list identifier to be associated WITH the NEW link.
+!  lapl_id 	 - Link access property list identifier to be associated WITH the NEW link.
 !
-! Modifications:  N/A
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 3, 2008
 !
-!----------------------------------------------------------------------
+! SOURCE
   SUBROUTINE h5lmove_f(src_loc_id, src_name, dest_loc_id, dest_name, hdferr, lcpl_id, lapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: src_loc_id  ! Original file or group identifier.
@@ -867,16 +877,13 @@ CONTAINS
                                                     ! to be associated WITH the NEW link.
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link access property list identifier
                                                     ! to be associated WITH the NEW link.
-
+!*****
     INTEGER(SIZE_T) :: src_namelen
     INTEGER(SIZE_T) :: dest_namelen
 
     INTEGER(HID_T) :: lcpl_id_default
     INTEGER(HID_T) :: lapl_id_default
 
-!
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5lmove_c(src_loc_id, src_name, src_namelen, dest_loc_id, &
             dest_name, dest_namelen, lcpl_id_default, lapl_id_default)
@@ -886,6 +893,7 @@ CONTAINS
          !DEC$ENDIF
          !DEC$ATTRIBUTES reference :: src_name, dest_name
          INTEGER(HID_T), INTENT(IN) :: src_loc_id
+
          CHARACTER(LEN=*), INTENT(IN) :: src_name
          INTEGER(SIZE_T) :: src_namelen
          INTEGER(HID_T), INTENT(IN) :: dest_loc_id
@@ -911,34 +919,35 @@ CONTAINS
 
   END SUBROUTINE h5lmove_f
 
-!----------------------------------------------------------------------
-! Name:		h5lget_name_by_idx_f
 !
-! Purpose:      Retrieves name of the nth link in a group, according to the order within a specified field or index.
+!****s* H5L/h5lget_name_by_idx_f
+!
+! NAME
+!  h5lget_name_by_idx_f
 !
-! Inputs:
-!   loc_id      - File or group identifier specifying location of subject group
-!   group_name  - Name of subject group
-!   index_field - Index or field which determines the order
-!   order       - Order within field or index
-!   n           - Link for which to retrieve information
+! PURPOSE
+!  Retrieves name of the nth link in a group, according to the order within a specified field or index.
 !
-! Outputs:
-!   name        - Buffer in which link value is returned
-!   hdferr      - error code
-!		      Success:  0
-!		      Failure: -1
+! INPUTS
+!  loc_id 	 - File or group identifier specifying location of subject group
+!  group_name 	 - Name of subject group
+!  index_field 	 - Index or field which determines the order
+!  order 	 - Order within field or index
+!  n 	         - Link for which to retrieve information
 !
-! Optional parameters:
-!    lapl_id    - List access property list identifier.
-!    size       - Maximum number of characters of link value to be returned.
+! OUTPUTS
+!  name 	 - Buffer in which link value is returned
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Programmer:	M. S. Breitenfeld
-!		March 10, 2008
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - List access property list identifier.
+!  size 	 - Maximum number of characters of link value to be returned.
 !
-! Modifications:  N/A
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 10, 2008
 !
-!----------------------------------------------------------------------
+! SOURCE
   SUBROUTINE h5lget_name_by_idx_f(loc_id, group_name, index_field, order, n, &
         name, hdferr, size, lapl_id)
     IMPLICIT NONE
@@ -958,16 +967,13 @@ CONTAINS
     CHARACTER(LEN=*), INTENT(OUT) :: name ! Buffer in which link value is returned
     INTEGER, INTENT(OUT) :: hdferr        ! Error code:
                                           ! 0 on success and -1 on failure
-
+!*****
     INTEGER(SIZE_T)  :: group_namelen
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id  ! Link access property list
     INTEGER(HID_T) :: lapl_id_default
     INTEGER(SIZE_T), OPTIONAL, INTENT(OUT) :: size   ! Indicates the size, in the number of characters, of the link
     INTEGER(SIZE_T) :: size_default
 
-
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5lget_name_by_idx_c(loc_id, group_name, group_namelen, index_field, order, n, &
              size_default, name, lapl_id_default)
@@ -977,6 +983,7 @@ CONTAINS
          !DEC$ENDIF
          !DEC$ATTRIBUTES reference :: group_name, name
          INTEGER(HID_T), INTENT(IN) :: loc_id
+
          CHARACTER(LEN=*), INTENT(IN) :: group_name
          INTEGER(SIZE_T)  :: group_namelen
          INTEGER, INTENT(IN) :: index_field
@@ -1004,24 +1011,27 @@ CONTAINS
   END SUBROUTINE h5lget_name_by_idx_f
 
 
-! HAS PROBLEM WITH void pointer in C
-
-!!$!----------------------------------------------------------------------
-!!$! Name:		h5lget_val_by_idx_f
+!  HAS PROBLEM WITH void pointer in C
 !!$!
-!!$! Purpose:      Returns the link value of a link, according to the order of
+!!$!****s* H5L/
+!!$!
+!!$! NAME
+!!$!		h5lget_val_by_idx_f
+!!$!
+!!$! PURPOSE
+!!$!      Returns the link value of a link, according to the order of
 !!$!               an index.  For symbolic links, this is the path to which the
 !!$!               link points, including the null terminator.  For user-defined
 !!$!               links, it is the link buffer.
-!!$! Inputs:
+!!$! INPUTS
 !!$!   loc_id      - File or group identifier specifying location of subject group
 !!$!   group_name  - Name of subject group
 !!$!   index_field - Index or field which determines the order
 !!$!   order       - Order within field or index
 !!$!   n           - Link for which to retrieve information
-!!$!   size       - Maximum number of characters of link value to be returned.
+!!$!   size        - Maximum number of characters of link value to be returned.
 !!$!
-!!$! Outputs:  NOTE: In C these are defined as a structure: H5L_info_t
+!!$! OUTPUTS  NOTE: In C these are defined as a structure: H5L_info_t
 !!$!    corder_valid   - indicates whether the creation order data is valid for this attribute
 !!$!    corder         - is a positive integer containing the creation order of the attribute
 !!$!    cset           - indicates the character set used for the attribute’s name
@@ -1029,15 +1039,17 @@ CONTAINS
 !!$!    hdferr         - error code
 !!$!				 Success:  0
 !!$!				 Failure: -1
-!!$! Optional parameters:
+!!$! OPTIONAL PARAMETERS
 !!$!    lapl_id      - List access property list identifier.
 !!$!
-!!$! Programmer:	M. S. Breitenfeld
+!!$! AUTHOR
+!!$!	M. Scot Breitenfeld
 !!$!		March 3, 2008
 !!$!
-!!$! Modifications:  N/A
+!!$! HISTORY  N/A
 !!$!
-!!$!----------------------------------------------------------------------
+!!$!
+!!$! SOURCE
 !!$  SUBROUTINE h5lget_val_by_idx_f(loc_id, group_name, index_field, order, n, &
 !!$       f_corder_valid, corder, cset, data_size, hdferr, lapl_id)
 !!$    IMPLICIT NONE
@@ -1065,8 +1077,6 @@ CONTAINS
 !!$    INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id  ! Link access property list
 !!$    INTEGER(HID_T) :: lapl_id_default
 !!$
-!!$!  MS FORTRAN needs explicit interface for C functions called here.
-!!$!
 !!$    INTERFACE
 !!$       INTEGER FUNCTION h5lget_val_by_idx_c(loc_id, group_name, group_namelen, index_field, order, n, &
 !!$            corder_valid, corder, cset, data_size, lapl_id_default)
@@ -1101,33 +1111,32 @@ CONTAINS
 !!$
 !!$  END SUBROUTINE h5lget_val_by_idx_f
 
-
-
-!----------------------------------------------------------------------
-! Name:		h5lget_val_f
-!
-! Purpose:  	Returns the value of a symbolic link.
-!
-! Inputs:
-!   link_loc_id  - File or group identifier.
-!   link_name    - Link whose value is to be returned.
-!   size         - Maximum number of characters of link value to be returned.
-!
-! Outputs:
-!   linkval_buff - The buffer to hold the returned link value.
-!         hdferr - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!    lapl_id      - List access property list identifier.
-!
-! Programmer:	M. S. Breitenfeld
-!		March 3, 2008
-!
-! Modifications:  N/A
-!
-!----------------------------------------------------------------------
-
+!!$!
+!!$!****s* H5L/h5lget_val_f
+!!$!
+!!$! NAME
+!!$!		h5lget_val_f
+!!$!
+!!$! PURPOSE
+!!$!  	Returns the value of a symbolic link.
+!!$!
+!!$! INPUTS
+!!$!   link_loc_id  - File or group identifier.
+!!$!   link_name    - Link whose value is to be returned.
+!!$!   size         - Maximum number of characters of link value to be returned.
+!!$!
+!!$! OUTPUTS
+!!$!   linkval_buff - The buffer to hold the returned link value.
+!!$!         hdferr - error code
+!!$!				 Success:  0
+!!$!				 Failure: -1
+!!$! OPTIONAL PARAMETERS
+!!$!    lapl_id      - List access property list identifier.
+!!$!
+!!$! AUTHOR
+!!$!	M. Scot Breitenfeld
+!!$!	March 3, 2008
+!!$! SOURCE
 !!$  SUBROUTINE h5lget_val_f(link_loc_id, link_name, size, linkval_buff,   &
 !!$       hdferr, lapl_id)
 !!$    IMPLICIT NONE
@@ -1179,37 +1188,41 @@ CONTAINS
 !!$
 !!$  END SUBROUTINE h5lget_val_f
 
-
-
-!----------------------------------------------------------------------
-! Name:	    H5Lregistered_f
-!
-! Purpose:  Registers user-defined link class or changes behavior of existing class.
-!
-! Inputs: NOTE: In C the following represents struct H5L_class_t:
-!     version      - Version number of this struct
-!     class_id     - Link class identifier
-!     comment      - Comment for debugging
-!     create_func  - Callback during link creation
-!     move_func    - Callback after moving link
-!     copy_func    - Callback after copying link
-!     trav_func    - The main traversal function
-!     del_func     - Callback for link deletion
-!     query_func   - Callback for queries
-!
-! Outputs:
-!           hdferr - Error code
-!		       Success:  0
-!	               Failure: -1
-! Optional parameters:
-!                      None
-!
-! Programmer: M.S. Breitenfeld
-!	      February 29, 2008
-!
-! Modifications:  N/A
-!
-!----------------------------------------------------------------------
+!!$!
+!!$!****s* H5L/H5Lregistered_f
+!!$!
+!!$! NAME
+!!$!	    H5Lregistered_f
+!!$!
+!!$! PURPOSE
+!!$!  Registers user-defined link class or changes behavior of existing class.
+!!$!
+!!$! INPUTS NOTE: In C the following represents struct H5L_class_t:
+!!$!     version      - Version number of this struct
+!!$!     class_id     - Link class identifier
+!!$!     comment      - Comment for debugging
+!!$!     create_func  - Callback during link creation
+!!$!     move_func    - Callback after moving link
+!!$!     copy_func    - Callback after copying link
+!!$!     trav_func    - The main traversal function
+!!$!     del_func     - Callback for link deletion
+!!$!     query_func   - Callback for queries
+!!$!
+!!$! OUTPUTS
+!!$!           hdferr - Error code
+!!$!		       Success:  0
+!!$!	               Failure: -1
+!!$! OPTIONAL PARAMETERS
+!!$!                      None
+!!$!
+!!$! AUTHOR
+!!$! M. Scot Breitenfeld
+!!$!	      February 29, 2008
+!!$!
+!!$! HISTORY  N/A
+!!$!
+!!$!
+!!$! SOURCE
 !!$  SUBROUTINE H5Lregistered_f(version, class_id, comment, create_func, &
 !!$       move_func, copy_func, trav_func, del_func, query_func, hdferr)
 !!$    IMPLICIT NONE
@@ -1232,9 +1245,6 @@ CONTAINS
 !!$    INTEGER :: del_func_len
 !!$    INTEGER :: query_func_len
 !!$
-!!$!
-!!$!  MS FORTRAN needs explicit interface for C functions called here.
-!!$!
 !!$    INTERFACE
 !!$       INTEGER FUNCTION H5Lregistered_c(version, class_id, comment, &
 !!$            create_func, create_func_len, &
diff --git a/fortran/src/H5Lff_F03.f90 b/fortran/src/H5Lff_F03.f90
new file mode 100644
index 0000000..56062b2
--- /dev/null
+++ b/fortran/src/H5Lff_F03.f90
@@ -0,0 +1,246 @@
+!****h* ROBODoc/H5L (F03)
+!
+! NAME
+!  H5L_PROVISIONAL
+!
+! FILE
+!  src/fortran/src/H5Lff_F03.f90
+!
+! PURPOSE
+!
+!  This file contains Fortran 90 and Fortran 2003 interfaces for H5L functions.
+!  It contains the same functions as H5Lff_F90.f90 but includes the
+!  Fortran 2003 functions and the interface listings. This file will be compiled
+!  instead of H5Lff_F90.f90 if Fortran 2003 functions are enabled.
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5A function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!
+!*****
+
+MODULE H5L_PROVISIONAL
+
+  USE H5GLOBAL
+  USE ISO_C_BINDING
+
+  IMPLICIT NONE
+
+!****t* H5L (F03)/h5l_info_t
+!
+! Fortran2003 Derived Type:
+!
+  TYPE, bind(c) :: union_t
+     INTEGER(haddr_t) :: address
+     INTEGER(size_t)  :: val_size
+  END TYPE union_t
+
+  TYPE, bind(c) :: h5l_info_t
+     INTEGER(c_int) :: type ! H5L_type_t     type
+!       LOGICAL(c_bool) :: corder_valid ! hbool_t        corder_valid
+     INTEGER(c_int64_t) :: corder ! int64_t        corder;
+     INTEGER(c_int) :: cset ! H5T_cset_t     cset;
+     TYPE(union_t) :: u
+  END TYPE h5l_info_t
+
+!*****
+
+!type specifies the link class. Valid values include the following:
+!     	H5L_TYPE_HARD 	Hard link
+!     	H5L_TYPE_SOFT 	Soft link
+!     	H5L_TYPE_EXTERNAL     	External link
+!     	H5L_TYPE_ERROR 	Error 
+!cset specifies the character set in which the link name is encoded. Valid values include the following:
+!     	H5T_CSET_ASCII 	US ASCII
+!     	H5T_CSET_UTF8     	UTF-8 Unicode encoding
+
+
+CONTAINS
+
+!****s* H5L (F03)/h5literate_f
+!
+! NAME
+!  h5literate_f
+!
+! PURPOSE
+!  Iterates through links in a group.
+!
+! Inputs:
+!  group_id   - Identifier specifying subject group
+!  index_type - Type of index which determines the order:
+!                H5_INDEX_NAME_F      - Alpha-numeric index on name
+!                H5_INDEX_CRT_ORDER_F - Index on creation order
+!  order      - Order within index:
+!                H5_ITER_INC_F    - Increasing order
+!                H5_ITER_DEC_F    - Decreasing order
+!                H5_ITER_NATIVE_F - Fastest available order
+!  idx 	      - IN: Iteration position at which to start
+!  op 	      - Callback function passing data regarding the link to the calling application
+!  op_data    - User-defined pointer to data required by the application for its processing of the link
+!
+! Outputs:
+!  idx 	        - OUT: Position at which an interrupted iteration may be restarted
+!  return_value - Success: The return value of the first operator that
+! 			   returns non-zero, or zero if all members were
+! 			   processed with no operator returning non-zero.
+!
+! 		  Failure: Negative if something goes wrong within the
+! 			   library, or the negative value returned by one
+! 			   of the operators.
+!
+!  hdferr     - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  July 8, 2008
+!
+! Fortran2003 Interface:
+  SUBROUTINE h5literate_f(group_id, index_type, order, idx, op, op_data, return_value, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T)  , INTENT(IN)    :: group_id
+    INTEGER         , INTENT(IN)    :: index_type
+    INTEGER         , INTENT(IN)    :: order
+    INTEGER(HSIZE_T), INTENT(INOUT) :: idx
+    TYPE(C_FUNPTR)  , INTENT(IN)    :: op
+    TYPE(C_PTR)     , INTENT(IN)    :: op_data
+    INTEGER         , INTENT(OUT)   :: return_value
+    INTEGER         , INTENT(OUT)   :: hdferr
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5literate_c(group_id, index_type, order, idx, op, op_data)
+         USE, INTRINSIC :: ISO_C_BINDING
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5LITERATE_C'::h5literate_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: group_id
+         INTEGER, INTENT(IN) :: index_type
+         INTEGER, INTENT(IN) :: order
+         INTEGER(HSIZE_T), INTENT(INOUT) :: idx
+         TYPE(C_FUNPTR), VALUE :: op
+         TYPE(C_PTR), VALUE :: op_data
+       END FUNCTION h5literate_c
+    END INTERFACE
+
+    return_value = h5literate_c(group_id, index_type, order, idx, op, op_data)
+
+    IF(return_value.GE.0)THEN
+       hdferr = 0
+    ELSE
+       hdferr = -1
+    END IF
+
+  END SUBROUTINE h5literate_f
+
+!****s* H5L (F03)/h5literate_by_name_f
+!
+! NAME
+!  h5literate_by_name_f
+!
+! PURPOSE
+!  Iterates through links in a group.
+!
+! Inputs:
+!  loc_id     - File or group identifier specifying location of subject group
+!  group_name - Name of subject group
+!  index_type - Type of index which determines the order:
+!                H5_INDEX_NAME_F      - Alpha-numeric index on name
+!                H5_INDEX_CRT_ORDER_F - Index on creation order
+!  order      - Order within index:
+!                H5_ITER_INC_F    - Increasing order
+!                H5_ITER_DEC_F    - Decreasing order
+!                H5_ITER_NATIVE_F - Fastest available order
+!  idx 	      - IN: Iteration position at which to start
+!  op 	      - Callback function passing data regarding the link to the calling application
+!  op_data    - User-defined pointer to data required by the application for its processing of the link
+!
+! Outputs:
+!  idx 	        - OUT: Position at which an interrupted iteration may be restarted
+!  return_value - Success: The return value of the first operator that
+! 			   returns non-zero, or zero if all members were
+! 			   processed with no operator returning non-zero.
+!
+! 		  Failure: Negative if something goes wrong within the
+! 			   library, or the negative value returned by one
+! 			   of the operators.
+!
+!  hdferr        - Returns 0 if successful and -1 if fails
+!
+! Optional parameters:
+!  lapl_id    - Link access property list
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  Augest 18, 2008
+!
+! Fortran2003 Interface:
+  SUBROUTINE h5literate_by_name_f(loc_id, group_name, index_type, order, idx, op, op_data, return_value, hdferr, lapl_id)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T)  , INTENT(IN)           :: loc_id
+    CHARACTER(LEN=*), INTENT(IN)           :: group_name 
+    INTEGER         , INTENT(IN)           :: index_type
+    INTEGER         , INTENT(IN)           :: order
+    INTEGER(HSIZE_T), INTENT(INOUT)        :: idx
+    TYPE(C_FUNPTR)  , INTENT(IN)           :: op  
+    TYPE(C_PTR)     , INTENT(IN)           :: op_data
+    INTEGER         , INTENT(OUT)          :: return_value
+    INTEGER         , INTENT(OUT)          :: hdferr
+    INTEGER(HID_T)  , INTENT(IN), OPTIONAL :: lapl_id
+!*****
+    INTEGER(HID_T) :: lapl_id_default
+    INTEGER(SIZE_T) :: namelen
+
+    INTERFACE
+       INTEGER FUNCTION  h5literate_by_name_c(loc_id, name, namelen, index_type, order, idx, op, op_data, lapl_id_default)
+         USE, INTRINSIC :: ISO_C_BINDING
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5LITERATE_BY_NAME_C'::h5literate_by_name_c
+         !DEC$ENDIF
+         INTEGER(HID_T)  , INTENT(IN) :: loc_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER(SIZE_T) , INTENT(IN) :: namelen
+         INTEGER         , INTENT(IN) :: index_type
+         INTEGER         , INTENT(IN) :: order
+         INTEGER(HSIZE_T), INTENT(INOUT) :: idx
+         TYPE(C_FUNPTR), VALUE :: op
+         TYPE(C_PTR), VALUE :: op_data
+         INTEGER(HID_T)  , INTENT(IN) :: lapl_id_default
+       END FUNCTION
+    END INTERFACE
+
+    namelen  = LEN(group_name)
+    lapl_id_default = H5P_DEFAULT_F
+    IF(PRESENT(lapl_id)) lapl_id_default = lapl_id
+
+    return_value = h5literate_by_name_c(loc_id, group_name, namelen, index_type, order, idx, op, op_data, lapl_id_default)
+
+    IF(return_value.GE.0)THEN
+       hdferr = 0
+    ELSE
+       hdferr = -1
+    END IF
+
+  END SUBROUTINE h5literate_by_name_f
+
+END MODULE H5L_PROVISIONAL
diff --git a/fortran/src/H5Lff_F90.f90 b/fortran/src/H5Lff_F90.f90
new file mode 100644
index 0000000..c802af7
--- /dev/null
+++ b/fortran/src/H5Lff_F90.f90
@@ -0,0 +1,39 @@
+!****h* ROBODoc/H5L (F90)
+!
+! NAME
+!  MODULE H5L_PROVISIONAL
+!
+! PURPOSE
+!  This file contains Fortran 90 interfaces for H5L functions. It contains
+!  the same functions as H5Lff_F03.f90 but excludes the Fortran 2003 functions
+!  and the interface listings. This file will be compiled instead of H5Lff_F03.f90
+!  if Fortran 2003 functions are not enabled.
+!
+! NOTE
+!  Currently contains no functions.
+!
+! COPYRIGHT
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!  Copyright by The HDF Group.                                               *
+!  Copyright by the Board of Trustees of the University of Illinois.         *
+!  All rights reserved.                                                      *
+!  *
+!  This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!  terms governing use, modification, and redistribution, is contained in    *
+!  the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!  of the source code distribution tree; Copyright.html can be found at the  *
+!  root level of an installed copy of the electronic HDF5 document set and   *
+!  is linked from the top-level documents page.  It can also be found at     *
+!  http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!  access to either file, you may request a copy from help at hdfgroup.org.     *
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+!                         *** IMPORTANT ***
+!  If you add a new H5D function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!*****
+
+MODULE H5L_PROVISIONAL
+
+END MODULE H5L_PROVISIONAL
diff --git a/fortran/src/H5Of.c b/fortran/src/H5Of.c
index 56cbfeb..ffbf661 100644
--- a/fortran/src/H5Of.c
+++ b/fortran/src/H5Of.c
@@ -1,4 +1,9 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* H5Of/H5Of
+ * PURPOSE
+ *   This file contains C stubs for H5O Fortran APIs
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,32 +16,37 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This files contains C stubs for H5O Fortran APIs */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include "H5f90.h"
 #include "H5Eprivate.h"
 
-/*----------------------------------------------------------------------------
- * Name:        h5olink_c
- * Purpose:     Calls H5Olink
- * Inputs:
+/****if* H5Of/h5olink_c
+ * NAME
+ *  h5olink_c
+ * PURPOSE
+ *  Calls H5Olink
+ * INPUTS
  *      object_id        - Object to be linked.
  *      new_loc_id       - File or group identifier specifying location at which object is to be linked.
  *      name             - Name of link to be created, relative to new_loc_id.
  *      namelen          - Length of buffer for link to be created.
  *      lcpl_id          - Link creation property list identifier.
  *      lapl_id          - Link access property list identifier.
- * Outputs:
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              April 21, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * RETURNS
+ *  0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  April 21, 2008
+ * SOURCE
+*/
 int_f
 nh5olink_c (hid_t_f *object_id, hid_t_f *new_loc_id, _fcd name, size_t_f *namelen,
             hid_t_f *lcpl_id, hid_t_f *lapl_id)
+/******/
 {
   char *c_name = NULL;          /* Buffer to hold C string */
   int_f ret_value = 0;          /* Return value */
@@ -60,21 +70,28 @@ nh5olink_c (hid_t_f *object_id, hid_t_f *new_loc_id, _fcd name, size_t_f *namele
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5oopen_c
- * Purpose:     Calls H5Oopen
- * Inputs:      loc_id  - File or group identifier
- *	        name    - Attribute access property list
- *              namelen - Size of name
- *              lapl_id - Link access property list
- * Outputs:     obj_id  - Dataset identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              April 18, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+/****if* H5Of/h5oopen_c
+ * NAME
+ *  h5oopen_c
+ * PURPOSE
+ *  Calls H5Oopen
+ * INPUTS
+ *  loc_id  - File or group identifier
+ *  name    - Attribute access property list
+ *  namelen - Size of name
+ *  lapl_id - Link access property list
+ * OUTPUTS
+ *  obj_id  - Dataset identifier
+ * RETURNS
+ *  0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  April 18, 2008
+ * SOURCE
+*/
 int_f
 nh5oopen_c (hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id, hid_t_f *obj_id)
+/******/
 {
   char *c_name = NULL;          /* Buffer to hold C string */
   int_f ret_value = 0;          /* Return value */
@@ -96,20 +113,95 @@ nh5oopen_c (hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id, hid
     HDfree(c_name);
   return ret_value;
 }
+/****if* H5Of/h5oclose_c
+ * NAME
+ *   h5oclose_c
+ * PURPOSE
+ *   Call H5Oclose
+ * INPUTS
+ *   object_id   - Object identifier  
+ * RETURNS
+ *   0 on success, -1 on failure
+ * AUTHOR
+ *   M. Scot Breitenfeld
+ *   December 17, 2008
+ * SOURCE
+*/
+int_f
+nh5oclose_c ( hid_t_f *object_id )
+/******/
+{
+  int_f ret_value=0;          /* Return value */
+  
+  if (H5Oclose((hid_t)*object_id) < 0)
+    HGOTO_DONE(FAIL);
+  
+ done:
+  return ret_value;
+}
+
+/****if* H5Of/h5ovisit_c
+ * NAME
+ *  h5ovisit_c
+ * PURPOSE
+ *  Calls H5Ovisit
+ * INPUTS
+ *    object_id - Identifier specifying subject group
+ *   index_type - Type of index which determines the order
+ *        order - Order within index
+ *          idx - Iteration position at which to start
+ *           op - Callback function passing data regarding the link to the calling application
+ *      op_data - User-defined pointer to data required by the application for its processing of the link
+ *
+ * OUTPUTS
+ *          idx - Position at which an interrupted iteration may be restarted
+ *
+ * RETURNS
+ *     >0 on success, 0< on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  November 19, 2008
+ * SOURCE
+*/
+int_f
+nh5ovisit_c(hid_t_f *group_id, int_f *index_type, int_f *order, H5O_iterate_t op, void *op_data )
+/******/
+{
+  int_f ret_value = -1;       /* Return value */
+  herr_t func_ret_value; /* H5Linterate return value */
+
+  /*
+   * Call H5Ovisit
+   */
+  func_ret_value = H5Ovisit( (hid_t)*group_id, (H5_index_t)*index_type, (H5_iter_order_t)*order, op, op_data);
+
+  ret_value = (int_f)func_ret_value;
+
+  return ret_value;
+}
 
-/*----------------------------------------------------------------------------
- * Name:        h5oopen_by_addr_c
- * Purpose:     Calls H5open_by_addr
- * Inputs:      loc_id  - File or group identifier
- *              addr     - Object’s address in the file
- * Outputs:     obj_id  - Dataset identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  M. Scot Breitenfeld
- *              September 14, 2009
- * Modifications:
- *---------------------------------------------------------------------------*/
+/****if* H5Of/h5oopen_by_addr_c
+ * NAME
+ *  h5oopen_by_addr_c
+ * PURPOSE
+ *  Calls H5open_by_addr
+ * INPUTS
+ *  loc_id  - File or group identifier
+ *    addr  - Object’s address in the file
+ *
+ * OUTPUTS
+ *  obj_id  - Dataset identifier      
+ *
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  September 14, 2009
+ * SOURCE
+*/
 int_f
 nh5oopen_by_addr_c (hid_t_f *loc_id, haddr_t_f *addr, hid_t_f *obj_id)
+/******/
 {
   int_f ret_value = 0;          /* Return value */
 
@@ -122,3 +214,123 @@ nh5oopen_by_addr_c (hid_t_f *loc_id, haddr_t_f *addr, hid_t_f *obj_id)
  done:
   return ret_value;
 }
+
+/* ***if* H5Of/H5Oget_info_by_name_c
+ * NAME
+ *  H5Oget_info_by_name_c
+ * PURPOSE
+ *  Calls H5Oget_info_by_name
+ * INPUTS
+ *  loc_id       - File or group identifier specifying location of group in which object is located.
+ *  name         - Name of group, relative to loc_id.
+ *  namelen      - Name length.
+ *  lapl_id      - Link access property list.
+ * OUTPUTS
+ *  corder_valid - Indicates whether the the creation order data is valid for this attribute.
+ *  corder       - Is a positive integer containing the creation order of the attribute.
+ *  cset         - Indicates the character set used for the attribute’s name.
+ *  data_size    - indicates the size, in the number of characters, of the attribute.
+ *
+ * RETURNS
+ *  0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  December 1, 2008
+ * SOURCE
+*/
+int_f
+nh5oget_info_by_name_c (hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id,
+			H5O_info_t_f *object_info)
+/******/
+{
+  char *c_name = NULL;          /* Buffer to hold C string */
+  int_f ret_value = 0;          /* Return value */
+  H5O_info_t Oinfo;
+  struct tm *ts;
+  
+  /*
+   * Convert FORTRAN name to C name
+   */
+  if((c_name = HD5f2cstring(name, (size_t)*namelen)) == NULL)
+    HGOTO_DONE(FAIL);
+
+  /*
+   * Call H5Oinfo_by_name function.
+   */
+  if(H5Oget_info_by_name((hid_t)*loc_id, c_name,
+			 &Oinfo, (hid_t)*lapl_id) < 0)
+    HGOTO_DONE(FAIL);
+
+  object_info->fileno    = Oinfo.fileno;
+  object_info->addr      = (haddr_t_f)Oinfo.addr;
+ 
+
+  object_info->type      = (int_f)Oinfo.type;
+  object_info->rc        = (int_f)Oinfo.rc;
+
+  ts = gmtime(&Oinfo.atime);
+
+  object_info->atime[0]     = (int_f)ts->tm_year+1900; /* year starts at 1900 */
+  object_info->atime[1]     = (int_f)ts->tm_mon+1; /* month starts at 0 in C */
+  object_info->atime[2]     = (int_f)ts->tm_mday;
+/*   object_info->atime[3]     = (int_f)ts->tm_gmtoff; /\* convert from seconds to minutes *\/ */
+  object_info->atime[4]     = (int_f)ts->tm_hour;
+  object_info->atime[5]     = (int_f)ts->tm_min;
+  object_info->atime[6]     = (int_f)ts->tm_sec;
+  object_info->atime[7]     = -32767; /* millisecond is not available, assign it -HUGE(0) */
+
+  ts = gmtime(&Oinfo.btime);
+
+  object_info->btime[0]     = (int_f)ts->tm_year+1900; /* year starts at 1900 */
+  object_info->btime[1]     = (int_f)ts->tm_mon+1; /* month starts at 0 in C */
+  object_info->btime[2]     = (int_f)ts->tm_mday;
+/*   object_info->btime[3]     = (int_f)ts->tm_gmtoff/60; /\* convert from seconds to minutes *\/ */
+  object_info->btime[4]     = (int_f)ts->tm_hour;
+  object_info->btime[5]     = (int_f)ts->tm_min;
+  object_info->btime[6]     = (int_f)ts->tm_sec;
+  object_info->btime[7]     = -32767; /* millisecond is not available, assign it -HUGE(0) */
+
+  ts = gmtime(&Oinfo.ctime);
+
+  object_info->ctime[0]     = (int_f)ts->tm_year+1900; /* year starts at 1900 */
+  object_info->ctime[1]     = (int_f)ts->tm_mon+1; /* month starts at 0 in C */
+  object_info->ctime[2]     = (int_f)ts->tm_mday;
+/*   object_info->ctime[3]     = (int_f)ts->tm_gmtoff/60; /\* convert from seconds to minutes *\/ */
+  object_info->ctime[4]     = (int_f)ts->tm_hour;
+  object_info->ctime[5]     = (int_f)ts->tm_min;
+  object_info->ctime[6]     = (int_f)ts->tm_sec;
+  object_info->ctime[7]     = -32767; /* millisecond is not available, assign it -HUGE(0) */
+
+  ts = gmtime(&Oinfo.mtime);
+
+  object_info->mtime[0]     = (int_f)ts->tm_year+1900; /* year starts at 1900 */
+  object_info->mtime[1]     = (int_f)ts->tm_mon+1; /* month starts at 0 in C */
+  object_info->mtime[2]     = (int_f)ts->tm_mday;
+/*   object_info->mtime[3]     = (int_f)ts->tm_gmtoff/60; /\* convert from seconds to minutes *\/ */
+  object_info->mtime[4]     = (int_f)ts->tm_hour;
+  object_info->mtime[5]     = (int_f)ts->tm_min;
+  object_info->mtime[6]     = (int_f)ts->tm_sec;
+  object_info->mtime[7]     = -32767; /* millisecond is not available, assign it -HUGE(0) */
+
+  object_info->num_attrs = (hsize_t_f)Oinfo.num_attrs;
+
+  object_info->hdr.version = (int_f)Oinfo.hdr.version;
+  object_info->hdr.nmesgs  = (int_f)Oinfo.hdr.nmesgs;
+  object_info->hdr.nchunks = (int_f)Oinfo.hdr.nchunks;
+  object_info->hdr.flags   = (int_f)Oinfo.hdr.flags;
+
+  object_info->hdr.space.total = (hsize_t_f)Oinfo.hdr.space.total;
+  object_info->hdr.space.meta  = (hsize_t_f)Oinfo.hdr.space.meta;
+  object_info->hdr.space.mesg  = (hsize_t_f)Oinfo.hdr.space.mesg;
+  object_info->hdr.space.free  = (hsize_t_f)Oinfo.hdr.space.free;
+
+  object_info->hdr.mesg.present = Oinfo.hdr.mesg.present;
+  object_info->hdr.mesg.shared  = Oinfo.hdr.mesg.shared;
+
+  object_info->meta_size.obj.index_size = (hsize_t_f)Oinfo.meta_size.obj.index_size;
+  object_info->meta_size.obj.heap_size  = (hsize_t_f)Oinfo.meta_size.obj.heap_size;
+
+ done:
+  return ret_value;
+}
+
diff --git a/fortran/src/H5Off.f90 b/fortran/src/H5Off.f90
index af965e2..e69fdb5 100644
--- a/fortran/src/H5Off.f90
+++ b/fortran/src/H5Off.f90
@@ -1,3 +1,18 @@
+!****h* ROBODoc/H5O
+!
+! NAME
+!  MODULE H5O
+!
+! FILE
+!  fortran/src/H5Off.f90
+!
+! PURPOSE
+!  This file contains Fortran interfaces for H5O functions. It includes
+!  all the functions that are independent on whether the Fortran 2003 functions
+!  are enabled or disabled.
+!
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,39 +28,43 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5O function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
 !
-! This file contains Fortran90 interfaces for H5O functions.
-!
+!*****
+
 MODULE H5O
 
   USE H5GLOBAL
 
 CONTAINS
 
-!----------------------------------------------------------------------
-! Name:		h5olink_f
-!
-! Purpose:  	Creates a hard link to an object in an HDF5 file.
-!
-! Inputs:
-!      object_id     - Object to be linked.
-!      new_loc_id    - File or group identifier specifying location at which object is to be linked.
-!      new_link_name - Name of link to be created, relative to new_loc_id.
-! Outputs:
-!      hdferr:       - error code
-!	                Success:  0
-!			Failure: -1
-! Optional parameters:
-!      lcpl_id       - Link creation property list identifier.
-!      lapl_id       - Link access property list identifier.
-!
-! Programmer:	M.S. Breitenfeld
-!		April 21, 2008
-!
-! Modifications: N/A
-!
-!----------------------------------------------------------------------
-
+!****s* H5O/h5olink_f
+!
+! NAME
+!  h5olink_f
+!
+! PURPOSE
+!  Creates a hard link to an object in an HDF5 file.
+! INPUTS
+!  object_id 	 - Object to be linked.
+!  new_loc_id 	 - File or group identifier specifying location at which object is to be linked.
+!  new_link_name - Name of link to be created, relative to new_loc_id.
+! OUTPUTS
+!  hdferr:       - error code
+!                   Success:  0
+!                   Failure: -1
+! OPTIONAL PARAMETERS
+!  lcpl_id 	 - Link creation property list identifier.
+!  lapl_id 	 - Link access property list identifier.
+! AUTHOR
+!  M. Scot Breitenfeld
+!  April 21, 2008
+!
+! SOURCE
   SUBROUTINE h5olink_f(object_id, new_loc_id, new_link_name, hdferr, lcpl_id, lapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: object_id  ! Object to be linked
@@ -57,6 +76,7 @@ CONTAINS
                                           !   Failure: -1
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Link creation property list identifier.
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id ! Link creation property list identifier.
+!*****
     INTEGER(HID_T) :: lapl_id_default
     INTEGER(HID_T) :: lcpl_id_default
 
@@ -91,29 +111,28 @@ CONTAINS
 
   END SUBROUTINE h5olink_f
 
-!----------------------------------------------------------------------
-! Name:		h5oopen_f
-!
-! Purpose:  	Opens an object in an HDF5 file by location identifier and path name.O
-!
-! Inputs:
-!           loc_id - File or group identifier
-!             name - Path to the object, relative to loc_id.
-! Outputs:
-!           obj_id - Object identifier for the opened object
-!      hdferr:     - error code
-!	                Success:  0
-!			Failure: -1
-! Optional parameters:
-!          lapl_id - Access property list identifier for the link pointing to the object
-!
-! Programmer:	M.S. Breitenfeld
-!		April 18, 2008
-!
-! Modifications: N/A
-!
-!----------------------------------------------------------------------
-
+!****s* H5O/h5oopen_f
+!
+! NAME
+!  h5oopen_f
+! PURPOSE
+!  Opens an object in an HDF5 file by location identifier and path name.
+!
+! INPUTS
+!  loc_id 	 - File or group identifier
+!  name 	 - Path to the object, relative to loc_id.
+! OUTPUTS
+!  obj_id 	 - Object identifier for the opened object
+!  hdferr:       - error code
+!                   Success:  0
+!                   Failure: -1
+! OPTIONAL PARAMETERS
+!  lapl_id 	 - Access property list identifier for the link pointing to the object
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  April 18, 2008
+! SOURCE
   SUBROUTINE h5oopen_f(loc_id, name, obj_id, hdferr, lapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id  ! File or group identifier
@@ -123,12 +142,10 @@ CONTAINS
                                           !   Success:  0
                                           !   Failure: -1
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lapl_id  ! Attribute access property list
+!*****
     INTEGER(HID_T) :: lapl_id_default
-
     INTEGER(SIZE_T) :: namelen
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5oopen_c(loc_id, name, namelen, lapl_id_default, obj_id)
          USE H5GLOBAL
@@ -152,36 +169,71 @@ CONTAINS
     hdferr = h5oopen_c(loc_id, name, namelen, lapl_id_default, obj_id)
 
   END SUBROUTINE h5oopen_f
-
-!----------------------------------------------------------------------
-! Name:		h5oopen_by_addr_f
 !
-! Purpose:  	Opens an object using its address within an HDF5 file.
+!****s* H5O/h5oclose_f
+!
+! NAME
+!  h5oclose_f
 !
-! Inputs:
-!           loc_id - File or group identifier
-!             addr - Object’s address in the file
-! Outputs:
-!           obj_id - Object identifier for the opened object
-!      hdferr:     - error code
-!	                Success:  0
-!			Failure: -1
+! PURPOSE
+!  Closes an object in an HDF5 file.
 !
-! Programmer:	M. Scot Breitenfeld
-!		September 14, 2009
+! INPUTS
+!  object_id     - Object identifier
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Modifications: N/A
+! AUTHOR
+!  M. Scot Breitenfeld
+!  December 17, 2008
 !
-!----------------------------------------------------------------------
+! SOURCE
+  SUBROUTINE h5oclose_f(object_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN)  :: object_id
+    INTEGER,        INTENT(OUT) :: hdferr
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5oclose_c(object_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5OCLOSE_C'::h5oclose_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: object_id
+       END FUNCTION h5oclose_c
+    END INTERFACE
 
+    hdferr = h5oclose_c(object_id)
+  END SUBROUTINE h5oclose_f
+
+!
+!****s* H5O/h5open_by_addr_f
+! NAME		
+!  h5oopen_by_addr_f 
+!
+! PURPOSE
+!  Opens an object using its address within an HDF5 file. 
+!
+! INPUTS  
+!    loc_id - File or group identifier
+!    addr   - Object’s address in the file
+! OUTPUTS: 
+!    obj_id - Object identifier for the opened object
+!    hdferr - Returns 0 if successful and -1 if fails
+!
+! AUTHOR	
+!  M. Scot Breitenfeld
+!  September 14, 2009
+! 
+! SOURCE
   SUBROUTINE h5oopen_by_addr_f(loc_id, addr, obj_id, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id  ! File or group identifier
     INTEGER(HADDR_T), INTENT(IN) :: addr  ! Object’s address in the file
     INTEGER(HID_T), INTENT(OUT) :: obj_id ! Object identifier for the opened object
-    INTEGER, INTENT(OUT) :: hdferr        ! Error code
-                                          !   Success:  0
-                                          !   Failure: -1
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code:
+                                          ! 0 on success and -1 on failure
+!*****
     INTERFACE
        INTEGER FUNCTION h5oopen_by_addr_c(loc_id, addr, obj_id)
          USE H5GLOBAL
@@ -199,3 +251,4 @@ CONTAINS
   END SUBROUTINE h5oopen_by_addr_f
 
 END MODULE H5O
+
diff --git a/fortran/src/H5Off_F03.f90 b/fortran/src/H5Off_F03.f90
new file mode 100644
index 0000000..8eb7a4b
--- /dev/null
+++ b/fortran/src/H5Off_F03.f90
@@ -0,0 +1,242 @@
+!****h* ROBODoc/H5O (F03)
+!
+! NAME
+!  H5O_PROVISIONAL
+!
+! PURPOSE
+!  This file contains Fortran 90 and Fortran 2003 interfaces for H5O functions.
+!  It contains the same functions as H5Off_F90.f90 but includes the
+!  Fortran 2003 functions and the interface listings. This file will be compiled
+!  instead of H5Off_F90.f90 if Fortran 2003 functions are enabled.
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5P function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!
+!*****
+
+MODULE H5O_PROVISIONAL
+
+  USE H5GLOBAL
+  USE, INTRINSIC :: ISO_C_BINDING
+
+  IMPLICIT NONE
+
+  enum, bind(c)
+     enumerator :: H5O_TYPE_UNKNOWN_F = -1
+     enumerator :: H5O_TYPE_GROUP_F, H5O_TYPE_DATASET_F, H5O_TYPE_NAMED_DATATYPE_F, H5O_TYPE_NTYPES_F
+  end enum
+
+!****t* H5T (F03)/h5o_info_t
+!
+! Fortran2003 Derived Type:
+!
+  TYPE, BIND(C) :: space_t
+     INTEGER(hsize_t) :: total ! Total space for storing object header in file
+     INTEGER(hsize_t) :: meta  ! Space within header for object header metadata information
+     INTEGER(hsize_t) :: mesg  ! Space within header for actual message information
+     INTEGER(hsize_t) :: free  ! Free space within object header
+  END TYPE space_t
+
+  TYPE, BIND(C) :: mesg_t
+     INTEGER(c_int64_t) :: present ! Flags to indicate presence of message type in header 
+     INTEGER(c_int64_t) :: shared  ! Flags to indicate message type is shared in header
+  END TYPE mesg_t
+  
+  TYPE, BIND(C) :: hdr_t
+     INTEGER :: version ! Version number of header format in file
+     INTEGER :: nmesgs  ! Number of object header messages
+     INTEGER :: nchunks ! Number of object header chunks
+     INTEGER :: flags   ! Object header status flags
+     TYPE(space_t)  :: space   
+     TYPE(mesg_t)   :: mesg
+  END TYPE hdr_t
+
+  ! Extra metadata storage for obj & attributes
+  TYPE, BIND(C) :: H5_ih_info_t
+     INTEGER(hsize_t) :: index_size ! btree and/or list
+     INTEGER(hsize_t) :: heap_size
+  END TYPE H5_ih_info_t
+
+  TYPE, BIND(C) :: meta_size_t
+     TYPE(H5_ih_info_t) :: obj  ! v1/v2 B-tree & local/fractal heap for groups, B-tree for chunked datasets
+     TYPE(H5_ih_info_t) :: attr ! v2 B-tree & heap for attributes
+  ENDTYPE meta_size_t
+  
+  TYPE, BIND(C) :: h5o_info_t
+     INTEGER(c_long)  :: fileno     ! File number that object is located in
+     INTEGER(haddr_t) :: addr       ! Object address in file  
+     INTEGER          :: type       ! Basic object type (group, dataset, etc.) 
+     INTEGER          :: rc         ! Reference count of object
+
+     INTEGER, DIMENSION(8) :: atime ! Access time         !    -- NOTE --
+     INTEGER, DIMENSION(8) :: mtime ! Modification time   ! Returns an integer array    
+     INTEGER, DIMENSION(8) :: ctime ! Change time         ! as specified in the Fortran 
+     INTEGER, DIMENSION(8) :: btime ! Birth time          ! intrinsic DATE_AND_TIME(VALUES)
+
+     INTEGER(hsize_t) :: num_attrs  ! # of attributes attached to object
+
+     TYPE(hdr_t) :: hdr
+
+     TYPE(meta_size_t) :: meta_size
+  END TYPE h5o_info_t
+
+!*****
+
+CONTAINS
+
+!****s* H5O (F03)/h5ovisit_f_F03
+!
+! NAME
+!  h5ovisit_f
+!
+! PURPOSE
+!  Recursively visits all objects starting from a specified object.
+!
+! Inputs:
+!  object_id  - Identifier of the object at which the recursive iteration begins.
+!  index_type - Type of index; valid values include:
+!                H5_INDEX_NAME_F
+!                H5_INDEX_CRT_ORDER_F
+!  order      - Order in which index is traversed; valid values include:
+!                H5_ITER_DEC_F
+!                H5_ITER_INC_F
+!                H5_ITER_NATIVE_F
+!  op 	      - Callback function passing data regarding the group to the calling application
+!  op_data    - User-defined pointer to data required by the application for its processing of the group
+!
+! Outputs:
+!  return_value - returns the return value of the first operator that returns a positive value, or 
+!                 zero if all members were processed with no operator returning non-zero.
+!  hdferr       - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  M. Scot Breitenfeld
+!  November 19, 2008
+!
+! Fortran2003 Interface:
+  SUBROUTINE h5ovisit_f(object_id, index_type, order, op, op_data, return_value, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: object_id
+    INTEGER, INTENT(IN) :: index_type 
+    INTEGER, INTENT(IN) :: order
+
+    TYPE(C_FUNPTR):: op
+    TYPE(C_PTR)   :: op_data
+    INTEGER, INTENT(OUT) :: return_value
+    INTEGER, INTENT(OUT) :: hdferr
+!*****
+
+    INTERFACE
+       INTEGER FUNCTION h5ovisit_c(object_id, index_type, order, op, op_data)
+         USE, INTRINSIC :: ISO_C_BINDING
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5OVISIT_C'::h5ovisit_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: object_id
+         INTEGER, INTENT(IN) :: index_type
+         INTEGER, INTENT(IN) :: order
+         TYPE(C_FUNPTR), VALUE :: op
+         TYPE(C_PTR), VALUE :: op_data
+       END FUNCTION h5ovisit_c
+    END INTERFACE
+
+    return_value = h5ovisit_c(object_id, index_type, order, op, op_data)
+
+    IF(return_value.GE.0)THEN
+       hdferr = 0
+    ELSE
+       hdferr = -1
+    END IF
+
+  END SUBROUTINE h5ovisit_f
+
+!****s* H5O (F03)/h5oget_info_by_name_f_F03
+!
+! NAME
+!  h5oget_info_by_name_f
+!
+! PURPOSE
+!  Retrieves the metadata for an object, identifying the object by location and relative name.
+!
+! Inputs:
+!  loc_id      - File or group identifier specifying location of group 
+!                in which object is located.
+!  name        - Name of group, relative to loc_id
+!
+! Outputs:  
+!  object_info - Buffer in which to return object information
+!  hdferr      - Returns 0 if successful and -1 if fails
+!
+! Optional parameters:
+!  lapl_id     - Link access property list
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  December 1, 2008
+!
+! Fortran2003 Interface:
+  SUBROUTINE h5oget_info_by_name_f(loc_id, name, object_info, hdferr, lapl_id)
+
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T)  , INTENT(IN)            :: loc_id
+    CHARACTER(LEN=*), INTENT(IN)            :: name
+    TYPE(h5o_info_t), INTENT(OUT), TARGET   :: object_info
+    INTEGER         , INTENT(OUT)           :: hdferr
+    INTEGER(HID_T)  , INTENT(IN) , OPTIONAL :: lapl_id
+!*****
+    INTEGER         :: corder_valid
+    INTEGER(SIZE_T) :: namelen
+    INTEGER(HID_T)  :: lapl_id_default
+    TYPE(C_PTR)     :: ptr
+    
+    INTERFACE
+       INTEGER FUNCTION h5oget_info_by_name_c(loc_id, name, namelen, lapl_id_default, &
+           object_info)
+         USE H5GLOBAL
+         USE, INTRINSIC :: ISO_C_BINDING
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5OGET_INFO_BY_NAME_C'::h5oget_info_by_name_c
+         !DEC$ENDIF
+         INTEGER(HID_T)  , INTENT(IN)  :: loc_id
+         CHARACTER(LEN=*), INTENT(IN)  :: name
+         INTEGER(SIZE_T) , INTENT(IN)  :: namelen
+         INTEGER(HID_T)  , INTENT(IN)  :: lapl_id_default
+         TYPE(C_PTR),value             :: object_info
+
+       END FUNCTION h5oget_info_by_name_c
+    END INTERFACE
+
+    namelen = LEN(name)
+
+    lapl_id_default = H5P_DEFAULT_F
+    IF(PRESENT(lapl_id)) lapl_id_default = lapl_id
+
+    ptr = C_LOC(object_info)
+
+    hdferr = H5Oget_info_by_name_c(loc_id, name, namelen, lapl_id_default, ptr)
+
+  END SUBROUTINE H5Oget_info_by_name_f
+
+END MODULE H5O_PROVISIONAL
+
diff --git a/fortran/src/H5Off_F90.f90 b/fortran/src/H5Off_F90.f90
new file mode 100644
index 0000000..53553d6
--- /dev/null
+++ b/fortran/src/H5Off_F90.f90
@@ -0,0 +1,39 @@
+!****h* ROBODoc/H5O (F90)
+!
+! NAME
+!  MODULE H5O_PROVISIONAL
+!
+! PURPOSE
+!  This file contains Fortran 90 interfaces for H5O functions. It contains
+!  the same functions as H5Off_F03.f90 but excludes the Fortran 2003 functions
+!  and the interface listings. This file will be compiled instead of H5Off_F03.f90
+!  if Fortran 2003 functions are not enabled.
+!
+! NOTE
+!  Currently contains no functions.
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+!                         *** IMPORTANT ***
+!  If you add a new H5D function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!*****
+
+MODULE H5O_PROVISIONAL
+
+END MODULE H5O_PROVISIONAL
diff --git a/fortran/src/H5Pf.c b/fortran/src/H5Pf.c
index 29ba593..6fc8487 100644
--- a/fortran/src/H5Pf.c
+++ b/fortran/src/H5Pf.c
@@ -1,4 +1,9 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* H5Pf/H5Pf
+ * PURPOSE
+ *   This file contains C stubs for H5P Fortran APIs
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,26 +16,35 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This files contains C stubs for H5P Fortran APIs */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include "H5f90.h"
 #include "H5Eprivate.h"
 
-/*----------------------------------------------------------------------------
- * Name:        h5pcreate_c
- * Purpose:     Call H5Pcreate to create a property list
- * Inputs:      cls - property list class identifier
- * Outputs:     prp_id - identifier of the created property list
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              Wednesday, October 9, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+/****if* H5Pf/h5pcreate_c
+ * NAME
+ *        h5pcreate_c
+ * PURPOSE
+ *     Call H5Pcreate to create a property list
+ * INPUTS
+ *      cls - property list class identifier
+ * OUTPUTS
+ *     prp_id - identifier of the created property list
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  Wednesday, October 9, 2002
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pcreate_c ( hid_t_f *cls, hid_t_f *prp_id )
+/******/
 {
     hid_t c_prp_id;
     int_f ret_value = 0;
@@ -45,18 +59,25 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pclose_c
- * Purpose:     Call H5Pclose to close property lis
- * Inputs:      prp_id - identifier of the property list to be closed
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Pf/h5pclose_c
+ * NAME
+ *        h5pclose_c
+ * PURPOSE
+ *     Call H5Pclose to close property lis
+ * INPUTS
+ *      prp_id - identifier of the property list to be closed
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Saturday, August 14, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pclose_c ( hid_t_f *prp_id )
+/******/
 {
     int_f ret_value = 0;
 
@@ -67,19 +88,26 @@ nh5pclose_c ( hid_t_f *prp_id )
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5pcopy_c
- * Purpose:     Call H5Pcopy to copy property list
- * Inputs:      prp_id - identifier of the property list to be copied
- * Outputs:     new_prp_id - identifier of the new property list
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Pf/h5pcopy_c
+ * NAME
+ *        h5pcopy_c
+ * PURPOSE
+ *     Call H5Pcopy to copy property list
+ * INPUTS
+ *      prp_id - identifier of the property list to be copied
+ * OUTPUTS
+ *     new_prp_id - identifier of the new property list
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Saturday, August 14, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
-
+ *
+ * SOURCE
+*/
 int_f
 nh5pcopy_c ( hid_t_f *prp_id , hid_t_f *new_prp_id)
+/******/
 {
     hid_t c_new_prp_id;
     int_f ret_value = 0;
@@ -94,20 +122,27 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pequal_c
- * Purpose:     Call H5Pequal to check if two property lists are equal
- * Inputs:      plist1_id - property list identifier
+/****if* H5Pf/h5pequal_c
+ * NAME
+ *        h5pequal_c
+ * PURPOSE
+ *     Call H5Pequal to check if two property lists are equal
+ * INPUTS
+ *      plist1_id - property list identifier
  *              plist2_id - property list identifier
- * Outputs:     c_flag    - flag to indicate that lists are eqaul
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     c_flag    - flag to indicate that lists are eqaul
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, September 30, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
-
+ *
+ * SOURCE
+*/
 int_f
 nh5pequal_c ( hid_t_f *plist1_id , hid_t_f *plist2_id, int_f * c_flag)
+/******/
 {
     htri_t c_c_flag;
     int_f ret_value = 0;
@@ -123,25 +158,32 @@ done:
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_class_c
- * Purpose:     Call H5Pget_class to determine property list class
- * Inputs:      prp_id - identifier of the dataspace
- * Outputs:     classtype - class type; possible values are:
+/****if* H5Pf/h5pget_class_c
+ * NAME
+ *        h5pget_class_c
+ * PURPOSE
+ *     Call H5Pget_class to determine property list class
+ * INPUTS
+ *      prp_id - identifier of the dataspace
+ * OUTPUTS
+ *     classtype - class type; possible values are:
  *              H5P_ROOT_F       -1
  *              H5P_FILE_CREATE_F     0
  *              H5P_FILE_ACCESS_F     1
  *              H5P_DATASET_CREATE_F  2
  *              H5P_DATASET_XFER_F    3
  *              H5P_FILE_MOUNT_F      4
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Saturday, August 14, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 
 int_f
 nh5pget_class_c ( hid_t_f *prp_id , int_f *classtype)
+/******/
 {
     hid_t c_classtype;
     int_f ret_value = 0;
@@ -158,20 +200,26 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_preserve_c
- * Purpose:     Call H5Pset_preserve to set  transfer property for compound
+/****if* H5Pf/h5pset_preserve_c
+ * NAME
+ *        h5pset_preserve_c
+ * PURPOSE
+ *     Call H5Pset_preserve to set  transfer property for compound
  *              datatype
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              flag - TRUE/FALSE flag
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              Thursday, February 17, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  Thursday, February 17, 2000
+ * SOURCE
+*/
 
 int_f
 nh5pset_preserve_c ( hid_t_f *prp_id , int_f *flag)
+/******/
 {
   int ret_value = 0;
   hid_t c_prp_id;
@@ -186,20 +234,27 @@ nh5pset_preserve_c ( hid_t_f *prp_id , int_f *flag)
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_preserve_c
- * Purpose:     Call H5Pget_preserve to set  transfer property for compound
+/****if* H5Pf/h5pget_preserve_c
+ * NAME
+ *        h5pget_preserve_c
+ * PURPOSE
+ *     Call H5Pget_preserve to set  transfer property for compound
  *              datatype
- * Inputs:      prp_id - property list identifier
- * Outputs:     flag - TRUE/FALSE flag
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              Thursday, February 17, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * INPUTS
+ *      prp_id - property list identifier
+ * OUTPUTS
+ *     flag - TRUE/FALSE flag
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  Thursday, February 17, 2000
+ * SOURCE
+*/
 
 int_f
 nh5pget_preserve_c ( hid_t_f *prp_id , int_f *flag)
+/******/
 {
   int ret_value = 0;
   hid_t c_prp_id;
@@ -212,19 +267,25 @@ nh5pget_preserve_c ( hid_t_f *prp_id , int_f *flag)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_deflate_c
- * Purpose:     Call H5Pset_deflate to set deflate level
- * Inputs:      prp_id - property list identifier
+/****if* H5Pf/h5pset_deflate_c
+ * NAME
+ *        h5pset_deflate_c
+ * PURPOSE
+ *     Call H5Pset_deflate to set deflate level
+ * INPUTS
+ *      prp_id - property list identifier
  *              level - level of deflation
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Saturday, August 14, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 
 int_f
 nh5pset_deflate_c ( hid_t_f *prp_id , int_f *level)
+/******/
 {
   int ret_value = 0;
   hid_t c_prp_id;
@@ -240,21 +301,27 @@ nh5pset_deflate_c ( hid_t_f *prp_id , int_f *level)
 
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_chunk_c
- * Purpose:     Call H5Pset_chunk to set the sizes of chunks for a chunked
+/****if* H5Pf/h5pset_chunk_c
+ * NAME
+ *        h5pset_chunk_c
+ * PURPOSE
+ *     Call H5Pset_chunk to set the sizes of chunks for a chunked
  *              layout dataset
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              rank - number of dimensions of each chunk
  *              dims - array of the size of each chunk
- * Returns:     0 on success, -1 on failure
+ * RETURNS
+ *     0 on success, -1 on failure
  *              Saturday, August 14, 1999
- * Programmer:  Elena Pourmal
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * AUTHOR
+ *  Elena Pourmal
+ * SOURCE
+*/
 
 int_f
 nh5pset_chunk_c ( hid_t_f *prp_id, int_f *rank, hsize_t_f *dims )
+/******/
 {
   int ret_value = -1;
   hid_t c_prp_id;
@@ -285,21 +352,27 @@ DONE:
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_chunk_c
- * Purpose:     Call H5Pget_chunk to get the sizes of chunks for a chunked
+/****if* H5Pf/h5pget_chunk_c
+ * NAME
+ *        h5pget_chunk_c
+ * PURPOSE
+ *     Call H5Pget_chunk to get the sizes of chunks for a chunked
  *              layout dataset  for at list max_rank number of dimensions
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              max rank - maximum number of dimensions to return
  *              dims - array of the size of each chunk
- * Returns:     number of chunk's dimnesion on success, -1 on failure
+ * RETURNS
+ *     number of chunk's dimnesion on success, -1 on failure
  *              Saturday, August 14, 1999
- * Programmer:  Elena Pourmal
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * AUTHOR
+ *  Elena Pourmal
+ * SOURCE
+*/
 
 int_f
 nh5pget_chunk_c ( hid_t_f *prp_id, int_f *max_rank, hsize_t_f *dims )
+/******/
 {
   int ret_value = -1;
   hid_t c_prp_id;
@@ -327,21 +400,25 @@ nh5pget_chunk_c ( hid_t_f *prp_id, int_f *max_rank, hsize_t_f *dims )
   return ret_value;
 }
 
-
-
-/*----------------------------------------------------------------------------
- * Name:        h5pset_fill_valuec_c
- * Purpose:     Call h5pset_fill_value_c to a character fill value
- * Inputs:      prp_id - property list identifier
+/****if* H5Pf/h5pset_fill_valuec_c
+ * NAME
+ *        h5pset_fill_valuec_c
+ * PURPOSE
+ *     Call h5pset_fill_value_c to a character fill value
+ * INPUTS
+ *      prp_id - property list identifier
  *              type_id - datatype identifier (fill value is of type type_id)
  *              fillvalue  - character value
- * Returns:     0 on success, -1 on failure
+ * RETURNS
+ *     0 on success, -1 on failure
  *              Saturday, August 14, 1999
- * Programmer:  Elena Pourmal
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * AUTHOR
+ *  Elena Pourmal
+ * SOURCE
+*/
 int_f
 nh5pset_fill_valuec_c (hid_t_f *prp_id, hid_t_f *type_id, _fcd fillvalue)
+/******/
 {
      int ret_value = -1;
 
@@ -353,19 +430,25 @@ nh5pset_fill_valuec_c (hid_t_f *prp_id, hid_t_f *type_id, _fcd fillvalue)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_fill_value_c
- * Purpose:     Call H5Pset_fill_value to set a fillvalue for a dataset
- * Inputs:      prp_id - property list identifier
+/****if* H5Pf/h5pset_fill_value_c
+ * NAME
+ *        h5pset_fill_value_c
+ * PURPOSE
+ *     Call H5Pset_fill_value to set a fillvalue for a dataset
+ * INPUTS
+ *      prp_id - property list identifier
  *              type_id - datatype identifier (fill value is of type type_id)
  *              fillvalue - fillvalue
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Saturday, August 14, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5pset_fill_value_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -386,6 +469,7 @@ nh5pset_fill_value_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue)
 
 int_f
 nh5pset_fill_value_integer_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue)
+/******/
 {
      /*
       * Call h5pset_fill_value_c  function.
@@ -411,20 +495,27 @@ nh5pset_fill_value_double_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue)
      return nh5pset_fill_value_c(prp_id, type_id, fillvalue);
 }
 
-
-/*----------------------------------------------------------------------------
- * Name:        h5pget_fill_valuec_c
- * Purpose:     Call h5pget_fill_value_c to a character fill value
- * Inputs:      prp_id - property list identifier
+/****if* H5Pf/h5pget_fill_valuec_c
+ * NAME
+ *        h5pget_fill_valuec_c
+ * PURPOSE
+ *     Call h5pget_fill_value_c to a character fill value
+ * INPUTS
+ *      prp_id - property list identifier
  *              type_id - datatype identifier (fill value is of type type_id)
  *              fillvalue  - character value
- * Returns:     0 on success, -1 on failure
+ * RETURNS
+ *     0 on success, -1 on failure
  *              Saturday, August 14, 1999
- * Programmer:  Elena Pourmal
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * AUTHOR
+ *  Elena Pourmal
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_fill_valuec_c (hid_t_f *prp_id, hid_t_f *type_id, _fcd fillvalue)
+/******/
 {
      int ret_value = -1;
 
@@ -436,19 +527,25 @@ nh5pget_fill_valuec_c (hid_t_f *prp_id, hid_t_f *type_id, _fcd fillvalue)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_fill_value_c
- * Purpose:     Call H5Pget_fill_value to set a fillvalue for a dataset
- * Inputs:      prp_id - property list identifier
+/****if* H5Pf/h5pget_fill_value_c
+ * NAME
+ *        h5pget_fill_value_c
+ * PURPOSE
+ *     Call H5Pget_fill_value to set a fillvalue for a dataset
+ * INPUTS
+ *      prp_id - property list identifier
  *              type_id - datatype identifier (fill value is of type type_id)
  *              fillvalue - fillvalue
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Saturday, August 14, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5pget_fill_value_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -494,22 +591,31 @@ nh5pget_fill_value_double_c (hid_t_f *prp_id, hid_t_f *type_id, void *fillvalue)
      return nh5pset_fill_value_c(prp_id, type_id, fillvalue);
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_version_c
- * Purpose:     Call H5Pget_version to get the version information
+/****if* H5Pf/h5pget_version_c
+ * NAME
+ *        h5pget_version_c
+ * PURPOSE
+ *     Call H5Pget_version to get the version information
  *              of various objects for a file creation property list
- * Inputs:      prp_id - property list identifier
- * Outputs:     boot - array to put boot block version number
+ * INPUTS
+ *      prp_id - property list identifier
+ * OUTPUTS
+ *     boot - array to put boot block version number
  *              freelist - array to put global freelist version number
  *              stab - array to put symbol table version number
  *              shhdr - array to put shared object header version number
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Wednesday, February 23, 2000
- * Modifications: Removed extra length parameters EP 7/6/00
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * Removed extra length parameters EP 7/6/00
+ * SOURCE
+*/
 int_f
 nh5pget_version_c (hid_t_f *prp_id, int_f * boot,int_f * freelist, int_f * stab, int_f *shhdr)
+/******/
 {
      int ret_value = -1;
 #ifndef H5_NO_DEPRECATED_SYMBOLS
@@ -543,19 +649,25 @@ nh5pget_version_c (hid_t_f *prp_id, int_f * boot,int_f * freelist, int_f * stab,
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_userblock_c
- * Purpose:     Call H5Pget_userblock to get the size of a user block in
+/****if* H5Pf/h5pget_userblock_c
+ * NAME
+ *        h5pget_userblock_c
+ * PURPOSE
+ *     Call H5Pget_userblock to get the size of a user block in
  *              a file creation property list
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  * Outputs      size - Size of the user-block in bytes
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Wednesday, February 23, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5pget_userblock_c (hid_t_f *prp_id, hsize_t_f * size)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -575,19 +687,25 @@ nh5pget_userblock_c (hid_t_f *prp_id, hsize_t_f * size)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_userblock_c
- * Purpose:     Call H5Pset_userblock to set the size of a user block in
+/****if* H5Pf/h5pset_userblock_c
+ * NAME
+ *        h5pset_userblock_c
+ * PURPOSE
+ *     Call H5Pset_userblock to set the size of a user block in
  *              a file creation property list
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              size - Size of the user-block in bytes
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Wednesday, February 23, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5pset_userblock_c (hid_t_f *prp_id, hsize_t_f * size)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -606,20 +724,28 @@ nh5pset_userblock_c (hid_t_f *prp_id, hsize_t_f * size)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_sizes_c
- * Purpose:     Call H5Pget_sizes to get the size of the offsets
+/****if* H5Pf/h5pget_sizes_c
+ * NAME
+ *        h5pget_sizes_c
+ * PURPOSE
+ *     Call H5Pget_sizes to get the size of the offsets
  *              and lengths used in an HDF5 file
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  * Outputs      sizeof_addr - Size of an object offset in bytes
  *              sizeof_size - Size of an object length in bytes
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Wednesday, February 23, 2000
- * Modifications: Deleted extra length parameters. EP 6/7/00
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * Deleted extra length parameters. EP 6/7/00
+ * SOURCE
+*/
 int_f
 nh5pget_sizes_c (hid_t_f *prp_id, size_t_f * sizeof_addr, size_t_f * sizeof_size)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -641,19 +767,27 @@ nh5pget_sizes_c (hid_t_f *prp_id, size_t_f * sizeof_addr, size_t_f * sizeof_size
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_sizes_c
- * Purpose:     Call H5Pset_sizes to set the size of the offsets
- * Inputs:      prp_id - property list identifier
+/****if* H5Pf/h5pset_sizes_c
+ * NAME
+ *        h5pset_sizes_c
+ * PURPOSE
+ *     Call H5Pset_sizes to set the size of the offsets
+ * INPUTS
+ *      prp_id - property list identifier
  *              sizeof_addr - Size of an object offset in bytes
  *              sizeof_size - Size of an object length in bytes
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Wednesday, February 23, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_sizes_c (hid_t_f *prp_id, size_t_f * sizeof_addr, size_t_f * sizeof_size)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -673,20 +807,26 @@ nh5pset_sizes_c (hid_t_f *prp_id, size_t_f * sizeof_addr, size_t_f * sizeof_size
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_sym_k_c
- * Purpose:     Call H5Pset_sym_k to set the size of parameters used
+/****if* H5Pf/h5pset_sym_k_c
+ * NAME
+ *        h5pset_sym_k_c
+ * PURPOSE
+ *     Call H5Pset_sym_k to set the size of parameters used
  *              to control the symbol table node
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              ik - Symbol table tree rank
  *              lk - Symbol table node size
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, February 25, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5pset_sym_k_c (hid_t_f *prp_id, int_f* ik, int_f* lk)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -707,20 +847,29 @@ nh5pset_sym_k_c (hid_t_f *prp_id, int_f* ik, int_f* lk)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_sym_k_c
- * Purpose:     Call H5Pget_sym_k to get the size of parameters used
+/****if* H5Pf/h5pget_sym_k_c
+ * NAME
+ *        h5pget_sym_k_c
+ * PURPOSE
+ *     Call H5Pget_sym_k to get the size of parameters used
  *              to control the symbol table node
- * Inputs:      prp_id - property list identifier
- * Outputs:     ik - Symbol table tree rank
+ * INPUTS
+ *      prp_id - property list identifier
+ * OUTPUTS
+ *     ik - Symbol table tree rank
  *              lk - Symbol table node size
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, February 25, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_sym_k_c (hid_t_f *prp_id, int_f* ik, int_f* lk)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -740,19 +889,27 @@ nh5pget_sym_k_c (hid_t_f *prp_id, int_f* ik, int_f* lk)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_istore_k_c
- * Purpose:     Call H5Pset_istore_k to set the size of the parameter
+/****if* H5Pf/h5pset_istore_k_c
+ * NAME
+ *        h5pset_istore_k_c
+ * PURPOSE
+ *     Call H5Pset_istore_k to set the size of the parameter
  *              used to control the B-trees for indexing chunked datasets
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              ik - Symbol table tree rank
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, February 25, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_istore_k_c (hid_t_f *prp_id, int_f* ik)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -771,19 +928,28 @@ nh5pset_istore_k_c (hid_t_f *prp_id, int_f* ik)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_istore_k_c
- * Purpose:     Call H5Pget_istore_k to get the size of parameters used
+/****if* H5Pf/h5pget_istore_k_c
+ * NAME
+ *        h5pget_istore_k_c
+ * PURPOSE
+ *     Call H5Pget_istore_k to get the size of parameters used
  *              to control the B-trees for indexing chunked datasets
- * Inputs:      prp_id - property list identifier
- * Outputs:     ik - Symbol table tree rank
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * INPUTS
+ *      prp_id - property list identifier
+ * OUTPUTS
+ *     ik - Symbol table tree rank
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, February 25, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_istore_k_c (hid_t_f *prp_id, int_f* ik)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -801,18 +967,27 @@ nh5pget_istore_k_c (hid_t_f *prp_id, int_f* ik)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_driver_c
- * Purpose:     Call H5Pget_driver to get low-level file driver identifier
- * Inputs:      prp_id - property list identifier
- * Outputs:     driver - low-level file driver identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+/****if* H5Pf/h5pget_driver_c
+ * NAME
+ *        h5pget_driver_c
+ * PURPOSE
+ *     Call H5Pget_driver to get low-level file driver identifier
+ * INPUTS
+ *      prp_id - property list identifier
+ * OUTPUTS
+ *     driver - low-level file driver identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, February 25, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_driver_c (hid_t_f *prp_id, hid_t_f* driver)
+/******/
 {
      int ret_value = -1;
      hid_t c_driver;
@@ -830,18 +1005,26 @@ DONE:
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_fapl_stdio_c
- * Purpose:     Call H5Pset_stdio to set the low level file driver to
+/****if* H5Pf/h5pset_fapl_stdio_c
+ * NAME
+ *        h5pset_fapl_stdio_c
+ * PURPOSE
+ *     Call H5Pset_stdio to set the low level file driver to
  *              use the functions declared in the stdio.h
- * Inputs:      prp_id - property list identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * INPUTS
+ *      prp_id - property list identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              March 7, 2001
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_fapl_stdio_c (hid_t_f *prp_id)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -856,20 +1039,29 @@ nh5pset_fapl_stdio_c (hid_t_f *prp_id)
      return ret_value;
 }
 #ifdef NO_SUCH_F90_FUNCTION
-/*----------------------------------------------------------------------------
- * Name:        h5pget_fapl_stdio_c
- * Purpose:     Call H5Pget_fapl_stdio to determine whther the low level file driver
+/****if* H5Pf/h5pget_fapl_stdio_c
+ * NAME
+ *        h5pget_fapl_stdio_c
+ * PURPOSE
+ *     Call H5Pget_fapl_stdio to determine whther the low level file driver
  *              uses the functions declared in the stdio.h
- * Inputs:      prp_id - property list identifier
- * Outputs:     io - value indicates whether the file driver uses
+ * INPUTS
+ *      prp_id - property list identifier
+ * OUTPUTS
+ *     io - value indicates whether the file driver uses
  *                   the functions declared in the stdio.h
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              March 9, 2001
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_fapl_stdio_c (hid_t_f *prp_id, int_f* io)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -887,18 +1079,26 @@ nh5pget_fapl_stdio_c (hid_t_f *prp_id, int_f* io)
 
 #endif /*NO_SUCH_F90_FUNCTION*/
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_fapl_sec2_c
- * Purpose:     Call H5Pset_fapl_sec2 to set the low level file driver to
+/****if* H5Pf/h5pset_fapl_sec2_c
+ * NAME
+ *        h5pset_fapl_sec2_c
+ * PURPOSE
+ *     Call H5Pset_fapl_sec2 to set the low level file driver to
  *              use the functions declared in the  unistd.h
- * Inputs:      prp_id - property list identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * INPUTS
+ *      prp_id - property list identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              March 9, 2001
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_fapl_sec2_c (hid_t_f *prp_id)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -914,20 +1114,29 @@ nh5pset_fapl_sec2_c (hid_t_f *prp_id)
 }
 
 #ifdef NO_SUCH_F90_FUNCTION
-/*----------------------------------------------------------------------------
- * Name:        h5pget_fapl_sec2_c
- * Purpose:     Call H5Pget_fapl_stdio to determine whther the low level file driver
+/****if* H5Pf/h5pget_fapl_sec2_c
+ * NAME
+ *        h5pget_fapl_sec2_c
+ * PURPOSE
+ *     Call H5Pget_fapl_stdio to determine whther the low level file driver
  *              uses the functions declared in the  unistd.h
- * Inputs:      prp_id - property list identifier
- * Outputs:     sec2 - value indicates whether the file driver uses
+ * INPUTS
+ *      prp_id - property list identifier
+ * OUTPUTS
+ *     sec2 - value indicates whether the file driver uses
  *                   the functions declared in the  unistd.h
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              March 9, 2001
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_fapl_sec2_c (hid_t_f *prp_id, int_f* sec2)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -944,20 +1153,28 @@ nh5pget_fapl_sec2_c (hid_t_f *prp_id, int_f* sec2)
 }
 #endif /*NO_SUCH_F90_FUNCTION*/
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_alignment_c
- * Purpose:     Call H5Pset_alignment to set alignment properties of
+/****if* H5Pf/h5pset_alignment_c
+ * NAME
+ *        h5pset_alignment_c
+ * PURPOSE
+ *     Call H5Pset_alignment to set alignment properties of
  *              a file access property list
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              threshold - Threshold value
  *              alignment - Alignment value
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, February 25, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_alignment_c (hid_t_f *prp_id, hsize_t_f* threshold, hsize_t_f* alignment)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -975,20 +1192,28 @@ nh5pset_alignment_c (hid_t_f *prp_id, hsize_t_f* threshold, hsize_t_f* alignment
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_alignment_c
- * Purpose:     Call H5Pget_alignment to get alignment properties of
+/****if* H5Pf/h5pget_alignment_c
+ * NAME
+ *        h5pget_alignment_c
+ * PURPOSE
+ *     Call H5Pget_alignment to get alignment properties of
  *              a file access property list
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              threshold - Threshold value
  *              alignment - Alignment value
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, February 25, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_alignment_c (hid_t_f *prp_id, hsize_t_f* threshold, hsize_t_f* alignment)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1007,21 +1232,29 @@ nh5pget_alignment_c (hid_t_f *prp_id, hsize_t_f* threshold, hsize_t_f* alignment
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_fapl_core_c
- * Purpose:     Call H5Pset_fapl_core to set the low-level file driver
+/****if* H5Pf/h5pset_fapl_core_c
+ * NAME
+ *        h5pset_fapl_core_c
+ * PURPOSE
+ *     Call H5Pset_fapl_core to set the low-level file driver
  *              to use malloc() and free()
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              increment - File block size in bytes
  *              flag - Boolean flag indicating whether to write the
  *              file contents to disk when the file is closed.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              March 9, 2001
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_fapl_core_c (hid_t_f *prp_id, size_t_f* increment, int_f *flag)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1041,19 +1274,27 @@ nh5pset_fapl_core_c (hid_t_f *prp_id, size_t_f* increment, int_f *flag)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_fapl_core_c
- * Purpose:     Call H5Pget_fapl_core to determine whether the file access
+/****if* H5Pf/h5pget_fapl_core_c
+ * NAME
+ *        h5pget_fapl_core_c
+ * PURPOSE
+ *     Call H5Pget_fapl_core to determine whether the file access
  *              property list is set to the core drive
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  * Outputs      increment - File block size in bytes
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              March 9, 2001
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_fapl_core_c (hid_t_f *prp_id, size_t_f* increment, int_f *flag)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1073,21 +1314,29 @@ nh5pget_fapl_core_c (hid_t_f *prp_id, size_t_f* increment, int_f *flag)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_fapl_family_c
- * Purpose:     Call H5Pset_fapl_family to set the file access properties list
+/****if* H5Pf/h5pset_fapl_family_c
+ * NAME
+ *        h5pset_fapl_family_c
+ * PURPOSE
+ *     Call H5Pset_fapl_family to set the file access properties list
  *              to the family driver
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              memb_size -  Logical size, in bytes, of each family member.
  *              memb_plist - Identifier of the file access property list
  *                           for each member of the family
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              March 9, 2001
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_fapl_family_c(hid_t_f *prp_id, hsize_t_f* memb_size, hid_t_f* memb_plist )
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1106,21 +1355,29 @@ nh5pset_fapl_family_c(hid_t_f *prp_id, hsize_t_f* memb_size, hid_t_f* memb_plist
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_fapl_family_c
- * Purpose:     Call H5Pget_fapl_family to determine whether the file access
+/****if* H5Pf/h5pget_fapl_family_c
+ * NAME
+ *        h5pget_fapl_family_c
+ * PURPOSE
+ *     Call H5Pget_fapl_family to determine whether the file access
  *              property list is set to the family driver
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              memb_size -  Logical size, in bytes, of each family member.
  *              memb_plist - Identifier of the file access property list
  *                           for each member of the family
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              March 9, 2001
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_fapl_family_c(hid_t_f *prp_id, hsize_t_f* memb_size, hid_t_f* memb_plist)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1140,24 +1397,32 @@ nh5pget_fapl_family_c(hid_t_f *prp_id, hsize_t_f* memb_size, hid_t_f* memb_plist
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_cache_c
- * Purpose:     Call H5Pset_cache to set he number of elements in
+/****if* H5Pf/h5pset_cache_c
+ * NAME
+ *        h5pset_cache_c
+ * PURPOSE
+ *     Call H5Pset_cache to set he number of elements in
  *              the meta data cache and the total number of bytes in
  *              the raw data chunk cache
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              mdc_nelmts - Number of elements (objects) in the
  *                           meta data cache
  *              rdcc_nbytes - Total size of the raw data chunk cache, in bytes
  *              rdcc_w0 - Preemption policy
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, February 25, 2000
- * Modifications: Changed the type of the rdcc_w0 parameter to be real_f EP 7/7/00
+ * HISTORY
+ * Changed the type of the rdcc_w0 parameter to be real_f EP 7/7/00
  *                instead of double
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5pset_cache_c(hid_t_f *prp_id, int_f* mdc_nelmts, size_t_f* rdcc_nelmts,  size_t_f* rdcc_nbytes , real_f* rdcc_w0 )
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1181,26 +1446,35 @@ nh5pset_cache_c(hid_t_f *prp_id, int_f* mdc_nelmts, size_t_f* rdcc_nelmts,  size
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_cache_c
- * Purpose:     Call H5Pget_cache to get he number of elements in
+/****if* H5Pf/h5pget_cache_c
+ * NAME
+ *        h5pget_cache_c
+ * PURPOSE
+ *     Call H5Pget_cache to get he number of elements in
  *              the meta data cache and the total number of bytes in
  *              the raw data chunk cache
- * Inputs:      prp_id - property list identifier
- * Outputs:     mdc_nelmts - Number of elements (objects) in the
+ * INPUTS
+ *      prp_id - property list identifier
+ * OUTPUTS
+ *     mdc_nelmts - Number of elements (objects) in the
  *                           meta data cache
  *              rdcc_nelmts - Number of elements in the raw data chunk
  *              rdcc_nbytes - Total size of the raw data chunk cache, in bytes
  *              rdcc_w0 - Preemption policy
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, February 25, 2000
- * Modifications: Changed type of the rdcc_w0 parameter to be real_f instead of double
+ * HISTORY
+ * Changed type of the rdcc_w0 parameter to be real_f instead of double
  *                Changed type of the rdcc_nelmts parameter to be int_f.
  *                                                          EIP  October 10, 2003
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 int_f
 nh5pget_cache_c(hid_t_f *prp_id, int_f* mdc_nelmts, size_t_f* rdcc_nelmts, size_t_f* rdcc_nbytes , real_f* rdcc_w0)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1224,24 +1498,32 @@ nh5pget_cache_c(hid_t_f *prp_id, int_f* mdc_nelmts, size_t_f* rdcc_nelmts, size_
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_fapl_split_c
- * Purpose:     Call H5Pset_fapl_split to set he low-level driver to split meta data
+/****if* H5Pf/h5pset_fapl_split_c
+ * NAME
+ *        h5pset_fapl_split_c
+ * PURPOSE
+ *     Call H5Pset_fapl_split to set he low-level driver to split meta data
  *              from raw data
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              meta_len - Length of meta_ext
  *              meta_ext - Name of the extension for the metafile filename.
  *              meta_plist - Identifier of the meta file access property list
  *              raw_len - Length of raw _ext
  *              raw_ext - Name of the extension for the raw file filename.
  *              raw_plist - Identifier of the raw  file access property list
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              March 9, 2001
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_fapl_split_c(hid_t_f *prp_id, int_f* meta_len, _fcd meta_ext, hid_t_f* meta_plist, int_f* raw_len, _fcd raw_ext, hid_t_f * raw_plist)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1277,26 +1559,35 @@ DONE:
 
 
 #ifdef NO_SUCH_F90_FUNCTION
-/*----------------------------------------------------------------------------
- * Name:        h5pget_fapl_split_c
- * Purpose:     Call H5Pget_fapl_split to determine whether the file access
+/****if* H5Pf/h5pget_fapl_split_c
+ * NAME
+ *        h5pget_fapl_split_c
+ * PURPOSE
+ *     Call H5Pget_fapl_split to determine whether the file access
  *              property list is set to the split driver
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              meta_ext_size - Number of characters of the meta file extension
  *                              to be copied to the meta_ext buffer
  *              raw_ext_size - Number of characters of the raw file extension
  *                              to be copied to the raw_ext buffer
- *Outputs:      meta_ext - Name of the extension for the metafile filename.
+ *OUTPUT
+ *      meta_ext - Name of the extension for the metafile filename.
  *              meta_plist - Identifier of the meta file access property list
  *              raw_ext - Name of the extension for the raw file filename.
  *              raw_plist - Identifier of the raw  file access property list
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              March 9 , 2001
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_fapl_split_c(hid_t_f *prp_id, size_t_f* meta_ext_size , _fcd meta_ext, hid_t_f* meta_plist, size_t_f* raw_ext_size, _fcd raw_ext, hid_t_f * raw_plist)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1331,20 +1622,28 @@ nh5pget_fapl_split_c(hid_t_f *prp_id, size_t_f* meta_ext_size , _fcd meta_ext, h
 }
 #endif /*NO_SUCH_F90_FUNCTION*/
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_gc_references_c
- * Purpose:     Call H5Pset_gc_references to set garbage
+/****if* H5Pf/h5pset_gc_references_c
+ * NAME
+ *        h5pset_gc_references_c
+ * PURPOSE
+ *     Call H5Pset_gc_references to set garbage
  *              collecting references flag
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              gc_reference - flag for garbage collecting references
  *                             for the file
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, February 25, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_gc_references_c (hid_t_f *prp_id, int_f* gc_references)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1363,20 +1662,28 @@ nh5pset_gc_references_c (hid_t_f *prp_id, int_f* gc_references)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_gc_references_c
- * Purpose:     Call H5Pget_gc_references to set garbage
+/****if* H5Pf/h5pget_gc_references_c
+ * NAME
+ *        h5pget_gc_references_c
+ * PURPOSE
+ *     Call H5Pget_gc_references to set garbage
  *              collecting references flag
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  * Outputs      gc_reference - flag for garbage collecting references
  *                             for the file
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, February 25, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_gc_references_c (hid_t_f *prp_id, int_f* gc_references)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1393,19 +1700,27 @@ nh5pget_gc_references_c (hid_t_f *prp_id, int_f* gc_references)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_layout_c
- * Purpose:     Call H5Pset_layout to the type of storage used
+/****if* H5Pf/h5pset_layout_c
+ * NAME
+ *        h5pset_layout_c
+ * PURPOSE
+ *     Call H5Pset_layout to the type of storage used
  *              store the raw data for a dataset
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              layout - Type of storage layout for raw data.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, February 25, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_layout_c (hid_t_f *prp_id, int_f* layout)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1423,19 +1738,28 @@ nh5pset_layout_c (hid_t_f *prp_id, int_f* layout)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_layout_c
- * Purpose:     Call H5Pget_layout to the type of storage used
+/****if* H5Pf/h5pget_layout_c
+ * NAME
+ *        h5pget_layout_c
+ * PURPOSE
+ *     Call H5Pget_layout to the type of storage used
  *              store the raw data for a dataset
- * Inputs:      prp_id - property list identifier
- * Outputs:     layout - Type of storage layout for raw data.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * INPUTS
+ *      prp_id - property list identifier
+ * OUTPUTS
+ *     layout - Type of storage layout for raw data.
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, February 25, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_layout_c (hid_t_f *prp_id, int_f* layout)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1451,22 +1775,30 @@ nh5pget_layout_c (hid_t_f *prp_id, int_f* layout)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_filter_c
- * Purpose:     Call H5Pset_filter to add a filter to the filter pipeline.
- * Inputs:      prp_id - property list identifier
+/****if* H5Pf/h5pset_filter_c
+ * NAME
+ *        h5pset_filter_c
+ * PURPOSE
+ *     Call H5Pset_filter to add a filter to the filter pipeline.
+ * INPUTS
+ *      prp_id - property list identifier
  *              filter - Filter to be added to the pipeline.
  *              flags - Bit vector specifying certain general
  *                      properties of the filter.
  *              cd_nelmts - Number of elements in cd_values.
  *              cd_values - Auxiliary data for the filter.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Wednesday, February 23, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_filter_c (hid_t_f *prp_id, int_f* filter, int_f* flags, size_t_f* cd_nelmts, int_f* cd_values )
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1499,19 +1831,26 @@ DONE:
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_nfilters_c
- * Purpose:     Call H5Pget_nfilters to get the number of filters
- *              in the pipeline
- * Inputs:      prp_id - property list identifier
- * Outputs:     nfilters - number of filters defined in the filter pipline
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
- *              Friday, February 25, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+/****if* H5Pf/h5pget_nfilters_c
+ * NAME
+ *  h5pget_nfilters_c
+ * PURPOSE
+ *  Call H5Pget_nfilters to get the number of filters
+ *  in the pipeline
+ * INPUTS
+ *  prp_id   - property list identifier
+ * OUTPUTS
+ *  nfilters - number of filters defined in the filter pipline
+ * RETURNS
+ *  0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
+ *  Friday, February 25, 2000
+ * SOURCE
+*/
 int_f
 nh5pget_nfilters_c (hid_t_f *prp_id, int_f* nfilters)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1554,9 +1893,10 @@ nh5pget_nfilters_c (hid_t_f *prp_id, int_f* nfilters)
  *---------------------------------------------------------------------------*/
 int_f
 nh5pget_filter_c(hid_t_f *prp_id, int_f* filter_number, int_f* flags, size_t_f* cd_nelmts, int_f* cd_values, size_t_f *namelen, _fcd name, int_f* filter_id)
+/******/
 {
     unsigned int  c_flags;
-    size_t c_cd_nelmts;
+    size_t c_cd_nelmts = 0;
     H5Z_filter_t c_filter;
     unsigned int *c_cd_values = NULL;
     char *c_name = NULL;
@@ -1595,23 +1935,31 @@ DONE:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_external_c
- * Purpose:     Call H5Pset_external to add an external file to the
+/****if* H5Pf/h5pset_external_c
+ * NAME
+ *        h5pset_external_c
+ * PURPOSE
+ *     Call H5Pset_external to add an external file to the
  *              list of external files.
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              name - Name of an external file
  *              namelen - length of name
  *              offset - Offset, in bytes, from the beginning of the file
  *                       to the location in the file where the data starts.
  *              bytes - Number of bytes reserved in the file for the data.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Wednesday, February 23, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_external_c (hid_t_f *prp_id, _fcd name, int_f* namelen, int_f* offset, hsize_t_f*bytes)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1642,19 +1990,28 @@ DONE:
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_external_count_c
- * Purpose:     Call H5Pget_external_count to get the number of external
+/****if* H5Pf/h5pget_external_count_c
+ * NAME
+ *        h5pget_external_count_c
+ * PURPOSE
+ *     Call H5Pget_external_count to get the number of external
  *              files for the specified dataset.
- * Inputs:      prp_id - property list identifier
- * Outputs:     count - number of external files
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * INPUTS
+ *      prp_id - property list identifier
+ * OUTPUTS
+ *     count - number of external files
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, February 25, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_external_count_c (hid_t_f *prp_id, int_f* count)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1670,23 +2027,32 @@ nh5pget_external_count_c (hid_t_f *prp_id, int_f* count)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_external_c
- * Purpose:     Call H5Pget_external to get nformation about an external file.
- * Inputs:      prp_id - property list identifier
- *              name_size - length of name
- *              idx - External file index.
- *Outputs:      name - Name of an external file
- *              offset - Offset, in bytes, from the beginning of the file
- *                       to the location in the file where the data starts.
- *              bytes - Number of bytes reserved in the file for the data.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
- *              Wednesday, February 23, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+/****if* H5Pf/h5pget_external_c
+ * NAME
+ *        h5pget_external_c
+ * PURPOSE
+ *     Call H5Pget_external to get nformation about an external file.
+ * INPUTS
+ *    prp_id - property list identifier
+ * name_size - length of name
+ *       idx - External file index.
+ *OUTPUT
+ *      name - Name of an external file
+ *    offset - Offset, in bytes, from the beginning of the file
+ *             to the location in the file where the data starts.
+ *     bytes - Number of bytes reserved in the file for the data.
+ * RETURNS
+ *  on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
+ *  Wednesday, February 23, 2000
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_external_c(hid_t_f *prp_id, int_f *idx, size_t_f* name_size, _fcd name, int_f* offset, hsize_t_f*bytes)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1719,7 +2085,7 @@ nh5pget_external_c(hid_t_f *prp_id, int_f *idx, size_t_f* name_size, _fcd name,
       *       from the function then we need to give HD5packFstring the fortran buffer size so
       *       that it fills the remaining unused characters with blanks. MSB
       */
-     HD5packFstring(c_name, _fcdtocp(name), c_namelen+1);
+     HD5packFstring(c_name, _fcdtocp(name), c_namelen);
      ret_value = 0;
 
 DONE:
@@ -1727,22 +2093,30 @@ DONE:
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_btree_ratios_c
- * Purpose:     Call H5Pset_btree_ratios to set B-tree split ratios for B-tree split ratios for a dataset transfer property list. a
+/****if* H5Pf/h5pset_btree_ratios_c
+ * NAME
+ *        h5pset_btree_ratios_c
+ * PURPOSE
+ *     Call H5Pset_btree_ratios to set B-tree split ratios for B-tree split ratios for a dataset transfer property list. a
  *              dataset transfer property list.
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              left - The B-tree split ratio for left-most nodes.
  *              middle - The B-tree split ratio for all other nodes
  *              right - The B-tree split ratio for right-most nodes
  *                      and lone nodes.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, February 25, 2000
- * Modifications: Changed the type of the last three parameters from double to real_f
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * Changed the type of the last three parameters from double to real_f
+ * SOURCE
+*/
 int_f
 nh5pset_btree_ratios_c(hid_t_f *prp_id, real_f* left, real_f* middle, real_f* right)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1764,22 +2138,30 @@ nh5pset_btree_ratios_c(hid_t_f *prp_id, real_f* left, real_f* middle, real_f* ri
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_btree_ratios_c
- * Purpose:     Call H5Pget_btree_ratios to Gets B-tree split ratios
+/****if* H5Pf/h5pget_btree_ratios_c
+ * NAME
+ *        h5pget_btree_ratios_c
+ * PURPOSE
+ *     Call H5Pget_btree_ratios to Gets B-tree split ratios
  *              for a dataset transfer property list.
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              left - The B-tree split ratio for left-most nodes.
  *              middle - The B-tree split ratio for all other nodes
  *              right - The B-tree split ratio for right-most nodes
  *                      and lone nodes.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, February 25, 2000
- * Modifications: Changed the type of the last three parameters from double to real_f
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ * Changed the type of the last three parameters from double to real_f
+ * SOURCE
+*/
 int_f
 nh5pget_btree_ratios_c(hid_t_f *prp_id, real_f* left, real_f* middle, real_f* right)
+/******/
 {
      int ret_value = -1;
      hid_t c_prp_id;
@@ -1798,24 +2180,33 @@ nh5pget_btree_ratios_c(hid_t_f *prp_id, real_f* left, real_f* middle, real_f* ri
      ret_value = 0;
      return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pget_fclose_degree_c
- * Purpose:     Call H5Pget_fclose_degree to determine file close behavior
- * Inputs:      fapl_id - file access identifier
- * Outputs:
+/****if* H5Pf/h5pget_fclose_degree_c
+ * NAME
+ *        h5pget_fclose_degree_c
+ * PURPOSE
+ *     Call H5Pget_fclose_degree to determine file close behavior
+ * INPUTS
+ *      fapl_id - file access identifier
+ * OUTPUTS
+ *
  *              degree  - possible values are:
  *              		H5F_CLOSE_DEFAULT
  *              		H5F_CLOSE_WEAK
  *              		H5F_CLOSE_SEMI
  *              		H5F_CLOSE_STRONG
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, September 26, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pget_fclose_degree_c ( hid_t_f *fapl_id , int_f *degree)
+/******/
 {
   int ret_value = -1;
   hid_t c_fapl_id;
@@ -1829,23 +2220,31 @@ nh5pget_fclose_degree_c ( hid_t_f *fapl_id , int_f *degree)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_fclose_degree_c
- * Purpose:     Call H5Pset_fclose_degree to set file close behavior
- * Inputs:      fapl_id - file access identifier
+/****if* H5Pf/h5pset_fclose_degree_c
+ * NAME
+ *        h5pset_fclose_degree_c
+ * PURPOSE
+ *     Call H5Pset_fclose_degree to set file close behavior
+ * INPUTS
+ *      fapl_id - file access identifier
  *              degree  - possible values are:
  *              		H5F_CLOSE_DEFAULT
  *              		H5F_CLOSE_WEAK
  *              		H5F_CLOSE_SEMI
  *              		H5F_CLOSE_STRONG
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, September 26, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pset_fclose_degree_c ( hid_t_f *fapl_id , int_f *degree)
+/******/
 {
   int ret_value = -1;
   hid_t c_fapl_id;
@@ -1859,20 +2258,29 @@ nh5pset_fclose_degree_c ( hid_t_f *fapl_id , int_f *degree)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_buffer_c
- * Purpose:     Call H5Pset_buffer to set size of conversion buffer
- * Inputs:      prp_id - t`dataset trasfer property list identifier
+/****if* H5Pf/h5pset_buffer_c
+ * NAME
+ *        h5pset_buffer_c
+ * PURPOSE
+ *     Call H5Pset_buffer to set size of conversion buffer
+ * INPUTS
+ *      prp_id - t`dataset trasfer property list identifier
  *              size   - size of the buffer
- * Outputs:     NONE
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     NONE
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, October 2, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pset_buffer_c ( hid_t_f *prp_id , hsize_t_f *size)
+/******/
 {
   int ret_value = 0;
   hid_t c_prp_id;
@@ -1884,19 +2292,28 @@ nh5pset_buffer_c ( hid_t_f *prp_id , hsize_t_f *size)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_buffer_c
- * Purpose:     Call H5Pget_buffer to get size of conversion buffer
- * Inputs:      prp_id - t`dataset trasfer property list identifier
- * Outputs:     size - size of conversion buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Pf/h5pget_buffer_c
+ * NAME
+ *        h5pget_buffer_c
+ * PURPOSE
+ *     Call H5Pget_buffer to get size of conversion buffer
+ * INPUTS
+ *      prp_id - t`dataset trasfer property list identifier
+ * OUTPUTS
+ *     size - size of conversion buffer
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, October 2, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pget_buffer_c ( hid_t_f *prp_id , hsize_t_f *size)
+/******/
 {
   int ret_value = -1;
   hid_t c_prp_id;
@@ -1909,19 +2326,28 @@ nh5pget_buffer_c ( hid_t_f *prp_id , hsize_t_f *size)
   ret_value = 0;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pfill_value_defined_c
- * Purpose:     Call H5Pfill_value_defined to check if fill value is defined
- * Inputs:      prp_id - dataset creation property list identifier
- * Outputs:     flag - fill value status flag
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Pf/h5pfill_value_defined_c
+ * NAME
+ *        h5pfill_value_defined_c
+ * PURPOSE
+ *     Call H5Pfill_value_defined to check if fill value is defined
+ * INPUTS
+ *      prp_id - dataset creation property list identifier
+ * OUTPUTS
+ *     flag - fill value status flag
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Friday, October 4, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pfill_value_defined_c ( hid_t_f *prp_id , int_f *flag)
+/******/
 {
   int ret_value = -1;
   hid_t c_prp_id;
@@ -1933,20 +2359,29 @@ nh5pfill_value_defined_c ( hid_t_f *prp_id , int_f *flag)
   ret_value = 0;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pget_alloc_time_c
- * Purpose:     Call H5Pget_alloc_time to get space allocation
+/****if* H5Pf/h5pget_alloc_time_c
+ * NAME
+ *        h5pget_alloc_time_c
+ * PURPOSE
+ *     Call H5Pget_alloc_time to get space allocation
  *              time for dataset during creation
- * Inputs:      prp_id - dataset creation property list identifier
- * Outputs:     flag - allocation time flag
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * INPUTS
+ *      prp_id - dataset creation property list identifier
+ * OUTPUTS
+ *     flag - allocation time flag
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Friday, October 4, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pget_alloc_time_c ( hid_t_f *prp_id , int_f *flag)
+/******/
 {
   int ret_value = -1;
   hid_t c_prp_id;
@@ -1958,20 +2393,28 @@ nh5pget_alloc_time_c ( hid_t_f *prp_id , int_f *flag)
   ret_value = 0;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pset_alloc_time_c
- * Purpose:     Call H5Pset_alloc_time to get space allocation
+/****if* H5Pf/h5pset_alloc_time_c
+ * NAME
+ *        h5pset_alloc_time_c
+ * PURPOSE
+ *     Call H5Pset_alloc_time to get space allocation
  *              time for dataset during creation
- * Inputs:      prp_id - dataset creation property list identifier
+ * INPUTS
+ *      prp_id - dataset creation property list identifier
  *              flag - allocation time flag
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Friday, October 4, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pset_alloc_time_c ( hid_t_f *prp_id , int_f *flag)
+/******/
 {
   int ret_value = -1;
   hid_t c_prp_id;
@@ -1983,20 +2426,29 @@ nh5pset_alloc_time_c ( hid_t_f *prp_id , int_f *flag)
   ret_value = 0;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pget_fill_time_c
- * Purpose:     Call H5Pget_fill_time to get fill value writing
+/****if* H5Pf/h5pget_fill_time_c
+ * NAME
+ *        h5pget_fill_time_c
+ * PURPOSE
+ *     Call H5Pget_fill_time to get fill value writing
  *              time for dataset during creation
- * Inputs:      prp_id - dataset creation property list identifier
- * Outputs:     flag - fill value writing  time flag
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * INPUTS
+ *      prp_id - dataset creation property list identifier
+ * OUTPUTS
+ *     flag - fill value writing  time flag
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Friday, October 4, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pget_fill_time_c ( hid_t_f *prp_id , int_f *flag)
+/******/
 {
   int ret_value = -1;
   hid_t c_prp_id;
@@ -2008,20 +2460,28 @@ nh5pget_fill_time_c ( hid_t_f *prp_id , int_f *flag)
   ret_value = 0;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pset_fill_time_c
- * Purpose:     Call H5Pset_fill_time to set fill value writing
+/****if* H5Pf/h5pset_fill_time_c
+ * NAME
+ *        h5pset_fill_time_c
+ * PURPOSE
+ *     Call H5Pset_fill_time to set fill value writing
  *              time for dataset during creation
- * Inputs:      prp_id - dataset creation property list identifier
+ * INPUTS
+ *      prp_id - dataset creation property list identifier
  *              flag - fill value writing  time flag
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Friday, October 4, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pset_fill_time_c ( hid_t_f *prp_id , int_f *flag)
+/******/
 {
   int ret_value = -1;
   hid_t c_prp_id;
@@ -2033,20 +2493,29 @@ nh5pset_fill_time_c ( hid_t_f *prp_id , int_f *flag)
   ret_value = 0;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pset_meta_block_size_c
- * Purpose:     Call H5Pset_meta_block_size to set size of  metadata block
- * Inputs:      prp_id - file access  property list identifier
+/****if* H5Pf/h5pset_meta_block_size_c
+ * NAME
+ *        h5pset_meta_block_size_c
+ * PURPOSE
+ *     Call H5Pset_meta_block_size to set size of  metadata block
+ * INPUTS
+ *      prp_id - file access  property list identifier
  *              size   - size of the metadata block
- * Outputs:     NONE
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     NONE
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, October 7, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pset_meta_block_size_c ( hid_t_f *prp_id , hsize_t_f *size)
+/******/
 {
   int ret_value = 0;
   hid_t c_prp_id;
@@ -2057,20 +2526,29 @@ nh5pset_meta_block_size_c ( hid_t_f *prp_id , hsize_t_f *size)
   if ( H5Pset_meta_block_size(c_prp_id, c_size) < 0  ) ret_value = -1;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pget_meta_block_size_c
- * Purpose:     Call H5Pget_meta_block_size to get size of  metadata block
- * Inputs:      prp_id - file access  property list identifier
- * Outputs:
+/****if* H5Pf/h5pget_meta_block_size_c
+ * NAME
+ *        h5pget_meta_block_size_c
+ * PURPOSE
+ *     Call H5Pget_meta_block_size to get size of  metadata block
+ * INPUTS
+ *      prp_id - file access  property list identifier
+ * OUTPUTS
+ *
  *              size   - size of the metadata block
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, October 7, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pget_meta_block_size_c ( hid_t_f *prp_id , hsize_t_f *size)
+/******/
 {
   int ret_value = 0;
   hid_t c_prp_id;
@@ -2081,20 +2559,29 @@ nh5pget_meta_block_size_c ( hid_t_f *prp_id , hsize_t_f *size)
   *size = (hsize_t_f)c_size;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pset_sieve_buf_size_c
- * Purpose:     Call H5Pset_sieve_buf_size to set size of datasieve buffer
- * Inputs:      prp_id - file access  property list identifier
+/****if* H5Pf/h5pset_sieve_buf_size_c
+ * NAME
+ *        h5pset_sieve_buf_size_c
+ * PURPOSE
+ *     Call H5Pset_sieve_buf_size to set size of datasieve buffer
+ * INPUTS
+ *      prp_id - file access  property list identifier
  *              size   - size of the buffer
- * Outputs:     NONE
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     NONE
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, October 7, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pset_sieve_buf_size_c ( hid_t_f *prp_id , size_t_f *size)
+/******/
 {
   int ret_value = 0;
   hid_t c_prp_id;
@@ -2105,20 +2592,29 @@ nh5pset_sieve_buf_size_c ( hid_t_f *prp_id , size_t_f *size)
   if ( H5Pset_sieve_buf_size(c_prp_id, c_size) < 0  ) ret_value = -1;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pget_sieve_buf_size_c
- * Purpose:     Call H5Pget_sieve_buf_size to get size of datasieve buffer
- * Inputs:      prp_id - file access  property list identifier
- * Outputs:
+/****if* H5Pf/h5pget_sieve_buf_size_c
+ * NAME
+ *        h5pget_sieve_buf_size_c
+ * PURPOSE
+ *     Call H5Pget_sieve_buf_size to get size of datasieve buffer
+ * INPUTS
+ *      prp_id - file access  property list identifier
+ * OUTPUTS
+ *
  *              size   - size of the buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, October 7, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pget_sieve_buf_size_c ( hid_t_f *prp_id , size_t_f *size)
+/******/
 {
   int ret_value = 0;
   hid_t c_prp_id;
@@ -2129,20 +2625,29 @@ nh5pget_sieve_buf_size_c ( hid_t_f *prp_id , size_t_f *size)
   *size = (size_t_f)c_size;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pset_small_data_block_size_c
- * Purpose:     Call H5Pset_small_data_block_size to set size of raw small data block
- * Inputs:      prp_id - file access  property list identifier
+/****if* H5Pf/h5pset_small_data_block_size_c
+ * NAME
+ *        h5pset_small_data_block_size_c
+ * PURPOSE
+ *     Call H5Pset_small_data_block_size to set size of raw small data block
+ * INPUTS
+ *      prp_id - file access  property list identifier
  *              size   - size of the block
- * Outputs:     NONE
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     NONE
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, October 7, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pset_small_data_block_size_c ( hid_t_f *prp_id , hsize_t_f *size)
+/******/
 {
   int ret_value = 0;
   hid_t c_prp_id;
@@ -2153,20 +2658,29 @@ nh5pset_small_data_block_size_c ( hid_t_f *prp_id , hsize_t_f *size)
   if ( H5Pset_small_data_block_size(c_prp_id, c_size) < 0  ) ret_value = -1;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pget_small_data_block_size_c
- * Purpose:     Call H5Pget_small_data_block_size to get size of raw small data block
- * Inputs:      prp_id - file access  property list identifier
- * Outputs:
+/****if* H5Pf/h5pget_small_data_block_size_c
+ * NAME
+ *        h5pget_small_data_block_size_c
+ * PURPOSE
+ *     Call H5Pget_small_data_block_size to get size of raw small data block
+ * INPUTS
+ *      prp_id - file access  property list identifier
+ * OUTPUTS
+ *
  *              size   - size of the block
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, October 7, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pget_small_data_block_size_c ( hid_t_f *prp_id , hsize_t_f *size)
+/******/
 {
   int ret_value = 0;
   hid_t c_prp_id;
@@ -2177,20 +2691,29 @@ nh5pget_small_data_block_size_c ( hid_t_f *prp_id , hsize_t_f *size)
   *size = (hsize_t_f)c_size;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pset_hyper_vector_size_c
- * Purpose:     Call H5Pset_hyper_vector_size to set size of the hyper vector
- * Inputs:      prp_id - dataset transfer property list identifier
+/****if* H5Pf/h5pset_hyper_vector_size_c
+ * NAME
+ *        h5pset_hyper_vector_size_c
+ * PURPOSE
+ *     Call H5Pset_hyper_vector_size to set size of the hyper vector
+ * INPUTS
+ *      prp_id - dataset transfer property list identifier
  *              size   - size of the vector
- * Outputs:     NONE
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     NONE
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, October 7, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pset_hyper_vector_size_c ( hid_t_f *prp_id , size_t_f *size)
+/******/
 {
   int ret_value = 0;
   hid_t c_prp_id;
@@ -2201,20 +2724,29 @@ nh5pset_hyper_vector_size_c ( hid_t_f *prp_id , size_t_f *size)
   if ( H5Pset_hyper_vector_size(c_prp_id, c_size) < 0  ) ret_value = -1;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pget_hyper_vector_size_c
- * Purpose:     Call H5Pget_hyper_vector_size to get size of the hyper vector
- * Inputs:      prp_id - dataset transfer property list identifier
- * Outputs:
+/****if* H5Pf/h5pget_hyper_vector_size_c
+ * NAME
+ *        h5pget_hyper_vector_size_c
+ * PURPOSE
+ *     Call H5Pget_hyper_vector_size to get size of the hyper vector
+ * INPUTS
+ *      prp_id - dataset transfer property list identifier
+ * OUTPUTS
+ *
  *              size   - size of the vector
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, October 7, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pget_hyper_vector_size_c ( hid_t_f *prp_id , size_t_f *size)
+/******/
 {
   int ret_value = 0;
   hid_t c_prp_id;
@@ -2225,34 +2757,48 @@ nh5pget_hyper_vector_size_c ( hid_t_f *prp_id , size_t_f *size)
   *size = (size_t_f)c_size;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pcreate_class_c
- * Purpose:     Call H5Pcreate_class ito create a new property class
- * Inputs:      parent - property list class identifier
+
+/****if* H5Pf/h5pcreate_class_c
+ * NAME
+ *        h5pcreate_class_c
+ * PURPOSE
+ *     Call H5Pcreate_class ito create a new property class
+ * INPUTS
+ *      parent - property list class identifier
  *              name   - name of the new class
  *              name_len - lenght of the "name" buffer
- * Outputs:     cls - new class identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
-int_f
-nh5pcreate_class_c(hid_t_f *parent, _fcd name, int_f *name_len, hid_t_f *cls)
+ * OUTPUTS
+ *     class - new class identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  October 11, 2002
+ *
+ * HISTORY
+ *  Added the callback parameters (FORTRAN 2003 compilers only)
+ *  M. Scot Breitenfeld, July 3, 2008
+ * SOURCE
+*/
+int_f
+nh5pcreate_class_c(hid_t_f *parent, _fcd name, int_f *name_len, hid_t_f *cls,
+		   H5P_cls_create_func_t create, void *create_data,
+		   H5P_cls_copy_func_t copy, void *copy_data,
+		   H5P_cls_close_func_t close, void *close_data)
+/******/
 {
      int ret_value = -1;
-     hid_t c_parent;
      hid_t c_class;
      char* c_name;
 
      c_name = (char *)HD5f2cstring(name, (size_t)*name_len);
      if (c_name == NULL) goto DONE;
-     c_parent = (hid_t)*parent;
 
      /*
       * Call H5Pcreate_class function.
       */
-     c_class = H5Pcreate_class(c_parent, c_name, NULL, NULL,NULL,NULL,NULL,NULL);
+     c_class = H5Pcreate_class((hid_t)*parent, c_name, create, create_data, copy, copy_data, close, close_data);
+
      if (c_class < 0) goto DONE;
      *cls = (hid_t_f)c_class;
      ret_value = 0;
@@ -2262,21 +2808,30 @@ DONE:
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pregisterc_c
- * Purpose:     Call h5pregister_c to registers a permanent property
- * Inputs:      cls - property list class identifier
+
+/****if* H5Pf/h5pregisterc_c
+ * NAME
+ *        h5pregisterc_c
+ * PURPOSE
+ *     Call h5pregister_c to registers a permanent property
+ * INPUTS
+ *      class - property list class identifier
  *              name   - name of the new property
  *              name_len - length of the "name" buffer
  *              size - property size
  *              value - property value of character type
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  October 11, 2002
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pregisterc_c(hid_t_f *cls, _fcd name, int_f *name_len, size_t_f *size, _fcd value, int_f UNUSED *value_len)
+/******/
 {
      int ret_value = -1;
 
@@ -2287,21 +2842,29 @@ nh5pregisterc_c(hid_t_f *cls, _fcd name, int_f *name_len, size_t_f *size, _fcd v
       return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pregister_c
- * Purpose:     Call H5Pregister2 to registers a permanent property
- * Inputs:      cls - property list class identifier
+/****if* H5Pf/h5pregister_c
+ * NAME
+ *        h5pregister_c
+ * PURPOSE
+ *     Call H5Pregister2 to registers a permanent property
+ * INPUTS
+ *      class - property list class identifier
  *              name   - name of the new property
  *              name_len - length of the "name" buffer
  *              size - property size
  *              value - property value
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pregister_c(hid_t_f *cls, _fcd name, int_f *name_len, size_t_f *size, void UNUSED *value)
+/******/
 {
      char* c_name = NULL;
      int_f ret_value = -1;
@@ -2349,21 +2912,29 @@ nh5pregister_double_c(hid_t_f *cls, _fcd name, int_f *name_len, size_t_f *size,
      return nh5pregister_c(cls, name, name_len, size, value);
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pinsertc_c
- * Purpose:     Call h5pinsert_c to register a temporary property
- * Inputs:      plist - property list identifier
+/****if* H5Pf/h5pinsertc_c
+ * NAME
+ *        h5pinsertc_c
+ * PURPOSE
+ *     Call h5pinsert_c to register a temporary property
+ * INPUTS
+ *      plist - property list identifier
  *              name   - name of the new property
  *              name_len - length of the "name" buffer
  *              size - property size
  *              value - property value of character type
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pinsertc_c(hid_t_f *plist, _fcd name, int_f *name_len, size_t_f *size, _fcd value, int_f UNUSED *value_len)
+/******/
 {
      int_f ret_value = -1;
 
@@ -2374,21 +2945,29 @@ nh5pinsertc_c(hid_t_f *plist, _fcd name, int_f *name_len, size_t_f *size, _fcd v
       return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pinsert_c
- * Purpose:     Call H5Pinsert2 to iinsert a temporary property
- * Inputs:      plist - property list class identifier
+/****if* H5Pf/h5pinsert_c
+ * NAME
+ *        h5pinsert_c
+ * PURPOSE
+ *     Call H5Pinsert2 to iinsert a temporary property
+ * INPUTS
+ *      plist - property list class identifier
  *              name   - name of the new property
  *              name_len - length of the "name" buffer
  *              size - property size
  *              value - property value
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pinsert_c(hid_t_f *plist, _fcd name, int_f *name_len, size_t_f *size, void UNUSED *value)
+/******/
 {
      char* c_name = NULL;
      int_f ret_value = -1;
@@ -2436,20 +3015,28 @@ nh5pinsert_double_c(hid_t_f *plist, _fcd name, int_f *name_len, size_t_f *size,
      return nh5pinsert_c(plist, name, name_len, size, value);
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pexist_c
- * Purpose:     Call H5Pexist to querie whether a property name exists
+/****if* H5Pf/h5pexist_c
+ * NAME
+ *        h5pexist_c
+ * PURPOSE
+ *     Call H5Pexist to querie whether a property name exists
  *              in a property list or class
- * Inputs:      plist - property list or property class identifier
+ * INPUTS
+ *      plist - property list or property class identifier
  *              name   - name of the new property
  *              name_len - length of the "name" buffer
- * Returns:     nonnegative on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     nonnegative on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pexist_c(hid_t_f *cls, _fcd name, int_f *name_len)
+/******/
 {
      int_f ret_value = -1;
      hid_t c_class;
@@ -2470,19 +3057,27 @@ DONE:
      if(c_name != NULL) HDfree(c_name);
      return  ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pisa_class_c
- * Purpose:     Call H5Pisa_class to querie whether a property is a
+/****if* H5Pf/h5pisa_class_c
+ * NAME
+ *        h5pisa_class_c
+ * PURPOSE
+ *     Call H5Pisa_class to querie whether a property is a
  *              member of a class
- * Inputs:      plist - property list identifier
+ * INPUTS
+ *      plist - property list identifier
  *              cls - property class identifier
- * Returns:     nonnegative on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     nonnegative on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pisa_class_c(hid_t_f *plist, hid_t_f *cls)
+/******/
 {
      int_f ret_value = -1;
      hid_t c_class;
@@ -2499,20 +3094,29 @@ nh5pisa_class_c(hid_t_f *plist, hid_t_f *cls)
      ret_value = status;
      return  ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pget_size_c
- * Purpose:     Call H5Pget_size to querie the size of the property
- * Inputs:      plist - property list to query
+/****if* H5Pf/h5pget_size_c
+ * NAME
+ *        h5pget_size_c
+ * PURPOSE
+ *     Call H5Pget_size to querie the size of the property
+ * INPUTS
+ *      plist - property list to query
  *              name   - name of the property
  *              name_len - length of the "name" buffer
- * Outputs:     size - size of the property in bytes
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     size - size of the property in bytes
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_size_c(hid_t_f *plist, _fcd name, int_f *name_len, size_t_f *size)
+/******/
 {
      int_f ret_value = -1;
      hid_t c_plist;
@@ -2534,18 +3138,27 @@ DONE:
      if(c_name != NULL) HDfree(c_name);
      return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pget_nprops_c
- * Purpose:     Call H5Pget_nporps to get number of the properties in the list
- * Inputs:      plist - property list to query
- * Outputs:     nprops - number of properties in the list
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Pf/h5pget_nprops_c
+ * NAME
+ *        h5pget_nprops_c
+ * PURPOSE
+ *     Call H5Pget_nporps to get number of the properties in the list
+ * INPUTS
+ *      plist - property list to query
+ * OUTPUTS
+ *     nprops - number of properties in the list
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_nprops_c(hid_t_f *plist, size_t_f *nprops)
+/******/
 {
      int_f ret_value = -1;
      hid_t c_plist;
@@ -2562,19 +3175,28 @@ nh5pget_nprops_c(hid_t_f *plist, size_t_f *nprops)
      ret_value = 0;
      return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pget_class_parent_c
- * Purpose:     Call H5Pget_class_parent to get the parent class of
+/****if* H5Pf/h5pget_class_parent_c
+ * NAME
+ *        h5pget_class_parent_c
+ * PURPOSE
+ *     Call H5Pget_class_parent to get the parent class of
  *              a genereic property class
- * Inputs:      prp_id - property list to query
- * Outputs:     parent_id - parent classs identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * INPUTS
+ *      prp_id - property list to query
+ * OUTPUTS
+ *     parent_id - parent classs identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_class_parent_c(hid_t_f *prp_id, hid_t_f *parent_id)
+/******/
 {
      int_f ret_value = -1;
      hid_t c_prp_id;
@@ -2592,21 +3214,29 @@ nh5pget_class_parent_c(hid_t_f *prp_id, hid_t_f *parent_id)
      ret_value = 0;
      return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pcopy_prop_c
- * Purpose:     Call H5Pcopy_prop to copy a property from one list or
+/****if* H5Pf/h5pcopy_prop_c
+ * NAME
+ *        h5pcopy_prop_c
+ * PURPOSE
+ *     Call H5Pcopy_prop to copy a property from one list or
  *              class to another
- * Inputs:      dst_id - identifier of destination property list
+ * INPUTS
+ *      dst_id - identifier of destination property list
  *              src_id - identifier of source property list
  *              name   - name of the property
  *              name_len - length of the "name" buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pcopy_prop_c(hid_t_f *dst_id, hid_t_f *src_id, _fcd name, int_f *name_len)
+/******/
 {
      int_f ret_value = -1;
      hid_t c_dst_id, c_src_id;
@@ -2627,19 +3257,27 @@ DONE:
      if(c_name != NULL) HDfree(c_name);
      return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5premove_c
- * Purpose:     Call H5Premove to remove a property from a list
- * Inputs:      plid - identifier of property list
+/****if* H5Pf/h5premove_c
+ * NAME
+ *        h5premove_c
+ * PURPOSE
+ *     Call H5Premove to remove a property from a list
+ * INPUTS
+ *      plid - identifier of property list
  *              name   - name of the property to remove
  *              name_len - length of the "name" buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5premove_c(hid_t_f *plid, _fcd name, int_f *name_len)
+/******/
 {
      int_f ret_value = -1;
      hid_t c_plid;
@@ -2659,19 +3297,27 @@ DONE:
      if(c_name != NULL) HDfree(c_name);
      return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5punregister_c
- * Purpose:     Call H5Punregister to remove a property from a property class
- * Inputs:      cls - identifier of property class
+/****if* H5Pf/h5punregister_c
+ * NAME
+ *        h5punregister_c
+ * PURPOSE
+ *     Call H5Punregister to remove a property from a property class
+ * INPUTS
+ *      cls - identifier of property class
  *              name   - name of the property to unregister
  *              name_len - length of the "name" buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  October 11, 2002
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5punregister_c(hid_t_f *cls, _fcd name, int_f *name_len)
+/******/
 {
      int_f ret_value = -1;
      hid_t c_class;
@@ -2691,17 +3337,25 @@ DONE:
      if(c_name != NULL) HDfree(c_name);
      return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pclose_class_c
- * Purpose:     Call H5Pclose_class to close property class
- * Inputs:      cls - identifier of property class to close
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+/****if* H5Pf/h5pclose_class_c
+ * NAME
+ *        h5pclose_class_c
+ * PURPOSE
+ *     Call H5Pclose_class to close property class
+ * INPUTS
+ *      class - identifier of property class to close
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  October 11, 2002
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pclose_class_c(hid_t_f *cls)
+/******/
 {
      int_f ret_value = -1;
      hid_t c_class;
@@ -2714,19 +3368,27 @@ nh5pclose_class_c(hid_t_f *cls)
      ret_value = 0;
      return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pget_class_name_c
- * Purpose:     Call H5Pget_class_name to get property class name
- * Inputs:      cls - identifier of property class
+/****if* H5Pf/h5pget_class_name_c
+ * NAME
+ *        h5pget_class_name_c
+ * PURPOSE
+ *     Call H5Pget_class_name to get property class name
+ * INPUTS
+ *      cls - identifier of property class
  *              name   - ibuffer to retrieve name in
  *              name_len - length of the "name" buffer
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  October 11, 2002
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_class_name_c(hid_t_f *cls, _fcd name, int_f *name_len)
+/******/
 {
      int_f ret_value = -1;
      char *c_name = NULL;          /* Buffer to hold C string */
@@ -2753,21 +3415,28 @@ DONE:
      HDfree(c_name);
      return ret_value;
 }
-
-/*----------------------------------------------------------------------------
- * Name:        h5pset_c
- * Purpose:     Call h5setc_c to set property with the character string value
- * Inputs:      plist - property list identifier
+/****if* H5Pf/h5psetc_c
+ * NAME
+ *        h5psetc_c
+ * PURPOSE
+ *     Call h5setc_c to set property with the character string value
+ * INPUTS
+ *      plist - property list identifier
  *              name   - name of property
  *              name_len - length of the "name" buffer
  *              value - property value of character type
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5psetc_c(hid_t_f *plist, _fcd name, int_f *name_len, _fcd value, int_f UNUSED *value_len)
+/******/
 {
      int_f ret_value = -1;
 
@@ -2778,33 +3447,39 @@ nh5psetc_c(hid_t_f *plist, _fcd name, int_f *name_len, _fcd value, int_f UNUSED
       return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_c
- * Purpose:     Call H5Pset to set property value
- * Inputs:      plist - property list class identifier
+/****if* H5Pf/h5pset_c
+ * NAME
+ *        h5pset_c
+ * PURPOSE
+ *     Call H5Pset to set property value
+ * INPUTS
+ *      plist - property list class identifier
  *              name   - name of the new property
  *              name_len - length of the "name" buffer
  *              value - property value
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  October 11, 2002
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
-nh5pset_c(hid_t_f *plist, _fcd name, int_f *name_len, void UNUSED *value)
+nh5pset_c(hid_t_f *plist, _fcd name, int_f *name_len, void *value)
+/******/
 {
      int_f ret_value = -1;
-     hid_t c_plist;
      char* c_name;
 
      c_name = (char *)HD5f2cstring(name, (size_t)*name_len);
      if (c_name == NULL) goto DONE;
-     c_plist = (hid_t)*plist;
 
      /*
       * Call H5Pset function.
       */
-     if( H5Pset(c_plist, c_name, value) <0) goto DONE;
+     if( H5Pset((hid_t)*plist, c_name, value) <0) goto DONE;
      ret_value = 0;
 
 DONE:
@@ -2838,20 +3513,28 @@ nh5pset_double_c(hid_t_f *plist, _fcd name, int_f *name_len, void *value)
       */
      return nh5pset_c(plist, name, name_len, value);
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pgetc_c
- * Purpose:     Call h5set_c to set property with the character string value
- * Inputs:      plist - property list identifier
+/****if* H5Pf/h5pgetc_c
+ * NAME
+ *        h5pgetc_c
+ * PURPOSE
+ *     Call h5set_c to set property with the character string value
+ * INPUTS
+ *      plist - property list identifier
  *              name   - name of property
  *              name_len - length of the "name" buffer
  * Output:      value - property value of character type
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pgetc_c(hid_t_f *plist, _fcd name, int_f *name_len, _fcd value, int_f UNUSED *value_len)
+/******/
 {
      int_f ret_value = -1;
 
@@ -2862,33 +3545,39 @@ nh5pgetc_c(hid_t_f *plist, _fcd name, int_f *name_len, _fcd value, int_f UNUSED
       return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_c
- * Purpose:     Call H5Pget to set property value
- * Inputs:      plist - property list class identifier
+/****if* H5Pf/h5pget_c
+ * NAME
+ *        h5pget_c
+ * PURPOSE
+ *     Call H5Pget to set property value
+ * INPUTS
+ *      plist - property list class identifier
  *              name   - name of the new property
  *              name_len - length of the "name" buffer
  * Output:      value - property value
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              October 11, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
-nh5pget_c(hid_t_f *plist, _fcd name, int_f *name_len, void UNUSED *value)
+nh5pget_c(hid_t_f *plist, _fcd name, int_f *name_len, void *value)
+/******/
 {
      int_f ret_value = -1;
-     hid_t c_plist;
      char* c_name;
 
      c_name = (char *)HD5f2cstring(name, (size_t)*name_len);
      if (c_name == NULL) goto DONE;
-     c_plist = (hid_t)*plist;
 
      /*
       * Call H5Pset function.
       */
-     if( H5Pget(c_plist, c_name, value) <0) goto DONE;
+     if( H5Pget((hid_t)*plist, c_name, value) <0) goto DONE;
      ret_value = 0;
 
 DONE:
@@ -2924,19 +3613,27 @@ nh5pget_double_c(hid_t_f *plist, _fcd name, int_f *name_len, void *value)
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_shuffle_c
- * Purpose:     Call H5Pset_shuffle
- * Inputs:      prp_id - property list identifier
+/****if* H5Pf/h5pset_shuffle_c
+ * NAME
+ *        h5pset_shuffle_c
+ * PURPOSE
+ *     Call H5Pset_shuffle
+ * INPUTS
+ *      prp_id - property list identifier
  *              type_size - size of the datatype in bytes
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, March 12, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pset_shuffle_c ( hid_t_f *prp_id )
+/******/
 {
   int_f ret_value = 0;
   hid_t c_prp_id;
@@ -2947,18 +3644,26 @@ nh5pset_shuffle_c ( hid_t_f *prp_id )
   if ( status < 0  ) ret_value = -1;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pset_fletcher32_c
- * Purpose:     Call H5Pset_fletcher32 to enable EDC
- * Inputs:      prp_id - dataset creation property list identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Pf/h5pset_fletcher32_c
+ * NAME
+ *        h5pset_fletcher32_c
+ * PURPOSE
+ *     Call H5Pset_fletcher32 to enable EDC
+ * INPUTS
+ *      prp_id - dataset creation property list identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, March 13, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pset_fletcher32_c ( hid_t_f *prp_id )
+/******/
 {
   int_f ret_value = 0;
   hid_t c_prp_id;
@@ -2970,19 +3675,27 @@ nh5pset_fletcher32_c ( hid_t_f *prp_id )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_edc_check_c
- * Purpose:     Call H5Pset_edc_check to enable EDC
- * Inputs:      prp_id - dataset transfer property list identifier
+/****if* H5Pf/h5pset_edc_check_c
+ * NAME
+ *        h5pset_edc_check_c
+ * PURPOSE
+ *     Call H5Pset_edc_check to enable EDC
+ * INPUTS
+ *      prp_id - dataset transfer property list identifier
  *              flag   - EDC flag
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, March 13, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pset_edc_check_c ( hid_t_f *prp_id, int_f *flag )
+/******/
 {
   int_f ret_value = 0;
   hid_t c_prp_id;
@@ -2996,19 +3709,27 @@ nh5pset_edc_check_c ( hid_t_f *prp_id, int_f *flag )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_edc_check_c
- * Purpose:     Call H5Pget_edc_check to query EDC
- * Inputs:      prp_id - dataset transfer property list identifier
+/****if* H5Pf/h5pget_edc_check_c
+ * NAME
+ *        h5pget_edc_check_c
+ * PURPOSE
+ *     Call H5Pget_edc_check to query EDC
+ * INPUTS
+ *      prp_id - dataset transfer property list identifier
  * Outouts:     flag   - EDC flag
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, March 13, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pget_edc_check_c ( hid_t_f *prp_id, int_f *flag )
+/******/
 {
   int_f ret_value = 0;
   hid_t c_prp_id;
@@ -3020,19 +3741,27 @@ nh5pget_edc_check_c ( hid_t_f *prp_id, int_f *flag )
   *flag = (int_f)c_flag;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pset_family_offset_c
- * Purpose:     Call H5Pset_family_offset to set and offset for family driver
- * Inputs:      prp_id - property list identifier
+/****if* H5Pf/h5pset_family_offset_c
+ * NAME
+ *        h5pset_family_offset_c
+ * PURPOSE
+ *     Call H5Pset_family_offset to set and offset for family driver
+ * INPUTS
+ *      prp_id - property list identifier
  *              offset - offset in bytes
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, 19 March 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pset_family_offset_c ( hid_t_f *prp_id , hsize_t_f *offset)
+/******/
 {
   int_f ret_value = 0;
   hid_t c_prp_id;
@@ -3046,25 +3775,33 @@ nh5pset_family_offset_c ( hid_t_f *prp_id , hsize_t_f *offset)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_fapl_multi_c
- * Purpose:     Call H5Pset_fapl_multi to set multi file dirver
- * Inputs:      prp_id - file_creation property list identifier
+/****if* H5Pf/h5pset_fapl_multi_c
+ * NAME
+ *        h5pset_fapl_multi_c
+ * PURPOSE
+ *     Call H5Pset_fapl_multi to set multi file dirver
+ * INPUTS
+ *      prp_id - file_creation property list identifier
  *              mem_map - memory mapping array
  *              memb_fapl - property list for each memory usage type
  *              memb_name - array with members names
  *              len - array with the lenght of each name
  *              lenmax - lenght of the name a sdeclared in Fortran
  *              flag - flag allowing partila access when one of the files is missing
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday 24, March 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 /*nh5pset_fapl_multi_c ( hid_t_f *prp_id , int_f *memb_map, hid_t_f *memb_fapl, _fcd memb_name, int_f *len, int_f *lenmax, haddr_t_f *memb_addr, int_f *flag) */
 nh5pset_fapl_multi_c ( hid_t_f *prp_id , int_f *memb_map, hid_t_f *memb_fapl, _fcd memb_name, int_f *len, int_f *lenmax, real_f *memb_addr, int_f *flag)
+/******/
 {
   int_f ret_value = -1;
   hid_t c_prp_id;
@@ -3126,18 +3863,26 @@ DONE:
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_fapl_multi_sc
- * Purpose:     Call H5Pset_fapl_multi to set multi file dirver
- * Inputs:      prp_id - file_creation property list identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Pf/h5pset_fapl_multi_sc
+ * NAME
+ *        h5pset_fapl_multi_sc
+ * PURPOSE
+ *     Call H5Pset_fapl_multi to set multi file dirver
+ * INPUTS
+ *      prp_id - file_creation property list identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              March 31 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pset_fapl_multi_sc ( hid_t_f *prp_id , int_f *flag)
+/******/
 {
   int_f ret_value = -1;
   hid_t c_prp_id;
@@ -3155,24 +3900,33 @@ nh5pset_fapl_multi_sc ( hid_t_f *prp_id , int_f *flag)
   ret_value = 0;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pget_fapl_multi_c
- * Purpose:     Call H5Pget_fapl_multi to set multi file dirver
- * Inputs:      prp_id - file_creation property list identifier
+/****if* H5Pf/h5pget_fapl_multi_c
+ * NAME
+ *        h5pget_fapl_multi_c
+ * PURPOSE
+ *     Call H5Pget_fapl_multi to set multi file dirver
+ * INPUTS
+ *      prp_id - file_creation property list identifier
  *              lenmax - lenght of the name a sdeclared in Fortran
- * Outputs:     memb_map - memory mapping array
+ * OUTPUTS
+ *     memb_map - memory mapping array
  *              memb_fapl - property list for each memory usage type
  *              memb_name - array with members names
  *              len - array with the lenght of each name
  *              flag - flag allowing partila access when one of the files is missing
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday 24, March 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pget_fapl_multi_c ( hid_t_f *prp_id , int_f *memb_map, hid_t_f *memb_fapl, _fcd memb_name, int_f *len, int_f *lenmax, real_f *memb_addr, int_f *flag, int_f *maxlen_out)
+/******/
 {
   int_f ret_value = -1;
   hid_t c_prp_id;
@@ -3230,20 +3984,28 @@ HD5packFstring(tmp, _fcdtocp(memb_name), (size_t)(c_lenmax*H5FD_MEM_NTYPES));
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_szip_c
- * Purpose:     Call H5Pset_szip to set szip compression
- * Inputs:      prp_id - dataset creation property list identifier
+/****if* H5Pf/h5pset_szip_c
+ * NAME
+ *        h5pset_szip_c
+ * PURPOSE
+ *     Call H5Pset_szip to set szip compression
+ * INPUTS
+ *      prp_id - dataset creation property list identifier
  *              options_mask
  *              pixels_per_block -szip compression parameters
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              April 8 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pset_szip_c ( hid_t_f *prp_id , int_f *options_mask, int_f *pixels_per_block)
+/******/
 {
   int_f ret_value = -1;
   hid_t c_prp_id;
@@ -3263,19 +4025,28 @@ nh5pset_szip_c ( hid_t_f *prp_id , int_f *options_mask, int_f *pixels_per_block)
   ret_value = 0;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pall_filters_avail_c
- * Purpose:     Call H5Pall_filters_avail
- * Inputs:      prp_id - dataset creation property list identifier
- * Outputs:     status - logical flag
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Pf/h5pall_filters_avail_c
+ * NAME
+ *        h5pall_filters_avail_c
+ * PURPOSE
+ *     Call H5Pall_filters_avail
+ * INPUTS
+ *      prp_id - dataset creation property list identifier
+ * OUTPUTS
+ *     status - logical flag
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              April 10 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pall_filters_avail_c ( hid_t_f *prp_id , int_f *status)
+/******/
 {
   int_f ret_value = -1;
   hid_t c_prp_id;
@@ -3295,25 +4066,34 @@ nh5pall_filters_avail_c ( hid_t_f *prp_id , int_f *status)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_filter_by_id_c
- * Purpose:     Call H5Pget_filter_by_id2 to get information about a filter
+/****if* H5Pf/h5pget_filter_by_id_c
+ * NAME
+ *        h5pget_filter_by_id_c
+ * PURPOSE
+ *     Call H5Pget_filter_by_id2 to get information about a filter
  *              in a pipeline
- * Inputs:      prp_id - property list identifier
+ * INPUTS
+ *      prp_id - property list identifier
  *              filter_id - filter id
  *              namelen - Anticipated number of characters in name.
- *Outputs:      flags - Bit vector specifying certain general
+ *OUTPUT
+ *      flags - Bit vector specifying certain general
  *                      properties of the filter.
  *              cd_nelmts - Number of elements in cd_value
  *              cd_values - Auxiliary data for the filter.
  *              name - Name of the filter
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena POurmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena POurmal
  *              April 10, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_filter_by_id_c(hid_t_f *prp_id, int_f* filter_id, int_f* flags, size_t_f* cd_nelmts, int_f* cd_values, size_t_f *namelen, _fcd name)
+/******/
 {
      unsigned int c_flags;
      size_t c_cd_nelmts = (size_t)*cd_nelmts;
@@ -3353,22 +4133,30 @@ DONE:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pmodify_filter_c
- * Purpose:     Call H5Pmodify_filter to modify a filter
- * Inputs:      prp_id - property list identifier
+/****if* H5Pf/h5pmodify_filter_c
+ * NAME
+ *        h5pmodify_filter_c
+ * PURPOSE
+ *     Call H5Pmodify_filter to modify a filter
+ * INPUTS
+ *      prp_id - property list identifier
  *              filter - Filter to be modified
  *              flags - Bit vector specifying certain general
  *                      properties of the filter.
  *              cd_nelmts - Number of elements in cd_values.
  *              cd_values - Auxiliary data for the filter.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              April 10 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pmodify_filter_c (hid_t_f *prp_id, int_f* filter, int_f* flags, size_t_f* cd_nelmts, int_f* cd_values )
+/******/
 {
      int_f ret_value = -1;
      hid_t c_prp_id;
@@ -3401,18 +4189,26 @@ DONE:
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5premove_filter_c
- * Purpose:     Call H5Premove_filter to delete one or more filters
- * Inputs:      prp_id - property list identifier
+/****if* H5Pf/h5premove_filter_c
+ * NAME
+ *        h5premove_filter_c
+ * PURPOSE
+ *     Call H5Premove_filter to delete one or more filters
+ * INPUTS
+ *      prp_id - property list identifier
  *              filter - Filter to be deleted
- * Returns:     0 on success, -1 on failure
- * Programmer:  Quincey Koziol
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Quincey Koziol
  *              January 27 2004
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5premove_filter_c (hid_t_f *prp_id, int_f* filter)
+/******/
 {
      int_f ret_value = -1;
      hid_t c_prp_id;
@@ -3431,20 +4227,28 @@ DONE:
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_attr_phase_change_c
- * Purpose:     Calls H5Pget_attr_phase_change
+/****if* H5Pf/h5pget_attr_phase_change_c
+ * NAME
+ *        h5pget_attr_phase_change_c
+ * PURPOSE
+ *     Calls H5Pget_attr_phase_change
  *
- * Inputs:      ocpl_id		- Object (dataset or group) creation property list identifier
+ * INPUTS
+ *      ocpl_id		- Object (dataset or group) creation property list identifier
  * Outputs      max_compact     - Maximum number of attributes to be stored in compact storage
  *              min_dense       - Minimum number of attributes to be stored in dense storage
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_attr_phase_change_c(hid_t_f *ocpl_id, int_f *max_compact, int_f *min_dense )
+/******/
 {
   int ret_value = -1;
   hid_t c_ocpl_id;
@@ -3464,19 +4268,27 @@ nh5pget_attr_phase_change_c(hid_t_f *ocpl_id, int_f *max_compact, int_f *min_den
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_attr_creation_order_c
- * Purpose:     Calls H5Ppset_attr_creation_order
+/****if* H5Pf/h5pset_attr_creation_order_c
+ * NAME
+ *        h5pset_attr_creation_order_c
+ * PURPOSE
+ *     Calls H5Ppset_attr_creation_order
  *
- * Inputs:      ocpl_id		- Object (dataset or group) creation property list identifier
+ * INPUTS
+ *      ocpl_id		- Object (dataset or group) creation property list identifier
  * Outputs      crt_order_flags - Flags specifying whether to track and index attribute creation order
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_attr_creation_order_c(hid_t_f *ocpl_id, int_f *crt_order_flags )
+/******/
 {
   int ret_value = -1;
   unsigned c_crt_order_flags;
@@ -3493,23 +4305,32 @@ nh5pset_attr_creation_order_c(hid_t_f *ocpl_id, int_f *crt_order_flags )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_shared_mesg_nindexes_c
- * Purpose:     Calls h5pset_shared_mesg_nindexes
+/****if* H5Pf/h5pset_shared_mesg_nindexes_c
+ * NAME
+ *        h5pset_shared_mesg_nindexes_c
+ * PURPOSE
+ *     Calls h5pset_shared_mesg_nindexes
+ *
+ * INPUTS
  *
- * Inputs:
  *       plist_id - file creation property list
  *       nindexes - Number of shared object header message indexes
  *                   available in files created WITH this property list
  *
- * Outputs:
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * OUTPUTS
+ *
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_shared_mesg_nindexes_c(hid_t_f *plist_id, int_f *nindexes )
+/******/
 {
   int ret_value = -1;
   hid_t c_plist_id;
@@ -3527,24 +4348,33 @@ nh5pset_shared_mesg_nindexes_c(hid_t_f *plist_id, int_f *nindexes )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_shared_mesg_index_c
- * Purpose:     Calls H5Pset_shared_mesg_index
+/****if* H5Pf/h5pset_shared_mesg_index_c
+ * NAME
+ *        h5pset_shared_mesg_index_c
+ * PURPOSE
+ *     Calls H5Pset_shared_mesg_index
+ *
+ * INPUTS
  *
- * Inputs:
  *            fcpl_id - File creation property list identifier.
  *          index_num - Index being configured.
  *    mesg_type_flags - Types of messages that should be stored in this index.
  *      min_mesg_size - Minimum message size.
  *
- * Outputs:
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * OUTPUTS
+ *
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              January, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_shared_mesg_index_c(hid_t_f *fcpl_id, int_f *index_num, int_f *mesg_type_flags, int_f *min_mesg_size)
+/******/
 {
   int ret_value = -1;
   herr_t ret;
@@ -3558,22 +4388,31 @@ nh5pset_shared_mesg_index_c(hid_t_f *fcpl_id, int_f *index_num, int_f *mesg_type
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_attr_creation_order_c
- * Purpose:     Calls H5Pget_attr_creation_order
+/****if* H5Pf/h5pget_attr_creation_order_c
+ * NAME
+ *        h5pget_attr_creation_order_c
+ * PURPOSE
+ *     Calls H5Pget_attr_creation_order
+ *
+ * INPUTS
  *
- * Inputs:
  *           ocpl_id - Object (group or dataset) creation property list identifier
- * Outputs:
+ * OUTPUTS
+ *
  *           crt_order_flags - Flags specifying whether to track and index attribute creation order
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_attr_creation_order_c(hid_t_f *ocpl_id, int_f *crt_order_flags)
+/******/
 {
   int ret_value = -1;
   herr_t ret;
@@ -3591,23 +4430,32 @@ nh5pget_attr_creation_order_c(hid_t_f *ocpl_id, int_f *crt_order_flags)
   ret_value = 0;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pset_libver_bounds_c
- * Purpose:     Calls H5Pset_libver_bounds
+/****if* H5Pf/h5pset_libver_bounds_c
+ * NAME
+ *        h5pset_libver_bounds_c
+ * PURPOSE
+ *     Calls H5Pset_libver_bounds
+ *
+ * INPUTS
  *
- * Inputs:
  *             fapl_id - File access property list identifier
  *                 low - The earliest version of the library that will be used for writing objects.
  *                high - The latest version of the library that will be used for writing objects.
- * Outputs:
+ * OUTPUTS
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ *
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February 18, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_libver_bounds_c(hid_t_f *fapl_id, int_f *low, int_f *high )
+/******/
 {
   int ret_value = -1;
   herr_t ret;
@@ -3622,20 +4470,29 @@ nh5pset_libver_bounds_c(hid_t_f *fapl_id, int_f *low, int_f *high )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_link_creation_order_c
- * Purpose:     Calls H5Pset_link_creation_order
+/****if* H5Pf/h5pset_link_creation_order_c
+ * NAME
+ *        h5pset_link_creation_order_c
+ * PURPOSE
+ *     Calls H5Pset_link_creation_order
  *
- * Inputs:      gcpl_id		- Group creation property list identifier
+ * INPUTS
+ *      gcpl_id		- Group creation property list identifier
  *              crt_order_flags - Creation order flag(s)
- * Outputs:
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * OUTPUTS
+ *
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February 18, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_link_creation_order_c(hid_t_f *gcpl_id, int_f *crt_order_flags )
+/******/
 {
   int ret_value = -1;
   herr_t ret;
@@ -3649,20 +4506,28 @@ nh5pset_link_creation_order_c(hid_t_f *gcpl_id, int_f *crt_order_flags )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_link_phase_change_c
- * Purpose:     Calls H5Pget_link_phase_change
+/****if* H5Pf/h5pget_link_phase_change_c
+ * NAME
+ *        h5pget_link_phase_change_c
+ * PURPOSE
+ *     Calls H5Pget_link_phase_change
  *
- * Inputs:      gcpl_id  	- Group creation property list identifier
+ * INPUTS
+ *      gcpl_id  	- Group creation property list identifier
  * Outputs      max_compact     - Maximum number of attributes to be stored in compact storage
  *              min_dense       - Minimum number of attributes to be stored in dense storage
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February 20, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_link_phase_change_c(hid_t_f *gcpl_id, int_f *max_compact, int_f *min_dense )
+/******/
 {
   int ret_value = -1;
   unsigned c_max_compact;
@@ -3681,21 +4546,30 @@ nh5pget_link_phase_change_c(hid_t_f *gcpl_id, int_f *max_compact, int_f *min_den
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_obj_track_times_c
- * Purpose:     Call H5Pget_obj_track_times
+/****if* H5Pf/h5pget_obj_track_times_c
+ * NAME
+ *        h5pget_obj_track_times_c
+ * PURPOSE
+ *     Call H5Pget_obj_track_times
+ *
+ * INPUTS
+ *      plist_id - property list id
+ * OUTPUTS
  *
- * Inputs:      plist_id - property list id
- * Outputs:
  *              flag     - TRUE/FALSE flag
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February 22, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pget_obj_track_times_c(hid_t_f *plist_id, int_f *flag)
+/******/
 {
   int ret_value = -1;
   hbool_t c_track_times=0;
@@ -3714,20 +4588,28 @@ nh5pget_obj_track_times_c(hid_t_f *plist_id, int_f *flag)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_obj_track_times_c
- * Purpose:     Call H5Pset_obj_track_times
+/****if* H5Pf/h5pset_obj_track_times_c
+ * NAME
+ *        h5pset_obj_track_times_c
+ * PURPOSE
+ *     Call H5Pset_obj_track_times
  *
- * Inputs:      plist_id - property list id
+ * INPUTS
+ *      plist_id - property list id
  *              flag     - TRUE/FALSE flag
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February 22, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pset_obj_track_times_c(hid_t_f *plist_id, int_f *flag)
+/******/
 {
   int ret_value = -1;
   hbool_t c_track_times;
@@ -3746,23 +4628,31 @@ nh5pset_obj_track_times_c(hid_t_f *plist_id, int_f *flag)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_create_inter_group_c
- * Purpose:     Calls H5Pset_create_intermediate_group
+/****if* H5Pf/h5pset_create_inter_group_c
+ * NAME
+ *        h5pset_create_inter_group_c
+ * PURPOSE
+ *     Calls H5Pset_create_intermediate_group
+ *
+ * INPUTS
  *
- * Inputs:
  *		lcpl_id - Link creation property list identifier
  *   crt_intermed_group - crt_intermed_group specifying whether
  *                        to create intermediate groups upon the
  *                        creation of an object
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              February 22, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5pset_create_inter_group_c(hid_t_f *lcpl_id, int_f *crt_intermed_group)
+/******/
 {
   int ret_value = -1;
   herr_t ret;
@@ -3777,22 +4667,31 @@ nh5pset_create_inter_group_c(hid_t_f *lcpl_id, int_f *crt_intermed_group)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_link_creation_order_c
- * Purpose:     Calls H5Pget_link_creation_order
+/****if* H5Pf/h5pget_link_creation_order_c
+ * NAME
+ *        h5pget_link_creation_order_c
+ * PURPOSE
+ *     Calls H5Pget_link_creation_order
+ *
+ * INPUTS
  *
- * Inputs:
  *           gcpl_id - Group creation property list identifier
- * Outputs:
+ * OUTPUTS
+ *
  *           crt_order_flags - Creation order flag(s)
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 3, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_link_creation_order_c(hid_t_f *gcpl_id, int_f *crt_order_flags)
+/******/
 {
   int ret_value = -1;
   herr_t ret;
@@ -3811,24 +4710,33 @@ nh5pget_link_creation_order_c(hid_t_f *gcpl_id, int_f *crt_order_flags)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:     h5pset_char_encoding_c
- * Purpose:  Calls H5Pset_char_encoding
+/****if* H5Pf/h5pset_char_encoding_c
+ * NAME
+ *     h5pset_char_encoding_c
+ * PURPOSE
+ *  Calls H5Pset_char_encoding
+ *
+ * INPUTS
  *
- * Inputs:
  *           plist_id - Property list identifier
  *           encoding - String encoding character set:
  *     	                     H5T_CSET_ASCII_F -> US ASCII
  *     	                     H5T_CSET_UTF8_F -> UTF-8 Unicode encoding
- * Outputs:  NONE
+ * OUTPUTS
+ *  NONE
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 3, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_char_encoding_c(hid_t_f *plist_id, int_f *encoding)
+/******/
 {
   int ret_value = -1;
   herr_t ret;
@@ -3844,24 +4752,33 @@ nh5pset_char_encoding_c(hid_t_f *plist_id, int_f *encoding)
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:     h5pget_char_encoding_c
- * Purpose:  Calls H5Pget_char_encoding
+/****if* H5Pf/h5pget_char_encoding_c
+ * NAME
+ *     h5pget_char_encoding_c
+ * PURPOSE
+ *  Calls H5Pget_char_encoding
+ *
+ * INPUTS
  *
- * Inputs:
  *           plist_id - Property list identifier
- * Outputs:
+ * OUTPUTS
+ *
  *           encoding - Encoding character set:
  *     	                  H5T_CSET_ASCII_F -> US ASCII
  *     	                  H5T_CSET_UTF8_F -> UTF-8 Unicode encoding
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 3, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_char_encoding_c(hid_t_f *plist_id, int_f *encoding)
+/******/
 {
   int ret_value = -1;
   H5T_cset_t c_encoding;
@@ -3878,24 +4795,33 @@ nh5pget_char_encoding_c(hid_t_f *plist_id, int_f *encoding)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:     h5pset_copy_object_c
- * Purpose:  Calls H5Pset_copy_object
+/****if* H5Pf/h5pset_copy_object_c
+ * NAME
+ *     h5pset_copy_object_c
+ * PURPOSE
+ *  Calls H5Pset_copy_object
+ *
+ * INPUTS
  *
- * Inputs:
  *    ocp_plist_id - Object copy property list identifier
  *    copy_options - Copy option(s) to be set
  *
- * Outputs:
+ * OUTPUTS
+ *
  *            NONE
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 3, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_copy_object_c(hid_t_f *ocp_plist_id, int_f *copy_options)
+/******/
 {
   int ret_value = -1;
   herr_t ret;
@@ -3909,23 +4835,32 @@ nh5pset_copy_object_c(hid_t_f *ocp_plist_id, int_f *copy_options)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:     h5pget_copy_object_c
- * Purpose:  Calls H5Pget_copy_object
+/****if* H5Pf/h5pget_copy_object_c
+ * NAME
+ *     h5pget_copy_object_c
+ * PURPOSE
+ *  Calls H5Pget_copy_object
+ *
+ * INPUTS
  *
- * Inputs:
  *    ocp_plist_id - Object copy property list identifier
  *
- * Outputs:
+ * OUTPUTS
+ *
  *    copy_options - Copy option(s) to be get
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 3, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_copy_object_c(hid_t_f *ocp_plist_id, int_f *copy_options)
+/******/
 {
   int ret_value = -1;
   unsigned c_copy_options;
@@ -3942,26 +4877,34 @@ nh5pget_copy_object_c(hid_t_f *ocp_plist_id, int_f *copy_options)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_data_transform_c
- * Purpose:     Calls H5Pget_data_transform
- * Inputs:
+/****if* H5Pf/h5pget_data_transform_c
+ * NAME
+ *        h5pget_data_transform_c
+ * PURPOSE
+ *     Calls H5Pget_data_transform
+ * INPUTS
+ *
  *              prp_id - property list identifier to query
  *      expression_len - buffer size transorm expression
  *
  * Output:
  *          expression - buffer to hold transform expression
  *
- * Returns:
+ * RETURNS
+ *
  *          Success:  0
  *	    Failure: -1
  *
- * Programmer:  M.S. Breitenfeld
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 19, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_data_transform_c(hid_t_f *plist_id, _fcd expression, int_f *expression_len, size_t_f *size)
+/******/
 {
     char *c_expression = NULL;          /* Buffer to hold C string */
     size_t c_expression_len;
@@ -3998,26 +4941,34 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_data_transform_c
- * Purpose:     Calls H5Pset_data_transform
- * Inputs:
+/****if* H5Pf/h5pset_data_transform_c
+ * NAME
+ *        h5pset_data_transform_c
+ * PURPOSE
+ *     Calls H5Pset_data_transform
+ * INPUTS
+ *
  *              prp_id - property list identifier to query
  *          expression - buffer to hold transform expression
  *      expression_len - buffer size transorm expression
  *
  * Output:
  *
- * Returns:
+ * RETURNS
+ *
  *          Success:  0
  *	    Failure: -1
  *
- * Programmer:  M.S. Breitenfeld
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 19, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_data_transform_c(hid_t_f *plist_id, _fcd expression, int_f *expression_len)
+/******/
 {
      char* c_expression = NULL; /* Buffer to hold C string */
      int_f ret_value = 0; /* Return value */
@@ -4041,24 +4992,32 @@ done:
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_local_heap_size_hint_c
- * Purpose:     Calls H5Pget_local_heap_size_hint
- * Inputs:
+/****if* H5Pf/h5pget_local_heap_size_hint_c
+ * NAME
+ *        h5pget_local_heap_size_hint_c
+ * PURPOSE
+ *     Calls H5Pget_local_heap_size_hint
+ * INPUTS
+ *
  *         gcpl_id - Group creation property list identifier
  *
  * Output:
  *       size_hint - Hint for size of local heap
- * Returns:
+ * RETURNS
+ *
  *          Success:  0
  *	    Failure: -1
  *
- * Programmer:  M.S. Breitenfeld
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 21, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_local_heap_size_hint_c(hid_t_f *gcpl_id, size_t_f *size_hint)
+/******/
 {
      int_f ret_value = -1; /* Return value */
      size_t c_size_hint;
@@ -4074,25 +5033,33 @@ nh5pget_local_heap_size_hint_c(hid_t_f *gcpl_id, size_t_f *size_hint)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_est_link_info_c
- * Purpose:     Calls H5Pget_est_link_info
- * Inputs:
+/****if* H5Pf/h5pget_est_link_info_c
+ * NAME
+ *        h5pget_est_link_info_c
+ * PURPOSE
+ *     Calls H5Pget_est_link_info
+ * INPUTS
+ *
  *              gcpl_id - Group creation property list identifier
  *
  * Output:
  *      est_num_entries - Estimated number of links to be inserted into group
  *         est_name_len - Estimated average length of link names
- * Returns:
+ * RETURNS
+ *
  *          Success:  0
  *	    Failure: -1
  *
- * Programmer:  M.S. Breitenfeld
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 21, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_est_link_info_c(hid_t_f *gcpl_id, int_f *est_num_entries, int_f *est_name_len)
+/******/
 {
      int_f ret_value = -1; /* Return value */
      unsigned c_est_num_entries;
@@ -4111,25 +5078,33 @@ nh5pget_est_link_info_c(hid_t_f *gcpl_id, int_f *est_num_entries, int_f *est_nam
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_local_heap_size_hint_c
- * Purpose:     Calls H5Pset_local_heap_size_hint
- * Inputs:
+/****if* H5Pf/h5pset_local_heap_size_hint_c
+ * NAME
+ *        h5pset_local_heap_size_hint_c
+ * PURPOSE
+ *     Calls H5Pset_local_heap_size_hint
+ * INPUTS
+ *
  *         gcpl_id - Group creation property list identifier
  *       size_hint - Hint for size of local heap
  *
  * Output:
  *
- * Returns:
+ * RETURNS
+ *
  *          Success:  0
  *	    Failure: -1
  *
- * Programmer:  M.S. Breitenfeld
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 21, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_local_heap_size_hint_c(hid_t_f *gcpl_id, size_t_f *size_hint)
+/******/
 {
      int_f ret_value = -1; /* Return value */
      herr_t ret;
@@ -4143,25 +5118,33 @@ nh5pset_local_heap_size_hint_c(hid_t_f *gcpl_id, size_t_f *size_hint)
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_est_link_info_c
- * Purpose:     Calls H5Pset_est_link_info
- * Inputs:
+/****if* H5Pf/h5pset_est_link_info_c
+ * NAME
+ *        h5pset_est_link_info_c
+ * PURPOSE
+ *     Calls H5Pset_est_link_info
+ * INPUTS
+ *
  *              gcpl_id - Group creation property list identifier
  *      est_num_entries - Estimated number of links to be inserted into group
  *         est_name_len - Estimated average length of link names
  *
  * Output:
- * Returns:
+ * RETURNS
+ *
  *          Success:  0
  *	    Failure: -1
  *
- * Programmer:  M.S. Breitenfeld
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 21, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_est_link_info_c(hid_t_f *gcpl_id, int_f *est_num_entries, int_f *est_name_len)
+/******/
 {
      int_f ret_value = -1; /* Return value */
      herr_t ret;
@@ -4175,21 +5158,29 @@ nh5pset_est_link_info_c(hid_t_f *gcpl_id, int_f *est_num_entries, int_f *est_nam
      return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_link_phase_change_c
- * Purpose:     Calls H5Pset_link_phase_change
+/****if* H5Pf/h5pset_link_phase_change_c
+ * NAME
+ *        h5pset_link_phase_change_c
+ * PURPOSE
+ *     Calls H5Pset_link_phase_change
  *
- * Inputs:      gcpl_id     - Group creation property list identifier
+ * INPUTS
+ *      gcpl_id     - Group creation property list identifier
  *              max_compact - Maximum number of attributes to be stored in compact storage
  *              min_dense   - Minimum number of attributes to be stored in dense storage
  * Outputs
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 21, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_link_phase_change_c(hid_t_f *gcpl_id, int_f *max_compact, int_f *min_dense )
+/******/
 {
   int ret_value = -1;
   herr_t ret;
@@ -4204,23 +5195,31 @@ nh5pset_link_phase_change_c(hid_t_f *gcpl_id, int_f *max_compact, int_f *min_den
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_fapl_direct_c
- * Purpose:     Calls H5Pset_fapl_direct
+/****if* H5Pf/h5pset_fapl_direct_c
+ * NAME
+ *        h5pset_fapl_direct_c
+ * PURPOSE
+ *     Calls H5Pset_fapl_direct
+ *
+ * INPUTS
  *
- * Inputs:
  *    fapl_id 	 - File access property list identifier
  *    alignment  - Required memory alignment boundary
  *    block_size - File system block size
  *    cbuf_size  - Copy buffer size
  * Outputs
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 21, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_fapl_direct_c(hid_t_f UNUSED *fapl_id, size_t_f UNUSED *alignment, size_t_f UNUSED *block_size, size_t_f UNUSED *cbuf_size)
+/******/
 {
   int ret_value = -1;
 #ifdef H5_HAVE_DIRECT
@@ -4238,23 +5237,32 @@ nh5pset_fapl_direct_c(hid_t_f UNUSED *fapl_id, size_t_f UNUSED *alignment, size_
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_fapl_direct_c
- * Purpose:     Calls H5Pget_fapl_direct
+/****if* H5Pf/h5pget_fapl_direct_c
+ * NAME
+ *        h5pget_fapl_direct_c
+ * PURPOSE
+ *     Calls H5Pget_fapl_direct
+ *
+ * INPUTS
  *
- * Inputs:
  *    fapl_id 	 - File access property list identifier
- * Outputs:
+ * OUTPUTS
+ *
  *    alignment  - Required memory alignment boundary
  *    block_size - File system block size
  *    cbuf_size  - Copy buffer size
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 21, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_fapl_direct_c(hid_t_f UNUSED *fapl_id, size_t_f UNUSED *alignment, size_t_f UNUSED *block_size, size_t_f UNUSED *cbuf_size)
+/******/
 {
   int ret_value = -1;
 #ifdef H5_HAVE_DIRECT
@@ -4278,21 +5286,30 @@ nh5pget_fapl_direct_c(hid_t_f UNUSED *fapl_id, size_t_f UNUSED *alignment, size_
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_attr_phase_change_c
- * Purpose:     Calls H5Pset_attr_phase_change
+/****if* H5Pf/h5pset_attr_phase_change_c
+ * NAME
+ *        h5pset_attr_phase_change_c
+ * PURPOSE
+ *     Calls H5Pset_attr_phase_change
  *
- * Inputs:      ocpl_id		- Object (dataset or group) creation property list identifier
+ * INPUTS
+ *      ocpl_id		- Object (dataset or group) creation property list identifier
  *              max_compact     - Maximum number of attributes to be stored in compact storage
  *              min_dense       - Minimum number of attributes to be stored in dense storage
- * Outputs:
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * OUTPUTS
+ *
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 21, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_attr_phase_change_c(hid_t_f *ocpl_id, int_f *max_compact, int_f *min_dense )
+/******/
 {
   int ret_value = -1;
   herr_t ret;
@@ -4306,19 +5323,28 @@ nh5pset_attr_phase_change_c(hid_t_f *ocpl_id, int_f *max_compact, int_f *min_den
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_nbit_c
- * Purpose:     Calls H5Pset_nbit
+/****if* H5Pf/h5pset_nbit_c
+ * NAME
+ *        h5pset_nbit_c
+ * PURPOSE
+ *     Calls H5Pset_nbit
  *
- * Inputs:      plist_id - Dataset creation property list identifier
- * Outputs:
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * INPUTS
+ *      plist_id - Dataset creation property list identifier
+ * OUTPUTS
+ *
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 21, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pset_nbit_c(hid_t_f *plist_id )
+/******/
 {
   int ret_value = -1;
   herr_t ret;
@@ -4331,22 +5357,27 @@ nh5pset_nbit_c(hid_t_f *plist_id )
   ret_value = 0;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5pset_scaleoffset_c
- * Purpose:     Calls H5Pset_scaleoffset
+/****if* H5Pf/h5pset_scaleoffset_c
+ * NAME
+ *  h5pset_scaleoffset_c
+ * PURPOSE
+ *  Calls H5Pset_scaleoffset
  *
- * Inputs:
- *      plist_id - Dataset creation property list identifier
- *    scale_type - Flag indicating compression method.
+ * INPUTS
+ *  plist_id     - Dataset creation property list identifier
+ *  scale_type   - Flag indicating compression method.
  *  scale_factor - Parameter related to scale.
- * Outputs:
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              March 21, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ *
+ * RETURNS
+ *  0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  March 21, 2008
+ * SOURCE
+*/
 int_f
 nh5pset_scaleoffset_c(hid_t_f *plist_id, int_f *scale_type, int_f *scale_factor )
+/******/
 {
   int ret_value = -1;
   H5Z_SO_scale_type_t c_scale_type;
@@ -4363,21 +5394,25 @@ nh5pset_scaleoffset_c(hid_t_f *plist_id, int_f *scale_type, int_f *scale_factor
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pset_nlinks
- * Purpose:     Calls H5Pset_nlinks
+/****if* H5Pf/h5pset_nlinks
+ * NAME
+ *  h5pset_nlinks
+ * PURPOSE
+ *  Calls H5Pset_nlinks
  *
- * Inputs:
- *            lapl_id - File access property list identifier
- *             nlinks - Maximum number of links to traverse
- * Outputs:
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              March 24, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * INPUTS
+ *  lapl_id - File access property list identifier
+ *  nlinks  - Maximum number of links to traverse
+ * RETURNS
+ *  0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  March 24, 2008
+ * SOURCE
+*/
 int_f
 nh5pset_nlinks_c(hid_t_f *lapl_id, size_t_f *nlinks)
+/******/
 {
   int ret_value = -1;
   herr_t ret;
@@ -4391,23 +5426,32 @@ nh5pset_nlinks_c(hid_t_f *lapl_id, size_t_f *nlinks)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_nlinks
- * Purpose:     Calls H5Pget_nlinks
+/****if* H5Pf/h5pget_nlinks
+ * NAME
+ *        h5pget_nlinks
+ * PURPOSE
+ *     Calls H5Pget_nlinks
+ *
+ * INPUTS
  *
- * Inputs:
  *            lapl_id - File access property list identifier
  *
- * Outputs:
+ * OUTPUTS
+ *
  *             nlinks - Maximum number of links to traverse
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 24, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_nlinks_c(hid_t_f *lapl_id, size_t_f *nlinks)
+/******/
 {
   int ret_value = -1;
   herr_t ret;
@@ -4423,22 +5467,29 @@ nh5pget_nlinks_c(hid_t_f *lapl_id, size_t_f *nlinks)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5pget_create_inter_group_c
- * Purpose:     Calls H5Pget_create_intermediate_group
+/****if* H5Pf/h5pget_create_inter_group_c
+ * NAME
+ *        h5pget_create_inter_group_c
+ * PURPOSE
+ *     Calls H5Pget_create_intermediate_group
+ *
+ * INPUTS
  *
- * Inputs:
  *		lcpl_id - Link creation property list identifier
  *   crt_intermed_group - Specifying whether to create intermediate groups upon
  *                        the creation of an object
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              April 4, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
-
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5pget_create_inter_group_c(hid_t_f *lcpl_id, int_f *crt_intermed_group)
+/******/
 {
   int ret_value = -1;
   herr_t ret;
@@ -4466,7 +5517,7 @@ nh5pget_create_inter_group_c(hid_t_f *lcpl_id, int_f *crt_intermed_group)
  *              rdcc_w0            -
  *
  * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * Programmer:  M. Scot Breitenfeld
  *              April 13, 2009
  * Modifications:
  *---------------------------------------------------------------------------*/
@@ -4497,7 +5548,7 @@ nh5pset_chunk_cache_c(hid_t_f *dapl_id, size_t_f *rdcc_nslots, size_t_f *rdcc_nb
  *              rdcc_w0            -
  *
  * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * Programmer:  M. Scot Breitenfeld
  *              April 13, 2009
  * Modifications:
  *---------------------------------------------------------------------------*/
diff --git a/fortran/src/H5Pff.f90 b/fortran/src/H5Pff.f90
index 50aad81..a22b2e3 100644
--- a/fortran/src/H5Pff.f90
+++ b/fortran/src/H5Pff.f90
@@ -1,3 +1,14 @@
+!****h* ROBODoc/H5P (F90)
+!
+! NAME
+!  H5P_PROVISIONAL
+!
+! PURPOSE
+!  This file contains Fortran interfaces for H5P functions. It includes
+!  all the functions that are independent on whether the Fortran 2003 functions
+!  are enabled or disabled.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,1354 +24,1156 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5P function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!*****
+
+MODULE H5P
+
+  USE H5GLOBAL
+  
+  INTERFACE h5pset_fapl_multi_f
+     MODULE PROCEDURE h5pset_fapl_multi_l
+     MODULE PROCEDURE h5pset_fapl_multi_s
+  END INTERFACE
+
+CONTAINS
+
+!****s* H5P/h5pcreate_f 
+! NAME
+!  h5pcreate_f 
+!
+! PURPOSE
+!  Creates a new property as an instance of a property 
+!  list class.
+!
+! INPUTS
+!  class  - type of the property class to be created.
+!	    Possible values are:
+!	      H5P_FILE_CREATE_F
+!	      H5P_FILE_ACCESS_F
+!	      H5P_DATASET_CREATE_F
+!	      H5P_DATASET_XFER_F
+!	      H5P_FILE_MOUNT_F
+! OUTPUTS
+!  prp_id - property list identifier
+!  hdferr - error code		
+!	     Success:  0
+!	     Failure: -1 
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!
+! SOURCE
+  SUBROUTINE h5pcreate_f(class, prp_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: class   ! The type of the property list 
+                                          ! to be created. Possible values are: 
+                                          !  H5P_FILE_CREATE_F
+                                          !  H5P_FILE_ACCESS_F
+                                          !  H5P_DATASET_CREATE_F
+                                          !  H5P_DATASET_XFER_F
+                                          !  H5P_FILE_MOUNT_F
+    INTEGER(HID_T), INTENT(OUT) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                          ! 0 on success and -1 on failure
+!*****
+!            INTEGER, EXTERNAL :: h5pcreate_c
+!  MS FORTRAN needs explicit interface for C functions called here.
 !
-! This file contains Fortran90 interfaces for H5P functions.
-!
-     MODULE H5P
-
-       USE H5GLOBAL
-
-       INTERFACE h5pset_fill_value_f
-         MODULE PROCEDURE h5pset_fill_value_integer
-         MODULE PROCEDURE h5pset_fill_value_real
-         MODULE PROCEDURE h5pset_fill_value_char
-       END INTERFACE
-
-       INTERFACE h5pget_fill_value_f
-         MODULE PROCEDURE h5pget_fill_value_integer
-         MODULE PROCEDURE h5pget_fill_value_real
-         MODULE PROCEDURE h5pget_fill_value_char
-       END INTERFACE
-
-       INTERFACE h5pset_f
-         MODULE PROCEDURE h5pset_integer
-         MODULE PROCEDURE h5pset_real
-         MODULE PROCEDURE h5pset_char
-       END INTERFACE
-
-       INTERFACE h5pget_f
-         MODULE PROCEDURE h5pget_integer
-         MODULE PROCEDURE h5pget_real
-         MODULE PROCEDURE h5pget_char
-       END INTERFACE
-
-       INTERFACE h5pregister_f
-         MODULE PROCEDURE h5pregister_integer
-         MODULE PROCEDURE h5pregister_real
-         MODULE PROCEDURE h5pregister_char
-       END INTERFACE
-
-       INTERFACE h5pinsert_f
-         MODULE PROCEDURE h5pinsert_integer
-         MODULE PROCEDURE h5pinsert_real
-         MODULE PROCEDURE h5pinsert_char
-       END INTERFACE
-
-       INTERFACE h5pset_fapl_multi_f
-         MODULE PROCEDURE h5pset_fapl_multi_l
-         MODULE PROCEDURE h5pset_fapl_multi_s
-       END INTERFACE
-
-
-     CONTAINS
-
-!----------------------------------------------------------------------
-! Name:		h5pcreate_f
-!
-! Purpose: 	Creates a new property as an instance of a property
-!		list class.
-!
-! Inputs:
-!		class		- type of the property class to be created.
-!				  Possible values are:
-!				  H5P_FILE_CREATE_F
-!				  H5P_FILE_ACCESS_F
-!				  H5P_DATASET_CREATE_F
-!				  H5P_DATASET_XFER_F
-!				  H5P_FILE_MOUNT_F
-! Outputs:
-!		prp_id		- property list identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+    INTERFACE
+       INTEGER FUNCTION h5pcreate_c(class, prp_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PCREATE_C'::h5pcreate_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: class
+         INTEGER(HID_T), INTENT(OUT) :: prp_id
+       END FUNCTION h5pcreate_c
+    END INTERFACE
+
+    hdferr = h5pcreate_c(class, prp_id) 
+  END SUBROUTINE h5pcreate_f
+
+!****s* H5P/h5pset_preserve_f 
+! NAME
+!   h5pset_preserve_f 
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
+! PURPOSE
+!  Sets the dataset transfer property list status to 
+!  TRUE or FALSE for initializing compound datatype
+!  members during write/read operations.
 !
-! Comment:
-!----------------------------------------------------------------------
-          SUBROUTINE h5pcreate_f(class, prp_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: class      ! The type of the property list
-                                              ! to be created. Possible values
-                                              ! are:
-                                              !  H5P_FILE_CREATE_F
-                                              !  H5P_FILE_ACCESS_F
-                                              !  H5P_DATASET_CREATE_F
-                                              !  H5P_DATASET_XFER_F
-                                              !  H5P_FILE_MOUNT_F
-            INTEGER(HID_T), INTENT(OUT) :: prp_id ! Property list identifier
-            INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5pcreate_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! INPUTS
+!  prp_id	- property list identifier
+!  flag		- status flag
 !
-            INTERFACE
-              INTEGER FUNCTION h5pcreate_c(class, prp_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PCREATE_C'::h5pcreate_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: class
-              INTEGER(HID_T), INTENT(OUT) :: prp_id
-              END FUNCTION h5pcreate_c
-            END INTERFACE
-
-            hdferr = h5pcreate_c(class, prp_id)
-          END SUBROUTINE h5pcreate_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_preserve_f
-!
-! Purpose: 	Sets the dataset transfer property list status to
-!		TRUE or FALSE for initializing compound datatype
-!		members during write/read operations.
-!
-! Inputs:
-!		prp_id		- property list identifier
-!		flag		- status flag
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! OUTPUTS
+!  hdferr	- Returns 0 if successful and -1 if fails
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!                       Datatype of the flag parameter is changed from
-!                       INTEGER to LOGICAL
-!                               June 4, 2003
+! OPTIONAL PARAMETERS
+!  NONE
 !
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pset_preserve_f(prp_id, flag, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            LOGICAL, INTENT(IN) ::  flag ! TRUE/FALSE flag to set the dataset
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!                       
+!  Datatype of the flag parameter is changed from 
+!  INTEGER to LOGICAL June 4, 2003
+!
+! SOURCE
+  SUBROUTINE h5pset_preserve_f(prp_id, flag, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    LOGICAL, INTENT(IN) ::  flag         ! TRUE/FALSE flag to set the dataset
                                          ! transfer property for partila writing/reading
                                          ! compound datatype
-            INTEGER, INTENT(OUT) :: hdferr    ! Error code
-            INTEGER :: flag_c
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
+    INTEGER :: flag_c
 
 !            INTEGER, EXTERNAL :: h5pset_preserve_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_preserve_c(prp_id, flag_c)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_PRESERVE_C'::h5pset_preserve_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER ::  flag_c
-              END FUNCTION h5pset_preserve_c
-            END INTERFACE
-            flag_c = 0
-            if(flag) flag_c = 1
-            hdferr = h5pset_preserve_c(prp_id, flag_c)
-          END SUBROUTINE h5pset_preserve_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_preserve_f
-!
-! Purpose: 	Checks status of the dataset transfer property list.
-!
-! Inputs:
-!		prp_id		- property list identifier
-! Outputs:
-!		flag		- status flag
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!                       Datatype of the flag parameter is changed from
-!                       INTEGER to LOGICAL
-!                               June 4, 2003
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_preserve_f(prp_id, flag, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            LOGICAL, INTENT(OUT) ::  flag ! TRUE/FALSE flag. Shows status of the dataset's
+    INTERFACE
+       INTEGER FUNCTION h5pset_preserve_c(prp_id, flag_c)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_PRESERVE_C'::h5pset_preserve_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER ::  flag_c
+       END FUNCTION h5pset_preserve_c
+    END INTERFACE
+    flag_c = 0
+    IF(flag) flag_c = 1
+    hdferr = h5pset_preserve_c(prp_id, flag_c) 
+  END SUBROUTINE h5pset_preserve_f
+
+!****s* H5P/h5pget_preserve_f 
+! NAME
+!  h5pget_preserve_f 
+!
+! PURPOSE
+!  Checks status of the dataset transfer property list.
+!
+! INPUTS
+!  prp_id  - property list identifier
+!
+! OUTPUTS
+!  flag	   - status flag
+!  hdferr  - error code		
+!	Success:  0
+!	Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001
+! 
+!  Datatype of the flag parameter is changed from 
+!  INTEGER to LOGICAL 
+!  June 4, 2003 
+! 
+! SOURCE
+  SUBROUTINE h5pget_preserve_f(prp_id, flag, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    LOGICAL, INTENT(OUT) ::  flag        ! TRUE/FALSE flag. Shows status of the dataset's
                                          ! transfer property for partial writing/reading
                                          ! compound datatype
-            INTEGER, INTENT(OUT) :: hdferr    ! Error code
-            INTEGER :: flag_c
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
+    INTEGER :: flag_c
 
 !            INTEGER, EXTERNAL :: h5pget_preserve_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_preserve_c(prp_id, flag_c)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_PRESERVE_C'::h5pget_preserve_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER ::  flag_c
-              END FUNCTION h5pget_preserve_c
-            END INTERFACE
-
-            hdferr = h5pget_preserve_c(prp_id, flag_c)
-            flag = .FALSE.
-            if(flag_c .eq. 1) flag = .TRUE.
-          END SUBROUTINE h5pget_preserve_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_class_f
-!
-! Purpose: 	Returns the property list class for a property list.
-!
-! Inputs:
-!		prp_id		- property list identifier
-! Outputs:
-!		classtype	- property list class
-!				  Possible values are:
-!				  H5P_ROOT_F
-!				  H5P_FILE_CREATE_F
-!				  H5P_FILE_ACCESS_F
-!				  H5PE_DATASET_CREATE_F
-!				  H5P_DATASET_XFER_F
-!				  H5P_FILE_MOUNT_F
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+    INTERFACE
+       INTEGER FUNCTION h5pget_preserve_c(prp_id, flag_c)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_PRESERVE_C'::h5pget_preserve_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER ::  flag_c
+       END FUNCTION h5pget_preserve_c
+    END INTERFACE
+    
+    hdferr = h5pget_preserve_c(prp_id, flag_c) 
+    flag = .FALSE.
+    IF(flag_c .EQ. 1) flag = .TRUE.
+  END SUBROUTINE h5pget_preserve_f
+
+!****s* H5P/h5pget_class_f 
+! NAME
+!  h5pget_class_f 
+!
+! PURPOSE
+!  Returns the property list class for a property list.
+!
+! INPUTS
+!  
+!  prp_id	- property list identifier
+! OUTPUTS
+!  
+!  classtype	- property list class
+!		  Possible values are:
+!		   H5P_ROOT_F
+!		   H5P_FILE_CREATE_F
+!		   H5P_FILE_ACCESS_F
+!		   H5PE_DATASET_CREATE_F
+!		   H5P_DATASET_XFER_F
+!		   H5P_FILE_MOUNT_F
+!  hdferr:	- error code		
+!		   Success:  0
+!		   Failure: -1 
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!
+! SOURCE
+  SUBROUTINE h5pget_class_f(prp_id, classtype, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(OUT) :: classtype    ! The type of the property list 
+                                         ! to be created. Possible values are: 
+                                         !  H5P_ROOT_F
+                                         !  H5P_FILE_CREATE_F
+                                         !  H5P_FILE_ACCESS_F
+                                         !  H5PE_DATASET_CREATE_F 
+                                         !  H5P_DATASET_XFER_F
+                                         !  H5P_FILE_MOUNT_F
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
+
+!   INTEGER, EXTERNAL :: h5pget_class_c
+!  MS FORTRAN needs explicit interface for C functions called here.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
+    INTERFACE
+       INTEGER FUNCTION h5pget_class_c(prp_id, classtype)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_CLASS_C'::h5pget_class_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, INTENT(OUT) :: classtype 
+       END FUNCTION h5pget_class_c
+    END INTERFACE
+
+    hdferr = h5pget_class_c(prp_id, classtype) 
+  END SUBROUTINE h5pget_class_f
+
+!****s* H5P/h5pcopy_f 
+! NAME
+!  h5pcopy_f 
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_class_f(prp_id, classtype, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(OUT) :: classtype  ! The type of the property list
-                                              ! to be created. Possible values
-                                              ! are:
-                                              !  H5P_ROOT_F
-                                              !  H5P_FILE_CREATE_F
-                                              !  H5P_FILE_ACCESS_F
-                                              !  H5PE_DATASET_CREATE_F
-                                              !  H5P_DATASET_XFER_F
-                                              !  H5P_FILE_MOUNT_F
-            INTEGER, INTENT(OUT) :: hdferr    ! Error code
-
-!            INTEGER, EXTERNAL :: h5pget_class_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! PURPOSE
+!  Copies an existing property list to create a new 
+!  property list
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_class_c(prp_id, classtype)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_CLASS_C'::h5pget_class_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(OUT) :: classtype
-              END FUNCTION h5pget_class_c
-            END INTERFACE
-
-            hdferr = h5pget_class_c(prp_id, classtype)
-          END SUBROUTINE h5pget_class_f
-
-!----------------------------------------------------------------------
-! Name:		h5pcopy_f
-!
-! Purpose: 	Copies an existing property list to create a new
-!		property list
-!
-! Inputs:
-!		prp_id		- property list identifier
-! Outputs:
-!		new_prp_id	- new property list identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! INPUTS
+!  prp_id       - property list identifier
+! OUTPUTS
+!  new_prp_id	- new property list identifier
+!  hdferr:	- error code		
+!		   Success:  0
+!		   Failure: -1
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
 !
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pcopy_f(prp_id, new_prp_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(HID_T), INTENT(OUT) :: new_prp_id
-                                                ! Identifier  of property list
-                                                ! copy
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001
+!
+! SOURCE
+  SUBROUTINE h5pcopy_f(prp_id, new_prp_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id      ! Property list identifier 
+    INTEGER(HID_T), INTENT(OUT) :: new_prp_id ! Identifier of property list
+    INTEGER, INTENT(OUT) :: hdferr            ! Error code
+                                              ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pcopy_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pcopy_c(prp_id, new_prp_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PCOPY_C'::h5pcopy_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(HID_T), INTENT(OUT) :: new_prp_id
-              END FUNCTION h5pcopy_c
-            END INTERFACE
-
-            hdferr = h5pcopy_c(prp_id, new_prp_id)
-          END SUBROUTINE h5pcopy_f
-
-!----------------------------------------------------------------------
-! Name:		h5pclose_f
-!
-! Purpose: 	Terminates access to a property list.
-!
-! Inputs:
-!		prp_id		- identifier of the property list to
-!				  terminate access to.
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pclose_f(prp_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
-            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pcopy_c(prp_id, new_prp_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PCOPY_C'::h5pcopy_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER(HID_T), INTENT(OUT) :: new_prp_id
+       END FUNCTION h5pcopy_c
+    END INTERFACE
+    
+    hdferr = h5pcopy_c(prp_id, new_prp_id)
+  END SUBROUTINE h5pcopy_f
+
+!****s* H5P/h5pclose_f 
+! NAME
+!  h5pclose_f 
+!
+! PURPOSE
+!  Terminates access to a property list. 
+!
+! INPUTS
+!  prp_id - identifier of the property list to 
+!	    terminate access to. 
+! OUTPUTS
+!  hdferr - error code		
+!	    Success:  0
+!	    Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pclose_f(prp_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                          ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pclose_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pclose_c(prp_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PCLOSE_C'::h5pclose_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              END FUNCTION h5pclose_c
-            END INTERFACE
-
-            hdferr = h5pclose_c(prp_id)
-          END SUBROUTINE h5pclose_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_chunk_f
-!
-! Purpose: 	Sets the size of the chunks used to store
-!		a chunked layout dataset.
-!
-! Inputs:
-!		prp_id		- datatset creation property list identifier
-!		ndims		- number of dimensions for each chunk
-!		dims		- array with dimension sizes for each chunk
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pset_chunk_f(prp_id, ndims, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(IN) :: ndims    ! Number of chunk dimensions
-            INTEGER(HSIZE_T), DIMENSION(ndims), INTENT(IN) :: dims
-                                            ! Array containing sizes of
-                                            ! chunk dimensions
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pclose_c(prp_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PCLOSE_C'::h5pclose_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id 
+       END FUNCTION h5pclose_c
+    END INTERFACE
+    
+    hdferr = h5pclose_c(prp_id)
+  END SUBROUTINE h5pclose_f
+
+!****s* H5P/h5pset_chunk_f 
+! NAME
+!   h5pset_chunk_f 
+!
+! PURPOSE
+!  Sets the size of the chunks used to store 
+!  a chunked layout dataset. 
+!
+! INPUTS
+!  prp_id  - datatset creation property list identifier
+!  ndims   - number of dimensions for each chunk
+!  dims	   - array with dimension sizes for each chunk
+! OUTPUTS
+!  hdferr  - error code		
+!	      Success:  0
+!	      Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!   Explicit Fortran interfaces were added for 
+!   called C functions (it is needed for Windows
+!   port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pset_chunk_f(prp_id, ndims, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(IN) :: ndims         ! Number of chunk dimensions
+    INTEGER(HSIZE_T), DIMENSION(ndims), INTENT(IN) :: dims    
+                                         ! Array containing sizes of
+                                         ! chunk dimensions
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pset_chunk_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_chunk_c(prp_id, ndims, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_CHUNK_C'::h5pset_chunk_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(IN) :: ndims
-              INTEGER(HSIZE_T), DIMENSION(ndims), INTENT(IN) :: dims
-              END FUNCTION h5pset_chunk_c
-            END INTERFACE
-
-            hdferr =  h5pset_chunk_c(prp_id, ndims, dims)
-          END SUBROUTINE h5pset_chunk_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_chunk_f
-!
-! Purpose: 	Retrieves the size of chunks for the raw data of a
-!		chunked layout dataset
-!
-! Inputs:
-!		prp_id		- property list identifier
-!		ndims		- size of dims array
-! Outputs:
-!		dims		- array with dimension sizes for each chunk
-!		hdferr:		- error code
-!				 	Success:  number of chunk dimensions
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pget_chunk_f(prp_id, ndims, dims, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(IN) :: ndims    ! Number of chunk dimensions to
-                                            ! to return
-            INTEGER(HSIZE_T), DIMENSION(ndims), INTENT(OUT) :: dims
-                                            ! Array containing sizes of
-                                            ! chunk dimensions
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code; number of
-                                            ! chunk dimensions on success,
-                                            ! -1 on failure
-
+    INTERFACE
+       INTEGER FUNCTION h5pset_chunk_c(prp_id, ndims, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_CHUNK_C'::h5pset_chunk_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, INTENT(IN) :: ndims
+         INTEGER(HSIZE_T), DIMENSION(ndims), INTENT(IN) :: dims
+       END FUNCTION h5pset_chunk_c
+    END INTERFACE
+    
+    hdferr =  h5pset_chunk_c(prp_id, ndims, dims)
+  END SUBROUTINE h5pset_chunk_f
+
+!****s* H5P/h5pget_chunk_f 
+! NAME
+!   h5pget_chunk_f 
+!
+! PURPOSE
+!  Retrieves the size of chunks for the raw data of a 
+!  chunked layout dataset
+!
+! INPUTS
+!  prp_id	- property list identifier
+!  ndims	- size of dims array
+! OUTPUTS
+!  dims		- array with dimension sizes for each chunk
+!  hdferr	- error code		
+!		   Success:  number of chunk dimensions
+!		   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pget_chunk_f(prp_id, ndims, dims, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(IN) :: ndims         ! Number of chunk dimensions to
+                                         ! to return
+    INTEGER(HSIZE_T), DIMENSION(ndims), INTENT(OUT) :: dims    
+                                         ! Array containing sizes of
+                                         ! chunk dimensions
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code:
+                                         !  number of chunk dimensions on success,
+                                         !  -1 on failure
+!*****
 !            INTEGER, EXTERNAL :: h5pget_chunk_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_chunk_c(prp_id, ndims, dims)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_CHUNK_C'::h5pget_chunk_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER :: ndims
-              INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: dims
-              END FUNCTION h5pget_chunk_c
-            END INTERFACE
-
-            hdferr =  h5pget_chunk_c(prp_id, ndims, dims)
-          END SUBROUTINE h5pget_chunk_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_deflate_f
-!
-! Purpose: 	Sets compression method and compression level.
-!
-! Inputs:
-!		prp_id		- property list identifier
-!		level		- compression level
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
+    INTERFACE
+       INTEGER FUNCTION h5pget_chunk_c(prp_id, ndims, dims)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_CHUNK_C'::h5pget_chunk_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER :: ndims
+         INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: dims
+       END FUNCTION h5pget_chunk_c
+    END INTERFACE
 
-          SUBROUTINE h5pset_deflate_f(prp_id, level, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(IN) :: level        ! Compression level
-            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+    hdferr =  h5pget_chunk_c(prp_id, ndims, dims)
+  END SUBROUTINE h5pget_chunk_f
 
-!            INTEGER, EXTERNAL :: h5pset_deflate_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+!****s* H5P/h5pset_deflate_f 
+! NAME
+!   h5pset_deflate_f 
+!
+! PURPOSE
+!   Sets compression method and compression level. 
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_deflate_c(prp_id, level)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_DEFLATE_C'::h5pset_deflate_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(IN) :: level
-              END FUNCTION h5pset_deflate_c
-            END INTERFACE
-            hdferr = h5pset_deflate_c(prp_id, level)
-
-          END SUBROUTINE h5pset_deflate_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset(get)fill_value_f
-!
-! Purpose: 	Sets(gets) fill value for a dataset creation property list
-!
-! Inputs:
-!		prp_id		- dataset creation property list identifier
-!		type_id		- datatype identifier for fill value
-!		fillvalue	- fill value
-! Outputs:
-!	(	type_id		- datatype identifier for fill value )
-!	(		fillvalue	- fill value )
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
+! INPUTS
+!   prp_id  - property list identifier
+!   level   - compression level
+! OUTPUTS
+!  
+!  hdferr  - error code		
+!	      Success:  0
+!	      Failure: -1
+!
+! AUTHOR
+!	Elena Pourmal
 !		August 12, 1999
 !
-! Modifications: 	Explicit Fortran interfaces were added for
+! HISTORY
+! 	Explicit Fortran interfaces were added for 
 !			called C functions (it is needed for Windows
 !			port).  March 14, 2001
-!
-! Comment:	h5pset(get)fill_value_f function is overloaded to support
-!		INTEGER, REAL, DOUBLE PRECISION and CHARACTER dtatypes.
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pset_fill_value_integer(prp_id, type_id, fillvalue, &
-                                               hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
-                                                  ! of fillvalue datatype
-                                                  ! (in memory)
-            INTEGER, INTENT(IN) :: fillvalue   ! Fillvalue
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+!		
+! SOURCE
+  SUBROUTINE h5pset_deflate_f(prp_id, level, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(IN) :: level         ! Compression level 
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
 
-!            INTEGER, EXTERNAL :: h5pset_fill_value_integer_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5pset_fill_value_integer_c(prp_id, type_id, fillvalue)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FILL_VALUE_INTEGER_C'::h5pset_fill_value_integer_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(HID_T), INTENT(IN) :: type_id
-              INTEGER, INTENT(IN) :: fillvalue
-              END FUNCTION h5pset_fill_value_integer_c
-            END INTERFACE
-
-            hdferr = h5pset_fill_value_integer_c(prp_id, type_id, fillvalue)
-          END SUBROUTINE h5pset_fill_value_integer
-
-
-          SUBROUTINE h5pget_fill_value_integer(prp_id, type_id, fillvalue, &
-                                               hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
-                                                  ! of fillvalue datatype
-                                                  ! (in memory)
-            INTEGER, INTENT(IN) :: fillvalue   ! Fillvalue
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-!            INTEGER, EXTERNAL :: h5pget_fill_value_integer_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5pget_fill_value_integer_c(prp_id, type_id, fillvalue)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FILL_VALUE_INTEGER_C'::h5pget_fill_value_integer_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(HID_T), INTENT(IN) :: type_id
-              INTEGER :: fillvalue
-              END FUNCTION h5pget_fill_value_integer_c
-            END INTERFACE
-
-            hdferr = h5pget_fill_value_integer_c(prp_id, type_id, fillvalue)
-          END SUBROUTINE h5pget_fill_value_integer
-
-
-          SUBROUTINE h5pset_fill_value_real(prp_id, type_id, fillvalue, &
-                                               hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
-                                                  ! of fillvalue datatype
-                                                  ! (in memory)
-            REAL, INTENT(IN) :: fillvalue   ! Fillvalue
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-!            INTEGER, EXTERNAL :: h5pset_fill_value_real_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5pset_fill_value_real_c(prp_id, type_id, fillvalue)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FILL_VALUE_REAL_C'::h5pset_fill_value_real_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(HID_T), INTENT(IN) :: type_id
-              REAL, INTENT(IN) :: fillvalue
-              END FUNCTION h5pset_fill_value_real_c
-            END INTERFACE
-
-            hdferr = h5pset_fill_value_real_c(prp_id, type_id, fillvalue)
-          END SUBROUTINE h5pset_fill_value_real
-
-
-          SUBROUTINE h5pget_fill_value_real(prp_id, type_id, fillvalue, &
-                                               hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
-                                                  ! of fillvalue datatype
-                                                  ! (in memory)
-            REAL, INTENT(IN) :: fillvalue   ! Fillvalue
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-!            INTEGER, EXTERNAL :: h5pget_fill_value_real_c
+!  INTEGER, EXTERNAL :: h5pset_deflate_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_fill_value_real_c(prp_id, type_id, fillvalue)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FILL_VALUE_REAL_C'::h5pget_fill_value_real_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(HID_T), INTENT(IN) :: type_id
-              REAL :: fillvalue
-              END FUNCTION h5pget_fill_value_real_c
-            END INTERFACE
-
-            hdferr = h5pget_fill_value_real_c(prp_id, type_id, fillvalue)
-          END SUBROUTINE h5pget_fill_value_real
-
-
-
-          SUBROUTINE h5pset_fill_value_char(prp_id, type_id, fillvalue, &
-                                               hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
-                                                  ! of fillvalue datatype
-                                                  ! (in memory)
-            CHARACTER, INTENT(IN) :: fillvalue   ! Fillvalue
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-!            INTEGER, EXTERNAL :: h5pset_fill_valuec_c
+    INTERFACE
+       INTEGER FUNCTION h5pset_deflate_c(prp_id, level)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_DEFLATE_C'::h5pset_deflate_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, INTENT(IN) :: level
+       END FUNCTION h5pset_deflate_c
+    END INTERFACE
+    hdferr = h5pset_deflate_c(prp_id, level)
+    
+  END SUBROUTINE h5pset_deflate_f
+
+!****s* H5P/h5pget_version_f 
+! NAME
+!  h5pget_version_f 
+!
+! PURPOSE
+!  Retrieves the version information of various objects 
+!  for a file creation property list
+!
+! INPUTS
+!  prp_id	- file createion property list identifier
+! OUTPUTS
+!  boot		- super block version number
+!  freelist	- global freelist version number
+!  stab		- symbol table version number
+!  shhdr	- shared object header version number
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE          
+  SUBROUTINE h5pget_version_f(prp_id, boot, freelist, &
+       stab, shhdr, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id        ! Property list identifier 
+    INTEGER, DIMENSION(:), INTENT(OUT) :: boot  ! Array to put boot
+                                                ! block version number
+    INTEGER, DIMENSION(:), INTENT(OUT) :: freelist  ! Array to put global
+                                                    ! Freelist version number
+
+    INTEGER, DIMENSION(:), INTENT(OUT) :: stab  ! Array to put symbol
+                                                ! table version number
+    INTEGER, DIMENSION(:), INTENT(OUT) :: shhdr ! Array to put shared
+                                                ! object header version number
+    INTEGER, INTENT(OUT) :: hdferr              ! Error code
+                                                ! 0 on success and -1 on failure
+!*****
+
+!            INTEGER, EXTERNAL :: h5pget_version_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_fill_valuec_c(prp_id, type_id, fillvalue)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FILL_VALUEC_C'::h5pset_fill_valuec_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: fillvalue
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(HID_T), INTENT(IN) :: type_id
-              CHARACTER, INTENT(IN) :: fillvalue
-              END FUNCTION h5pset_fill_valuec_c
-            END INTERFACE
-
-            hdferr = h5pset_fill_valuec_c(prp_id, type_id, fillvalue)
-          END SUBROUTINE h5pset_fill_value_char
-
-          SUBROUTINE h5pget_fill_value_char(prp_id, type_id, fillvalue, &
-                                               hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
-                                                  ! of fillvalue datatype
-                                                  ! (in memory)
-            CHARACTER, INTENT(IN) :: fillvalue   ! Fillvalue
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-!            INTEGER, EXTERNAL :: h5pget_fill_valuec_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+    INTERFACE
+       INTEGER FUNCTION h5pget_version_c(prp_id, boot, freelist, stab, shhdr)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_VERSION_C'::h5pget_version_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, DIMENSION(:), INTENT(OUT) :: boot 
+         INTEGER, DIMENSION(:), INTENT(OUT) :: freelist 
+         INTEGER, DIMENSION(:), INTENT(OUT) :: stab
+         INTEGER, DIMENSION(:), INTENT(OUT) :: shhdr
+       END FUNCTION h5pget_version_c
+    END INTERFACE
+    
+    hdferr = h5pget_version_c(prp_id, boot, freelist, stab, shhdr)
+  END SUBROUTINE h5pget_version_f
+
+!****s* H5P/h5pset_userblock_f 
+! NAME
+!  h5pset_userblock_f 
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_fill_valuec_c(prp_id, type_id, fillvalue)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FILL_VALUEC_C'::h5pget_fill_valuec_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: fillvalue
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(HID_T), INTENT(IN) :: type_id
-              CHARACTER :: fillvalue
-              END FUNCTION h5pget_fill_valuec_c
-            END INTERFACE
-
-            hdferr = h5pget_fill_valuec_c(prp_id, type_id, fillvalue)
-          END SUBROUTINE h5pget_fill_value_char
-
-!----------------------------------------------------------------------
-! Name:		h5pget_version_f
-!
-! Purpose: 	Retrieves the version information of various objects
-!		for a file creation property list
-!
-! Inputs:
-!		prp_id		- file createion property list identifier
-! Outputs:
-!		boot		- super block version number
-!		freelist	- global freelist version number
-!		stab		- symbol table version number
-!		shhdr		- shared object header version number
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!   Sets user block size
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
+! INPUTS
+!   prp_id - file creation property list to modify
+!   size   - size of the user-block in bytes
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_version_f(prp_id, boot, freelist, &
-                                    stab, shhdr, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, DIMENSION(:), INTENT(OUT) :: boot  !array to put boot
-                                                        !block version number
-            INTEGER, DIMENSION(:), INTENT(OUT) :: freelist  !array to put global
-                                                        !freelist version number
-
-            INTEGER, DIMENSION(:), INTENT(OUT) :: stab  !array to put symbol
-                                                        !table version number
-            INTEGER, DIMENSION(:), INTENT(OUT) :: shhdr !array to put shared
-                                                        !object header version number
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-!            INTEGER, EXTERNAL :: h5pget_version_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! OUTPUTS
+!  hdferr  - error code		
+!	      Success:  0
+!	      Failure: -1   
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_version_c(prp_id, boot, freelist, stab, shhdr)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_VERSION_C'::h5pget_version_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, DIMENSION(:), INTENT(OUT) :: boot
-              INTEGER, DIMENSION(:), INTENT(OUT) :: freelist
-              INTEGER, DIMENSION(:), INTENT(OUT) :: stab
-              INTEGER, DIMENSION(:), INTENT(OUT) :: shhdr
-              END FUNCTION h5pget_version_c
-            END INTERFACE
-
-            hdferr = h5pget_version_c(prp_id, boot, freelist, stab, shhdr)
-          END SUBROUTINE h5pget_version_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_userblock_f
-!
-! Purpose: 	Sets user block size
-!
-! Inputs:
-!		prp_id		- file creation property list to modify
-!		size		- size of the user-block in bytes
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_userblock_f (prp_id, size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(HSIZE_T), INTENT(IN) :: size !Size of the user-block in bytes
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+! SOURCE
+  SUBROUTINE h5pset_userblock_f (prp_id, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER(HSIZE_T), INTENT(IN) :: size ! Size of the user-block in bytes 
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pset_userblock_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_userblock_c(prp_id, size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_USERBLOCK_C'::h5pset_userblock_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(HSIZE_T), INTENT(IN) :: size
-              END FUNCTION h5pset_userblock_c
-            END INTERFACE
-
-            hdferr = h5pset_userblock_c(prp_id, size)
-          END SUBROUTINE h5pset_userblock_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_userblock_f
-!
-! Purpose: 	Gets user block size.
-!
-! Inputs:
-!		prp_id		- file creation property list identifier
-! Outputs:
-!		block_size	- size of the user block in bytes
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pget_userblock_f(prp_id, block_size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(HSIZE_T), INTENT(OUT) ::  block_size !Size of the
-                                                               !user-block in bytes
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pset_userblock_c(prp_id, size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_USERBLOCK_C'::h5pset_userblock_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER(HSIZE_T), INTENT(IN) :: size
+       END FUNCTION h5pset_userblock_c
+    END INTERFACE
 
+    hdferr = h5pset_userblock_c(prp_id, size)
+  END SUBROUTINE h5pset_userblock_f
+
+!****s* H5P/h5pget_userblock_f 
+! NAME
+!  h5pget_userblock_f 
+!
+! PURPOSE
+!  Gets user block size.
+!
+! INPUTS
+!  
+!  prp_id	- file creation property list identifier
+! OUTPUTS
+!  
+!  block_size	- size of the user block in bytes
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pget_userblock_f(prp_id, block_size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id         ! Property list identifier 
+    INTEGER(HSIZE_T), INTENT(OUT) ::  block_size ! Size of the 
+                                                 ! user-block in bytes 
+    INTEGER, INTENT(OUT) :: hdferr               ! Error code
+                                                 ! 0 on success and -1 on failure
+!*****
 !            INTEGER, EXTERNAL :: h5pget_userblock_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_userblock_c(prp_id, block_size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_USERBLOCK_C'::h5pget_userblock_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(HSIZE_T), INTENT(OUT) :: block_size
-              END FUNCTION h5pget_userblock_c
-            END INTERFACE
-            hdferr = h5pget_userblock_c(prp_id,  block_size)
-          END SUBROUTINE h5pget_userblock_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_sizes_f
-!
-! Purpose: 	Sets the byte size of the offsets and lengths used
-!		to address objects in an HDF5 file.
-!
-! Inputs:
-!		prp_id		- file creation property list identifier
-!		sizeof_addr	- size of an object offset in bytes
-!		sizeof_size	- size of an object length in bytes
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_sizes_f (prp_id, sizeof_addr, sizeof_size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(SIZE_T), INTENT(IN) :: sizeof_addr !Size of an object
-                                                       !offset in bytes
-            INTEGER(SIZE_T), INTENT(IN) :: sizeof_size !Size of an object
-                                                       !length in bytes
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
+    INTERFACE
+       INTEGER FUNCTION h5pget_userblock_c(prp_id, block_size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_USERBLOCK_C'::h5pget_userblock_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER(HSIZE_T), INTENT(OUT) :: block_size
+       END FUNCTION h5pget_userblock_c
+    END INTERFACE
+    hdferr = h5pget_userblock_c(prp_id,  block_size)
+  END SUBROUTINE h5pget_userblock_f
+
+!****s* H5P/h5pset_sizes_f 
+! NAME
+!  h5pset_sizes_f 
+!
+! PURPOSE
+!  Sets the byte size of the offsets and lengths used 
+!  to address objects in an HDF5 file.
+!
+! INPUTS
+!  prp_id	- file creation property list identifier
+!  sizeof_addr	- size of an object offset in bytes 
+!  sizeof_size	- size of an object length in bytes
+! OUTPUTS
+!  
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pset_sizes_f (prp_id, sizeof_addr, sizeof_size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id       ! Property list identifier 
+    INTEGER(SIZE_T), INTENT(IN) :: sizeof_addr ! Size of an object 
+                                               !  offset in bytes 
+    INTEGER(SIZE_T), INTENT(IN) :: sizeof_size ! Size of an object 
+                                               !  length in bytes 
+    INTEGER, INTENT(OUT) :: hdferr             ! Error code
+                                               ! 0 on success and -1 on failure
+!*****
 !            INTEGER, EXTERNAL :: h5pset_sizes_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_sizes_c(prp_id, sizeof_addr, sizeof_size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_SIZES_C'::h5pset_sizes_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(SIZE_T), INTENT(IN) :: sizeof_addr
-              INTEGER(SIZE_T), INTENT(IN) :: sizeof_size
-              END FUNCTION h5pset_sizes_c
-            END INTERFACE
-
-            hdferr = h5pset_sizes_c(prp_id, sizeof_addr, sizeof_size)
-          END SUBROUTINE h5pset_sizes_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_sizes_f
-!
-! Purpose: 	Retrieves the size of the offsets and lengths used
-!		in an HDF5 file
-!
-! Inputs:
-!		prp_id		- file creation property list identifier
-! Outputs:
-!		sizeof_addr	- size of an object offset in bytes
-!		sizeof_size	- size of an object length in bytes
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pget_sizes_f(prp_id, sizeof_addr, sizeof_size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(SIZE_T), INTENT(OUT) :: sizeof_addr !Size of an object
-                                                                      !offset in bytes
-            INTEGER(SIZE_T), INTENT(OUT) :: sizeof_size !Size of an object
-                                                                      !length in bytes
-
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
+    INTERFACE
+       INTEGER FUNCTION h5pset_sizes_c(prp_id, sizeof_addr, sizeof_size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_SIZES_C'::h5pset_sizes_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id 
+         INTEGER(SIZE_T), INTENT(IN) :: sizeof_addr
+         INTEGER(SIZE_T), INTENT(IN) :: sizeof_size
+       END FUNCTION h5pset_sizes_c
+    END INTERFACE
+    
+    hdferr = h5pset_sizes_c(prp_id, sizeof_addr, sizeof_size)
+  END SUBROUTINE h5pset_sizes_f
+
+!****s* H5P/h5pget_sizes_f 
+! NAME
+!  h5pget_sizes_f 
+!
+! PURPOSE
+!  Retrieves the size of the offsets and lengths used 
+!  in an HDF5 file
+!
+! INPUTS
+!  prp_id	- file creation property list identifier
+! OUTPUTS
+!  
+!  sizeof_addr	- size of an object offset in bytes 
+!  sizeof_size	- size of an object length in bytes
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pget_sizes_f(prp_id, sizeof_addr, sizeof_size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id        ! Property list identifier 
+    INTEGER(SIZE_T), INTENT(OUT) :: sizeof_addr ! Size of an object
+                                                ! offset in bytes 
+    INTEGER(SIZE_T), INTENT(OUT) :: sizeof_size ! Size of an object
+                                                ! length in bytes 
+    INTEGER, INTENT(OUT) :: hdferr              ! Error code
+                                                ! 0 on success and -1 on failure
+!*****
 !            INTEGER, EXTERNAL :: h5pget_sizes_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_sizes_c(prp_id, sizeof_addr, sizeof_size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_SIZES_C'::h5pget_sizes_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(SIZE_T), INTENT(OUT) :: sizeof_addr
-              INTEGER(SIZE_T), INTENT(OUT) :: sizeof_size
-              END FUNCTION h5pget_sizes_c
-            END INTERFACE
-
-            hdferr = h5pget_sizes_c(prp_id, sizeof_addr, sizeof_size)
-          END SUBROUTINE h5pget_sizes_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_sym_k_f
-!
-! Purpose: 	Sets the size of parameters used to control the
-!		symbol table nodes
-!
-! Inputs:
-!		prp_id		- file creation property list identifier
-!		ik		- symbol table tree rank
-!		lk		- symbol table node size
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_sym_k_f (prp_id, ik, lk, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(IN) :: ik ! Symbol table tree rank
-            INTEGER, INTENT(IN) :: lk ! Symbol table node size
-
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pget_sizes_c(prp_id, sizeof_addr, sizeof_size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_SIZES_C'::h5pget_sizes_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id 
+         INTEGER(SIZE_T), INTENT(OUT) :: sizeof_addr
+         INTEGER(SIZE_T), INTENT(OUT) :: sizeof_size
+       END FUNCTION h5pget_sizes_c
+    END INTERFACE
+    
+    hdferr = h5pget_sizes_c(prp_id, sizeof_addr, sizeof_size)
+  END SUBROUTINE h5pget_sizes_f
+
+!****s* H5P/h5pset_sym_k_f 
+! NAME
+!  h5pset_sym_k_f 
+!
+! PURPOSE
+!  Sets the size of parameters used to control the 
+!symbol table nodes
+!
+! INPUTS
+!  
+!  prp_id  - file creation property list identifier
+!  ik	   - symbol table tree rank
+!  lk	   - symbol table node size
+! OUTPUTS
+!  
+!  hdferr  - error code		
+!	      Success:  0
+!	      Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pset_sym_k_f (prp_id, ik, lk, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(IN) :: ik            ! Symbol table tree rank 
+    INTEGER, INTENT(IN) :: lk            ! Symbol table node size 
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pset_sym_k_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_sym_k_c(prp_id, ik, lk)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_SYM_K_C'::h5pset_sym_k_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(IN) :: ik
-              INTEGER, INTENT(IN) :: lk
-              END FUNCTION h5pset_sym_k_c
-            END INTERFACE
-
-            hdferr = h5pset_sym_k_c(prp_id, ik, lk)
-          END SUBROUTINE h5pset_sym_k_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_sym_k_f
-!
-! Purpose: 	Retrieves the size of the symbol table B-tree 1/2 rank
-!		 and the symbol table leaf node 1/2 size.
-!
-! Inputs:
-!		prp_id		- file creation property list identifier
-! Outputs:
-!		ik		- symbol table tree 1/2 rank
-!		lk		- symbol table node 1/2 size
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pget_sym_k_f(prp_id, ik, lk, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(OUT) :: ik !Symbol table tree rank
-            INTEGER, INTENT(OUT) :: lk !Symbol table node size
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pset_sym_k_c(prp_id, ik, lk)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_SYM_K_C'::h5pset_sym_k_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id 
+         INTEGER, INTENT(IN) :: ik
+         INTEGER, INTENT(IN) :: lk
+       END FUNCTION h5pset_sym_k_c
+    END INTERFACE
+  
+    hdferr = h5pset_sym_k_c(prp_id, ik, lk)
+  END SUBROUTINE h5pset_sym_k_f
+!****s* H5P/h5pget_sym_k_f 
+! NAME
+!  h5pget_sym_k_f 
+!
+! PURPOSE
+!  Retrieves the size of the symbol table B-tree 1/2 rank
+!  and the symbol table leaf node 1/2 size. 
+!
+! INPUTS
+!  
+!  prp_id	- file creation property list identifier
+! OUTPUTS
+!  
+!  ik		- symbol table tree 1/2 rank
+!  lk		- symbol table node 1/2 size
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pget_sym_k_f(prp_id, ik, lk, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(OUT) :: ik           ! Symbol table tree rank
+    INTEGER, INTENT(OUT) :: lk           ! Symbol table node size
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pget_sym_k_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_sym_k_c(prp_id, ik, lk)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_SYM_K_C'::h5pget_sym_k_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(OUT) :: ik
-              INTEGER, INTENT(OUT) :: lk
-              END FUNCTION h5pget_sym_k_c
-            END INTERFACE
-
-            hdferr = h5pget_sym_k_c(prp_id, ik, lk)
-          END SUBROUTINE h5pget_sym_k_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_istore_k_f
-!
-! Purpose: 	Sets the size of the parameter used to control the
-!		B-trees for indexing chunked datasets
-!
-! Inputs:
-!		prp_id		- file creation property list identifier
-!		ik		- 1/2 rank of chunked storage B-tree
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_istore_k_f (prp_id, ik, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(IN) :: ik ! 1/2 rank of chunked storage B-tree
-
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pget_sym_k_c(prp_id, ik, lk)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_SYM_K_C'::h5pget_sym_k_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id 
+         INTEGER, INTENT(OUT) :: ik
+         INTEGER, INTENT(OUT) :: lk
+       END FUNCTION h5pget_sym_k_c
+    END INTERFACE
+    
+    hdferr = h5pget_sym_k_c(prp_id, ik, lk)
+  END SUBROUTINE h5pget_sym_k_f
+!****s* H5P/h5pset_istore_k_f 
+! NAME
+!  h5pset_istore_k_f 
+!
+! PURPOSE
+!  Sets the size of the parameter used to control the 
+!  B-trees for indexing chunked datasets
+!
+! INPUTS
+!  
+!  prp_id	- file creation property list identifier
+!  ik		- 1/2 rank of chunked storage B-tree
+! OUTPUTS
+!  
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pset_istore_k_f (prp_id, ik, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(IN) :: ik            ! 1/2 rank of chunked storage B-tree
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pset_istore_k_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_istore_k_c(prp_id, ik)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_ISTORE_K_C'::h5pset_istore_k_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(IN) :: ik
-              END FUNCTION h5pset_istore_k_c
-            END INTERFACE
-
-            hdferr = h5pset_istore_k_c(prp_id, ik)
-          END SUBROUTINE h5pset_istore_k_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_istore_k_f
-!
-! Purpose: 	Queries the 1/2 rank of an indexed storage B-tree.
-!
-! Inputs:
-!		prp_id		- file creation property list identifier
-! Outputs:
-!		ik		- 1/2 rank of chunked storage B-tree
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pget_istore_k_f(prp_id, ik, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(OUT) :: ik !1/2 rank of chunked storage B-tree
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pset_istore_k_c(prp_id, ik)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_ISTORE_K_C'::h5pset_istore_k_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, INTENT(IN) :: ik
+       END FUNCTION h5pset_istore_k_c
+    END INTERFACE
+    
+    hdferr = h5pset_istore_k_c(prp_id, ik)
+  END SUBROUTINE h5pset_istore_k_f
+
+!****s* H5P/h5pget_istore_k_f 
+! NAME
+!  h5pget_istore_k_f 
+!
+! PURPOSE
+!  Queries the 1/2 rank of an indexed storage B-tree. 
+!
+! INPUTS
+!  
+!  prp_id	- file creation property list identifier
+! OUTPUTS
+!  
+!  ik		- 1/2 rank of chunked storage B-tree
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pget_istore_k_f(prp_id, ik, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(OUT) :: ik           ! 1/2 rank of chunked storage B-tree
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pget_istore_k_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_istore_k_c(prp_id, ik)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_ISTORE_K_C'::h5pget_istore_k_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(OUT) :: ik
-              END FUNCTION h5pget_istore_k_c
-            END INTERFACE
-
-            hdferr = h5pget_istore_k_c(prp_id, ik)
-          END SUBROUTINE h5pget_istore_k_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_driver_f
-!
-! Purpose: 	Returns low-lever driver identifier.
-!
-! Inputs:
-!		prp_id		- file access or data transfer property
-!				  list identifier.
-! Outputs:
-!		driver		- low-level driver identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_driver_f(prp_id, driver, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(HID_T), INTENT(OUT) :: driver !low-level file driver identifier
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
+    INTERFACE
+       INTEGER FUNCTION h5pget_istore_k_c(prp_id, ik)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_ISTORE_K_C'::h5pget_istore_k_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, INTENT(OUT) :: ik
+       END FUNCTION h5pget_istore_k_c
+    END INTERFACE
+    
+    hdferr = h5pget_istore_k_c(prp_id, ik)
+  END SUBROUTINE h5pget_istore_k_f
+
+!****s* H5P/h5pget_driver_f 
+! NAME
+!  h5pget_driver_f 
+!
+! PURPOSE
+!  Returns low-lever driver identifier. 
+!
+! INPUTS
+!  
+!  prp_id  - file access or data transfer property 
+!	     list identifier. 
+! OUTPUTS
+!  
+!  driver  - low-level driver identifier
+!  hdferr  - error code		
+!	      Success:  0
+!	      Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pget_driver_f(prp_id, driver, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+    INTEGER(HID_T), INTENT(OUT) :: driver ! Low-level file driver identifier
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                          ! 0 on success and -1 on failure
+!*****
 !            INTEGER, EXTERNAL :: h5pget_driver_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_driver_c(prp_id, driver)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_DRIVER_C'::h5pget_driver_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(HID_T), INTENT(OUT) :: driver
-              END FUNCTION h5pget_driver_c
-            END INTERFACE
-
-            hdferr = h5pget_driver_c(prp_id, driver)
-          END SUBROUTINE h5pget_driver_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_fapl_stdio_f
-!
-! Purpose: 	Sets the standard I/O driver.
-!
-! Inputs:
-!		prp_id		- file access property list identifier
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_fapl_stdio_f (prp_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
+    INTERFACE
+       INTEGER FUNCTION h5pget_driver_c(prp_id, driver)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_DRIVER_C'::h5pget_driver_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER(HID_T), INTENT(OUT) :: driver
+       END FUNCTION h5pget_driver_c
+    END INTERFACE
+    
+    hdferr = h5pget_driver_c(prp_id, driver)
+  END SUBROUTINE h5pget_driver_f
+
+!****s* H5P/h5pset_fapl_stdio_f 
+! NAME
+!  h5pset_fapl_stdio_f 
+!
+! PURPOSE
+!  Sets the standard I/O driver. 
+!
+! INPUTS
+!  
+!  prp_id  - file access property list identifier
+! OUTPUTS
+!  
+!  hdferr  - error code		
+!	      Success:  0
+!	      Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pset_fapl_stdio_f (prp_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
+    
 !            INTEGER, EXTERNAL :: h5pset_fapl_stdio_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_fapl_stdio_c(prp_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAPL_STDIO_C'::h5pset_fapl_stdio_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              END FUNCTION h5pset_fapl_stdio_c
-            END INTERFACE
-
-            hdferr = h5pset_fapl_stdio_c(prp_id)
-          END SUBROUTINE h5pset_fapl_stdio_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_stdio_f
-!
-! Purpose:  	NOT AVAILABLE
-!
-! Inputs:
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
+    INTERFACE
+       INTEGER FUNCTION h5pset_fapl_stdio_c(prp_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAPL_STDIO_C'::h5pset_fapl_stdio_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+       END FUNCTION h5pset_fapl_stdio_c
+    END INTERFACE
+    
+    hdferr = h5pset_fapl_stdio_c(prp_id)
+  END SUBROUTINE h5pset_fapl_stdio_f
+
+!****s* H5P/h5pget_stdio_f 
+! NAME
+!  h5pget_stdio_f 
+!
+! PURPOSE
+!  NOT AVAILABLE
+!
+! INPUTS
+!  
+! OUTPUTS
+!  
+!  hdferr  - error code		
+!	      Success:  0
+!	      Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
 !          SUBROUTINE h5pget_stdio_f (prp_id, io, hdferr)
 !
 !            IMPLICIT NONE
@@ -1369,637 +1182,672 @@
                                          !access property list is set to
                                          !the stdio driver
 !            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+                                     ! 0 on success and -1 on failure
+!*****
 !            INTEGER, EXTERNAL :: h5pget_stdio_c
 !            hdferr = h5pget_stdio_c(prp_id, io)
 !          END SUBROUTINE h5pget_stdio_f
 
-!----------------------------------------------------------------------
-! Name:		h5pset_fapl_sec2_f
-!
-! Purpose: 	Sets the sec2 driver.
-!
-! Inputs:
-!		prp_id		- file access property list identifier
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_fapl_sec2_f (prp_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+!****s* H5P/h5pset_fapl_sec2_f 
+! NAME
+!  h5pset_fapl_sec2_f 
+!
+! PURPOSE
+!  Sets the sec2 driver. 
+!
+! INPUTS
+!  
+!  prp_id  - file access property list identifier
+! OUTPUTS
+!  
+!  hdferr  - error code		
+!	      Success:  0
+!	      Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pset_fapl_sec2_f (prp_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pset_fapl_sec2_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_fapl_sec2_c(prp_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAPL_SEC2_C'::h5pset_fapl_sec2_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-              END FUNCTION h5pset_fapl_sec2_c
-            END INTERFACE
-
-            hdferr = h5pset_fapl_sec2_c(prp_id)
-          END SUBROUTINE h5pset_fapl_sec2_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_sec2_f
-!
-! Purpose: 	NOT AVAILABLE
-!
-! Inputs:
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-!          SUBROUTINE h5pget_sec2_f (prp_id, sec2, hdferr)
+    INTERFACE
+       INTEGER FUNCTION h5pset_fapl_sec2_c(prp_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAPL_SEC2_C'::h5pset_fapl_sec2_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+       END FUNCTION h5pset_fapl_sec2_c
+    END INTERFACE
+  
+    hdferr = h5pset_fapl_sec2_c(prp_id)
+  END SUBROUTINE h5pset_fapl_sec2_f
+
+!****s* H5P/h5pget_sec2_f 
+! NAME
+!   h5pget_sec2_f 
+!
+! PURPOSE
+!  NOT AVAILABLE
+!
+! INPUTS
+!  
+! OUTPUTS
+!  
+!  hdferr  - error code		
+!	      Success:  0
+!	      Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE!          SUBROUTINE h5pget_sec2_f (prp_id, sec2, hdferr) 
 !            IMPLICIT NONE
 !            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
 !            INTEGER, INTENT(OUT) :: sec2   ! value indicates whether the file
                                            !driver uses the functions declared
                                            !in the unistd.h file
 !            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+                                     ! 0 on success and -1 on failure
+!*****
 !            INTEGER, EXTERNAL :: h5pget_sec2_c
 !            hdferr = h5pget_sec2_c(prp_id, sec2)
 !          END SUBROUTINE h5pget_sec2_f
 
-!----------------------------------------------------------------------
-! Name:		h5pset_alignment_f
-!
-! Purpose: 	Sets alignment properties of a file access property list.
-!
-! Inputs:
-!		prp_id		- file access property list identifier
-!		threshold	- threshold value
-!		alignment	- alignment value
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_alignment_f(prp_id, threshold,  alignment, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(HSIZE_T), INTENT(IN) :: threshold ! Threshold value
-            INTEGER(HSIZE_T), INTENT(IN) :: alignment ! alignment value
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+!****s* H5P/h5pset_alignment_f 
+! NAME
+!  h5pset_alignment_f 
+!
+! PURPOSE
+!  Sets alignment properties of a file access property list. 
+!
+! INPUTS
+!  
+!  prp_id	- file access property list identifier
+!  threshold	- threshold value	
+!  alignment	- alignment value
+! OUTPUTS
+!  
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pset_alignment_f(prp_id, threshold,  alignment, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id      ! Property list identifier 
+    INTEGER(HSIZE_T), INTENT(IN) :: threshold ! Threshold value
+    INTEGER(HSIZE_T), INTENT(IN) :: alignment ! alignment value
+    INTEGER, INTENT(OUT) :: hdferr            ! Error code
+                                              ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pset_alignment_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_alignment_c(prp_id, threshold, alignment)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_ALIGNMENT_C'::h5pset_alignment_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(HSIZE_T), INTENT(IN) :: threshold
-              INTEGER(HSIZE_T), INTENT(IN) :: alignment
-              END FUNCTION h5pset_alignment_c
-            END INTERFACE
-
-            hdferr = h5pset_alignment_c(prp_id, threshold, alignment)
-          END SUBROUTINE h5pset_alignment_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_alignment_f
-!
-! Purpose: 	Retrieves the current settings for alignment
-!		properties from a file access property list.
-!
-! Inputs:
-!		prp_id		- file access property list identifier
-! Outputs:
-!		threshold	- threshold value
-!		alignment	- alignment value
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_alignment_f(prp_id, threshold,  alignment, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(HSIZE_T), INTENT(OUT) :: threshold ! Threshold value
-            INTEGER(HSIZE_T), INTENT(OUT) :: alignment ! alignment value
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
+    INTERFACE
+       INTEGER FUNCTION h5pset_alignment_c(prp_id, threshold, alignment)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_ALIGNMENT_C'::h5pset_alignment_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER(HSIZE_T), INTENT(IN) :: threshold
+         INTEGER(HSIZE_T), INTENT(IN) :: alignment
+       END FUNCTION h5pset_alignment_c
+    END INTERFACE
+  
+    hdferr = h5pset_alignment_c(prp_id, threshold, alignment)
+  END SUBROUTINE h5pset_alignment_f
+
+!****s* H5P/h5pget_alignment_f 
+! NAME
+!   h5pget_alignment_f 
+!
+! PURPOSE
+!  Retrieves the current settings for alignment 
+!  properties from a file access property list. 
+!
+! INPUTS
+!  prp_id       - file access property list identifier
+!
+! OUTPUTS
+!  threshold	- threshold value	
+!  alignment	- alignment value
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pget_alignment_f(prp_id, threshold,  alignment, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id       ! Property list identifier 
+    INTEGER(HSIZE_T), INTENT(OUT) :: threshold ! Threshold value
+    INTEGER(HSIZE_T), INTENT(OUT) :: alignment ! alignment value
+    INTEGER, INTENT(OUT) :: hdferr             ! Error code
+                                             ! 0 on success and -1 on failure
+!*****
 !            INTEGER, EXTERNAL :: h5pget_alignment_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_alignment_c(prp_id, threshold, alignment)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_ALIGNMENT_C'::h5pget_alignment_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(HSIZE_T), INTENT(OUT) :: threshold
-              INTEGER(HSIZE_T), INTENT(OUT) :: alignment
-              END FUNCTION h5pget_alignment_c
-            END INTERFACE
-
-            hdferr = h5pget_alignment_c(prp_id, threshold, alignment)
-          END SUBROUTINE h5pget_alignment_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_fapl_core_f
-!
-! Purpose: 	Modifies the file access property list to use the
-!		H5FD_CORE driver.
-!
-! Inputs:  	prp_id		- file access property list identifier
-!		increment	- size, in bytes, of memory increments
-!		backing_store	- boolean flag indicating whether to write
-!				  the file contents to disk when the file is closed.
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_fapl_core_f(prp_id, increment, backing_store, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(SIZE_T), INTENT(IN) :: increment ! File block size in bytes.
-            LOGICAL, INTENT(IN) :: backing_store ! flag to indicate that
-                                    ! entire file contents are flushed to a file
-                                    ! with the same name as this core file.
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: backing_store_flag
+    INTERFACE
+       INTEGER FUNCTION h5pget_alignment_c(prp_id, threshold, alignment)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_ALIGNMENT_C'::h5pget_alignment_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER(HSIZE_T), INTENT(OUT) :: threshold
+         INTEGER(HSIZE_T), INTENT(OUT) :: alignment
+       END FUNCTION h5pget_alignment_c
+    END INTERFACE
+    
+    hdferr = h5pget_alignment_c(prp_id, threshold, alignment)
+  END SUBROUTINE h5pget_alignment_f
+
+!****s* H5P/h5pset_fapl_core_f 
+! NAME
+!   h5pset_fapl_core_f 
+!
+! PURPOSE
+!  Modifies the file access property list to use the 
+!  H5FD_CORE driver. 
+!
+! INPUTS
+!  prp_id	    - file access property list identifier
+!  increment	    - size, in bytes, of memory increments 
+!  backing_store    - boolean flag indicating whether to write 
+!		      the file contents to disk when the file is closed. 
+! OUTPUTS
+!  hdferr           - error code		
+!	                Success:  0
+!	                Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pset_fapl_core_f(prp_id, increment, backing_store, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id     ! Property list identifier 
+    INTEGER(SIZE_T), INTENT(IN) :: increment ! File block size in bytes.
+    LOGICAL, INTENT(IN) :: backing_store ! Flag to indicate that
+                                         ! entire file contents are flushed to a file 
+                                         ! with the same name as this core file.
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
+    INTEGER :: backing_store_flag 
 
 !            INTEGER, EXTERNAL :: h5pset_fapl_core_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_fapl_core_c(prp_id, increment, backing_store_flag)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAPL_CORE_C'::h5pset_fapl_core_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(SIZE_T), INTENT(IN) :: increment
-              INTEGER :: backing_store_flag
-              END FUNCTION h5pset_fapl_core_c
-            END INTERFACE
-            backing_store_flag = 0
-            if(backing_store) backing_store_flag = 1
-            hdferr = h5pset_fapl_core_c(prp_id, increment, backing_store_flag)
-          END SUBROUTINE h5pset_fapl_core_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_fapl_core_f
-!
-! Purpose: 	Queries core file driver properties.
-!
-! Inputs:
-!		prp_id		- file access property list identifier
-! Outputs:
-!		increment	- size, in bytes, of memory increments
-!		backing_store	- boolean flag indicating whether to write
-!				  the file contents to disk when the file is closed.
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_fapl_core_f(prp_id, increment, backing_store, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(SIZE_T), INTENT(OUT) :: increment ! File block size in bytes.
-            LOGICAL, INTENT(OUT) :: backing_store ! flag to indicate that
-                                    ! entire file contents are flushed to a file
-                                    ! with the same name as this core file.
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: backing_store_flag
+    INTERFACE
+       INTEGER FUNCTION h5pset_fapl_core_c(prp_id, increment, backing_store_flag)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAPL_CORE_C'::h5pset_fapl_core_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id 
+         INTEGER(SIZE_T), INTENT(IN) :: increment 
+         INTEGER :: backing_store_flag 
+       END FUNCTION h5pset_fapl_core_c
+    END INTERFACE
+    backing_store_flag = 0
+    IF(backing_store) backing_store_flag = 1
+    hdferr = h5pset_fapl_core_c(prp_id, increment, backing_store_flag)
+  END SUBROUTINE h5pset_fapl_core_f
+
+!****s* H5P/h5pget_fapl_core_f 
+! NAME
+!   h5pget_fapl_core_f 
+!
+! PURPOSE
+!  Queries core file driver properties. 
+!
+! INPUTS
+!  prp_id	 - file access property list identifier
+! OUTPUTS
+!  
+!  increment	 - size, in bytes, of memory increments 
+!  backing_store - boolean flag indicating whether to write 
+!		   the file contents to disk when the file is closed. 
+!  hdferr        - error code		
+!	            Success:  0
+!	            Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pget_fapl_core_f(prp_id, increment, backing_store, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id      ! Property list identifier 
+    INTEGER(SIZE_T), INTENT(OUT) :: increment ! File block size in bytes.
+    LOGICAL, INTENT(OUT) :: backing_store   ! Flag to indicate that
+                                            ! entire file contents are flushed to a file 
+                                            ! with the same name as this core file.
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                            ! 0 on success and -1 on failure
+!*****
+    INTEGER :: backing_store_flag 
 
 !            INTEGER, EXTERNAL :: h5pget_fapl_core_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_fapl_core_c(prp_id, increment, backing_store_flag)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FAPL_CORE_C'::h5pget_fapl_core_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(SIZE_T), INTENT(OUT) :: increment
-              INTEGER :: backing_store_flag
-              END FUNCTION h5pget_fapl_core_c
-            END INTERFACE
-
-            hdferr = h5pget_fapl_core_c(prp_id, increment, backing_store_flag)
-            backing_store =.FALSE.
-            IF (backing_store_flag .EQ. 1) backing_store =.TRUE.
-          END SUBROUTINE h5pget_fapl_core_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_fapl_family_f
-!
-! Purpose: 	Sets the file access property list to use the family driver.
-!
-! Inputs:
-!		prp_id		- file access property list identifier
-!		memb_size	- size in bytes of each file member
-!		memb_plist	- identifier of the file access property
-!				  list to be used for each family member
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_fapl_family_f(prp_id, memb_size, memb_plist , hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(HSIZE_T), INTENT(IN) :: memb_size ! Logical size, in bytes,
-                                                      !of each family member
-            INTEGER(HID_T), INTENT(IN) :: memb_plist !Identifier of the file
-                                                     !access property list for
-                                                     !each member of the family
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pget_fapl_core_c(prp_id, increment, backing_store_flag)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FAPL_CORE_C'::h5pget_fapl_core_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id 
+         INTEGER(SIZE_T), INTENT(OUT) :: increment 
+         INTEGER :: backing_store_flag 
+       END FUNCTION h5pget_fapl_core_c
+    END INTERFACE
+    
+    hdferr = h5pget_fapl_core_c(prp_id, increment, backing_store_flag)
+    backing_store =.FALSE.
+    IF (backing_store_flag .EQ. 1) backing_store =.TRUE.
+  END SUBROUTINE h5pget_fapl_core_f
+
+!****s* H5P/ h5pset_fapl_family_f 
+! NAME
+!   h5pset_fapl_family_f 
+!
+! PURPOSE
+!  Sets the file access property list to use the family driver. 
+!
+! INPUTS
+!  prp_id	- file access property list identifier
+!  memb_size	- size in bytes of each file member 
+!  memb_plist	- identifier of the file access property 
+!		  list to be used for each family member
+! OUTPUTS
+!  hdferr  - error code		
+!	      Success:  0
+!	      Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pset_fapl_family_f(prp_id, memb_size, memb_plist , hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id      ! Property list identifier 
+    INTEGER(HSIZE_T), INTENT(IN) :: memb_size ! Logical size, in bytes,
+                                              ! of each family member
+    INTEGER(HID_T), INTENT(IN) :: memb_plist  ! Identifier of the file 
+                                              ! access property list for 
+                                              ! each member of the family
+    INTEGER, INTENT(OUT) :: hdferr            ! Error code
+                                              ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pset_fapl_family_f
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_fapl_family_c(prp_id, memb_size, memb_plist)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAPL_FAMILY_C'::h5pset_fapl_family_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(HSIZE_T), INTENT(IN) :: memb_size
-              INTEGER(HID_T), INTENT(IN) :: memb_plist
-              END FUNCTION h5pset_fapl_family_c
-            END INTERFACE
-
-            hdferr = h5pset_fapl_family_c(prp_id, memb_size, memb_plist)
-          END SUBROUTINE h5pset_fapl_family_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_fapl_family_f
-!
-! Purpose:	Returns file access property list information.
-!
-! Inputs:
-!		prp_id		- file access property list identifier
-! Outputs:
-!		memb_size	- size in bytes of each file member
-!		memb_plist	- identifier of the file access property
-!				  list to be used for each family member
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
+    INTERFACE
+       INTEGER FUNCTION h5pset_fapl_family_c(prp_id, memb_size, memb_plist)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAPL_FAMILY_C'::h5pset_fapl_family_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER(HSIZE_T), INTENT(IN) :: memb_size
+         INTEGER(HID_T), INTENT(IN) :: memb_plist
+       END FUNCTION h5pset_fapl_family_c
+    END INTERFACE
 
-          SUBROUTINE h5pget_fapl_family_f(prp_id, memb_size, memb_plist , hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(HSIZE_T), INTENT(OUT) :: memb_size ! Logical size, in bytes,
-                                                      !of each family member
-            INTEGER(HID_T), INTENT(OUT) :: memb_plist !Identifier of the file
-                                                     !access property list for
-                                                     !each member of the family
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    hdferr = h5pset_fapl_family_c(prp_id, memb_size, memb_plist)
+  END SUBROUTINE h5pset_fapl_family_f
+
+!****s* H5P/h5pget_fapl_family_f 
+! NAME
+!  h5pget_fapl_family_f 
+!
+! PURPOSE
+!  Returns file access property list information.  	
+!
+! INPUTS
+!  prp_id	- file access property list identifier
+! OUTPUTS
+!  memb_size	- size in bytes of each file member 
+!  memb_plist	- identifier of the file access property 
+!		  list to be used for each family member
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pget_fapl_family_f(prp_id, memb_size, memb_plist , hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id       ! Property list identifier 
+    INTEGER(HSIZE_T), INTENT(OUT) :: memb_size ! Logical size, in bytes,
+                                               ! of each family member
+    INTEGER(HID_T), INTENT(OUT) :: memb_plist  ! Identifier of the file 
+                                               ! access property list for 
+                                               ! each member of the family
+    INTEGER, INTENT(OUT) :: hdferr             ! Error code
+                                               ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pget_fapl_family_f
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_fapl_family_c(prp_id, memb_size, memb_plist)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FAPL_FAMILY_C'::h5pget_fapl_family_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(HSIZE_T), INTENT(OUT) :: memb_size
-              INTEGER(HID_T), INTENT(OUT) :: memb_plist
-              END FUNCTION h5pget_fapl_family_c
-            END INTERFACE
-
-            hdferr = h5pget_fapl_family_c(prp_id, memb_size, memb_plist)
-          END SUBROUTINE h5pget_fapl_family_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_cache_f
-!
-! Purpose: 	Sets the meta data cache and raw data chunk
-!		cache parameters
-!
-! Inputs:
-!		prp_id		- file access property list identifier
-!		mdc_nelmts	- number of elements (objects) in the meta
-!				  data cache
-!		rdcc_nelmts	- number of elements (objects) in the raw
-!			          data chunk cache
-!		rdcc_nbytes	- total size of the raw data chunk cache, in bytes
-!		rdcc_w0		- preemption policy (0 or 1)
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_cache_f(prp_id, mdc_nelmts,rdcc_nelmts, rdcc_nbytes, rdcc_w0, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(IN) :: mdc_nelmts  !Number of elements (objects)
-                                                        ! in the meta data cache
-            INTEGER(SIZE_T), INTENT(IN) :: rdcc_nelmts  !Number of elements (objects)
-                                                        ! in the meta data cache
-            INTEGER(SIZE_T), INTENT(IN) :: rdcc_nbytes !Total size of the raw data
-                                                      !chunk cache, in bytes
-            REAL, INTENT(IN) :: rdcc_w0 !Preemption policy
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pget_fapl_family_c(prp_id, memb_size, memb_plist)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FAPL_FAMILY_C'::h5pget_fapl_family_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER(HSIZE_T), INTENT(OUT) :: memb_size
+         INTEGER(HID_T), INTENT(OUT) :: memb_plist
+       END FUNCTION h5pget_fapl_family_c
+    END INTERFACE
+    
+    hdferr = h5pget_fapl_family_c(prp_id, memb_size, memb_plist)
+  END SUBROUTINE h5pget_fapl_family_f
+
+!****s* H5P/h5pset_cache_f 
+! NAME
+!   h5pset_cache_f 
+!
+! PURPOSE
+!  Sets the meta data cache and raw data chunk 
+!  cache parameters
+!
+! INPUTS
+!  
+!  prp_id	- file access property list identifier
+!  mdc_nelmts	- number of elements (objects) in the meta 
+!		  data cache 
+!  rdcc_nelmts	- number of elements (objects) in the raw 
+!		  data chunk cache 
+!  rdcc_nbytes	- total size of the raw data chunk cache, in bytes 
+!  rdcc_w0	- preemption policy (0 or 1)
+! OUTPUTS
+!  
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pset_cache_f(prp_id, mdc_nelmts,rdcc_nelmts, rdcc_nbytes, rdcc_w0, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(IN) :: mdc_nelmts    ! Number of elements (objects)
+                                         !  in the meta data cache
+    INTEGER(SIZE_T), INTENT(IN) :: rdcc_nelmts ! Number of elements (objects)
+                                               !  in the meta data cache
+    INTEGER(SIZE_T), INTENT(IN) :: rdcc_nbytes ! Total size of the raw data 
+                                               !  chunk cache, in bytes 
+    REAL, INTENT(IN) :: rdcc_w0                ! Preemption policy
+    INTEGER, INTENT(OUT) :: hdferr             ! Error code
+                                               !  0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pset_cache_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_cache_c(prp_id,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,rdcc_w0)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_CACHE_C'::h5pset_cache_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(IN) :: mdc_nelmts
-              INTEGER(SIZE_T), INTENT(IN) :: rdcc_nelmts
-              INTEGER(SIZE_T), INTENT(IN) :: rdcc_nbytes
-              REAL, INTENT(IN) :: rdcc_w0
-              END FUNCTION h5pset_cache_c
-            END INTERFACE
-
-            hdferr = h5pset_cache_c(prp_id, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, rdcc_w0 )
-          END SUBROUTINE h5pset_cache_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_cache_f
-!
-! Purpose: 	Queries the meta data cache and raw data chunk cache
-!		parameters.
-!
-! Inputs:
-!		prp_id		- file access property list identifier
-! Outputs:
-!		mdc_nelmts	- number of elements (objects) in the meta
-!				  data cache
-!		rdcc_nelmts	- number of elements (objects) in the raw
-!			          data chunk cache
-!		rdcc_nbytes	- total size of the raw data chunk cache, in bytes
-!		rdcc_w0		- preemption policy (0 or 1)
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-!                       Bug fix: type of the rdcc_nelmts parameter should be INTEGER
-!                                instead of INTEGER(SIZE_T) October 10, 2003
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_cache_f(prp_id, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, rdcc_w0, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(OUT) :: mdc_nelmts  !Number of elements (objects)
-                                                        ! in the meta data cache
-            INTEGER(SIZE_T), INTENT(OUT) :: rdcc_nelmts  !Number of elements (objects)
-                                                        ! in the meta data cache
-            INTEGER(SIZE_T), INTENT(OUT) :: rdcc_nbytes !Total size of the raw data
-                                                      !chunk cache, in bytes
-            REAL, INTENT(OUT) :: rdcc_w0 !Preemption policy
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
+    INTERFACE
+       INTEGER FUNCTION h5pset_cache_c(prp_id,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,rdcc_w0)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_CACHE_C'::h5pset_cache_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, INTENT(IN) :: mdc_nelmts 
+         INTEGER(SIZE_T), INTENT(IN) :: rdcc_nelmts 
+         INTEGER(SIZE_T), INTENT(IN) :: rdcc_nbytes
+         REAL, INTENT(IN) :: rdcc_w0
+       END FUNCTION h5pset_cache_c
+    END INTERFACE
 
+    hdferr = h5pset_cache_c(prp_id, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, rdcc_w0 )
+  END SUBROUTINE h5pset_cache_f
+
+!****s* H5P/h5pget_cache_f 
+! NAME
+!   h5pget_cache_f 
+!
+! PURPOSE
+!  Queries the meta data cache and raw data chunk cache 
+!  parameters.  
+!
+! INPUTS
+!  prp_id	- file access property list identifier
+!
+! OUTPUTS
+!  mdc_nelmts	- number of elements (objects) in the meta 
+!		  data cache 
+!  rdcc_nelmts	- number of elements (objects) in the raw 
+!		  data chunk cache 
+!  rdcc_nbytes	- total size of the raw data chunk cache, in bytes 
+!  rdcc_w0	- preemption policy (0 or 1)
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!
+!  Bug fix: type of the rdcc_nelmts parameter should be INTEGER
+!  instead of INTEGER(SIZE_T) October 10, 2003 
+!		
+! SOURCE
+  SUBROUTINE h5pget_cache_f(prp_id, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, rdcc_w0, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(OUT) :: mdc_nelmts   ! Number of elements (objects)
+                                         !  in the meta data cache
+    INTEGER(SIZE_T), INTENT(OUT) :: rdcc_nelmts  ! Number of elements (objects)
+                                                 !  in the meta data cache
+    INTEGER(SIZE_T), INTENT(OUT) :: rdcc_nbytes  ! Total size of the raw data 
+                                                 !  chunk cache, in bytes 
+    REAL, INTENT(OUT) :: rdcc_w0                 ! Preemption policy
+    INTEGER, INTENT(OUT) :: hdferr               ! Error code
+                                                 ! 0 on success and -1 on failure
+!*****
 !            INTEGER, EXTERNAL :: h5pget_cache_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_cache_c(prp_id,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,rdcc_w0)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_CACHE_C'::h5pget_cache_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(OUT) :: mdc_nelmts
-              INTEGER(SIZE_T), INTENT(OUT) :: rdcc_nelmts
-              INTEGER(SIZE_T), INTENT(OUT) :: rdcc_nbytes
-              REAL, INTENT(OUT) :: rdcc_w0
-              END FUNCTION h5pget_cache_c
-            END INTERFACE
-
-            hdferr = h5pget_cache_c(prp_id, mdc_nelmts,rdcc_nelmts, rdcc_nbytes, rdcc_w0 )
-          END SUBROUTINE h5pget_cache_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_fapl_split_f
-!
-! Purpose: 	Emulates the old split file driver.
-!
-! Inputs:
-!		prp_id		- file access property list identifier
-!		meta_ext	- name of the extension for the metafile
-!				  filename
-!		meta_plist	- identifier of the meta file access property
-!				  list
-!		raw_ext 	- name extension for the raw file filename
-!		raw_plist	- identifier of the raw file access property list
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_fapl_split_f(prp_id, meta_ext, meta_plist, raw_ext, raw_plist, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            CHARACTER(LEN=*), INTENT(IN) :: meta_ext  !Name of the extension for
-                                                      !the metafile filename
-            INTEGER(HID_T), INTENT(IN) :: meta_plist  ! Identifier of the meta file
-                                                      ! access property list
-            CHARACTER(LEN=*), INTENT(IN) :: raw_ext  !Name extension for the raw file filename
-            INTEGER(HID_T), INTENT(IN) :: raw_plist  !Identifier of the raw file
-                                                     !access property list
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: meta_len, raw_len
+    INTERFACE
+       INTEGER FUNCTION h5pget_cache_c(prp_id,mdc_nelmts,rdcc_nelmts,rdcc_nbytes,rdcc_w0)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_CACHE_C'::h5pget_cache_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, INTENT(OUT) :: mdc_nelmts 
+         INTEGER(SIZE_T), INTENT(OUT) :: rdcc_nelmts 
+         INTEGER(SIZE_T), INTENT(OUT) :: rdcc_nbytes
+         REAL, INTENT(OUT) :: rdcc_w0
+       END FUNCTION h5pget_cache_c
+    END INTERFACE
+    
+    hdferr = h5pget_cache_c(prp_id, mdc_nelmts,rdcc_nelmts, rdcc_nbytes, rdcc_w0 )
+  END SUBROUTINE h5pget_cache_f
+
+!****s* H5P/h5pset_fapl_split_f 
+! NAME
+!   h5pset_fapl_split_f 
+!
+! PURPOSE
+!  Emulates the old split file driver. 
+!
+! INPUTS
+!  
+!  prp_id	- file access property list identifier
+!  meta_ext	- name of the extension for the metafile 
+!		  filename
+!  meta_plist	- identifier of the meta file access property 
+!		  list
+!  raw_ext 	- name extension for the raw file filename
+!  raw_plist	- identifier of the raw file access property list
+!
+! OUTPUTS
+!  
+!  hdferr       - error code		
+!	            Success:  0
+!	            Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pset_fapl_split_f(prp_id, meta_ext, meta_plist, raw_ext, raw_plist, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id     ! Property list identifier 
+    CHARACTER(LEN=*), INTENT(IN) :: meta_ext ! Name of the extension for
+                                             !  the metafile filename
+    INTEGER(HID_T), INTENT(IN) :: meta_plist ! Identifier of the meta file
+                                             !  access property list
+    CHARACTER(LEN=*), INTENT(IN) :: raw_ext  ! Name extension for the raw file filename
+    INTEGER(HID_T), INTENT(IN) :: raw_plist  ! Identifier of the raw file 
+                                             !  access property list
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+                                             ! 0 on success and -1 on failure
+!*****
+    INTEGER :: meta_len, raw_len
 
 !            INTEGER, EXTERNAL :: h5pset_fapl_split_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_fapl_split_c(prp_id,meta_len,meta_ext,meta_plist,raw_len,raw_ext,raw_plist)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAPL_SPLIT_C'::h5pset_fapl_split_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: meta_ext
-              !DEC$ATTRIBUTES reference :: raw_ext
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              CHARACTER(LEN=*), INTENT(IN) :: meta_ext
-              INTEGER(HID_T), INTENT(IN) :: meta_plist
-              CHARACTER(LEN=*), INTENT(IN) :: raw_ext
-              INTEGER(HID_T), INTENT(IN) :: raw_plist
-              INTEGER :: meta_len, raw_len
-              END FUNCTION h5pset_fapl_split_c
-            END INTERFACE
-
-            meta_len = LEN(meta_ext)
-            raw_len = LEN(raw_ext)
-        hdferr = h5pset_fapl_split_c(prp_id,meta_len,meta_ext,meta_plist,raw_len,raw_ext,raw_plist)
-          END SUBROUTINE h5pset_fapl_split_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_split_f
-!
-! Purpose: 	NOT AVAILABLE
-!
-! Inputs:
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
+    INTERFACE
+       INTEGER FUNCTION h5pset_fapl_split_c(prp_id,meta_len,meta_ext,meta_plist,raw_len,raw_ext,raw_plist)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAPL_SPLIT_C'::h5pset_fapl_split_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: meta_ext
+         !DEC$ATTRIBUTES reference :: raw_ext
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         CHARACTER(LEN=*), INTENT(IN) :: meta_ext 
+         INTEGER(HID_T), INTENT(IN) :: meta_plist
+         CHARACTER(LEN=*), INTENT(IN) :: raw_ext
+         INTEGER(HID_T), INTENT(IN) :: raw_plist 
+         INTEGER :: meta_len, raw_len
+       END FUNCTION h5pset_fapl_split_c
+    END INTERFACE
 
+    meta_len = LEN(meta_ext)
+    raw_len = LEN(raw_ext)
+    hdferr = h5pset_fapl_split_c(prp_id,meta_len,meta_ext,meta_plist,raw_len,raw_ext,raw_plist)
+  END SUBROUTINE h5pset_fapl_split_f
+
+!****s* H5P/h5pget_split_f 
+! NAME
+!   h5pget_split_f 
+!
+! PURPOSE
+!  NOT AVAILABLE
+!
+! INPUTS
+!  
+! OUTPUTS
+!  
+!  hdferr  - error code		
+!	      Success:  0
+!	      Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
 !          SUBROUTINE h5pget_split_f(prp_id, meta_ext_size, meta_ext, meta_plist,raw_ext_size,&
 !                                     raw_ext, raw_plist, hdferr)
 !            IMPLICIT NONE
@@ -2019,3480 +1867,2848 @@
 !            INTEGER(HID_T), INTENT(OUT) :: raw_plist  !Identifier of the raw file
                                                      !access property list
 !            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+                                     ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pget_split_c
 !            hdferr = h5pget_split_c(prp_id, meta_ext_size, meta_ext, meta_plist, &
 !                                    raw_ext_size, raw_ext, raw_plist )
 !          END SUBROUTINE h5pget_split_f
 
-!----------------------------------------------------------------------
-! Name:		h5pset_gc_references_f
-!
-! Purpose: 	Sets garbage collecting references flag.
-!
-! Inputs:
-!		prp_id		- file access property list identifier
-!		gc_reference	- flag for stting garbage collection on
-!				  and off (1 or 0)
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pset_gc_references_f (prp_id, gc_reference, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(IN) :: gc_reference !the flag for garbage collecting
-                                                ! references for the file
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+!****s* H5P/h5pset_gc_references_f 
+! NAME
+!   h5pset_gc_references_f 
+!
+! PURPOSE
+!  Sets garbage collecting references flag. 
+!
+! INPUTS
+!  
+!  prp_id	- file access property list identifier
+!  gc_reference	- flag for stting garbage collection on 
+!		  and off (1 or 0)
+! OUTPUTS
+!  
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE 
+  SUBROUTINE h5pset_gc_references_f (prp_id, gc_reference, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(IN) :: gc_reference  ! The flag for garbage collecting
+                                         !  references for the file
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pset_gc_references_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_gc_references_c(prp_id, gc_reference)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_GC_REFERENCES_C'::h5pset_gc_references_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(IN) :: gc_reference
-              END FUNCTION h5pset_gc_references_c
-            END INTERFACE
-
-            hdferr = h5pset_gc_references_c(prp_id, gc_reference)
-          END SUBROUTINE h5pset_gc_references_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_gc_references_f
-!
-! Purpose: 	Returns garbage collecting references setting.
-!
-! Inputs:
-!		prp_id		- file access property list identifier
-! Outputs:
-!		gc_reference	- flag for stting garbage collection on
-!				  and off (1 or 0)
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
+    INTERFACE
+       INTEGER FUNCTION h5pset_gc_references_c(prp_id, gc_reference)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_GC_REFERENCES_C'::h5pset_gc_references_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, INTENT(IN) :: gc_reference
+       END FUNCTION h5pset_gc_references_c
+    END INTERFACE
 
-          SUBROUTINE h5pget_gc_references_f (prp_id, gc_reference, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(OUT) :: gc_reference !the flag for garbage collecting
-                                                ! references for the file
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    hdferr = h5pset_gc_references_c(prp_id, gc_reference)
+  END SUBROUTINE h5pset_gc_references_f
+
+!****s* H5P/h5pget_gc_references_f 
+! NAME
+!   h5pget_gc_references_f 
+!
+! PURPOSE
+!  Returns garbage collecting references setting. 	
+!
+! INPUTS
+!  
+!  prp_id	- file access property list identifier
+! OUTPUTS
+!  
+!  gc_reference	- flag for stting garbage collection on 
+!		  and off (1 or 0)
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!		
+! SOURCE
+  SUBROUTINE h5pget_gc_references_f(prp_id, gc_reference, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(OUT) :: gc_reference ! The flag for garbage collecting
+                                         !  references for the file
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pget_gc_references_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_gc_references_c(prp_id, gc_reference)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_GC_REFERENCES_C'::h5pget_gc_references_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(OUT) :: gc_reference
-              END FUNCTION h5pget_gc_references_c
-            END INTERFACE
-
-            hdferr = h5pget_gc_references_c(prp_id, gc_reference)
-          END SUBROUTINE h5pget_gc_references_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_layout_f
-!
-! Purpose: 	Sets the type of storage used store the raw data
-!		for a dataset.
-!
-! Inputs:
-!		prp_id		- data creation property list identifier
-!		layout		- type of storage layout for raw data
-!				  possible values are:
-!				  H5D_COMPACT_F
-!				  H5D_CONTIGUOUS_F
-!				  H5D_CHUNKED_F
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_layout_f (prp_id, layout, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(IN) :: layout !Type of storage layout for raw data
-                                          !possible values are:
-                                          !H5D_COMPACT_F
-                                          !H5D_CONTIGUOUS_F
-                                          !H5D_CHUNKED_F
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pget_gc_references_c(prp_id, gc_reference)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_GC_REFERENCES_C'::h5pget_gc_references_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, INTENT(OUT) :: gc_reference
+       END FUNCTION h5pget_gc_references_c
+    END INTERFACE
+    
+    hdferr = h5pget_gc_references_c(prp_id, gc_reference)
+  END SUBROUTINE h5pget_gc_references_f
+
+!****s* H5P/h5pset_layout_f 
+! NAME
+!   h5pset_layout_f 
+!
+! PURPOSE
+!  Sets the type of storage used store the raw data 
+!  for a dataset. 
+!
+! INPUTS
+!  
+!  prp_id	- data creation property list identifier
+!  layout	- type of storage layout for raw data
+!  		  possible values are:
+!  		    H5D_COMPACT_F
+!  		    H5D_CONTIGUOUS_F
+!  		    H5D_CHUNKED_F
+! OUTPUTS
+!  
+!  hdferr      - error code		
+!	          Success:  0
+!	          Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!  
+! SOURCE
+  SUBROUTINE h5pset_layout_f (prp_id, layout, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(IN) :: layout        ! Type of storage layout for raw data
+                                         ! possible values are:
+                                         !   H5D_COMPACT_F
+                                         !   H5D_CONTIGUOUS_F
+                                         !   H5D_CHUNKED_F
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pset_layout_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_layout_c(prp_id, layout)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_LAYOUT_C'::h5pset_layout_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(IN) :: layout
-              END FUNCTION h5pset_layout_c
-            END INTERFACE
-
-            hdferr = h5pset_layout_c(prp_id, layout)
-          END SUBROUTINE h5pset_layout_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_layout_f
-!
-! Purpose: 	Returns the layout of the raw data for a dataset.
-!
-! Inputs:
-!		prp_id		- data creation property list identifier
-! Outputs:
-!		layout		- type of storage layout for raw data
-!				  possible values are:
-!				  H5D_COMPACT_F
-!				  H5D_CONTIGUOUS_F
-!				  H5D_CHUNKED_F
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_layout_f (prp_id, layout, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(OUT) :: layout !Type of storage layout for raw data
-                                          !possible values are:
-                                          !H5D_COMPACT_F(0)
-                                          !H5D_CONTIGUOUS_F(1)
-                                          !H5D_CHUNKED_F(2)
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pset_layout_c(prp_id, layout)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_LAYOUT_C'::h5pset_layout_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, INTENT(IN) :: layout
+       END FUNCTION h5pset_layout_c
+    END INTERFACE
+    
+    hdferr = h5pset_layout_c(prp_id, layout)
+  END SUBROUTINE h5pset_layout_f
+
+!****s* H5P/h5pget_layout_f 
+! NAME
+!   h5pget_layout_f 
+!
+! PURPOSE
+!  Returns the layout of the raw data for a dataset. 
+!
+! INPUTS
+!  
+!  prp_id	- data creation property list identifier
+! OUTPUTS
+!  
+!  layout	- type of storage layout for raw data
+!  		  possible values are:
+!  		   H5D_COMPACT_F
+!  		   H5D_CONTIGUOUS_F
+!  		   H5D_CHUNKED_F
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!  
+! SOURCE
+  SUBROUTINE h5pget_layout_f (prp_id, layout, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(OUT) :: layout       ! Type of storage layout for raw data
+                                         ! possible values are:
+                                         !  H5D_COMPACT_F(0)
+                                         !  H5D_CONTIGUOUS_F(1)
+                                         !  H5D_CHUNKED_F(2)
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pget_layout_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_layout_c(prp_id, layout)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_LAYOUT_C'::h5pget_layout_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(OUT) :: layout
-              END FUNCTION h5pget_layout_c
-            END INTERFACE
-
-            hdferr = h5pget_layout_c(prp_id, layout)
-          END SUBROUTINE h5pget_layout_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_filter_f
-!
-! Purpose: 	Adds a filter to the filter pipeline.
-!
-! Inputs:
-!		prp_id		- data creation or transfer property list
-!				  identifier
-!		filter		- filter to be added to the pipeline
-!		flags		- bit vector specifying certain general
-!				  properties of the filter
-!		cd_nelmts	- number of elements in cd_values
-!		cd_values	- auxiliary data for the filter
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		February, 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_filter_f(prp_id, filter, flags, cd_nelmts, cd_values,  hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(IN) :: filter  !Filter to be added to the pipeline.
-            INTEGER, INTENT(IN) :: flags  !Bit vector specifying certain general
-                                          !properties of the filter.
-            INTEGER(SIZE_T), INTENT(IN) :: cd_nelmts  !Number of elements in cd_values.
-            INTEGER, DIMENSION(*), INTENT(IN) :: cd_values  !Auxiliary data for the filter.
-
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pget_layout_c(prp_id, layout)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_LAYOUT_C'::h5pget_layout_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, INTENT(OUT) :: layout
+       END FUNCTION h5pget_layout_c
+    END INTERFACE
+    
+    hdferr = h5pget_layout_c(prp_id, layout)
+  END SUBROUTINE h5pget_layout_f
+
+!****s* H5P/h5pset_filter_f 
+! NAME
+!  h5pset_filter_f 
+!
+! PURPOSE
+!  Adds a filter to the filter pipeline. 
+!
+! INPUTS
+!  
+!  prp_id	- data creation or transfer property list 
+!  		  identifier
+!  filter	- filter to be added to the pipeline 
+!  flags	- bit vector specifying certain general
+!  		  properties of the filter
+!  cd_nelmts	- number of elements in cd_values
+!  cd_values	- auxiliary data for the filter
+! OUTPUTS
+!  
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  February, 2003
+!
+! SOURCE
+  SUBROUTINE h5pset_filter_f(prp_id, filter, flags, cd_nelmts, cd_values,  hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(IN) :: filter        ! Filter to be added to the pipeline.
+    INTEGER, INTENT(IN) :: flags         ! Bit vector specifying certain general
+                                       !  properties of the filter.
+    INTEGER(SIZE_T), INTENT(IN) :: cd_nelmts       ! Number of elements in cd_values.
+    INTEGER, DIMENSION(*), INTENT(IN) :: cd_values ! Auxiliary data for the filter.
+    INTEGER, INTENT(OUT) :: hdferr                 ! Error code
+                                                 ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pset_filter_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_filter_c(prp_id, filter, flags, cd_nelmts, cd_values)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FILTER_C'::h5pset_filter_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(IN) :: filter
-              INTEGER, INTENT(IN) :: flags
-              INTEGER(SIZE_T), INTENT(IN) :: cd_nelmts
-              INTEGER, DIMENSION(*), INTENT(IN) :: cd_values
-              END FUNCTION h5pset_filter_c
-            END INTERFACE
-
-            hdferr = h5pset_filter_c(prp_id, filter, flags, cd_nelmts, cd_values )
-          END SUBROUTINE h5pset_filter_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_nfilters_f
-!
-! Purpose: 	Returns the number of filters in the pipeline.
-!
-! Inputs:
-!		prp_id		- data creation or transfer property list
-!				  identifier
-! Outputs:
-!		nfilters	- number of filters in the pipeline
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_nfilters_f (prp_id, nfilters, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(OUT) :: nfilters !the number of filters in the pipeline
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pset_filter_c(prp_id, filter, flags, cd_nelmts, cd_values)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FILTER_C'::h5pset_filter_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id 
+         INTEGER, INTENT(IN) :: filter 
+         INTEGER, INTENT(IN) :: flags 
+         INTEGER(SIZE_T), INTENT(IN) :: cd_nelmts 
+         INTEGER, DIMENSION(*), INTENT(IN) :: cd_values 
+       END FUNCTION h5pset_filter_c
+    END INTERFACE
+  
+    hdferr = h5pset_filter_c(prp_id, filter, flags, cd_nelmts, cd_values )
+  END SUBROUTINE h5pset_filter_f
+
+!****s* H5P/h5pget_nfilters_f 
+! NAME
+!   h5pget_nfilters_f 
+!
+! PURPOSE
+!  Returns the number of filters in the pipeline. 
+!
+! INPUTS
+!  
+!  prp_id	- data creation or transfer property list 
+!  		  identifier
+! OUTPUTS
+!  
+!  nfilters	- number of filters in the pipeline
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!  
+! SOURCE
+  SUBROUTINE h5pget_nfilters_f (prp_id, nfilters, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(OUT) :: nfilters     ! The number of filters in the pipeline
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pget_nfilters_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_nfilters_c(prp_id, nfilters)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_NFILTERS_C'::h5pget_nfilters_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(OUT) :: nfilters
-              END FUNCTION h5pget_nfilters_c
-            END INTERFACE
-
-            hdferr = h5pget_nfilters_c(prp_id, nfilters)
-          END SUBROUTINE h5pget_nfilters_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_filter_f
-!
-! Purpose: 	Returns information about a filter in a pipeline
-!
-! Inputs:
-!		prp_id		- data creation or transfer property list
-!				  identifier
-! Outputs:
-!				  identifier
-!		filter		- filter to be added to the pipeline
-!		flags		- bit vector specifying certain general
-!				  properties of the filter
-!		cd_nelmts	- number of elements in cd_values
-!		cd_values	- auxiliary data for the filter
-!		namelen		- number of characters in the name buffer
-!		name		- buffer to retrieve filter name
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_filter_f(prp_id, filter_number, flags, cd_nelmts, cd_values, namelen, name, filter_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(IN) :: filter_number  !Sequence number within the filter
-                                                  !pipeline of the filter for which
-                                                  !information is sought
-            INTEGER, DIMENSION(*), INTENT(OUT) :: cd_values  !Auxiliary data for the filter.
-            INTEGER, INTENT(OUT) :: flags  !Bit vector specifying certain general
-                                          !properties of the filter.
-            INTEGER(SIZE_T), INTENT(INOUT) :: cd_nelmts  !Number of elements in cd_values.
-            INTEGER(SIZE_T), INTENT(IN) :: namelen !Anticipated number of characters in name.
-            CHARACTER(LEN=*), INTENT(OUT) :: name !Name of the filter
-            INTEGER, INTENT(OUT) :: filter_id ! filter identification number
-
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pget_nfilters_c(prp_id, nfilters)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_NFILTERS_C'::h5pget_nfilters_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, INTENT(OUT) :: nfilters
+       END FUNCTION h5pget_nfilters_c
+    END INTERFACE
+    
+    hdferr = h5pget_nfilters_c(prp_id, nfilters)
+  END SUBROUTINE h5pget_nfilters_f
+
+!****s* H5P/h5pget_filter_f 
+! NAME
+!   h5pget_filter_f 
+!
+! PURPOSE
+!  Returns information about a filter in a pipeline
+!
+! INPUTS
+!  
+!  prp_id	 - data creation or transfer property list 
+!  		   identifier
+!  filter_number - sequence number within the filter
+!                  pipeline of the filter for which 
+!                  information is sought
+! OUTPUTS
+!  
+!  filter_id	- filter identification number
+!  flags	- bit vector specifying certain general
+!  		  properties of the filter
+!  cd_nelmts	- number of elements in cd_values
+!  cd_values	- auxiliary data for the filter
+!  namelen	- number of characters in the name buffer
+!  name		- buffer to retrieve filter name
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!  
+! SOURCE
+  SUBROUTINE h5pget_filter_f(prp_id, filter_number, flags, cd_nelmts, cd_values, namelen, name, filter_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(IN) :: filter_number ! Sequence number within the filter
+                                         !  pipeline of the filter for which 
+                                         !  information is sought
+    INTEGER, DIMENSION(*), INTENT(OUT) :: cd_values  ! Auxiliary data for the filter.
+    INTEGER, INTENT(OUT) :: flags        ! Bit vector specifying certain general
+                                         !  properties of the filter.
+    INTEGER(SIZE_T), INTENT(INOUT) :: cd_nelmts  ! Number of elements in cd_values.
+    INTEGER(SIZE_T), INTENT(IN) :: namelen       ! Anticipated number of characters in name.
+    CHARACTER(LEN=*), INTENT(OUT) :: name        ! Name of the filter
+    INTEGER, INTENT(OUT) :: filter_id            ! Filter identification number  
+    INTEGER, INTENT(OUT) :: hdferr               ! Error code
+                                                 ! 0 on success and -1 on failure
+!*****
 
 
 !            INTEGER, EXTERNAL :: h5pget_filter_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_filter_c(prp_id, filter_number, flags, cd_nelmts,  &
-                                              cd_values, namelen, name, filter_id )
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FILTER_C'::h5pget_filter_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(IN) :: filter_number
-              INTEGER, DIMENSION(*), INTENT(OUT) :: cd_values
-              INTEGER, INTENT(OUT) :: flags
-              INTEGER(SIZE_T), INTENT(INOUT) :: cd_nelmts
-              INTEGER(SIZE_T), INTENT(IN) :: namelen
-              CHARACTER(LEN=*), INTENT(OUT) :: name
-              INTEGER, INTENT(OUT) :: filter_id
-              END FUNCTION h5pget_filter_c
-            END INTERFACE
-
-            hdferr = h5pget_filter_c(prp_id, filter_number, flags, cd_nelmts,  &
-                                     cd_values, namelen, name, filter_id )
-          END SUBROUTINE h5pget_filter_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_external_f
-!
-! Purpose: 	Adds an external file to the list of external files.
-!
-! Inputs:
-!		prp_id		- dataset creation property list identifier
-!		name		- name of external file
-!		offset		- offset in bytes from the beginning of the
-!				  file to the location in the file
-!				  where the data starts
-!		bytes		- size of the external file data.
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_external_f(prp_id, name, offset,bytes, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name !Name of an external file
-            INTEGER, INTENT(IN) :: offset !Offset, in bytes, from the beginning
-                                          !of the file to the location in the file
-                                          !where the data starts.
-            INTEGER(HSIZE_T), INTENT(IN) :: bytes ! Number of bytes reserved in the
-                                                 !file for the data
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pget_filter_c(prp_id, filter_number, flags, cd_nelmts,  &
+            cd_values, namelen, name, filter_id )
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FILTER_C'::h5pget_filter_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, INTENT(IN) :: filter_number 
+         INTEGER, DIMENSION(*), INTENT(OUT) :: cd_values
+         INTEGER, INTENT(OUT) :: flags 
+         INTEGER(SIZE_T), INTENT(INOUT) :: cd_nelmts
+         INTEGER(SIZE_T), INTENT(IN) :: namelen
+         CHARACTER(LEN=*), INTENT(OUT) :: name
+         INTEGER, INTENT(OUT) :: filter_id
+       END FUNCTION h5pget_filter_c
+    END INTERFACE
+    
+    hdferr = h5pget_filter_c(prp_id, filter_number, flags, cd_nelmts,  & 
+         cd_values, namelen, name, filter_id )
+  END SUBROUTINE h5pget_filter_f
+
+!****s* H5P/h5pset_external_f 
+! NAME
+!   h5pset_external_f 
+!
+! PURPOSE
+!  Adds an external file to the list of external files. 
+!
+! INPUTS
+!   
+!  prp_id	- dataset creation property list identifier
+!  name		- name of external file
+!  offset	- offset in bytes from the beginning of the 
+!  		  file to the location in the file
+!  		  where the data starts
+!  bytes	- size of the external file data. 
+! OUTPUTS
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!  
+! SOURCE
+  SUBROUTINE h5pset_external_f(prp_id, name, offset,bytes, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of an external file
+    INTEGER, INTENT(IN) :: offset         ! Offset, in bytes, from the beginning 
+                                          !  of the file to the location in the file 
+                                          !  where the data starts.
+    INTEGER(HSIZE_T), INTENT(IN) :: bytes ! Number of bytes reserved in the 
+                                          !  file for the data
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                          ! 0 on success and -1 on failure
+!*****
 
-            INTEGER :: namelen
+    INTEGER :: namelen
 
 !            INTEGER, EXTERNAL :: h5pset_external_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_external_c(prp_id, name,namelen, offset, bytes)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_EXTERNAL_C'::h5pset_external_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER :: namelen
-              INTEGER, INTENT(IN) :: offset
-              INTEGER(HSIZE_T), INTENT(IN) :: bytes
-              END FUNCTION h5pset_external_c
-            END INTERFACE
-
-            namelen = LEN(name)
-            hdferr = h5pset_external_c(prp_id, name, namelen, offset, bytes)
-          END SUBROUTINE h5pset_external_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_external_count_f
-!
-! Purpose: 	Returns the number of external files for a dataset.
-!
-! Inputs:
-!		prp_id		- dataset creation property list identifier
-! Outputs:
-!		count		- number of external files for the
-!				  specified dataset
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+    INTERFACE
+       INTEGER FUNCTION h5pset_external_c(prp_id, name,namelen, offset, bytes)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_EXTERNAL_C'::h5pset_external_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER :: namelen
+         INTEGER, INTENT(IN) :: offset
+         INTEGER(HSIZE_T), INTENT(IN) :: bytes
+       END FUNCTION h5pset_external_c
+    END INTERFACE
+  
+    namelen = LEN(name)
+    hdferr = h5pset_external_c(prp_id, name, namelen, offset, bytes)
+  END SUBROUTINE h5pset_external_f
+
+!****s* H5P/h5pget_external_count_f 
+! NAME
+!   h5pget_external_count_f 
+!
+! PURPOSE
+!  Returns the number of external files for a dataset. 
+!
+! INPUTS
+!  
+!  prp_id	- dataset creation property list identifier
+! OUTPUTS
+!  
+!  count	- number of external files for the 
+!  		  specified dataset
+!  hdferr       - error code		
+!	            Success:  0
+!	            Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!  
+! SOURCE
+  SUBROUTINE h5pget_external_count_f (prp_id, count, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(OUT) :: count        ! Number of external files for the 
+                                         ! Specified dataset
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
+!            INTEGER, EXTERNAL :: h5pget_external_count_c
+!  MS FORTRAN needs explicit interface for C functions called here.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
+    INTERFACE
+       INTEGER FUNCTION h5pget_external_count_c(prp_id, count)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_EXTERNAL_COUNT_C'::h5pget_external_count_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id 
+         INTEGER, INTENT(OUT) :: count
+       END FUNCTION h5pget_external_count_c
+    END INTERFACE
+    
+    hdferr = h5pget_external_count_c(prp_id, count)
+  END SUBROUTINE h5pget_external_count_f
+
+!****s* H5P/h5pget_external_f 
+! NAME
+!  h5pget_external_f 
+!
+! PURPOSE
+!  Returns information about an external file. 
+!
+! INPUTS
+!  
+!  prp_id	- dataset creation property list identifier
+! OUTPUTS
+!  
+!  idx		- external file index 
+!  name_size	- maximum size of name array
+!  name		- name of the external file	
+!  name		- name of external file
+!  offset	- offset in bytes from the beginning of the 
+!  		  file to the location in the file
+!  		  where the data starts
+!  bytes	- size of the external file data
+!  hdferr       - error code		
+!	           Success:  0
+!	            Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!  
+! SOURCE
+  SUBROUTINE h5pget_external_f(prp_id, idx, name_size, name, offset,bytes, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+    INTEGER, INTENT(IN) :: idx           ! External file index.
+    INTEGER(SIZE_T), INTENT(IN) :: name_size ! Maximum length of name array 
+    CHARACTER(LEN=*), INTENT(OUT) :: name    ! Name of an external file
+    INTEGER, INTENT(OUT) :: offset           ! Offset, in bytes, from the beginning 
+                                             !  of the file to the location in the file 
+                                             !  where the data starts.
+    INTEGER(HSIZE_T), INTENT(OUT) :: bytes   ! Number of bytes reserved in the 
+                                             !  file for the data
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+                                             ! 0 on success and -1 on failure
+!*****
+
+!            INTEGER, EXTERNAL :: h5pget_external_c
+!  MS FORTRAN needs explicit interface for C functions called here.
 !
-! Comment:
-!----------------------------------------------------------------------
+    INTERFACE
+       INTEGER FUNCTION h5pget_external_c(prp_id, idx, name_size, name, offset, bytes)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_EXTERNAL_C'::h5pget_external_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, INTENT(IN) :: idx 
+         INTEGER(SIZE_T), INTENT(IN) :: name_size
+         CHARACTER(LEN=*), INTENT(OUT) :: name
+         INTEGER, INTENT(OUT) :: offset
+         INTEGER(HSIZE_T), INTENT(OUT) :: bytes
+       END FUNCTION h5pget_external_c
+    END INTERFACE
+    
+    hdferr = h5pget_external_c(prp_id, idx, name_size, name, offset, bytes)
+  END SUBROUTINE h5pget_external_f
+
+!****s* H5P/h5pset_btree_ratios_f 
+! NAME
+!   h5pset_btree_ratios_f 
+!
+! PURPOSE
+!  Sets B-tree split ratios for a dataset transfer 
+!  property list. 
+!
+! INPUTS
+!  	
+!  prp_id	- the dataset transfer property list 
+!  		  identifier 
+!  left		- the B-tree split ratio for left-most nodes 
+!  middle	- the B-tree split ratio for all other nodes
+!  right	- the B-tree split ratio for right-most nodes
+! OUTPUTS
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!  
+! SOURCE
+  SUBROUTINE h5pset_btree_ratios_f(prp_id, left, middle, right, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+    REAL, INTENT(IN) :: left   ! The B-tree split ratio for left-most nodes.
+    REAL, INTENT(IN) :: middle ! The B-tree split ratio for all other nodes 
+    REAL, INTENT(IN) :: right  ! The B-tree split ratio for right-most 
+                               !  nodes and lone nodes. 
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+                                    ! 0 on success and -1 on failure
+!*****
 
-          SUBROUTINE h5pget_external_count_f (prp_id, count, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(OUT) :: count !number of external files for the
-                                          !specified dataset
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-!            INTEGER, EXTERNAL :: h5pget_external_count_c
+!            INTEGER, EXTERNAL :: h5pset_btree_ratios_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_external_count_c(prp_id, count)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_EXTERNAL_COUNT_C'::h5pget_external_count_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(OUT) :: count
-              END FUNCTION h5pget_external_count_c
-            END INTERFACE
-
-            hdferr = h5pget_external_count_c(prp_id, count)
-          END SUBROUTINE h5pget_external_count_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_external_f
-!
-! Purpose: 	Returns information about an external file.
-!
-! Inputs:
-!		prp_id		- dataset creation property list identifier
-! Outputs:
-!		idx		- external file index
-!		name_size	- maximum size of name array
-!		name		- name of the external file
-!		name		- name of external file
-!	 	offset		- offset in bytes from the beginning of the
-!				  file to the location in the file
-!				  where the data starts
-!		bytes		- size of the external file data
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+    INTERFACE
+       INTEGER FUNCTION  h5pset_btree_ratios_c(prp_id, left, middle, right)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_BTREE_RATIOS_C'::h5pset_btree_ratios_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         REAL, INTENT(IN) :: left
+         REAL, INTENT(IN) :: middle
+         REAL, INTENT(IN) :: right
+       END FUNCTION h5pset_btree_ratios_c
+    END INTERFACE
+    
+    hdferr = h5pset_btree_ratios_c(prp_id, left, middle, right)
+  END SUBROUTINE h5pset_btree_ratios_f
+
+!****s* H5P/h5pget_btree_ratios_f
+! NAME
+!  h5pget_btree_ratios_f
+!
+! PURPOSE
+!  Gets B-tree split ratios for a dataset transfer property list
+!
+! INPUTS
+!  
+!  prp_id	- the dataset transfer property list 
+!  		  identifier 
+! OUTPUTS
+!  
+!  left		- the B-tree split ratio for left-most nodes 
+!  middle	- the B-tree split ratio for all other nodes
+!  right	- the B-tree split ratio for right-most nodes
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999	
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for 
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001 
+!  
+! SOURCE
+  SUBROUTINE h5pget_btree_ratios_f(prp_id, left, middle, right, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+    REAL, INTENT(OUT) :: left   ! The B-tree split ratio for left-most nodes.
+    REAL, INTENT(OUT) :: middle ! The B-tree split ratio for all other nodes 
+    REAL, INTENT(OUT) :: right  ! The B-tree split ratio for right-most 
+                                !  nodes and lone nodes.
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+                                    ! 0 on success and -1 on failure
+!*****
+
+
+!            INTEGER, EXTERNAL :: h5pget_btree_ratios_c
+!  MS FORTRAN needs explicit interface for C functions called here.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
+    INTERFACE
+       INTEGER FUNCTION  h5pget_btree_ratios_c(prp_id, left, middle, right)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_BTREE_RATIOS_C'::h5pget_btree_ratios_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         REAL, INTENT(OUT) :: left
+         REAL, INTENT(OUT) :: middle
+         REAL, INTENT(OUT) :: right
+       END FUNCTION h5pget_btree_ratios_c
+    END INTERFACE
+  
+    hdferr = h5pget_btree_ratios_c(prp_id, left, middle, right)
+  END SUBROUTINE h5pget_btree_ratios_f
+
+!****s* H5P/h5pget_fclose_degree_f 
+! NAME
+!  h5pget_fclose_degree_f 
+!
+! PURPOSE
+!  Returns the degree for the file close behavior.
+!
+! INPUTS
+!  
+!  fapl_id	- File access property list identifier
+! OUTPUTS
+!  
+!  degree  	- Possible values are:
+!  		   H5F_CLOSE_DEFAULT_F
+!  		   H5F_CLOSE_WEAK_F
+!  		   H5F_CLOSE_SEMI_F
+!  		   H5F_CLOSE_STRONG_F
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  September 26, 2002	
+!
+! HISTORY
+! 
+!  
+! SOURCE
+  SUBROUTINE h5pget_fclose_degree_f(fapl_id, degree, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: fapl_id ! File Access Property list identifier 
+    INTEGER, INTENT(OUT) :: degree        ! Possible values are: 
+                                          !  H5F_CLOSE_DEFAULT_F
+					  !  H5F_CLOSE_WEAK_F
+					  !  H5F_CLOSE_SEMI_F
+					  !  H5F_CLOSE_STRONG_F
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                          ! 0 on success and -1 on failure
+!*****
+
+!            INTEGER, EXTERNAL :: h5pget_fclose_degree_c
+!  MS FORTRAN needs explicit interface for C functions called here.
 !
-! Comment:
-!----------------------------------------------------------------------
+    INTERFACE
+       INTEGER FUNCTION h5pget_fclose_degree_c(fapl_id, degree)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FCLOSE_DEGREE_C'::h5pget_fclose_degree_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: fapl_id
+         INTEGER, INTENT(OUT) :: degree
+       END FUNCTION h5pget_fclose_degree_c
+    END INTERFACE
+    
+    hdferr = h5pget_fclose_degree_c(fapl_id, degree) 
+  END SUBROUTINE h5pget_fclose_degree_f
+
+!****s* H5P/h5pset_fclose_degree_f 
+! NAME
+!  h5pset_fclose_degree_f 
+!
+! PURPOSE
+!  Sets the degree for the file close behavior.
+!
+! INPUTS
+!  
+!  fapl_id	- file access property list identifier
+!  degree  	- Possible values are:
+!  		    H5F_CLOSE_DEFAULT_F
+!  		    H5F_CLOSE_WEAK_F
+!  		    H5F_CLOSE_SEMI_F
+!  		    H5F_CLOSE_STRONG_F
+! OUTPUTS
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  September 26, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pset_fclose_degree_f(fapl_id, degree, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: fapl_id ! File Access Property list identifier 
+    INTEGER, INTENT(IN) :: degree         ! Possible values are: 
+                                          !  H5F_CLOSE_DEFAULT_F
+					  !  H5F_CLOSE_WEAK_F
+					  !  H5F_CLOSE_SEMI_F
+					  !  H5F_CLOSE_STRONG_F
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                          ! 0 on success and -1 on failure
+!*****
 
+    INTERFACE
+       INTEGER FUNCTION h5pset_fclose_degree_c(fapl_id, degree)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FCLOSE_DEGREE_C'::h5pset_fclose_degree_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: fapl_id
+         INTEGER, INTENT(IN) :: degree
+       END FUNCTION h5pset_fclose_degree_c
+    END INTERFACE
 
-          SUBROUTINE h5pget_external_f(prp_id, idx, name_size, name, offset,bytes, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(IN) :: idx !External file index.
-            INTEGER(SIZE_T), INTENT(IN) :: name_size !Maximum length of name array
-            CHARACTER(LEN=*), INTENT(OUT) :: name !Name of an external file
-            INTEGER, INTENT(OUT) :: offset !Offset, in bytes, from the beginning
-                                          !of the file to the location in the file
-                                          !where the data starts.
-            INTEGER(HSIZE_T), INTENT(OUT) :: bytes ! Number of bytes reserved in the
-                                                 !file for the data
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    hdferr = h5pset_fclose_degree_c(fapl_id, degree) 
+  END SUBROUTINE h5pset_fclose_degree_f
+
+!****s* H5P/h5pequal_f 
+! NAME
+!  h5pequal_f 
+!
+! PURPOSE
+!  Checks if two property lists are eqaul
+!
+! INPUTS
+!  
+!  plist1_id	- property list identifier
+!  plist2_id	- property list identifier
+! OUTPUTS
+!  
+!  flag		- flag, possible values
+!  		    .TRUE. or .FALSE.
+!  hdferr:	- error code		
+!  		   Success:  0
+!  		   Failure: -1, flag is set to .FALSE.   
+!
+! AUTHOR
+!  Elena Pourmal
+!  September 30, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pequal_f(plist1_id, plist2_id, flag, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist1_id ! Property list identifier 
+    INTEGER(HID_T), INTENT(IN) :: plist2_id ! Property list identifier 
+    LOGICAL, INTENT(OUT)       :: flag      ! Flag
+    INTEGER, INTENT(OUT)       :: hdferr    ! Error code
+                                            !  0 on success and -1 on failure
+!*****
+    INTEGER                    :: c_flag
+    
+    INTERFACE
+       INTEGER FUNCTION h5pequal_c(plist1_id, plist2_id, c_flag)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PEQUAL_C'::h5pequal_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: plist1_id
+         INTEGER(HID_T), INTENT(IN) :: plist2_id
+         INTEGER, INTENT(OUT) :: c_flag
+       END FUNCTION h5pequal_c
+    END INTERFACE
 
-!            INTEGER, EXTERNAL :: h5pget_external_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+    flag = .FALSE.
+    hdferr = h5pequal_c(plist1_id, plist2_id, c_flag) 
+    IF (c_flag .GT. 0) flag = .TRUE.
+  END SUBROUTINE h5pequal_f
+
+!****s* H5P/h5pset_buffer_f
+! NAME
+!  h5pset_buffer_f 
+!
+! PURPOSE
+!  Sets sixe for conversion buffer
+!
+! INPUTS
+!  plist_id	- data transfer property list identifier
+!  size		- buffer size 
+! OUTPUTS
+!  
+!  hdferr:	- error code		
+!  		   Success:  0
+!  		   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 2, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pset_buffer_f(plist_id, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist_id ! Data transfer property list identifier 
+    INTEGER(HSIZE_T), INTENT(IN) :: size   ! Buffer size in bytes; 
+                                           ! buffer is allocated and freed by 
+                                           ! the library.
+    INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+                                           ! 0 on success and -1 on failure
+!*****
+
+    INTERFACE
+       INTEGER FUNCTION h5pset_buffer_c(plist_id, size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_BUFFER_C'::h5pset_buffer_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: plist_id
+         INTEGER(HSIZE_T), INTENT(IN) :: size
+       END FUNCTION h5pset_buffer_c
+    END INTERFACE
+
+    hdferr = h5pset_buffer_c(plist_id, size) 
+  END SUBROUTINE h5pset_buffer_f
+
+!****s* H5P/h5pget_buffer_f
+! NAME
+!  h5pget_buffer_f 
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_external_c(prp_id, idx, name_size, name, offset, bytes)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_EXTERNAL_C'::h5pget_external_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(IN) :: idx
-              INTEGER(SIZE_T), INTENT(IN) :: name_size
-              CHARACTER(LEN=*), INTENT(OUT) :: name
-              INTEGER, INTENT(OUT) :: offset
-              INTEGER(HSIZE_T), INTENT(OUT) :: bytes
-              END FUNCTION h5pget_external_c
-            END INTERFACE
-
-            hdferr = h5pget_external_c(prp_id, idx, name_size, name, offset, bytes)
-          END SUBROUTINE h5pget_external_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_btree_ratios_f
-!
-! Purpose: 	Sets B-tree split ratios for a dataset transfer
-!		property list.
-!
-! Inputs:
-!		prp_id		- the dataset transfer property list
-!				  identifier
-!		left		- the B-tree split ratio for left-most nodes
-!		middle		- the B-tree split ratio for all other nodes
-!		right		- the B-tree split ratio for right-most nodes
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Gets size for conversion buffer
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
+! INPUTS
+!  
+!  plist_id	- data transfer property list identifier
+! OUTPUTS
+!  
+!  size		- buffer size 
+!  hdferr	- error code		
+!  		   Success:  0
+!  		   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 2, 2002	
 !
-! Comment:
-!----------------------------------------------------------------------
+! SOURCE
+  SUBROUTINE h5pget_buffer_f(plist_id, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist_id ! Data transfer property list identifier 
+    INTEGER(HSIZE_T), INTENT(OUT) :: size  ! Buffer size in bytes; 
+                                           !  buffer is allocated and freed by 
+                                           !  the library.
+    INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+                                           ! 0 on success and -1 on failure
+!*****
 
-          SUBROUTINE h5pset_btree_ratios_f(prp_id, left, middle, right, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            REAL, INTENT(IN) :: left !The B-tree split ratio for left-most nodes.
-            REAL, INTENT(IN) :: middle !The B-tree split ratio for all other nodes
-            REAL, INTENT(IN) :: right !The B-tree split ratio for right-most
-                                      !nodes and lone nodes.
+    INTERFACE
+       INTEGER FUNCTION h5pget_buffer_c(plist_id, size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_BUFFER_C'::h5pget_buffer_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: plist_id
+         INTEGER(HSIZE_T), INTENT(OUT) :: size
+       END FUNCTION h5pget_buffer_c
+    END INTERFACE
 
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    hdferr = h5pget_buffer_c(plist_id, size) 
+  END SUBROUTINE h5pget_buffer_f
+
+!****s* H5P/h5pfill_value_defined_f
+! NAME
+!  h5pfill_value_defined_f
+!
+! PURPOSE
+!  Check if fill value is defined.
+!
+! INPUTS
+!  
+!  plist_id	- dataset creation property list identifier
+! OUTPUTS
+!  
+!  flag         - fill value status flag
+!                 Possible values are:
+!  		    H5D_FILL_VALUE_ERROR_F
+!  		    H5D_FILL_VALUE_UNDEFINED_F
+!  		    H5D_FILL_VALUE_DEFAULT_F
+!  		    H5D_FILL_VALUE_USER_DEFINED_F
+!  hdferr	- error code		
+!  		    Success:  0
+!  		    Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 4, 2002
+!
+! SOURCE
+  SUBROUTINE h5pfill_value_defined_f(plist_id, flag, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist_id  ! Dataset creation property list identifier
+    INTEGER, INTENT(OUT) :: flag            ! Fill value status flag
+                                            !  H5D_FILL_VALUE_ERROR_F
+                                            !  H5D_FILL_VALUE_UNDEFINED_F
+                                            !  H5D_FILL_VALUE_DEFAULT_F
+                                            !  H5D_FILL_VALUE_USER_DEFINED_F
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                            ! 0 on success and -1 on failure
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5pfill_value_defined_c(plist_id, flag)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PFILL_VALUE_DEFINED_C'::h5pfill_value_defined_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: plist_id
+         INTEGER, INTENT(OUT) :: flag
+       END FUNCTION h5pfill_value_defined_c
+    END INTERFACE
 
-!            INTEGER, EXTERNAL :: h5pset_btree_ratios_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+    hdferr = h5pfill_value_defined_c(plist_id, flag) 
+  END SUBROUTINE h5pfill_value_defined_f
+
+!****s* H5P/h5pset_alloc_time_f
+! NAME
+!  h5pset_alloc_time_f
+!
+! PURPOSE
+!  Set space allocation time for dataset during creation.
+!
+! INPUTS
+!  
+!  plist_id	- dataset creation property list identifier
+!  flag         - allocation time flag:
+!  		    H5D_ALLOC_TIME_ERROR_F
+!  		    H5D_ALLOC_TIME_DEFAULT_F
+!  		    H5D_ALLOC_TIME_EARLY_F
+!  		    H5D_ALLOC_TIME_LATE_F
+!  		    H5D_ALLOC_TIME_INCR_F
+! OUTPUTS
+!  
+!  hdferr	- error code		
+!  		   Success:  0
+!  		   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 4, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pset_alloc_time_f(plist_id, flag, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist_id  ! Dataset creation property list identifier
+    INTEGER, INTENT(IN) :: flag             ! Allocation time flag:
+                                            !  H5D_ALLOC_TIME_ERROR_F
+                                            !  H5D_ALLOC_TIME_DEFAULT_F
+                                            !  H5D_ALLOC_TIME_EARLY_F
+                                            !  H5D_ALLOC_TIME_LATE_F
+                                            !  H5D_ALLOC_TIME_INCR_F
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                            ! 0 on success and -1 on failure
+!*****  
+    
+    INTERFACE
+       INTEGER FUNCTION h5pset_alloc_time_c(plist_id, flag)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_ALLOC_TIME_C'::h5pset_alloc_time_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: plist_id
+         INTEGER, INTENT(IN) :: flag
+       END FUNCTION h5pset_alloc_time_c
+    END INTERFACE
+    
+    hdferr = h5pset_alloc_time_c(plist_id, flag) 
+  END SUBROUTINE h5pset_alloc_time_f
+
+!****s* H5P/h5pget_alloc_time_f
+! NAME
+!  h5pget_alloc_time_f
+!
+! PURPOSE
+!  Get space allocation time for dataset during creation.
+!
+! INPUTS
+!  
+!  plist_id	- dataset creation property list identifier
+! OUTPUTS
+!  
+!  flag         - allocation time flag:
+!  		    H5D_ALLOC_TIME_ERROR_F
+!  		    H5D_ALLOC_TIME_DEFAULT_F
+!  		    H5D_ALLOC_TIME_EARLY_F
+!  		    H5D_ALLOC_TIME_LATE_F
+!  		    H5D_ALLOC_TIME_INCR_F
+!  hdferr:	- error code		
+!  		    Success:  0
+!  		    Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 4, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pget_alloc_time_f(plist_id, flag, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist_id  ! Dataset creation property list identifier
+    INTEGER, INTENT(OUT) :: flag   ! Allocation time flag:
+                                   !  H5D_ALLOC_TIME_ERROR_F
+                                   !  H5D_ALLOC_TIME_DEFAULT_F
+                                   !  H5D_ALLOC_TIME_EARLY_F
+                                   !  H5D_ALLOC_TIME_LATE_F
+                                   !  H5D_ALLOC_TIME_INCR_F
+    INTEGER, INTENT(OUT) :: hdferr ! Error code
+                                   ! 0 on success and -1 on failure
+!*****
+
+    INTERFACE
+       INTEGER FUNCTION h5pget_alloc_time_c(plist_id, flag)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_ALLOC_TIME_C'::h5pget_alloc_time_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: plist_id
+         INTEGER, INTENT(OUT) :: flag
+       END FUNCTION h5pget_alloc_time_c
+    END INTERFACE
+    
+    hdferr = h5pget_alloc_time_c(plist_id, flag) 
+  END SUBROUTINE h5pget_alloc_time_f
+
+!****s* H5P/h5pset_fill_time_f
+! NAME
+!  h5pset_fill_time_f
+!
+! PURPOSE
+!  Set fill value writing time for dataset
+!
+! INPUTS
+!  
+!  plist_id	- dataset creation property list identifier
+!  flag         - fill time flag:
+!  		    H5D_FILL_TIME_ERROR_F
+!  		    H5D_FILL_TIME_ALLOC_F
+!  		    H5D_FILL_TIME_NEVER_F
+! OUTPUTS
+!  
+!  hdferr	- error code		
+!  		   Success:  0
+!  		   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 4, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pset_fill_time_f(plist_id, flag, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist_id  ! Dataset creation property list identifier
+    INTEGER, INTENT(IN) :: flag             ! Fill time flag:
+                                            !  H5D_FILL_TIME_ERROR_F
+                                            !  H5D_FILL_TIME_ALLOC_F
+                                            !  H5D_FILL_TIME_NEVER_F
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                            ! 0 on success and -1 on failure
+!*****  
+
+    INTERFACE
+       INTEGER FUNCTION h5pset_fill_time_c(plist_id, flag)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FILL_TIME_C'::h5pset_fill_time_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: plist_id
+         INTEGER, INTENT(IN) :: flag
+       END FUNCTION h5pset_fill_time_c
+    END INTERFACE
+    
+    hdferr = h5pset_fill_time_c(plist_id, flag) 
+  END SUBROUTINE h5pset_fill_time_f
+
+!****s* H5P/h5pget_fill_time_f
+! NAME
+!   h5pget_fill_time_f
+!
+! PURPOSE
+!  Get fill value writing time for dataset
+!
+! INPUTS
+!  
+!  plist_id	- dataset creation property list identifier
+! OUTPUTS
+!  
+!  hdferr:	- error code		
+!  		   Success:  0
+!  		   Failure: -1
+! OPTIONAL PARAMETERS
+!
+!  flag         - fill time flag:
+!  		   H5D_FILL_TIME_ERROR_F
+!  		   H5D_FILL_TIME_ALLOC_F
+!  		   H5D_FILL_TIME_NEVER_F
+! AUTHOR
+!  Elena Pourmal
+!  October 4, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pget_fill_time_f(plist_id, flag, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist_id  ! Dataset creation property list identifier
+    INTEGER, INTENT(OUT) :: flag   ! Fill time flag:
+                                   !  H5D_FILL_TIME_ERROR_F
+                                   !  H5D_FILL_TIME_ALLOC_F
+                                   !  H5D_FILL_TIME_NEVER_F
+    INTEGER, INTENT(OUT) :: hdferr ! Error code
+                                   ! 0 on success and -1 on failure
+!*****   
+  
+    INTERFACE
+       INTEGER FUNCTION h5pget_fill_time_c(plist_id, flag)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FILL_TIME_C'::h5pget_fill_time_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: plist_id
+         INTEGER, INTENT(OUT) :: flag
+       END FUNCTION h5pget_fill_time_c
+    END INTERFACE
+    
+    hdferr = h5pget_fill_time_c(plist_id, flag) 
+  END SUBROUTINE h5pget_fill_time_f
+
+!****s* H5P/ h5pset_meta_block_size_f 
+! NAME
+!  h5pset_meta_block_size_f 
+!
+! PURPOSE
+!  Sets the minimum size of metadata block allocations 
+!
+! INPUTS
+!  
+!  plist_id	- file access property list identifier
+!  size		- metatdata block size
+! OUTPUTS
+!  
+!  hdferr	- error code		
+!  		   Success:  0
+!  		   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 7, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pset_meta_block_size_f(plist_id, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist_id  ! File access property list identifier 
+    INTEGER(HSIZE_T), INTENT(IN) :: size    ! Block size in bytes; 
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                            ! 0 on success and -1 on failure
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5pset_meta_block_size_c(plist_id, size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_META_BLOCK_SIZE_C'::h5pset_meta_block_size_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: plist_id
+         INTEGER(HSIZE_T), INTENT(IN) :: size
+       END FUNCTION h5pset_meta_block_size_c
+    END INTERFACE
+    
+    hdferr = h5pset_meta_block_size_c(plist_id, size) 
+  END SUBROUTINE h5pset_meta_block_size_f
+
+!****s* H5P/h5pget_meta_block_size_f 
+! NAME
+!  h5pget_meta_block_size_f 
+!
+! PURPOSE
+!  Gets the minimum size of metadata block allocations 
+!
+! INPUTS
+!  
+!  plist_id	- file access property list identifier
+! OUTPUTS
+!  
+!  size		- metatdata block size
+!  hdferr	- error code		
+!  		   Success:  0
+!  		   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 7, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pget_meta_block_size_f(plist_id, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist_id  ! File access property list identifier 
+    INTEGER(HSIZE_T), INTENT(OUT) :: size   ! Block size in bytes; 
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                            ! 0 on success and -1 on failure
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5pget_meta_block_size_c(plist_id, size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_META_BLOCK_SIZE_C'::h5pget_meta_block_size_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: plist_id
+         INTEGER(HSIZE_T), INTENT(OUT) :: size
+       END FUNCTION h5pget_meta_block_size_c
+    END INTERFACE
+    
+    hdferr = h5pget_meta_block_size_c(plist_id, size) 
+  END SUBROUTINE h5pget_meta_block_size_f
+
+!****s* H5P/h5pset_sieve_buf_size_f 
+! NAME
+!  h5pset_sieve_buf_size_f 
+!
+! PURPOSE
+!  Sets the maximum size of the data sieve buffer
+!
+! INPUTS
+!  
+!  plist_id	- file access property list identifier
+!  size		- sieve buffer size
+! OUTPUTS
+!  
+!  hdferr	- error code		
+!  		   Success:  0
+!  		   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 7, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pset_sieve_buf_size_f(plist_id, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list identifier 
+    INTEGER(SIZE_T), INTENT(IN) :: size    ! Buffer size in bytes; 
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                           ! 0 on success and -1 on failure
+!*****
+
+    INTERFACE
+       INTEGER FUNCTION h5pset_sieve_buf_size_c(plist_id, size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_SIEVE_BUF_SIZE_C'::h5pset_sieve_buf_size_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: plist_id
+         INTEGER(SIZE_T), INTENT(IN) :: size
+       END FUNCTION h5pset_sieve_buf_size_c
+    END INTERFACE
+    
+    hdferr = h5pset_sieve_buf_size_c(plist_id, size) 
+  END SUBROUTINE h5pset_sieve_buf_size_f
+
+!****s* H5P/h5pget_sieve_buf_size_f
+! NAME
+!  h5pget_sieve_buf_size_f 
+!
+! PURPOSE
+!  Gets the maximum size of the data sieve buffer
+!
+! INPUTS
+!  
+!  plist_id	- file access property list identifier
+! OUTPUTS
+!  
+!  size		- sieve buffer size
+!  hdferr	- error code		
+!  		   Success:  0
+!  		   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 7, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pget_sieve_buf_size_f(plist_id, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list identifier 
+    INTEGER(SIZE_T), INTENT(OUT) :: size   ! Buffer size in bytes 
+    INTEGER, INTENT(OUT)       :: hdferr   ! Error code
+                                           ! 0 on success and -1 on failure
+!*****
+
+    INTERFACE
+       INTEGER FUNCTION h5pget_sieve_buf_size_c(plist_id, size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_SIEVE_BUF_SIZE_C'::h5pget_sieve_buf_size_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: plist_id
+         INTEGER(SIZE_T), INTENT(OUT) :: size
+       END FUNCTION h5pget_sieve_buf_size_c
+    END INTERFACE
+    
+    hdferr = h5pget_sieve_buf_size_c(plist_id, size) 
+  END SUBROUTINE h5pget_sieve_buf_size_f
+
+!****s* H5P/h5pset_small_data_block_size_f 
+! NAME
+!  h5pset_small_data_block_size_f 
+!
+! PURPOSE
+!  Sets the minimum size of "small" raw data block
+!
+! INPUTS
+!  
+!  plist_id	- file access property list identifier
+!  size		- small raw data block size
+! OUTPUTS
+!  
+!  hdferr	- error code		
+!  		   Success:  0
+!  		   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 7, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pset_small_data_block_size_f(plist_id, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list identifier 
+    INTEGER(HSIZE_T), INTENT(IN) :: size   ! Small raw data block size
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                           ! 0 on success and -1 on failure
+!*****
+
+    INTERFACE
+       INTEGER FUNCTION h5pset_small_data_block_size_c(plist_id, size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_SMALL_DATA_BLOCK_SIZE_C'::h5pset_small_data_block_size_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: plist_id
+         INTEGER(HSIZE_T), INTENT(IN) :: size
+       END FUNCTION h5pset_small_data_block_size_c
+    END INTERFACE
+
+    hdferr = h5pset_small_data_block_size_c(plist_id, size) 
+  END SUBROUTINE h5pset_small_data_block_size_f
+
+!****s* H5P/h5pget_small_data_block_size_f 
+! NAME
+!  h5pget_small_data_block_size_f 
 !
-            INTERFACE
-              INTEGER FUNCTION  h5pset_btree_ratios_c(prp_id, left, middle, right)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_BTREE_RATIOS_C'::h5pset_btree_ratios_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              REAL, INTENT(IN) :: left
-              REAL, INTENT(IN) :: middle
-              REAL, INTENT(IN) :: right
-              END FUNCTION h5pset_btree_ratios_c
-            END INTERFACE
-
-            hdferr = h5pset_btree_ratios_c(prp_id, left, middle, right)
-          END SUBROUTINE h5pset_btree_ratios_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_btree_ratios_f
-!
-! Purpose: 	Gets B-tree split ratios for a dataset transfer property list
-!
-! Inputs:
-!		prp_id		- the dataset transfer property list
-!				  identifier
-! Outputs:
-!		left		- the B-tree split ratio for left-most nodes
-!		middle		- the B-tree split ratio for all other nodes
-!		right		- the B-tree split ratio for right-most nodes
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Gets the minimum size of "small" raw data block
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 14, 2001
+! INPUTS
+!  
+!  plist_id	- file access property list identifier
+! OUTPUTS
+!  
+!  size		- small raw data block size
+!  hdferr	- error code		
+!  		   Success:  0
+!  		   Failure: -1
 !
-! Comment:
-!----------------------------------------------------------------------
+! AUTHOR
+!  Elena Pourmal
+!  October 7, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pget_small_data_block_size_f(plist_id, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist_id  ! File access property list identifier 
+    INTEGER(HSIZE_T), INTENT(OUT) :: size   ! Small raw data block size
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                            ! 0 on success and -1 on failure
+!*****
 
-          SUBROUTINE h5pget_btree_ratios_f(prp_id, left, middle, right, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            REAL, INTENT(OUT) :: left !The B-tree split ratio for left-most nodes.
-            REAL, INTENT(OUT) :: middle !The B-tree split ratio for all other nodes
-            REAL, INTENT(OUT) :: right !The B-tree split ratio for right-most
-                                      !nodes and lone nodes.
+    INTERFACE
+       INTEGER FUNCTION h5pget_small_data_block_size_c(plist_id, size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_SMALL_DATA_BLOCK_SIZE_C'::h5pget_small_data_block_size_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: plist_id
+         INTEGER(HSIZE_T), INTENT(OUT) :: size
+       END FUNCTION h5pget_small_data_block_size_c
+    END INTERFACE
+    
+    hdferr = h5pget_small_data_block_size_c(plist_id, size) 
+  END SUBROUTINE h5pget_small_data_block_size_f
+
+!****s* H5P/h5pset_hyper_vector_size_f 
+! NAME
+!  h5pset_hyper_vector_size_f 
+!
+! PURPOSE
+!  Set the number of "I/O" vectors (vector size)
+!
+! INPUTS
+!  
+!  plist_id	- dataset transfer property list identifier
+!  size		- vector size
+! OUTPUTS
+!  
+!  hdferr	- error code		
+!  		   Success:  0
+!  		   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 7, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pset_hyper_vector_size_f(plist_id, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset transfer property list identifier 
+    INTEGER(SIZE_T), INTENT(IN) :: size    ! Vector size
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                           ! 0 on success and -1 on failure
+!*****
 
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pset_hyper_vector_size_c(plist_id, size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_HYPER_VECTOR_SIZE_C'::h5pset_hyper_vector_size_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: plist_id
+         INTEGER(SIZE_T), INTENT(IN) :: size
+       END FUNCTION h5pset_hyper_vector_size_c
+    END INTERFACE
+    
+    hdferr = h5pset_hyper_vector_size_c(plist_id, size) 
+  END SUBROUTINE h5pset_hyper_vector_size_f
+
+!****s* H5P/ h5pget_hyper_vector_size_f 
+! NAME
+!  h5pget_hyper_vector_size_f 
+!
+! PURPOSE
+!  Get the number of "I/O" vectors (vector size)
+!
+! INPUTS
+!  
+!  plist_id	- dataset transfer property list identifier
+! OUTPUTS
+!  
+!  size		- vector size
+!  hdferr	- error code		
+!  		   Success:  0
+!  		   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 7, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pget_hyper_vector_size_f(plist_id, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset transfer property list identifier 
+    INTEGER(SIZE_T), INTENT(OUT) :: size   ! Vector size
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                           ! 0 on success and -1 on failure
+!*****
 
+    INTERFACE
+       INTEGER FUNCTION h5pget_hyper_vector_size_c(plist_id, size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_HYPER_VECTOR_SIZE_C'::h5pget_hyper_vector_size_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: plist_id
+         INTEGER(SIZE_T), INTENT(OUT) :: size
+       END FUNCTION h5pget_hyper_vector_size_c
+    END INTERFACE
 
-!            INTEGER, EXTERNAL :: h5pget_btree_ratios_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION  h5pget_btree_ratios_c(prp_id, left, middle, right)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_BTREE_RATIOS_C'::h5pget_btree_ratios_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              REAL, INTENT(OUT) :: left
-              REAL, INTENT(OUT) :: middle
-              REAL, INTENT(OUT) :: right
-              END FUNCTION h5pget_btree_ratios_c
-            END INTERFACE
-
-            hdferr = h5pget_btree_ratios_c(prp_id, left, middle, right)
-          END SUBROUTINE h5pget_btree_ratios_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_fclose_degree_f
-!
-! Purpose: 	Returns the degree for the file close behavior.
-!
-! Inputs:
-!		fapl_id		- file access property list identifier
-! Outputs:
-!		degree  	- one of the following:
-!				  Possible values are:
-!				  H5F_CLOSE_DEFAULT_F
-!				  H5F_CLOSE_WEAK_F
-!				  H5F_CLOSE_SEMI_F
-!				  H5F_CLOSE_STRONG_F
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        September 26, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_fclose_degree_f(fapl_id, degree, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: fapl_id ! File Access Property list identifier
-            INTEGER, INTENT(OUT) :: degree     ! Possible values
-                                              ! are:
-						!  H5F_CLOSE_DEFAULT_F
-						!  H5F_CLOSE_WEAK_F
-						!  H5F_CLOSE_SEMI_F
-						!  H5F_CLOSE_STRONG_F
-
-            INTEGER, INTENT(OUT) :: hdferr    ! Error code
+    hdferr = h5pget_hyper_vector_size_c(plist_id, size) 
+  END SUBROUTINE h5pget_hyper_vector_size_f
+
+!****s* H5P/h5pexist_f 
+! NAME
+!   h5pexist_f 
+!
+! PURPOSE
+!  Queries whether a property name exists in a property list or class. 
+!
+! INPUTS
+!  
+!  prp_id	- property list identifier to query
+!  name 	- name of property to check for
+! OUTPUTS
+!  
+!  flag         - logical flag
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pexist_f(prp_id, name, flag, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+    LOGICAL, INTENT(OUT) :: flag          ! .TRUE. if exists, .FALSE. otherwise
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+                                    ! 0 on success and -1 on failure
+!*****
+    INTEGER :: name_len
+    
+    INTERFACE
+       INTEGER FUNCTION h5pexist_c(prp_id, name, name_len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PEXIST_C'::h5pexist_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+       END FUNCTION h5pexist_c
+    END INTERFACE
+    flag = .FALSE.
+    name_len = LEN(name)
+    hdferr = h5pexist_c(prp_id, name , name_len)
+    IF (hdferr > 0) THEN
+       flag = .TRUE.
+       hdferr = 0
+    ENDIF
+  END SUBROUTINE h5pexist_f
+
+!****s* H5P/h5pget_size_f 
+!
+! NAME
+!  h5pget_size_f 
+!
+! PURPOSE
+!  Queries the size of a property value in bytes.
+!
+! INPUTS
+!  
+!  prp_id	- property list identifier to query
+!  name 	- name of property to query
+! OUTPUTS
+!  
+!  size         - size of property in bytes
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002	
+!
+! HISTORY
+! 	
+!  
+! SOURCE
+  SUBROUTINE h5pget_size_f(prp_id, name, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to query
+    INTEGER(SIZE_T), INTENT(OUT) :: size  ! Size in bytes
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                          ! 0 on success and -1 on failure
+!*****
+    INTEGER :: name_len
+    
+    INTERFACE
+       INTEGER FUNCTION h5pget_size_c(prp_id, name, name_len, size)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_SIZE_C'::h5pget_size_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+         INTEGER(SIZE_T), INTENT(OUT) :: size
+       END FUNCTION h5pget_size_c
+    END INTERFACE
+    name_len = LEN(name)
+    hdferr = h5pget_size_c(prp_id, name , name_len, size)
+  END SUBROUTINE h5pget_size_f
+
+!****s* H5P/h5pget_npros_f 
+! NAME
+!   h5pget_npros_f 
+!
+! PURPOSE
+!  Queries number of properties in property list or class
+!
+! INPUTS
+!  
+!  prp_id	- iproperty list identifier to query
+! OUTPUTS
+!  
+!  nprops       - number of properties in property object
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pget_nprops_f(prp_id, nprops, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id    ! Property list identifier 
+    INTEGER(SIZE_T), INTENT(OUT) :: nprops  ! Number of properties
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                            ! 0 on success and -1 on failure
+!*****
 
-!            INTEGER, EXTERNAL :: h5pget_fclose_degree_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5pget_fclose_degree_c(fapl_id, degree)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FCLOSE_DEGREE_C'::h5pget_fclose_degree_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: fapl_id
-              INTEGER, INTENT(OUT) :: degree
-              END FUNCTION h5pget_fclose_degree_c
-            END INTERFACE
-
-            hdferr = h5pget_fclose_degree_c(fapl_id, degree)
-          END SUBROUTINE h5pget_fclose_degree_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_fclose_degree_f
-!
-! Purpose: 	Sets the degree for the file close behavior.
-!
-! Inputs:
-!		fapl_id		- file access property list identifier
-!		degree  	- one of the following:
-!				  Possible values are:
-!				  H5F_CLOSE_DEFAULT_F
-!				  H5F_CLOSE_WEAK_F
-!				  H5F_CLOSE_SEMI_F
-!				  H5F_CLOSE_STRONG_F
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        September 26, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_fclose_degree_f(fapl_id, degree, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: fapl_id ! File Access Property list identifier
-            INTEGER, INTENT(IN) :: degree     ! Possible values
-                                              ! are:
-						!  H5F_CLOSE_DEFAULT_F
-						!  H5F_CLOSE_WEAK_F
-						!  H5F_CLOSE_SEMI_F
-						!  H5F_CLOSE_STRONG_F
-
-            INTEGER, INTENT(OUT) :: hdferr    ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5pset_fclose_degree_c(fapl_id, degree)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-        !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FCLOSE_DEGREE_C'::h5pset_fclose_degree_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: fapl_id
-              INTEGER, INTENT(IN) :: degree
-              END FUNCTION h5pset_fclose_degree_c
-            END INTERFACE
-
-            hdferr = h5pset_fclose_degree_c(fapl_id, degree)
-          END SUBROUTINE h5pset_fclose_degree_f
-
-!----------------------------------------------------------------------
-! Name:		h5pequal_f
-!
-! Purpose: 	Checks if two property lists are eqaul
-!
-! Inputs:
-!		plist1_id	- property list identifier
-!		plist2_id	- property list identifier
-! Outputs:
-!               flag		- flag, possible values
-!				  .TRUE. or .FALSE.
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1, flag is set to .FALSE.
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        September 30, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pequal_f(plist1_id, plist2_id, flag, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist1_id ! Property list identifier
-            INTEGER(HID_T), INTENT(IN) :: plist2_id ! Property list identifier
-            LOGICAL, INTENT(OUT)       :: flag      ! Flag
-            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
-            INTEGER                    :: c_flag
-
-            INTERFACE
-              INTEGER FUNCTION h5pequal_c(plist1_id, plist2_id, c_flag)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-        !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PEQUAL_C'::h5pequal_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: plist1_id
-              INTEGER(HID_T), INTENT(IN) :: plist2_id
-              INTEGER, INTENT(OUT) :: c_flag
-              END FUNCTION h5pequal_c
-            END INTERFACE
-
-            flag = .FALSE.
-            hdferr = h5pequal_c(plist1_id, plist2_id, c_flag)
-            if (c_flag .GT. 0) flag = .TRUE.
-          END SUBROUTINE h5pequal_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_buffer_f
-!
-! Purpose: 	Sets sixe for conversion buffer
-!
-! Inputs:
-!		plist_id	- data transfer property list identifier
-!               size		- buffer size
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 2, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_buffer_f(plist_id, size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist_id ! Data transfer property list identifier
-            INTEGER(HSIZE_T), INTENT(IN) :: size  ! Buffer size in bytes;
-                                                   ! buffer is allocated and freed by
-                                                   ! the library.
-            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5pset_buffer_c(plist_id, size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-        !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_BUFFER_C'::h5pset_buffer_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: plist_id
-              INTEGER(HSIZE_T), INTENT(IN) :: size
-              END FUNCTION h5pset_buffer_c
-            END INTERFACE
-
-            hdferr = h5pset_buffer_c(plist_id, size)
-          END SUBROUTINE h5pset_buffer_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_buffer_f
-!
-! Purpose: 	Gets size for conversion buffer
-!
-! Inputs:
-!		plist_id	- data transfer property list identifier
-! Outputs:
-!               size		- buffer size
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 2, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_buffer_f(plist_id, size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist_id ! Data transfer property list identifier
-            INTEGER(HSIZE_T), INTENT(OUT) :: size ! Buffer size in bytes;
-                                                   ! buffer is allocated and freed by
-                                                   ! the library.
-            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5pget_buffer_c(plist_id, size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-        !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_BUFFER_C'::h5pget_buffer_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: plist_id
-              INTEGER(HSIZE_T), INTENT(OUT) :: size
-              END FUNCTION h5pget_buffer_c
-            END INTERFACE
-
-            hdferr = h5pget_buffer_c(plist_id, size)
-          END SUBROUTINE h5pget_buffer_f
-
-!----------------------------------------------------------------------
-! Name:		h5pfill_value_defined_f
-!
-! Purpose: 	Check if fill value is defined.
-!
-! Inputs:
-!		plist_id	- dataset creation property list identifier
-! Outputs:
-!               flag            - fill value status flag
-!                                 Possible values are:
-!				    H5D_FILL_VALUE_ERROR_F
-!				    H5D_FILL_VALUE_UNDEFINED_F
-!				    H5D_FILL_VALUE_DEFAULT_F
-!				    H5D_FILL_VALUE_USER_DEFINED_F
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 4, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pfill_value_defined_f(plist_id, flag, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist_id
-            INTEGER, INTENT(OUT) :: flag
-            INTEGER, INTENT(OUT)       :: hdferr
-
-            INTERFACE
-              INTEGER FUNCTION h5pfill_value_defined_c(plist_id, flag)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-        !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PFILL_VALUE_DEFINED_C'::h5pfill_value_defined_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: plist_id
-              INTEGER, INTENT(OUT) :: flag
-              END FUNCTION h5pfill_value_defined_c
-            END INTERFACE
-
-            hdferr = h5pfill_value_defined_c(plist_id, flag)
-          END SUBROUTINE h5pfill_value_defined_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_alloc_time_f
-!
-! Purpose: 	Set space allocation time for dataset during creation.
-!
-! Inputs:
-!		plist_id	- dataset creation property list identifier
-!               flag            - allocation time flag
-!                                 Possible values are:
-!				    H5D_ALLOC_TIME_ERROR_F
-!				    H5D_ALLOC_TIME_DEFAULT_F
-!				    H5D_ALLOC_TIME_EARLY_F
-!				    H5D_ALLOC_TIME_LATE_F
-!				    H5D_ALLOC_TIME_INCR_F
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 4, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_alloc_time_f(plist_id, flag, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist_id
-            INTEGER, INTENT(IN) :: flag
-            INTEGER, INTENT(OUT)       :: hdferr
-
-            INTERFACE
-              INTEGER FUNCTION h5pset_alloc_time_c(plist_id, flag)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-        !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_ALLOC_TIME_C'::h5pset_alloc_time_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: plist_id
-              INTEGER, INTENT(IN) :: flag
-              END FUNCTION h5pset_alloc_time_c
-            END INTERFACE
-
-            hdferr = h5pset_alloc_time_c(plist_id, flag)
-          END SUBROUTINE h5pset_alloc_time_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_alloc_time_f
-!
-! Purpose: 	Get space allocation time for dataset during creation.
-!
-! Inputs:
-!		plist_id	- dataset creation property list identifier
-! Outputs:
-!               flag            - allocation time flag
-!                                 Possible values are:
-!				    H5D_ALLOC_TIME_ERROR_F
-!				    H5D_ALLOC_TIME_DEFAULT_F
-!				    H5D_ALLOC_TIME_EARLY_F
-!				    H5D_ALLOC_TIME_LATE_F
-!				    H5D_ALLOC_TIME_INCR_F
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 4, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_alloc_time_f(plist_id, flag, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist_id
-            INTEGER, INTENT(OUT) :: flag
-            INTEGER, INTENT(OUT)       :: hdferr
-
-            INTERFACE
-              INTEGER FUNCTION h5pget_alloc_time_c(plist_id, flag)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-        !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_ALLOC_TIME_C'::h5pget_alloc_time_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: plist_id
-              INTEGER, INTENT(OUT) :: flag
-              END FUNCTION h5pget_alloc_time_c
-            END INTERFACE
-
-            hdferr = h5pget_alloc_time_c(plist_id, flag)
-          END SUBROUTINE h5pget_alloc_time_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_fill_time_f
-!
-! Purpose: 	Set fill value writing time for dataset
-!
-! Inputs:
-!		plist_id	- dataset creation property list identifier
-!               flag            - fill time flag
-!                                 Possible values are:
-!				    H5D_FILL_TIME_ERROR_F
-!				    H5D_FILL_TIME_ALLOC_F
-!				    H5D_FILL_TIME_NEVER_F
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 4, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_fill_time_f(plist_id, flag, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist_id
-            INTEGER, INTENT(IN) :: flag
-            INTEGER, INTENT(OUT)       :: hdferr
-
-            INTERFACE
-              INTEGER FUNCTION h5pset_fill_time_c(plist_id, flag)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-        !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FILL_TIME_C'::h5pset_fill_time_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: plist_id
-              INTEGER, INTENT(IN) :: flag
-              END FUNCTION h5pset_fill_time_c
-            END INTERFACE
-
-            hdferr = h5pset_fill_time_c(plist_id, flag)
-          END SUBROUTINE h5pset_fill_time_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_fill_time_f
-!
-! Purpose: 	Get fill value writing time for dataset
-!
-! Inputs:
-!		plist_id	- dataset creation property list identifier
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!               flag            - fill time flag
-!                                 Possible values are:
-!				    H5D_FILL_TIME_ERROR_F
-!				    H5D_FILL_TIME_ALLOC_F
-!				    H5D_FILL_TIME_NEVER_F
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 4, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_fill_time_f(plist_id, flag, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist_id
-            INTEGER, INTENT(OUT) :: flag
-            INTEGER, INTENT(OUT)       :: hdferr
-
-            INTERFACE
-              INTEGER FUNCTION h5pget_fill_time_c(plist_id, flag)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-        !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FILL_TIME_C'::h5pget_fill_time_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: plist_id
-              INTEGER, INTENT(OUT) :: flag
-              END FUNCTION h5pget_fill_time_c
-            END INTERFACE
-
-            hdferr = h5pget_fill_time_c(plist_id, flag)
-          END SUBROUTINE h5pget_fill_time_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_meta_block_size_f
-!
-! Purpose: 	Sets the minimum size of metadata block allocations
-!
-! Inputs:
-!		plist_id	- file access property list identifier
-!               size		- metatdata block size
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 7, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_meta_block_size_f(plist_id, size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list identifier
-            INTEGER(HSIZE_T), INTENT(IN) :: size  ! Block size in bytes;
-            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5pset_meta_block_size_c(plist_id, size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-        !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_META_BLOCK_SIZE_C'::h5pset_meta_block_size_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: plist_id
-              INTEGER(HSIZE_T), INTENT(IN) :: size
-              END FUNCTION h5pset_meta_block_size_c
-            END INTERFACE
-
-            hdferr = h5pset_meta_block_size_c(plist_id, size)
-          END SUBROUTINE h5pset_meta_block_size_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_meta_block_size_f
-!
-! Purpose: 	Gets the minimum size of metadata block allocations
-!
-! Inputs:
-!		plist_id	- file access property list identifier
-! Outputs:
-!               size		- metatdata block size
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 7, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_meta_block_size_f(plist_id, size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list identifier
-            INTEGER(HSIZE_T), INTENT(OUT) :: size  ! Block size in bytes;
-            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5pget_meta_block_size_c(plist_id, size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-        !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_META_BLOCK_SIZE_C'::h5pget_meta_block_size_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: plist_id
-              INTEGER(HSIZE_T), INTENT(OUT) :: size
-              END FUNCTION h5pget_meta_block_size_c
-            END INTERFACE
-
-            hdferr = h5pget_meta_block_size_c(plist_id, size)
-          END SUBROUTINE h5pget_meta_block_size_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_sieve_buf_size_f
-!
-! Purpose: 	Sets the maximum size of the data sieve buffer
-!
-! Inputs:
-!		plist_id	- file access property list identifier
-!               size		- sieve buffer size
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 7, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_sieve_buf_size_f(plist_id, size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list identifier
-            INTEGER(SIZE_T), INTENT(IN) :: size  ! Buffer size in bytes;
-            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5pset_sieve_buf_size_c(plist_id, size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-        !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_SIEVE_BUF_SIZE_C'::h5pset_sieve_buf_size_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: plist_id
-              INTEGER(SIZE_T), INTENT(IN) :: size
-              END FUNCTION h5pset_sieve_buf_size_c
-            END INTERFACE
-
-            hdferr = h5pset_sieve_buf_size_c(plist_id, size)
-          END SUBROUTINE h5pset_sieve_buf_size_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_sieve_buf_size_f
-!
-! Purpose: 	Gets the maximum size of the data sieve buffer
-!
-! Inputs:
-!		plist_id	- file access property list identifier
-! Outputs:
-!               size		- sieve buffer size
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 7, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_sieve_buf_size_f(plist_id, size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list identifier
-            INTEGER(SIZE_T), INTENT(OUT) :: size   ! Buffer size in bytes
-            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5pget_sieve_buf_size_c(plist_id, size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-        !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_SIEVE_BUF_SIZE_C'::h5pget_sieve_buf_size_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: plist_id
-              INTEGER(SIZE_T), INTENT(OUT) :: size
-              END FUNCTION h5pget_sieve_buf_size_c
-            END INTERFACE
-
-            hdferr = h5pget_sieve_buf_size_c(plist_id, size)
-          END SUBROUTINE h5pget_sieve_buf_size_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_small_data_block_size_f
-!
-! Purpose: 	Sets the minimum size of "small" raw data block
-!
-! Inputs:
-!		plist_id	- file access property list identifier
-!               size		- small raw data block size
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 7, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_small_data_block_size_f(plist_id, size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list identifier
-            INTEGER(HSIZE_T), INTENT(IN) :: size    ! Small raw data block size
-            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5pset_small_data_block_size_c(plist_id, size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-        !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_SMALL_DATA_BLOCK_SIZE_C'::h5pset_small_data_block_size_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: plist_id
-              INTEGER(HSIZE_T), INTENT(IN) :: size
-              END FUNCTION h5pset_small_data_block_size_c
-            END INTERFACE
-
-            hdferr = h5pset_small_data_block_size_c(plist_id, size)
-          END SUBROUTINE h5pset_small_data_block_size_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_small_data_block_size_f
-!
-! Purpose: 	Gets the minimum size of "small" raw data block
-!
-! Inputs:
-!		plist_id	- file access property list identifier
-! Outputs:
-!               size		- small raw data block size
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 7, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_small_data_block_size_f(plist_id, size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist_id ! File access property list identifier
-            INTEGER(HSIZE_T), INTENT(OUT) :: size    ! Small raw data block size
-            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5pget_small_data_block_size_c(plist_id, size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-        !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_SMALL_DATA_BLOCK_SIZE_C'::h5pget_small_data_block_size_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: plist_id
-              INTEGER(HSIZE_T), INTENT(OUT) :: size
-              END FUNCTION h5pget_small_data_block_size_c
-            END INTERFACE
-
-            hdferr = h5pget_small_data_block_size_c(plist_id, size)
-          END SUBROUTINE h5pget_small_data_block_size_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_hyper_vector_size_f
-!
-! Purpose: 	Set the number of "I/O" vectors (vector size)
-!
-! Inputs:
-!		plist_id	- dataset transfer property list identifier
-!               size		- vector size
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 7, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_hyper_vector_size_f(plist_id, size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset transfer property list identifier
-            INTEGER(SIZE_T), INTENT(IN) :: size     ! Vector size
-            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5pset_hyper_vector_size_c(plist_id, size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-        !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_HYPER_VECTOR_SIZE_C'::h5pset_hyper_vector_size_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: plist_id
-              INTEGER(SIZE_T), INTENT(IN) :: size
-              END FUNCTION h5pset_hyper_vector_size_c
-            END INTERFACE
-
-            hdferr = h5pset_hyper_vector_size_c(plist_id, size)
-          END SUBROUTINE h5pset_hyper_vector_size_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_hyper_vector_size_f
-!
-! Purpose: 	Get the number of "I/O" vectors (vector size)
-!
-! Inputs:
-!		plist_id	- dataset transfer property list identifier
-! Outputs:
-!               size		- vector size
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 7, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_hyper_vector_size_f(plist_id, size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset transfer property list identifier
-            INTEGER(SIZE_T), INTENT(OUT) :: size     ! Vector size
-            INTEGER, INTENT(OUT)       :: hdferr    ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5pget_hyper_vector_size_c(plist_id, size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-        !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_HYPER_VECTOR_SIZE_C'::h5pget_hyper_vector_size_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: plist_id
-              INTEGER(SIZE_T), INTENT(OUT) :: size
-              END FUNCTION h5pget_hyper_vector_size_c
-            END INTERFACE
-
-            hdferr = h5pget_hyper_vector_size_c(plist_id, size)
-          END SUBROUTINE h5pget_hyper_vector_size_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_integer
-!
-! Purpose: 	Sets a property list value
-!
-! Inputs:
-!		prp_id		- iproperty list identifier to modify
-!		name 		- name of property to modify
-!		value		- value to set property to
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 9, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_integer(prp_id, name, value, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
-            INTEGER,   INTENT(IN) :: value ! Property value
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: name_len
-
-            INTERFACE
-              INTEGER FUNCTION h5pset_integer_c(prp_id, name, name_len, value)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_INTEGER_C'::h5pset_integer_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              INTEGER, INTENT(IN) :: value
-              END FUNCTION h5pset_integer_c
-            END INTERFACE
-
-            name_len = LEN(name)
-        hdferr = h5pset_integer_c(prp_id, name , name_len, value)
-          END SUBROUTINE h5pset_integer
-
-!----------------------------------------------------------------------
-! Name:		h5pset_real
-!
-! Purpose: 	Sets a property list value
-!
-! Inputs:
-!		prp_id		- iproperty list identifier to modify
-!		name 		- name of property to modify
-!		value		- value to set property to
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 9, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_real(prp_id, name, value, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
-            REAL,   INTENT(IN) :: value ! Property value
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: name_len
-
-            INTERFACE
-              INTEGER FUNCTION h5pset_real_c(prp_id, name, name_len, value)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_REAL_C'::h5pset_real_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              REAL, INTENT(IN) :: value
-              END FUNCTION h5pset_real_c
-            END INTERFACE
-
-            name_len = LEN(name)
-        hdferr = h5pset_real_c(prp_id, name , name_len, value)
-          END SUBROUTINE h5pset_real
-
-
-!----------------------------------------------------------------------
-! Name:		h5pset_char
-!
-! Purpose: 	Sets a property list value
-!
-! Inputs:
-!		prp_id		- iproperty list identifier to modify
-!		name 		- name of property to modify
-!		value		- value to set property to
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 9, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pset_char(prp_id, name, value, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
-            CHARACTER(LEN=*),   INTENT(IN) :: value ! Property value
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: name_len
-            INTEGER :: value_len
-
-            INTERFACE
-              INTEGER FUNCTION h5psetc_c(prp_id, name, name_len, value, value_len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSETC_C'::h5psetc_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              !DEC$ATTRIBUTES reference :: value
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              CHARACTER(LEN=*), INTENT(IN) :: value
-              INTEGER, INTENT(IN)         :: value_len
-              END FUNCTION h5psetc_c
-            END INTERFACE
-
-            name_len = LEN(name)
-            value_len = LEN(value)
-            hdferr = h5psetc_c(prp_id, name , name_len, value, value_len)
-          END SUBROUTINE h5pset_char
-
-!----------------------------------------------------------------------
-! Name:		h5pget_integer
-!
-! Purpose: 	Gets a property list value
-!
-! Inputs:
-!		prp_id		- iproperty list identifier to modify
-!		name 		- name of property to modify
-! Outputs:
-!		value		- value of property
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 9, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_integer(prp_id, name, value, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
-            INTEGER,   INTENT(OUT) :: value ! Property value
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: name_len
-
-            INTERFACE
-              INTEGER FUNCTION h5pget_integer_c(prp_id, name, name_len, value)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_INTEGER_C'::h5pget_integer_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              INTEGER, INTENT(OUT) :: value
-              END FUNCTION h5pget_integer_c
-            END INTERFACE
-
-            name_len = LEN(name)
-        hdferr = h5pget_integer_c(prp_id, name , name_len, value)
-          END SUBROUTINE h5pget_integer
-
-!----------------------------------------------------------------------
-! Name:		h5pget_real
-!
-! Purpose: 	Gets a property list value
-!
-! Inputs:
-!		prp_id		- iproperty list identifier to modify
-!		name 		- name of property to modify
-! Outputs:
-!		value		- value of property
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 9, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_real(prp_id, name, value, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
-            REAL,   INTENT(OUT) :: value ! Property value
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: name_len
-
-            INTERFACE
-              INTEGER FUNCTION h5pget_real_c(prp_id, name, name_len, value)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_REAL_C'::h5pget_real_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              REAL, INTENT(OUT) :: value
-              END FUNCTION h5pget_real_c
-            END INTERFACE
-
-            name_len = LEN(name)
-            hdferr = h5pget_real_c(prp_id, name , name_len, value)
-          END SUBROUTINE h5pget_real
-
-
-!----------------------------------------------------------------------
-! Name:		h5pget_char
-!
-! Purpose: 	Gets a property list value
-!
-! Inputs:
-!		prp_id		- iproperty list identifier to modify
-!		name 		- name of property to modify
-! Outputs:
-!		value		- value of property
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 9, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_char(prp_id, name, value, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
-            CHARACTER(LEN=*),   INTENT(OUT) :: value ! Property value
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: name_len
-            INTEGER :: value_len
-
-            INTERFACE
-              INTEGER FUNCTION h5pgetc_c(prp_id, name, name_len, value, value_len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGETC_C'::h5pgetc_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              !DEC$ATTRIBUTES reference :: value
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              CHARACTER(LEN=*), INTENT(OUT) :: value
-              INTEGER, INTENT(IN)         :: value_len
-              END FUNCTION h5pgetc_c
-            END INTERFACE
-
-            name_len = LEN(name)
-            value_len = LEN(value)
-            hdferr = h5pgetc_c(prp_id, name , name_len, value, value_len)
-          END SUBROUTINE h5pget_char
-
-!----------------------------------------------------------------------
-! Name:		h5pexist_f
-!
-! Purpose: 	Queries whether a property name exists in a property list or class.
-!
-! Inputs:
-!		prp_id		- iproperty list identifier to query
-!		name 		- name of property to check for
-! Outputs:
-!               flag            - logical flag
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 9, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pexist_f(prp_id, name, flag, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
-            LOGICAL, INTENT(OUT) :: flag          ! .TRUE. if exists, .FALSE.
-                                                  ! otherwise
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: name_len
-
-            INTERFACE
-              INTEGER FUNCTION h5pexist_c(prp_id, name, name_len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PEXIST_C'::h5pexist_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              END FUNCTION h5pexist_c
-            END INTERFACE
-            flag = .FALSE.
-            name_len = LEN(name)
-            hdferr = h5pexist_c(prp_id, name , name_len)
-            if (hdferr > 0) then
-                flag = .TRUE.
-                hdferr = 0
-            endif
-          END SUBROUTINE h5pexist_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_size_f
-!
-! Purpose: 	Queries the size of a property value in bytes.
-!
-! Inputs:
-!		prp_id		- property list identifier to query
-!		name 		- name of property to query
-! Outputs:
-!               size            - size of property in bytes
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 9, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_size_f(prp_id, name, size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to query
-            INTEGER(SIZE_T), INTENT(OUT) :: size  ! Size in bytes
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: name_len
-
-            INTERFACE
-              INTEGER FUNCTION h5pget_size_c(prp_id, name, name_len, size)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_SIZE_C'::h5pget_size_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              INTEGER(SIZE_T), INTENT(OUT) :: size
-              END FUNCTION h5pget_size_c
-            END INTERFACE
-            name_len = LEN(name)
-            hdferr = h5pget_size_c(prp_id, name , name_len, size)
-          END SUBROUTINE h5pget_size_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_npros_f
-!
-! Purpose: 	Queries number of properties in property list or class
-!
-! Inputs:
-!		prp_id		- iproperty list identifier to query
-! Outputs:
-!               nprops          - number of properties in property object
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 9, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_nprops_f(prp_id, nprops, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id    ! Property list identifier
-            INTEGER(SIZE_T), INTENT(OUT) :: nprops  ! iNumber of properties
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5pget_nprops_c(prp_id, nprops)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_NPROPS_C'::h5pget_nprops_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(SIZE_T), INTENT(OUT) :: nprops
-              END FUNCTION h5pget_nprops_c
-            END INTERFACE
-            hdferr = h5pget_nprops_c(prp_id, nprops)
-          END SUBROUTINE h5pget_nprops_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_class_name_f
-!
-! Purpose: 	Queries the name of a class.
-!
-! Inputs:
-!		prp_id		- property list identifier to query
-! Outputs:
-!		name 		- name of a class
-!               size            - Actual length of the class name
-!                                 If provided buffer "name" is smaller,
-!                                 than name will be truncated to fit into
-!                                 provided user buffer
-!		hdferr:		- error code
-!				 	Success: 0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 9, 2002
-!
-! Modifications: Returned the size of name as an argument
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_class_name_f(prp_id, name, size, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
-            CHARACTER(LEN=*), INTENT(OUT) :: name  ! Buffer to retireve class name
-
-            INTEGER, INTENT(OUT) :: size ! Actual length of the class name
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: name_len
-
-            INTERFACE
-              INTEGER FUNCTION h5pget_class_name_c(prp_id, name, name_len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_CLASS_NAME_C'::h5pget_class_name_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              CHARACTER(LEN=*), INTENT(INOUT) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              END FUNCTION h5pget_class_name_c
-            END INTERFACE
-
-            name_len = LEN(name)
-            size = h5pget_class_name_c(prp_id, name, name_len)
-
-            hdferr = 0
-            IF(size.LT.0) hdferr = -1
-
-          END SUBROUTINE h5pget_class_name_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_class_parent_f
-!
-! Purpose: 	Retrieves the parent class of a genric property class.
-!
-! Inputs:
-!		prp_id		- property list identifier to query
-! Outputs:
-!		parent_id 	- identifier of the parent class
-!		hdferr:		- error code
-!
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 9, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_class_parent_f(prp_id, parent_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id     ! Property list identifier
-            INTEGER(HID_T), INTENT(OUT) :: parent_id ! Parent class property list
-                                                     ! identifier
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5pget_class_parent_c(prp_id, parent_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_CLASS_PARENT_C'::h5pget_class_parent_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(HID_T), INTENT(OUT) :: parent_id
-              END FUNCTION h5pget_class_parent_c
-            END INTERFACE
-            hdferr = h5pget_class_parent_c(prp_id, parent_id)
-          END SUBROUTINE h5pget_class_parent_f
-
-!----------------------------------------------------------------------
-! Name:		h5pisa_class_f
-!
-! Purpose: 	Determines whether a property list is a member of a class.
-!
-! Inputs:
-!		plist		- property list identifier
-!		pclass		- identifier of the property class
-! Outputs:
-!               flag            - .TRUE. if a member, .FALSE. otherwise
-!		hdferr:		- error code
-!
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 9, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pisa_class_f(plist, pclass, flag, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist     ! Property list identifier
-            INTEGER(HID_T), INTENT(IN) :: pclass    ! Class identifier
-            LOGICAL, INTENT(OUT) :: flag            ! logical flag
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5pisa_class_c(plist, pclass)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PISA_CLASS_C'::h5pisa_class_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: plist
-              INTEGER(HID_T), INTENT(IN) :: pclass
-              END FUNCTION h5pisa_class_c
-            END INTERFACE
-            flag = .FALSE.
-            hdferr = h5pisa_class_c(plist, pclass)
-            if (hdferr .gt. 0) then
-                flag = .TRUE.
-                hdferr = 0
-            endif
-          END SUBROUTINE h5pisa_class_f
-
-!----------------------------------------------------------------------
-! Name:		h5pcopy_prop_f
-!
-! Purpose: 	Copies a property from one list or class to another.
-!
-! Inputs:
-!		dst_id		- Identifier of the destination property list
-!		src_id		- Identifier of the source property list
-!		name 		- name of the property to copy
-! Outputs:
-!		hdferr:		- error code
-!
-!				 	Success: 0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 9, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pcopy_prop_f(dst_id, src_id, name, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dst_id  ! Destination property list
-                                                  ! identifier
-            INTEGER(HID_T), INTENT(IN) :: src_id  ! Source property list identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name ! Property name
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: name_len
-
-            INTERFACE
-              INTEGER FUNCTION h5pcopy_prop_c(dst_id, src_id, name, name_len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PCOPY_PROP_C'::h5pcopy_prop_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: dst_id
-              INTEGER(HID_T), INTENT(IN) :: src_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              END FUNCTION h5pcopy_prop_c
-            END INTERFACE
-            name_len = LEN(name)
-            hdferr = h5pcopy_prop_c(dst_id, src_id, name , name_len)
-          END SUBROUTINE h5pcopy_prop_f
-
-!----------------------------------------------------------------------
-! Name:		h5premove_f
-!
-! Purpose: 	Removes a property from a property list.
-
-!
-! Inputs:
-!		plid		- Property list identofoer
-!		name 		- name of the property to remove
-! Outputs:
-!		hdferr:		- error code
-!
-!				 	Success: 0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 9, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5premove_f(plid, name, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plid   ! property list identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name ! name of property to remove
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: name_len
-
-            INTERFACE
-              INTEGER FUNCTION h5premove_c(plid, name, name_len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PREMOVE_C'::h5premove_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: plid
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              END FUNCTION h5premove_c
-            END INTERFACE
-            name_len = LEN(name)
-            hdferr = h5premove_c(plid, name , name_len)
-          END SUBROUTINE h5premove_f
-
-!----------------------------------------------------------------------
-! Name:		h5punregister_f
-!
-! Purpose: 	Removes a property from a property list class.
-
-!
-! Inputs:
-!		class		- Property list class identifier
-!		name 		- name of the property to remove
-! Outputs:
-!		hdferr:		- error code
-!
-!				 	Success: 0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 9, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5punregister_f(class, name, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: class  ! property list class identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name ! name of property to remove
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: name_len
-
-            INTERFACE
-              INTEGER FUNCTION h5punregister_c(class, name, name_len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PUNREGISTER_C'::h5punregister_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: class
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              END FUNCTION h5punregister_c
-            END INTERFACE
-            name_len = LEN(name)
-            hdferr = h5punregister_c(class, name , name_len)
-          END SUBROUTINE h5punregister_f
-
-!----------------------------------------------------------------------
-! Name:		h5pclose_class_f
-!
-! Purpose: 	Closes an existing property list class.
-
-!
-! Inputs:
-!		class		- Property list class identifier
-! Outputs:
-!		hdferr:		- error code
-!
-!				 	Success: 0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 9, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pclose_class_f(class, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: class  ! property list class identifier
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-            INTERFACE
-              INTEGER FUNCTION h5pclose_class_c(class)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PCLOSE_CLASS_C'::h5pclose_class_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: class
-              END FUNCTION h5pclose_class_c
-            END INTERFACE
-            hdferr = h5pclose_class_c(class)
-          END SUBROUTINE h5pclose_class_f
-
-!----------------------------------------------------------------------
-! Name:		h5pcreate_class_f
-!
-! Purpose: 	Create a new property list class
-
-!
-! Inputs:
-!		parent		- Property list identifier of the parent class
-!                                 Possible values include:
-!                                 H5P_ROOT_F
-!                                 H5P_FILE_CREATE_F
-!                                 H5P_FILE_ACCESS_F
-!                                 H5P_DATASET_CREATE_F
-!                                 H5P_DATASET_XFER_F
-!                                 H5P_FILE_MOUNT_F
-!		name 		- name of the class we are creating
-! Outputs:
-!               class           - porperty list class identifier
-!		hdferr:		- error code
-!
-!				 	Success: 0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 9, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pcreate_class_f(parent, name, class, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: parent  ! parent property list class
-                                                  ! identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name  ! name of property tocreate
-            INTEGER(HID_T), INTENT(OUT) :: class  ! property list class identifier
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: name_len
-
-            INTERFACE
-              INTEGER FUNCTION h5pcreate_class_c(parent, name, name_len,&
-                                                 class)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PCREATE_CLASS_C'::h5pcreate_class_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: parent
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              INTEGER(HID_T), INTENT(OUT) :: class
-              END FUNCTION h5pcreate_class_c
-            END INTERFACE
-            name_len = LEN(name)
-            hdferr = h5pcreate_class_c(parent, name , name_len, &
-                                       class)
-          END SUBROUTINE h5pcreate_class_f
-
-!----------------------------------------------------------------------
-! Name:		h5pregister_integer
-!
-! Purpose: 	Registers a permanent property with a property list class.
-!
-! Inputs:
-!		class		- property list class to register
-!                                 permanent property within
-!		name 		- name of property to register
-!               size            - size of property in bytes
-!		value		- default value for property in newly
-!                                 created property lists
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 10, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pregister_integer(class, name, size, value, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: class   ! Property list class identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to register
-            INTEGER(SIZE_T), INTENT(IN) :: size   ! Size of the property value
-            INTEGER,   INTENT(IN) :: value        ! Property value
-            INTEGER, INTENT(OUT) :: hdferr        ! Error code
-            INTEGER :: name_len
-
-            INTERFACE
-              INTEGER FUNCTION h5pregister_integer_c(class, name, name_len, size, value)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PREGISTER_INTEGER_C'::h5pregister_integer_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: class
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              INTEGER(SIZE_T), INTENT(IN) :: size
-              INTEGER, INTENT(IN) :: value
-              END FUNCTION h5pregister_integer_c
-            END INTERFACE
-
-            name_len = LEN(name)
-            hdferr = h5pregister_integer_c(class, name , name_len, size, value)
-          END SUBROUTINE h5pregister_integer
-
-!----------------------------------------------------------------------
-! Name:		h5pregister_real
-!
-! Purpose: 	Registers a permanent property with a property list class.
-!
-! Inputs:
-!		class		- property list class to register
-!                                 permanent property within
-!		name 		- name of property to register
-!               size            - size of property in bytes
-!		value		- default value for property in newly
-!                                 created property lists
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 10, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pregister_real(class, name, size, value, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: class   ! Property list class identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to register
-            INTEGER(SIZE_T), INTENT(IN) :: size   ! size of the property value
-            REAL,   INTENT(IN) :: value           ! Property value
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: name_len
-
-            INTERFACE
-              INTEGER FUNCTION h5pregister_real_c(class, name, name_len, size, value)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PREGISTER_REAL_C'::h5pregister_real_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: class
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              INTEGER(SIZE_T), INTENT(IN) :: size
-              REAL, INTENT(IN) :: value
-              END FUNCTION h5pregister_real_c
-            END INTERFACE
-
-            name_len = LEN(name)
-            hdferr = h5pregister_real_c(class, name , name_len, size, value)
-          END SUBROUTINE h5pregister_real
-
-!----------------------------------------------------------------------
-! Name:		h5pregister_char
-!
-! Purpose: 	Registers a permanent property with a property list class.
-!
-! Inputs:
-!		class		- property list class to register
-!                                 permanent property within
-!		name 		- name of property to register
-!               size            - size of property in bytes
-!		value		- default value for property in newly
-!                                 created property lists
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 10, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pregister_char(class, name, size, value, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: class   ! Property list class identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to register
-            INTEGER(SIZE_T), INTENT(IN) :: size  ! size of the property value
-            CHARACTER(LEN=*),   INTENT(IN) :: value        ! Property value
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-            INTEGER :: name_len
-            INTEGER :: value_len
-
-            INTERFACE
-              INTEGER FUNCTION h5pregisterc_c(class, name, name_len, size, value, &
-                                              value_len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PREGISTERC_C'::h5pregisterc_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              !DEC$ATTRIBUTES reference :: value
-              INTEGER(HID_T), INTENT(IN) :: class
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              INTEGER(SIZE_T), INTENT(IN) :: size
-              CHARACTER(LEN=*), INTENT(IN) :: value
-              INTEGER, INTENT(IN)          :: value_len
-              END FUNCTION h5pregisterc_c
-            END INTERFACE
-
-            name_len = LEN(name)
-            value_len = LEN(value)
-            hdferr = h5pregisterc_c(class, name , name_len, size, value, value_len)
-          END SUBROUTINE h5pregister_char
-
-!----------------------------------------------------------------------
-! Name:		h5pinsert_integer
-!
-! Purpose: 	Registers a temporary property with a property list class.
-!
-! Inputs:
-!		plist		- property list identifier
-!		name 		- name of property to insert
-!               size            - size of property in bytes
-!		value		- initial value for the property
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 10, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pinsert_integer(plist, name, size, value, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist   ! Property list identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to insert
-            INTEGER(SIZE_T), INTENT(IN) :: size   ! Size of the property value
-            INTEGER,   INTENT(IN) :: value        ! Property value
-            INTEGER, INTENT(OUT) :: hdferr        ! Error code
-            INTEGER :: name_len
-
-            INTERFACE
-              INTEGER FUNCTION h5pinsert_integer_c(plist, name, name_len, size, value)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PINSERT_INTEGER_C'::h5pinsert_integer_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: plist
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              INTEGER(SIZE_T), INTENT(IN) :: size
-              INTEGER, INTENT(IN) :: value
-              END FUNCTION h5pinsert_integer_c
-            END INTERFACE
-
-            name_len = LEN(name)
-            hdferr = h5pinsert_integer_c(plist, name , name_len, size, value)
-          END SUBROUTINE h5pinsert_integer
-
-!----------------------------------------------------------------------
-! Name:		h5pinsert_real
-!
-! Purpose: 	Registers a temporary property with a property list class.
-!
-! Inputs:
-!		plist		- property list identifier
-!                                 permanent property within
-!		name 		- name of property to insert
-!               size            - size of property in bytes
-!		value		- initial value for the property
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 10, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pinsert_real(plist, name, size, value, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist   ! Property list identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to insert
-            INTEGER(SIZE_T), INTENT(IN) :: size   ! Size of the property value
-            REAL,   INTENT(IN) :: value           ! Property value
-            INTEGER, INTENT(OUT) :: hdferr        ! Error code
-            INTEGER :: name_len
-
-            INTERFACE
-              INTEGER FUNCTION h5pinsert_real_c(plist, name, name_len, size, value)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PINSERT_REAL_C'::h5pinsert_real_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: plist
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              INTEGER(SIZE_T), INTENT(IN) :: size
-              REAL, INTENT(IN) :: value
-              END FUNCTION h5pinsert_real_c
-            END INTERFACE
-
-            name_len = LEN(name)
-            hdferr = h5pinsert_real_c(plist, name , name_len, size, value)
-          END SUBROUTINE h5pinsert_real
-
-
-!----------------------------------------------------------------------
-! Name:		h5pinsert_char
-!
-! Purpose: 	Registers a temporary property with a property list class.
-!
-! Inputs:
-!		plist		- property list identifier
-!                                 permanent property within
-!		name 		- name of property to insert
-!               size            - size of property in bytes
-!		value		- initial value for the property
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!	        October 10, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pinsert_char(plist, name, size, value, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: plist      ! Property list identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name     ! Name of property to insert
-            INTEGER(SIZE_T), INTENT(IN) :: size      ! Size of property value
-            CHARACTER(LEN=*),   INTENT(IN) :: value  ! Property value
-            INTEGER, INTENT(OUT) :: hdferr           ! Error code
-            INTEGER :: name_len
-            INTEGER :: value_len
-
-            INTERFACE
-              INTEGER FUNCTION h5pinsertc_c(plist, name, name_len, size, value, value_len)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PINSERTC_C'::h5pinsertc_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              !DEC$ATTRIBUTES reference :: value
-              INTEGER(HID_T), INTENT(IN) :: plist
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER, INTENT(IN)         :: name_len
-              INTEGER(SIZE_T), INTENT(IN) :: size
-              CHARACTER(LEN=*), INTENT(IN) :: value
-              INTEGER, INTENT(IN)         :: value_len
-              END FUNCTION h5pinsertc_c
-            END INTERFACE
-
-            name_len = LEN(name)
-            value_len = LEN(value)
-            hdferr = h5pinsertc_c(plist, name , name_len, size, value, value_len)
-          END SUBROUTINE h5pinsert_char
-
-!----------------------------------------------------------------------
-! Name:		h5pset_shuffle_f
-!
-! Purpose: 	Sets shuffling filter
-!
-! Inputs:
-!		prp_id		- dataset creation property list identifier
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		March 12, 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pset_shuffle_f(prp_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pget_nprops_c(prp_id, nprops)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_NPROPS_C'::h5pget_nprops_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER(SIZE_T), INTENT(OUT) :: nprops
+       END FUNCTION h5pget_nprops_c
+    END INTERFACE
+    hdferr = h5pget_nprops_c(prp_id, nprops)
+  END SUBROUTINE h5pget_nprops_f
+
+!****s* H5P/h5pget_class_name_f 
+! NAME
+!  h5pget_class_name_f 
+!
+! PURPOSE
+!  Queries the name of a class.
+!
+! INPUTS
+!  
+!  prp_id       - property list identifier to query
+! OUTPUTS
+!  
+!  name 	- name of a class
+!  size         - Actual length of the class name
+!                   NOTE: If provided buffer "name" is smaller,
+!                   than name will be truncated to fit into
+!                   provided user buffer
+!  hdferr:	- error code
+!  		   Success: 0
+!  		   Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002	
+!
+! HISTORY
+! Returned the size of name as an argument	
+!  
+! SOURCE
+  SUBROUTINE h5pget_class_name_f(prp_id, name, size, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier 
+    CHARACTER(LEN=*), INTENT(OUT) :: name ! Buffer to retireve class name
+    INTEGER, INTENT(OUT) :: size          ! Actual length of the class name
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                          ! 0 on success and -1 on failure
+!*****
+    INTEGER :: name_len
+    
+    INTERFACE
+       INTEGER FUNCTION h5pget_class_name_c(prp_id, name, name_len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_CLASS_NAME_C'::h5pget_class_name_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         CHARACTER(LEN=*), INTENT(INOUT) :: name
+         INTEGER, INTENT(IN)         :: name_len
+       END FUNCTION h5pget_class_name_c
+    END INTERFACE
+    
+    name_len = LEN(name)
+    size = h5pget_class_name_c(prp_id, name, name_len)
+    
+    hdferr = 0
+    IF(size.LT.0) hdferr = -1
+    
+  END SUBROUTINE h5pget_class_name_f
+
+!****s* H5P/h5pget_class_parent_f 
+! NAME
+!  h5pget_class_parent_f 
+!
+! PURPOSE
+!  Retrieves the parent class of a genric property class. 
+!
+! INPUTS
+!  
+!  prp_id	- property list identifier to query
+! OUTPUTS
+!  
+!  parent_id 	- identifier of the parent class
+!  hdferr:	- error code          
+!  		   Success:  0
+!  		   Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pget_class_parent_f(prp_id, parent_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id     ! Property list identifier 
+    INTEGER(HID_T), INTENT(OUT) :: parent_id ! Parent class property list 
+                                             ! identifier 
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+                                    ! 0 on success and -1 on failure
+!*****
 
-!            INTEGER, EXTERNAL :: h5pset_shuffle_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5pset_shuffle_c(prp_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_SHUFFLE_C'::h5pset_shuffle_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              END FUNCTION h5pset_shuffle_c
-            END INTERFACE
-            hdferr = h5pset_shuffle_c(prp_id)
+    INTERFACE
+       INTEGER FUNCTION h5pget_class_parent_c(prp_id, parent_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_CLASS_PARENT_C'::h5pget_class_parent_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER(HID_T), INTENT(OUT) :: parent_id
+       END FUNCTION h5pget_class_parent_c
+    END INTERFACE
+    hdferr = h5pget_class_parent_c(prp_id, parent_id)
+  END SUBROUTINE h5pget_class_parent_f
+
+!****s* H5P/h5pisa_class_f 
+! NAME
+!   h5pisa_class_f 
+!
+! PURPOSE
+!  Determines whether a property list is a member of a class. 
+!
+! INPUTS
+!  
+!  plist	- property list identifier 
+!  pclass	- identifier of the property class
+! OUTPUTS
+!  
+!  flag         - .TRUE. if a member, .FALSE. otherwise
+!  hdferr:	- error code           
+!  		   Success:  0
+!  		   Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pisa_class_f(plist, pclass, flag, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist     ! Property list identifier 
+    INTEGER(HID_T), INTENT(IN) :: pclass    ! Class identifier
+    LOGICAL, INTENT(OUT) :: flag            ! logical flag
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+                                    ! 0 on success and -1 on failure
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5pisa_class_c(plist, pclass)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PISA_CLASS_C'::h5pisa_class_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: plist
+         INTEGER(HID_T), INTENT(IN) :: pclass
+       END FUNCTION h5pisa_class_c
+    END INTERFACE
+    flag = .FALSE.
+    hdferr = h5pisa_class_c(plist, pclass)
+    IF (hdferr .GT. 0) THEN
+       flag = .TRUE.
+       hdferr = 0
+    ENDIF
+  END SUBROUTINE h5pisa_class_f
+
+!****s* H5P/h5pcopy_prop_f 
+! NAME
+!   h5pcopy_prop_f 
+!
+! PURPOSE
+!  Copies a property from one list or class to another.
+!
+! INPUTS
+!  
+!  dst_id		- Identifier of the destination property list
+!  src_id		- Identifier of the source property list 
+!  name 		- name of the property to copy
+! OUTPUTS
+!  
+!  hdferr:		- error code
+!  		 	   Success: 0 
+!  		  	   Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pcopy_prop_f(dst_id, src_id, name, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dst_id  ! Destination property list 
+                                          ! identifier 
+    INTEGER(HID_T), INTENT(IN) :: src_id  ! Source property list identifier 
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Property name
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                          ! 0 on success and -1 on failure
+!*****
+    INTEGER :: name_len
+    
+    INTERFACE
+       INTEGER FUNCTION h5pcopy_prop_c(dst_id, src_id, name, name_len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PCOPY_PROP_C'::h5pcopy_prop_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: dst_id
+         INTEGER(HID_T), INTENT(IN) :: src_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+       END FUNCTION h5pcopy_prop_c
+    END INTERFACE
+    name_len = LEN(name)
+    hdferr = h5pcopy_prop_c(dst_id, src_id, name , name_len)
+  END SUBROUTINE h5pcopy_prop_f
+
+!****s* H5P/h5premove_f 
+! NAME
+!   h5premove_f 
+!
+! PURPOSE
+!  Removes a property from a property list. 
+
+!
+! INPUTS
+!  
+!  plid		- Property list identofoer
+!  name 	- name of the property to remove
+! OUTPUTS
+!  
+!  hdferr:	- error code
+!  		   Success: 0 
+!  		   Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002	
+!
+! SOURCE
+  SUBROUTINE h5premove_f(plid, name, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plid   ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name ! Name of property to remove
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         !  0 on success and -1 on failure
+!*****
+    INTEGER :: name_len
+    
+    INTERFACE
+       INTEGER FUNCTION h5premove_c(plid, name, name_len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PREMOVE_C'::h5premove_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: plid 
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+       END FUNCTION h5premove_c
+    END INTERFACE
+    name_len = LEN(name)
+    hdferr = h5premove_c(plid, name , name_len)
+  END SUBROUTINE h5premove_f
+
+!****s* H5P/h5punregister_f 
+! NAME
+!  h5punregister_f 
+!
+! PURPOSE
+!  Removes a property from a property list class. 
+!
+! INPUTS
+!  
+!  class	- Property list class identifier
+!  name 	- name of the property to remove
+! OUTPUTS
+!  
+!  hdferr:	- error code
+!                  Success: 0 
+!  		   Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002	
+!
+! SOURCE
+  SUBROUTINE h5punregister_f(class, name, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: class  ! property list class identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name ! name of property to remove
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
+    INTEGER :: name_len
 
-          END SUBROUTINE h5pset_shuffle_f
+    INTERFACE
+       INTEGER FUNCTION h5punregister_c(class, name, name_len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PUNREGISTER_C'::h5punregister_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: class
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+       END FUNCTION h5punregister_c
+    END INTERFACE
+    name_len = LEN(name)
+    hdferr = h5punregister_c(class, name , name_len)
+  END SUBROUTINE h5punregister_f
+
+!****s* H5P/h5pclose_class_f 
+! NAME
+!  h5pclose_class_f 
+!
+! PURPOSE
+!  Closes an existing property list class.
+!
+! INPUTS
+!  
+!  class	- Property list class identifier
+! OUTPUTS
+!  
+!  hdferr	- error code         
+!  		   Success: 0 
+!  		   Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002	
+!
+! SOURCE
+  SUBROUTINE h5pclose_class_f(class, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: class ! Property list class identifier
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+                                        ! 0 on success and -1 on failure
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5pclose_class_c(class)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PCLOSE_CLASS_C'::h5pclose_class_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: class
+       END FUNCTION h5pclose_class_c
+    END INTERFACE
+    hdferr = h5pclose_class_c(class)
+  END SUBROUTINE h5pclose_class_f
 
-!----------------------------------------------------------------------
-! Name:		h5pset_edc_check_f
-!
-! Purpose: 	Enables/disables error detecting
+!****s* H5P/h5pset_shuffle_f 
+! NAME
+!  h5pset_shuffle_f 
 !
-! Inputs:
-!		prp_id		- dataset creation property list identifier
-!               flag            - EDC flag; possible values:
-!                                   H5Z_DISABLE_EDC_F
-!                                   H5Z_ENABLE_EDC_F
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Sets shuffling filter
 !
-! Programmer:	Elena Pourmal
-!		March 13, 2003
+! INPUTS
+!  prp_id	- dataset creation property list identifier
+! OUTPUTS
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
 !
-! Modifications:
+! AUTHOR
+!  Elena Pourmal
+!  March 12, 2003
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! SOURCE
+  SUBROUTINE h5pset_shuffle_f(prp_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
 
-          SUBROUTINE h5pset_edc_check_f(prp_id, flag, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(IN) :: flag          ! Checksum filter flag
-            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+!            INTEGER, EXTERNAL :: h5pset_shuffle_c
+!  MS FORTRAN needs explicit interface for C functions called here.
+!
+    INTERFACE
+       INTEGER FUNCTION h5pset_shuffle_c(prp_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_SHUFFLE_C'::h5pset_shuffle_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+       END FUNCTION h5pset_shuffle_c
+    END INTERFACE
+    hdferr = h5pset_shuffle_c(prp_id)
+    
+  END SUBROUTINE h5pset_shuffle_f
+
+!****s* H5P/h5pset_edc_check_f 
+! NAME
+!  h5pset_edc_check_f 
+!
+! PURPOSE
+!  Enables/disables error detecting  
+!
+! INPUTS
+!  
+!  prp_id	- dataset creation property list identifier
+!  flag         - EDC flag; possible values:
+!                   H5Z_DISABLE_EDC_F
+!                   H5Z_ENABLE_EDC_F
+! OUTPUTS
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  March 13, 2003
+!
+! SOURCE
+  SUBROUTINE h5pset_edc_check_f(prp_id, flag, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(IN) :: flag          ! Checksum filter flag
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pset_edc_check_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_edc_check_c(prp_id, flag)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_EDC_CHECK_C'::h5pset_edc_check_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(IN) :: flag
-              END FUNCTION h5pset_edc_check_c
-            END INTERFACE
-            hdferr = h5pset_edc_check_c(prp_id, flag)
-
-          END SUBROUTINE h5pset_edc_check_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_edc_check_f
-!
-! Purpose: 	Queries error detecting
-!
-! Inputs:
-!		prp_id		- dataset creation property list identifier
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		March 13, 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pget_edc_check_f(prp_id, flag, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Dataset transfer property list identifier
-            INTEGER, INTENT(OUT) :: flag        ! Checksum filter flag
-                                                 ! May have one of the following values:
-                                                 ! H5Z_ERROR_EDC_F
-                                                 ! H5Z_DISABLE_EDC_F
-                                                 ! H5Z_ENABLE_EDC_F
-                                                 ! H5Z_NO_EDC_F
-            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pset_edc_check_c(prp_id, flag)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_EDC_CHECK_C'::h5pset_edc_check_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, INTENT(IN) :: flag 
+       END FUNCTION h5pset_edc_check_c
+    END INTERFACE
+    hdferr = h5pset_edc_check_c(prp_id, flag)
+    
+  END SUBROUTINE h5pset_edc_check_f
+
+!****s* H5P/h5pget_edc_check_f
+! NAME
+!  h5pget_edc_check_f 
+!
+! PURPOSE
+!  Queries error detecting  
+!
+! INPUTS
+!  
+!  prp_id	- dataset creation property list identifier
+! OUTPUTS
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  March 13, 2003
+!
+! SOURCE
+  SUBROUTINE h5pget_edc_check_f(prp_id, flag, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Dataset transfer property list identifier 
+    INTEGER, INTENT(OUT) :: flag         ! Checksum filter flag
+                                         ! May have one of the following values:
+                                         !  H5Z_ERROR_EDC_F
+                                         !  H5Z_DISABLE_EDC_F
+                                         !  H5Z_ENABLE_EDC_F
+                                         !  H5Z_NO_EDC_F
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!*****
 
 !            INTEGER, EXTERNAL :: h5pget_edc_check_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_edc_check_c(prp_id, flag)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_EDC_CHECK_C'::h5pget_edc_check_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(OUT) :: flag
-              END FUNCTION h5pget_edc_check_c
-            END INTERFACE
-            hdferr = h5pget_edc_check_c(prp_id, flag)
-
-          END SUBROUTINE h5pget_edc_check_f
-!----------------------------------------------------------------------
-! Name:		h5pset_fletcher32_f
-!
-! Purpose: 	Sets Fletcher32 checksum of EDC for a dataset creation
-!               property list.
-!
-! Inputs:
-!		prp_id		- dataset creation property list identifier
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		March 13, 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pset_fletcher32_f(prp_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pget_edc_check_c(prp_id, flag)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_EDC_CHECK_C'::h5pget_edc_check_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, INTENT(OUT) :: flag
+       END FUNCTION h5pget_edc_check_c
+    END INTERFACE
+    hdferr = h5pget_edc_check_c(prp_id, flag)
+    
+  END SUBROUTINE h5pget_edc_check_f
+
+!****s* H5P/h5pset_fletcher32_f
+! NAME
+!  h5pset_fletcher32_f 
+!
+! PURPOSE
+!  Sets Fletcher32 checksum of EDC for a dataset creation 
+!  property list.
+!
+! INPUTS
+!  
+!  prp_id	- dataset creation property list identifier
+! OUTPUTS
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  March 13, 2003
+!
+! SOURCE
+  SUBROUTINE h5pset_fletcher32_f(prp_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!***** 
 
 !            INTEGER, EXTERNAL :: h5pset_fletcher32_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_fletcher32_c(prp_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FLETCHER32_C'::h5pset_fletcher32_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              END FUNCTION h5pset_fletcher32_c
-            END INTERFACE
-            hdferr = h5pset_fletcher32_c(prp_id)
+    INTERFACE
+       INTEGER FUNCTION h5pset_fletcher32_c(prp_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FLETCHER32_C'::h5pset_fletcher32_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+       END FUNCTION h5pset_fletcher32_c
+    END INTERFACE
+    hdferr = h5pset_fletcher32_c(prp_id)
 
-          END SUBROUTINE h5pset_fletcher32_f
+  END SUBROUTINE h5pset_fletcher32_f
 
-!----------------------------------------------------------------------
-! Name:		h5pset_family_offset_f
+!****s* H5P/ h5pset_family_offset_f
+! NAME
+!  h5pset_family_offset_f 
 !
-! Purpose: 	Sets offset for family file driver.
+! PURPOSE
+!  Sets offset for family file driver.
 !
-! Inputs:
-!		prp_id		- file creation property list identifier
-!               offset		- file offset
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+!  
+!  prp_id	- file creation property list identifier
+!  offset	- file offset
+! OUTPUTS
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
 !
-! Programmer:	Elena Pourmal
-!		19 March 2003
+! AUTHOR
+!  Elena Pourmal
+!  19 March 2003
 !
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pset_family_offset_f(prp_id, offset, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER(HSIZE_T), INTENT(IN) :: offset ! Offset in bytes
-            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+! SOURCE
+  SUBROUTINE h5pset_family_offset_f(prp_id, offset, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id   ! Property list identifier 
+    INTEGER(HSIZE_T), INTENT(IN) :: offset ! Offset in bytes
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                           ! 0 on success and -1 on failure
+!***** 
 
 !            INTEGER, EXTERNAL :: h5pset_family_offset_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_family_offset_c(prp_id, offset)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAMILY_OFFSET_C'::h5pset_family_offset_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER(HSIZE_T), INTENT(IN) :: offset
-              END FUNCTION h5pset_family_offset_c
-            END INTERFACE
-            hdferr = h5pset_family_offset_c(prp_id, offset)
-
-          END SUBROUTINE h5pset_family_offset_f
-
-!----------------------------------------------------------------------
-! Name:		h5pset_fapl_multi_l
-!
-! Purpose: 	Sets up use of the multi-file driver.
-!
-! Inputs:
-!		prp_id		- file creation property list identifier
-!               mem_map         - mapping array
-!               memb_fapl       - property list for each memory usage type
-!               memb_name       - names of member file
-!               relax           - flag
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		20 March 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pset_fapl_multi_l(prp_id, memb_map, memb_fapl, memb_name, memb_addr, relax, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier
-            INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_map
-            INTEGER(HID_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_fapl
-            CHARACTER(LEN=*), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_name
-            !INTEGER(HADDR_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_addr
-            REAL, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_addr
-            LOGICAL, INTENT(IN) :: relax
-            INTEGER, INTENT(OUT) :: hdferr       ! Error code
-            INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: lenm
-            INTEGER :: maxlen
-            INTEGER :: flag
-            INTEGER :: i
+    INTERFACE
+       INTEGER FUNCTION h5pset_family_offset_c(prp_id, offset)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAMILY_OFFSET_C'::h5pset_family_offset_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER(HSIZE_T), INTENT(IN) :: offset 
+       END FUNCTION h5pset_family_offset_c
+    END INTERFACE
+    hdferr = h5pset_family_offset_c(prp_id, offset)
+    
+  END SUBROUTINE h5pset_family_offset_f
+
+!****s* H5P/h5pset_fapl_multi_l
+! NAME
+!  h5pset_fapl_multi_l 
+!
+! PURPOSE
+!  Sets up use of the multi-file driver. 
+!
+! INPUTS
+!  
+!  prp_id	- file creation property list identifier
+!  mem_map      - mapping array
+!  memb_fapl    - property list for each memory usage type
+!  memb_name    - names of member file
+!  relax        - flag 
+! OUTPUTS
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  20 March 2003
+!
+! SOURCE
+  SUBROUTINE h5pset_fapl_multi_l(prp_id, memb_map, memb_fapl, memb_name, memb_addr, relax, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier 
+    INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_map ! Mapping array
+    INTEGER(HID_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_fapl ! Property list for each memory usage type
+    CHARACTER(LEN=*), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_name ! Names of member file
+    REAL, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_addr 
+    LOGICAL, INTENT(IN) :: relax     ! Flag
+    INTEGER, INTENT(OUT) :: hdferr   ! Error code
+                                     ! 0 on success and -1 on failure
+!***** 
+    INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: lenm
+    INTEGER :: maxlen
+    INTEGER :: flag
+    INTEGER :: i
 
 !            INTEGER, EXTERNAL :: h5pset_fapl_multi_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_fapl_multi_c(prp_id, memb_map, memb_fapl, memb_name, lenm, &
-                                                   maxlen, memb_addr, flag)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAPL_MULTI_C'::h5pset_fapl_multi_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: memb_name
-              INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier
-              INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_map
-              INTEGER(HID_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_fapl
-              CHARACTER(LEN=*), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_name
-              REAL, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_addr
-              !INTEGER(HADDR_T), DIMENSION(H5FD_MEM_NTYPES_F), INTENT(IN) :: memb_addr
-              INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: lenm
-              INTEGER :: maxlen
-              INTEGER, INTENT(IN) :: flag
-              END FUNCTION h5pset_fapl_multi_c
-            END INTERFACE
-            maxlen = LEN(memb_name(1))
-            do i=0, H5FD_MEM_NTYPES_F-1
-             lenm(i) = LEN_TRIM(memb_name(i))
-            enddo
-            flag = 0
-            if (relax) flag = 1
-            hdferr = h5pset_fapl_multi_c(prp_id, memb_map, memb_fapl, memb_name, lenm, maxlen, memb_addr, flag)
-
-          END SUBROUTINE h5pset_fapl_multi_l
-!----------------------------------------------------------------------
-! Name:		h5pset_fapl_multi_s
-!
-! Purpose: 	Sets up use of the multi-file driver.
-!
-! Inputs:
-!		prp_id		- file creation property list identifier
-!               relax           - flag
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		31 March 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pset_fapl_multi_s(prp_id, relax, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier
-            LOGICAL, INTENT(IN) :: relax
-            INTEGER, INTENT(OUT) :: hdferr       ! Error code
-            INTEGER :: flag
+    INTERFACE
+       INTEGER FUNCTION h5pset_fapl_multi_c(prp_id, memb_map, memb_fapl, memb_name, lenm, &
+            maxlen, memb_addr, flag)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAPL_MULTI_C'::h5pset_fapl_multi_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: memb_name
+         INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier 
+         INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_map
+         INTEGER(HID_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_fapl
+         CHARACTER(LEN=*), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_name
+         REAL, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(IN) :: memb_addr
+         !INTEGER(HADDR_T), DIMENSION(H5FD_MEM_NTYPES_F), INTENT(IN) :: memb_addr
+         INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: lenm
+         INTEGER :: maxlen
+         INTEGER, INTENT(IN) :: flag
+       END FUNCTION h5pset_fapl_multi_c
+    END INTERFACE
+    maxlen = LEN(memb_name(1))
+    DO i=0, H5FD_MEM_NTYPES_F-1
+       lenm(i) = LEN_TRIM(memb_name(i))
+    ENDDO
+    flag = 0
+    IF (relax) flag = 1
+    hdferr = h5pset_fapl_multi_c(prp_id, memb_map, memb_fapl, memb_name, lenm, maxlen, memb_addr, flag) 
+    
+  END SUBROUTINE h5pset_fapl_multi_l
+!****s* H5P/h5pset_fapl_multi_s 
+! NAME
+!  h5pset_fapl_multi_s 
+!
+! PURPOSE
+!  Sets up use of the multi-file driver. 
+!
+! INPUTS
+!  
+!  prp_id	- file creation property list identifier
+!  relax        - flag 
+! OUTPUTS
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  31 March 2003
+!
+! SOURCE
+  SUBROUTINE h5pset_fapl_multi_s(prp_id, relax, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier 
+    LOGICAL, INTENT(IN) :: relax
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!***** 
+    INTEGER :: flag
 
 !            INTEGER, EXTERNAL :: h5pset_fapl_multi_sc
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_fapl_multi_sc(prp_id,flag)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAPL_MULTI_SC'::h5pset_fapl_multi_sc
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier
-              INTEGER, INTENT(IN) :: flag
-              END FUNCTION h5pset_fapl_multi_sc
-            END INTERFACE
-            flag = 0
-            if (relax) flag = 1
-            hdferr = h5pset_fapl_multi_sc(prp_id, flag)
-
-          END SUBROUTINE h5pset_fapl_multi_s
-!----------------------------------------------------------------------
-! Name:		h5pget_fapl_multi_f
-!
-! Purpose: 	Sets up use of the multi-file driver.
-!
-! Inputs:
-!		prp_id		- file creation property list identifier
-! Outputs:
-!               mem_map         - mapping array
-!               memb_fapl       - property list for each memory usage type
-!               memb_name       - names of member file
-!               relax           - flag
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				maxlen_out - maximum length for memb_name array element
-!
-! Programmer:	Elena Pourmal
-!		24 March 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pget_fapl_multi_f(prp_id, memb_map, memb_fapl, memb_name, memb_addr, relax, hdferr, maxlen_out)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier
-            INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_map
-            INTEGER(HID_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_fapl
-            CHARACTER(LEN=*), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_name
-            !INTEGER(HADDR_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_addr
-            REAL, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_addr
-            INTEGER, OPTIONAL, INTENT(OUT) :: maxlen_out
-            LOGICAL, INTENT(OUT) :: relax
-            INTEGER, INTENT(OUT) :: hdferr       ! Error code
-            INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: lenm
-            INTEGER :: maxlen
-            INTEGER :: c_maxlen_out
-            INTEGER :: flag
-            INTEGER :: i
+    INTERFACE
+       INTEGER FUNCTION h5pset_fapl_multi_sc(prp_id,flag) 
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAPL_MULTI_SC'::h5pset_fapl_multi_sc
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier 
+         INTEGER, INTENT(IN) :: flag
+       END FUNCTION h5pset_fapl_multi_sc
+    END INTERFACE
+    flag = 0
+    IF (relax) flag = 1
+    hdferr = h5pset_fapl_multi_sc(prp_id, flag) 
+    
+  END SUBROUTINE h5pset_fapl_multi_s
+!****s* H5P/h5pget_fapl_multi_f 
+! NAME
+!  h5pget_fapl_multi_f 
+!
+! PURPOSE
+!  Sets up use of the multi-file driver. 
+!
+! INPUTS
+!  
+!  prp_id	- file creation property list identifier
+! OUTPUTS
+!  
+!  mem_map      - mapping array
+!  memb_fapl    - property list for each memory usage type
+!  memb_name    - names of member file
+!  relax        - flag 
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1
+!
+! OPTIONAL PARAMETERS
+!  maxlen_out   - maximum length for memb_name array element 
+!
+! AUTHOR
+!  Elena Pourmal
+!  24 March 2003
+!
+! SOURCE
+  SUBROUTINE h5pget_fapl_multi_f(prp_id, memb_map, memb_fapl, memb_name, memb_addr, relax, hdferr, maxlen_out)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier 
+    INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_map
+    INTEGER(HID_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_fapl
+    CHARACTER(LEN=*), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_name
+    !INTEGER(HADDR_T), DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_addr
+    REAL, DIMENSION(0:H5FD_MEM_NTYPES_F-1), INTENT(OUT) :: memb_addr
+    INTEGER, OPTIONAL, INTENT(OUT) :: maxlen_out 
+    LOGICAL, INTENT(OUT) :: relax
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!***** 
+    INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: lenm
+    INTEGER :: maxlen
+    INTEGER :: c_maxlen_out 
+    INTEGER :: flag
+    INTEGER :: i
 
 !            INTEGER, EXTERNAL :: h5pget_fapl_multi_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_fapl_multi_c(prp_id, memb_map, memb_fapl, memb_name, lenm, &
-                                                   maxlen, memb_addr, flag, c_maxlen_out)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FAPL_MULTI_C'::h5pget_fapl_multi_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: memb_name
-              INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier
-              INTEGER, DIMENSION(H5FD_MEM_NTYPES_F), INTENT(OUT) :: memb_map
-              INTEGER(HID_T), DIMENSION(H5FD_MEM_NTYPES_F), INTENT(OUT) :: memb_fapl
-              CHARACTER(LEN=*), DIMENSION(H5FD_MEM_NTYPES_F), INTENT(OUT) :: memb_name
-              REAL, DIMENSION(H5FD_MEM_NTYPES_F), INTENT(OUT) :: memb_addr
-              INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: lenm
-              INTEGER :: maxlen
-              INTEGER :: c_maxlen_out
-              INTEGER, INTENT(OUT) :: flag
-              END FUNCTION h5pget_fapl_multi_c
-            END INTERFACE
-            maxlen = LEN(memb_name(0))
-            do i=0, H5FD_MEM_NTYPES_F-1
-             lenm(i) = LEN_TRIM(memb_name(i))
-            enddo
-            hdferr = h5pget_fapl_multi_c(prp_id, memb_map, memb_fapl, memb_name, lenm, maxlen, memb_addr, flag, c_maxlen_out)
-            relax = .TRUE.
-            if(flag .eq. 0) relax = .FALSE.
-            if(present(maxlen_out)) maxlen_out = c_maxlen_out
-          END SUBROUTINE h5pget_fapl_multi_f
-!----------------------------------------------------------------------
-! Name:		h5pset_szip_f
-!
-! Purpose: 	Sets up use of szip compression
-!
-! Inputs:
-!		prp_id		- dataset creation property list identifier
-!               options_mask
-!               pixels_per_block - szip parameters
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		April 10 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pset_szip_f(prp_id, options_mask, pixels_per_block, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Dataset creation property
-                                                 ! list identifier
-            INTEGER, INTENT(IN) :: options_mask
-            INTEGER, INTENT(IN) :: pixels_per_block
-            INTEGER, INTENT(OUT) :: hdferr       ! Error code
-
-!            INTEGER, EXTERNAL :: h5pset_szip_c
+    INTERFACE
+       INTEGER FUNCTION h5pget_fapl_multi_c(prp_id, memb_map, memb_fapl, memb_name, lenm, &
+            maxlen, memb_addr, flag, c_maxlen_out)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FAPL_MULTI_C'::h5pget_fapl_multi_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: memb_name
+         INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier 
+         INTEGER, DIMENSION(H5FD_MEM_NTYPES_F), INTENT(OUT) :: memb_map
+         INTEGER(HID_T), DIMENSION(H5FD_MEM_NTYPES_F), INTENT(OUT) :: memb_fapl
+         CHARACTER(LEN=*), DIMENSION(H5FD_MEM_NTYPES_F), INTENT(OUT) :: memb_name
+         REAL, DIMENSION(H5FD_MEM_NTYPES_F), INTENT(OUT) :: memb_addr
+         INTEGER, DIMENSION(0:H5FD_MEM_NTYPES_F-1) :: lenm
+         INTEGER :: maxlen
+         INTEGER :: c_maxlen_out 
+         INTEGER, INTENT(OUT) :: flag
+       END FUNCTION h5pget_fapl_multi_c
+    END INTERFACE
+    maxlen = LEN(memb_name(0))
+    DO i=0, H5FD_MEM_NTYPES_F-1
+       lenm(i) = LEN_TRIM(memb_name(i))
+    ENDDO
+    hdferr = h5pget_fapl_multi_c(prp_id, memb_map, memb_fapl, memb_name, lenm, maxlen, memb_addr, flag, c_maxlen_out) 
+    relax = .TRUE.
+    IF(flag .EQ. 0) relax = .FALSE. 
+    IF(PRESENT(maxlen_out)) maxlen_out = c_maxlen_out
+  END SUBROUTINE h5pget_fapl_multi_f
+!****s* H5P/h5pset_szip_f 
+! NAME
+!  h5pset_szip_f 
+!
+! PURPOSE
+!  Sets up use of szip compression
+!
+! INPUTS
+!  
+!  prp_id	    - dataset creation property list identifier
+!  options_mask     - A bit-mask conveying the desired SZIP options.
+!                     Current valid values in Fortran are:
+!                        H5_SZIP_EC_OM_F
+!                        H5_SZIP_NN_OM_F
+!  pixels_per_block - szip parameters
+! OUTPUTS
+!  hdferr           - error code		
+!	                Success:  0
+!	                Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  April 10 2003
+!
+! SOURCE
+  SUBROUTINE h5pset_szip_f(prp_id, options_mask, pixels_per_block, hdferr) 
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Dataset creation property 
+                                         ! list identifier 
+    INTEGER, INTENT(IN) :: options_mask  ! A bit-mask conveying the desired
+                                         ! SZIP options
+                                         ! Current valid values in Fortran are:
+                                         !    H5_SZIP_EC_OM_F
+                                         !    H5_SZIP_NN_OM_F
+    INTEGER, INTENT(IN) :: pixels_per_block ! The number of pixels or data elements 
+                                            ! in each data block
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!***** 
+
+!  INTEGER, EXTERNAL :: h5pset_szip_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pset_szip_c(prp_id, options_mask, pixels_per_block)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_SZIP_C'::h5pset_szip_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier
-              INTEGER, INTENT(IN) :: options_mask
-              INTEGER, INTENT(IN) :: pixels_per_block
-              END FUNCTION h5pset_szip_c
-            END INTERFACE
-            hdferr = h5pset_szip_c(prp_id, options_mask, pixels_per_block)
-
-          END SUBROUTINE h5pset_szip_f
-
-!----------------------------------------------------------------------
-! Name:		h5pall_filters_avail_f
-!
-! Purpose: 	Checks if all filters set in the dataset creation
-!               property list are available
-!
-! Inputs:
-!		prp_id		- data creation property list identifier
-! Outputs:
-!               flag            - .TRUE. if all filters are available
-!                                 .FALSE. otherwise
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		April 10 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5pall_filters_avail_f(prp_id, flag, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Dataset creation property
-                                                 ! list identifier
-            LOGICAL, INTENT(OUT) :: flag
-            INTEGER, INTENT(OUT) :: hdferr       ! Error code
-            INTEGER :: status
+    INTERFACE
+       INTEGER FUNCTION h5pset_szip_c(prp_id, options_mask, pixels_per_block) 
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_SZIP_C'::h5pset_szip_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier 
+         INTEGER, INTENT(IN) :: options_mask
+         INTEGER, INTENT(IN) :: pixels_per_block
+       END FUNCTION h5pset_szip_c
+    END INTERFACE
+    hdferr = h5pset_szip_c(prp_id, options_mask, pixels_per_block) 
+    
+  END SUBROUTINE h5pset_szip_f
+
+!****s* H5P/h5pall_filters_avail_f 
+! NAME
+!  h5pall_filters_avail_f 
+!
+! PURPOSE
+!  Checks if all filters set in the dataset creation
+!  property list are available
+!
+! INPUTS
+!  
+!  prp_id	- data creation property list identifier
+! OUTPUTS
+!  
+!  flag         - .TRUE. if all filters are available
+!                 .FALSE. otherwise
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  April 10 2003
+!
+! SOURCE
+  SUBROUTINE h5pall_filters_avail_f(prp_id, flag, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Dataset creation property 
+                                         !  list identifier 
+    LOGICAL, INTENT(OUT) :: flag         ! .TRUE. if all filters are available
+                                         ! .FALSE. otherwise
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!***** 
+    INTEGER :: status
 
 !            INTEGER, EXTERNAL :: h5pall_filters_avail_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pall_filters_avail_c(prp_id, status)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PALL_FILTERS_AVAIL_C'::h5pall_filters_avail_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier
-              INTEGER, INTENT(OUT) :: status
-              END FUNCTION h5pall_filters_avail_c
-            END INTERFACE
-            flag = .TRUE.
-            hdferr = h5pall_filters_avail_c(prp_id, status)
-            if (status .eq. 0 ) flag = .FALSE.
-
-          END SUBROUTINE h5pall_filters_avail_f
-
-!----------------------------------------------------------------------
-! Name:		h5pget_filter_by_id_f
-!
-! Purpose: 	Returns information about a filter in a pipeline
-!
-! Inputs:
-!		prp_id		- data creation or transfer property list
-!				  identifier
-! Outputs:
-!		filter_id	- filter identifier
-!		flags		- bit vector specifying certain general
-!				  properties of the filter
-!		cd_nelmts	- number of elements in cd_values
-!		cd_values	- auxiliary data for the filter
-!		namelen		- number of characters in the name buffer
-!		name		- buffer to retrieve filter name
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		April 10 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pget_filter_by_id_f(prp_id, filter_id, flags, cd_nelmts, cd_values, namelen, name, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-
-            INTEGER, INTENT(IN) :: filter_id  ! Filter identifier
-            INTEGER(SIZE_T), INTENT(INOUT) :: cd_nelmts  !Number of elements in cd_values.
-            INTEGER, DIMENSION(*), INTENT(OUT) :: cd_values  !Auxiliary data for the filter.
-            INTEGER, INTENT(OUT) :: flags  !Bit vector specifying certain general
-                                          !properties of the filter.
-            INTEGER(SIZE_T), INTENT(IN) :: namelen !Anticipated number of characters in name.
-            CHARACTER(LEN=*), INTENT(OUT) :: name !Name of the filter
-
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pall_filters_avail_c(prp_id, status) 
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PALL_FILTERS_AVAIL_C'::h5pall_filters_avail_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id ! File creation property list identifier 
+         INTEGER, INTENT(OUT) :: status
+       END FUNCTION h5pall_filters_avail_c
+    END INTERFACE
+    flag = .TRUE.
+    hdferr = h5pall_filters_avail_c(prp_id, status) 
+    IF (status .EQ. 0 ) flag = .FALSE.
+    
+  END SUBROUTINE h5pall_filters_avail_f
+
+!****s* H5P/h5pget_filter_by_id_f
+! NAME
+!  h5pget_filter_by_id_f 
+!
+! PURPOSE
+!  Returns information about a filter in a pipeline
+!
+! INPUTS
+!  
+!  prp_id	- data creation or transfer property list 
+!  		  identifier
+! OUTPUTS
+!  
+!  filter_id	- filter identifier
+!  flags	- bit vector specifying certain general
+!  		  properties of the filter
+!  cd_nelmts	- number of elements in cd_values
+!  cd_values	- auxiliary data for the filter
+!  namelen	- number of characters in the name buffer
+!  name		- buffer to retrieve filter name
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  April 10 2003
+!
+! SOURCE
+  SUBROUTINE h5pget_filter_by_id_f(prp_id, filter_id, flags, cd_nelmts, cd_values, namelen, name, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id   ! Property list identifier 
+    INTEGER, INTENT(IN) :: filter_id       ! Filter identifier
+    INTEGER(SIZE_T), INTENT(INOUT) :: cd_nelmts     ! Number of elements in cd_values.
+    INTEGER, DIMENSION(*), INTENT(OUT) :: cd_values ! Auxiliary data for the filter.
+    INTEGER, INTENT(OUT) :: flags          ! Bit vector specifying certain general
+                                           ! properties of the filter.
+    INTEGER(SIZE_T), INTENT(IN) :: namelen ! Anticipated number of characters in name.
+    CHARACTER(LEN=*), INTENT(OUT) :: name  ! Name of the filter
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                           ! 0 on success and -1 on failure
+!***** 
 
 
 !            INTEGER, EXTERNAL :: h5pget_filter_by_id_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pget_filter_by_id_c(prp_id, filter_id, flags, cd_nelmts,  &
-                                              cd_values, namelen, name)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FILTER_BY_ID_C'::h5pget_filter_by_id_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(IN) :: filter_id
-              INTEGER, DIMENSION(*), INTENT(OUT) :: cd_values
-              INTEGER, INTENT(OUT) :: flags
-              INTEGER(SIZE_T), INTENT(INOUT) :: cd_nelmts
-              INTEGER(SIZE_T), INTENT(IN) :: namelen
-              CHARACTER(LEN=*), INTENT(OUT) :: name
-              END FUNCTION h5pget_filter_by_id_c
-            END INTERFACE
-
-            hdferr = h5pget_filter_by_id_c(prp_id, filter_id, flags, cd_nelmts,  &
-                                     cd_values, namelen, name)
-          END SUBROUTINE h5pget_filter_by_id_f
-
-!----------------------------------------------------------------------
-! Name:		h5pmodify_filter_f
-!
-! Purpose: 	Adds a filter to the filter pipeline.
-!
-! Inputs:
-!		prp_id		- data creation or transfer property list
-!				  identifier
-!		filter		- filter to be modified
-!		flags		- bit vector specifying certain general
-!				  properties of the filter
-!		cd_nelmts	- number of elements in cd_values
-!		cd_values	- auxiliary data for the filter
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		April 10 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5pmodify_filter_f(prp_id, filter, flags, cd_nelmts, cd_values,  hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
-            INTEGER, INTENT(IN) :: filter  !Filter to be modified
-            INTEGER, INTENT(IN) :: flags  !Bit vector specifying certain general
-                                          !properties of the filter.
-            INTEGER(SIZE_T), INTENT(IN) :: cd_nelmts  !Number of elements in cd_values.
-            INTEGER, DIMENSION(*), INTENT(IN) :: cd_values  !Auxiliary data for the filter.
-
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pget_filter_by_id_c(prp_id, filter_id, flags, cd_nelmts,  &
+            cd_values, namelen, name)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FILTER_BY_ID_C'::h5pget_filter_by_id_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER, INTENT(IN) :: filter_id 
+         INTEGER, DIMENSION(*), INTENT(OUT) :: cd_values
+         INTEGER, INTENT(OUT) :: flags 
+         INTEGER(SIZE_T), INTENT(INOUT) :: cd_nelmts
+         INTEGER(SIZE_T), INTENT(IN) :: namelen
+         CHARACTER(LEN=*), INTENT(OUT) :: name
+       END FUNCTION h5pget_filter_by_id_c
+    END INTERFACE
+    
+    hdferr = h5pget_filter_by_id_c(prp_id, filter_id, flags, cd_nelmts,  & 
+         cd_values, namelen, name)
+  END SUBROUTINE h5pget_filter_by_id_f
+
+!****s* H5P/h5pmodify_filter_f
+! NAME
+!  h5pmodify_filter_f 
+!
+! PURPOSE
+!  Adds a filter to the filter pipeline. 
+!
+! INPUTS
+!  
+!  prp_id	- data creation or transfer property list 
+!  		  identifier
+!  filter	- filter to be modified
+!  flags	- bit vector specifying certain general
+!  		  properties of the filter
+!  cd_nelmts	- number of elements in cd_values
+!  cd_values	- auxiliary data for the filter
+! OUTPUTS
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Elena Pourmal
+!  April 10 2003
+!
+! SOURCE
+  SUBROUTINE h5pmodify_filter_f(prp_id, filter, flags, cd_nelmts, cd_values,  hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier 
+    INTEGER, INTENT(IN) :: filter        ! Filter to be modified
+    INTEGER, INTENT(IN) :: flags         ! Bit vector specifying certain general
+                                         !  properties of the filter
+    INTEGER(SIZE_T), INTENT(IN) :: cd_nelmts       ! Number of elements in cd_values
+    INTEGER, DIMENSION(*), INTENT(IN) :: cd_values ! Auxiliary data for the filter
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!***** 
 
 !            INTEGER, EXTERNAL :: h5pmodify_filter_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5pmodify_filter_c(prp_id, filter, flags, cd_nelmts, cd_values)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PMODIFY_FILTER_C'::h5pmodify_filter_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(IN) :: filter
-              INTEGER, INTENT(IN) :: flags
-              INTEGER(SIZE_T), INTENT(IN) :: cd_nelmts
-              INTEGER, DIMENSION(*), INTENT(IN) :: cd_values
-              END FUNCTION h5pmodify_filter_c
-            END INTERFACE
-
-            hdferr = h5pmodify_filter_c(prp_id, filter, flags, cd_nelmts, cd_values )
-          END SUBROUTINE h5pmodify_filter_f
-
-!----------------------------------------------------------------------
-! Name:		h5premove_filter_f
-!
-! Purpose: 	Delete one or more filters from the filter pipeline.
-!
-! Inputs:
-!		prp_id		- data creation or transfer property list
-!				  identifier
-!		filter		- filter to be removed
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Quincey Koziol
-!		January 27 2004
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5premove_filter_f(prp_id, filter, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: prp_id ! Dataset creation property list
-                                                 ! identifier
-            INTEGER, INTENT(IN) :: filter        ! Filter to be removed
-            INTEGER, INTENT(OUT) :: hdferr       ! Error code
+    INTERFACE
+       INTEGER FUNCTION h5pmodify_filter_c(prp_id, filter, flags, cd_nelmts, cd_values)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PMODIFY_FILTER_C'::h5pmodify_filter_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id 
+         INTEGER, INTENT(IN) :: filter 
+         INTEGER, INTENT(IN) :: flags 
+         INTEGER(SIZE_T), INTENT(IN) :: cd_nelmts 
+         INTEGER, DIMENSION(*), INTENT(IN) :: cd_values 
+       END FUNCTION h5pmodify_filter_c
+    END INTERFACE
+    
+    hdferr = h5pmodify_filter_c(prp_id, filter, flags, cd_nelmts, cd_values )
+  END SUBROUTINE h5pmodify_filter_f
+
+!****s* H5P/h5premove_filter_f 
+! NAME
+!  h5premove_filter_f 
+!
+! PURPOSE
+!  Delete one or more filters from the filter pipeline. 
+!
+! INPUTS
+!  
+!  prp_id	- data creation or transfer property list 
+!  		  identifier
+!  filter	- filter to be removed
+! OUTPUTS
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  Quincey Koziol
+!  January 27 2004
+!
+! SOURCE
+  SUBROUTINE h5premove_filter_f(prp_id, filter, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Dataset creation property list
+                                         ! identifier
+    INTEGER, INTENT(IN) :: filter        ! Filter to be removed
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+                                         ! 0 on success and -1 on failure
+!***** 
 
 !            INTEGER, EXTERNAL :: h5premove_filter_c
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
-            INTERFACE
-              INTEGER FUNCTION h5premove_filter_c(prp_id, filter)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PREMOVE_FILTER_C'::h5premove_filter_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: prp_id
-              INTEGER, INTENT(IN) :: filter
-              END FUNCTION h5premove_filter_c
-            END INTERFACE
-
-            hdferr = h5premove_filter_c(prp_id, filter)
-          END SUBROUTINE h5premove_filter_f
-
-!----------------------------------------------------------------------
-! Name:		H5Pget_attr_phase_change_f
-!
-! Purpose: 	Retrieves attribute storage phase change thresholds
-!
-! Inputs:
-!		ocpl_id		- Object (dataset or group) creation property list identifier
-! Outputs:
-!               max_compact     - Maximum number of attributes to be stored in compact storage
-!                                 (Default: 8)
-!               min_dense       - Minimum number of attributes to be stored in dense storage
-!                                 (Default: 6)
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
+    INTERFACE
+       INTEGER FUNCTION h5premove_filter_c(prp_id, filter)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PREMOVE_FILTER_C'::h5premove_filter_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id 
+         INTEGER, INTENT(IN) :: filter 
+       END FUNCTION h5premove_filter_c
+    END INTERFACE
+    
+    hdferr = h5premove_filter_c(prp_id, filter)
+  END SUBROUTINE h5premove_filter_f
+
+!****s* H5P/H5Pget_attr_phase_change_f
+! NAME
+!  H5Pget_attr_phase_change_f 
+!
+! PURPOSE
+!  Retrieves attribute storage phase change thresholds 
+!
+! INPUTS
+!  
+!  ocpl_id	   - Object (dataset or group) creation property list identifier
+! OUTPUTS
+!  
+!  max_compact     - Maximum number of attributes to be stored in compact storage
+!                    (Default: 8)
+!  min_dense       - Minimum number of attributes to be stored in dense storage
+!                    (Default: 6)
+!  hdferr          - Error code		
+!	              Success:  0
+!	              Failure: -1   
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+!
+! SOURCE  
   SUBROUTINE h5pget_attr_phase_change_f(ocpl_id, max_compact, min_dense, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: ocpl_id ! Object (dataset or group) creation property list identifier
-    INTEGER, INTENT(OUT) :: max_compact  ! Maximum number of attributes to be stored in compact storage
-                                         !(Default: 8)
-    INTEGER, INTENT(OUT) :: min_dense  ! Minimum number of attributes to be stored in dense storage
-                                       ! (Default: 6)
-    INTEGER, INTENT(OUT) :: hdferr   ! Error code
+    INTEGER, INTENT(OUT) :: max_compact   ! Maximum number of attributes to be stored in compact storage
+                                          ! (Default: 8)
+    INTEGER, INTENT(OUT) :: min_dense     ! Minimum number of attributes to be stored in dense storage
+                                          ! (Default: 6)
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                          ! 0 on success and -1 on failure
+!***** 
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -5512,35 +4728,35 @@
     hdferr = h5pget_attr_phase_change_c(ocpl_id, max_compact, min_dense)
   END SUBROUTINE h5pget_attr_phase_change_f
 
-!----------------------------------------------------------------------
-! Name:		H5Pset_attr_creation_order_f
+!****s* H5P/H5Pset_attr_creation_order_f 
+! NAME
+!  H5Pset_attr_creation_order_f 
 !
-! Purpose: 	Sets tracking and indexing of attribute creation order
+! PURPOSE
+!  Sets tracking and indexing of attribute creation order
 !
-! Inputs:
-!		ocpl_id		- Object creation property list identifier
-!               crt_order_flags - Flags specifying whether to track and index attribute creation order
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+!  
+!  ocpl_id	   - Object creation property list identifier
+!  crt_order_flags - Flags specifying whether to track and index attribute creation order
+! OUTPUTS
 !
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
+!  hdferr          - Error code		
+!	              Success:  0
+!	              Failure: -1   
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! SOURCE 
   SUBROUTINE h5pset_attr_creation_order_f(ocpl_id, crt_order_flags , hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: ocpl_id ! Object (dataset or group) creation property list identifier
+    INTEGER(HID_T), INTENT(IN) :: ocpl_id   ! Object (dataset or group) creation property list identifier
     INTEGER, INTENT(IN) :: crt_order_flags  ! Flags specifying whether to track and index attribute creation order
-
-    INTEGER, INTENT(OUT) :: hdferr   ! Error code
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                            ! 0 on success and -1 on failure
+!***** 
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -5559,36 +4775,36 @@
     hdferr = H5Pset_attr_creation_order_c(ocpl_id, crt_order_flags)
   END SUBROUTINE h5pset_attr_creation_order_f
 
-
-!----------------------------------------------------------------------
-! Name:		H5Pset_shared_mesg_nindexes_f
+!****s* H5P/H5Pset_shared_mesg_nindexes_f 
+! NAME
+!  H5Pset_shared_mesg_nindexes_f 
 !
-! Purpose: 	Sets number of shared object header message indexes
+! PURPOSE
+!  Sets number of shared object header message indexes 
 !
-! Inputs:
-!               plist_id - file creation property list
-!               nindexes - Number of shared object header message indexes to be available in files created with this property list
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+!  
+!  plist_id - file creation property list
+!  nindexes - Number of shared object header message indexes to be available in files created with this property list
+! OUTPUTS
 !
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
+!  hdferr  - error code		
+!	      Success:  0
+!	      Failure: -1   
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! SOURCE  
   SUBROUTINE h5pset_shared_mesg_nindexes_f( plist_id, nindexes, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: plist_id ! file creation property list
-    INTEGER, INTENT(IN) :: nindexes ! Number of shared object header message indexes
+    INTEGER(HID_T), INTENT(IN) :: plist_id ! File creation property list
+    INTEGER, INTENT(IN) :: nindexes  ! Number of shared object header message indexes 
                                      !  available in files created WITH this property list
     INTEGER, INTENT(OUT) :: hdferr   ! Error code
+                                     ! 0 on success and -1 on failure
+!***** 
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -5598,7 +4814,7 @@
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
          !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_SHARED_MESG_NINDEXES_C'::h5pset_shared_mesg_nindexes_c
          !DEC$ENDIF
-
+         
          INTEGER(HID_T), INTENT(IN) :: plist_id
          INTEGER, INTENT(IN) :: nindexes
 
@@ -5609,39 +4825,40 @@
 
   END SUBROUTINE h5pset_shared_mesg_nindexes_f
 
-!----------------------------------------------------------------------
-! Name:		H5Pset_shared_mesg_index_f
+!****s* H5P/H5Pset_shared_mesg_index_f
+! NAME
+!  H5Pset_shared_mesg_index_f
 !
-! Purpose: 	Configures the specified shared object header message index
+! PURPOSE
+!  Configures the specified shared object header message index
 !
-! Inputs:
-!            fcpl_id - File creation property list identifier.
-!          index_num - Index being configured.
-!    mesg_type_flags - Types of messages that should be stored in this index.
-!      min_mesg_size - Minimum message size.
+! INPUTS
+!  
+!  fcpl_id         - File creation property list identifier.
+!  index_num       - Index being configured.
+!  mesg_type_flags - Types of messages that should be stored in this index.
+!  min_mesg_size   - Minimum message size.
 !
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! OUTPUTS
 !
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
+!  hdferr  - error code		
+!	      Success:  0
+!	      Failure: -1   
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! SOURCE  
   SUBROUTINE h5pset_shared_mesg_index_f(fcpl_id, index_num, mesg_type_flags, min_mesg_size, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: fcpl_id ! file creation property list
-    INTEGER, INTENT(IN) :: index_num ! Index being configured.
+    INTEGER(HID_T), INTENT(IN) :: fcpl_id  ! file creation property list
+    INTEGER, INTENT(IN) :: index_num       ! Index being configured.
     INTEGER, INTENT(IN) :: mesg_type_flags ! Types of messages that should be stored in this index.
-    INTEGER, INTENT(IN) :: min_mesg_size ! Minimum message size.
-    INTEGER, INTENT(OUT) :: hdferr   ! Error code
+    INTEGER, INTENT(IN) :: min_mesg_size   ! Minimum message size.
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                           ! 0 on success and -1 on failure
+!***** 
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -5652,8 +4869,8 @@
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
          !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_SHARED_MESG_INDEX_C'::h5pset_shared_mesg_index_c
          !DEC$ENDIF
-
-         INTEGER(HID_T), INTENT(IN) :: fcpl_id
+         
+         INTEGER(HID_T), INTENT(IN) :: fcpl_id 
          INTEGER, INTENT(IN) :: index_num
          INTEGER, INTENT(IN) :: mesg_type_flags
          INTEGER, INTENT(IN) :: min_mesg_size
@@ -5665,35 +4882,36 @@
 
   END SUBROUTINE h5pset_shared_mesg_index_f
 
-!----------------------------------------------------------------------
-! Name:	      H5Pget_attr_creation_order_f
+!****s* H5P/H5Pget_attr_creation_order_f
+! NAME
+!  H5Pget_attr_creation_order_f
 !
-! Purpose:    Retrieves tracking and indexing settings for attribute creation order
+! PURPOSE
+!  Retrieves tracking and indexing settings for attribute creation order
 !
-! Inputs:
-!             ocpl_id - Object (group or dataset) creation property list identifier
+! INPUTS
 !
-! Outputs:
-!             crt_order_flags - Flags specifying whether to track and index attribute creation order
-!	      hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+!  ocpl_id         - Object (group or dataset) creation property list identifier
 !
-! Programmer:	M.S. Breitenfeld
-!		February, 2008
+! OUTPUTS
 !
-! Modifications:
+!  crt_order_flags - Flags specifying whether to track and index attribute creation order
+!  hdferr	   - Error code		
+!  		 	Success:  0
+!  		 	Failure: -1   
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February, 2008
+!
+! SOURCE  
   SUBROUTINE h5pget_attr_creation_order_f(ocpl_id, crt_order_flags, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: ocpl_id ! Object (group or dataset) creation property list identifier
-    INTEGER, INTENT(OUT) :: crt_order_flags ! Flags specifying whether to track and index attribute creation order
+    INTEGER(HID_T), INTENT(IN) :: ocpl_id   ! Object (group or dataset) creation property list identifier 
+    INTEGER, INTENT(OUT) :: crt_order_flags ! Flags specifying whether to track and index attribute creation order 
     INTEGER, INTENT(OUT) :: hdferr   ! Error code
+                                     ! 0 on success and -1 on failure
+!***** 
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -5714,42 +4932,43 @@
 
   END SUBROUTINE h5pget_attr_creation_order_f
 
-!----------------------------------------------------------------------
-! Name:	      H5Pset_libver_bounds_f
+!****s* H5P/H5Pset_libver_bounds_f
+! NAME
+! 	      H5Pset_libver_bounds_f
 !
-! Purpose:    Sets bounds on library versions, and indirectly format versions, to be used when creating objects.
+! PURPOSE
+!    Sets bounds on library versions, and indirectly format versions, to be used when creating objects.
 !
-! Inputs:
-!             fapl_id - File access property list identifier
-!                 low - The earliest version of the library that will be used for writing objects.
-!                high - The latest version of the library that will be used for writing objects.
+! INPUTS
 !
-! Outputs:
-!	      hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+!  fapl_id - File access property list identifier
+!  low     - The earliest version of the library that will be used for writing objects.
+!  high    - The latest version of the library that will be used for writing objects.
 !
-! Programmer:	M.S. Breitenfeld
-!		February 18, 2008
+! OUTPUTS
 !
-! Modifications:
+!  hdferr  - error code		
+!  	      Success:  0
+!  	      Failure: -1   
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 18, 2008
+!
+! SOURCE  
   SUBROUTINE h5pset_libver_bounds_f(fapl_id, low, high, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: fapl_id ! File access property list identifier
-    INTEGER, INTENT(IN) :: low ! The earliest version of the library that will be used for writing objects.
-                                        ! Currently, low must be one of two pre-defined values:
-                                        !            HDF_LIBVER_EARLIEST_F
-                                        !            HDF_LIBVER_LATEST_F
-    INTEGER, INTENT(IN) :: high ! The latest version of the library that will be used for writing objects.
-                                         ! Currently, low must set to the pre-defined value:
-                                         !            HDF_LIBVER_LATEST_F
-    INTEGER, INTENT(OUT) :: hdferr   ! Error code
+    INTEGER, INTENT(IN) :: low   ! The earliest version of the library that will be used for writing objects.
+                                 ! Currently, low must be one of two pre-defined values:
+                                 !            HDF_LIBVER_EARLIEST_F
+                                 !            HDF_LIBVER_LATEST_F
+    INTEGER, INTENT(IN) :: high  ! The latest version of the library that will be used for writing objects.
+                                 ! Currently, low must set to the pre-defined value:
+                                 !            HDF_LIBVER_LATEST_F
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+                                    ! 0 on success and -1 on failure
+!***** 
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -5771,35 +4990,36 @@
 
   END SUBROUTINE h5pset_libver_bounds_f
 
-!----------------------------------------------------------------------
-! Name:	      H5Pset_link_creation_order_f
+!****s* H5P/H5Pset_link_creation_order_f 
+! NAME
+!  H5Pset_link_creation_order_f 
 !
-! Purpose:    Sets creation order tracking and indexing for links in a group.
+! PURPOSE
+!    Sets creation order tracking and indexing for links in a group.
 !
-! Inputs:
-!         gcpl_id  	  - Group creation property list identifier
-!         crt_order_flags - Creation order flag(s)
+! INPUTS
 !
-! Outputs:
-!	      hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+!  gcpl_id  	   - Group creation property list identifier
+!  crt_order_flags - Creation order flag(s)
 !
-! Programmer:	M.S. Breitenfeld
-!		February 18, 2008
+! OUTPUTS
 !
-! Modifications:
+!  hdferr	    - Error code		
+!  		 	Success:  0
+!  		 	Failure: -1   
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 18, 2008
+!
+! SOURCE  
   SUBROUTINE h5pset_link_creation_order_f(gcpl_id, crt_order_flags, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: gcpl_id ! File access property list identifier
+    INTEGER(HID_T), INTENT(IN) :: gcpl_id  ! File access property list identifier
     INTEGER, INTENT(IN) :: crt_order_flags ! Creation order flag(s)
     INTEGER, INTENT(OUT) :: hdferr   ! Error code
+                                     ! 0 on success and -1 on failure
+!***** 
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -5820,36 +5040,37 @@
 
   END SUBROUTINE h5pset_link_creation_order_f
 
-!----------------------------------------------------------------------
-! Name:		H5Pget_link_phase_change_f
-!
-! Purpose: 	Queries the settings for conversion between compact and dense groups.
-!
-! Inputs:
-!		gcpl_id  	- Group creation property list identifier
-! Outputs:
-!               max_compact     - Maximum number of attributes to be stored in compact storage
-!               min_dense       - Minimum number of attributes to be stored in dense storage
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	M.S. Breitenfeld
-!		February 20, 2008
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
+!****s* H5P/H5Pget_link_phase_change_f
+! NAME
+!  H5Pget_link_phase_change_f
+!
+! PURPOSE
+!  Queries the settings for conversion between compact and dense groups.
+!
+! INPUTS
+!  
+!  gcpl_id  	- Group creation property list identifier
+! OUTPUTS
+!  
+!  max_compact  - Maximum number of attributes to be stored in compact storage
+!  min_dense    - Minimum number of attributes to be stored in dense storage
+!  hdferr       - Error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 20, 2008
+!
+! SOURCE  
   SUBROUTINE h5pget_link_phase_change_f(gcpl_id, max_compact, min_dense, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: gcpl_id ! Group creation property list identifier
-    INTEGER, INTENT(OUT) :: max_compact  ! Maximum number of attributes to be stored in compact storage
-    INTEGER, INTENT(OUT) :: min_dense  ! Minimum number of attributes to be stored in dense storage
-    INTEGER, INTENT(OUT) :: hdferr   ! Error code
+    INTEGER, INTENT(OUT) :: max_compact   ! Maximum number of attributes to be stored in compact storage
+    INTEGER, INTENT(OUT) :: min_dense     ! Minimum number of attributes to be stored in dense storage
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                          ! 0 on success and -1 on failure
+!***** 
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -5869,36 +5090,37 @@
     hdferr = h5pget_link_phase_change_c(gcpl_id, max_compact, min_dense)
   END SUBROUTINE h5pget_link_phase_change_f
 
-!----------------------------------------------------------------------
-! Name:		H5Pget_obj_track_times_f
+!****s* H5P/H5Pget_obj_track_times_f 
+! NAME
+!  H5Pget_obj_track_times_f 
 !
-! Purpose: 	Returns whether times are tracked for an object.
+! PURPOSE
+!  Returns whether times are tracked for an object.
 !
-! Inputs:
-!		plist_id	- property list id
-!               flag            - object timestamp setting
-!                                 .TRUE.,.FALSE.
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+!  
+!  plist_id	- property list id
+!  flag         - object timestamp setting
+!                 .TRUE.,.FALSE.
+! OUTPUTS
 !
-! Programmer:	M.S. Breitenfeld
-!		February 22, 2008
+!  hdferr       - error code		
+!	          Success:  0
+!	          Failure: -1   
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 22, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! SOURCE  
   SUBROUTINE h5pget_obj_track_times_f(plist_id, flag, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset creation property
-                                         ! list identifier
+    INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset creation property 
+                                           ! list identifier 
     LOGICAL, INTENT(OUT) :: flag   ! Object timestamp setting
     INTEGER, INTENT(OUT) :: hdferr ! Error code
+                                   ! 0 on success and -1 on failure
+!***** 
     INTEGER :: status
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
@@ -5909,7 +5131,7 @@
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
          !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_OBJ_TRACK_TIMES_C'::h5pget_obj_track_times_c
          !DEC$ENDIF
-         INTEGER(HID_T), INTENT(IN) :: plist_id ! File creation property list identifier
+         INTEGER(HID_T), INTENT(IN) :: plist_id ! File creation property list identifier 
          INTEGER, INTENT(OUT) :: status
        END FUNCTION h5pget_obj_track_times_c
     END INTERFACE
@@ -5919,50 +5141,52 @@
 
   END SUBROUTINE h5pget_obj_track_times_f
 
-!----------------------------------------------------------------------
-! Name:		H5Pset_obj_track_times_f
-!
-! Purpose: 	Set whether the birth, access, modification & change times for
-!               an object are stored.
-!
-!               Birth time is the time the object was created.  Access time is
-!               the last time that metadata or raw data was read from this
-!               object.  Modification time is the last time the data for
-!               this object was changed (either writing raw data to a dataset
-!               or inserting/modifying/deleting a link in a group).  Change
-!               time is the last time the metadata for this object was written
-!               (adding/modifying/deleting an attribute on an object, extending
-!               the size of a dataset, etc).
-!
-!               If these times are not tracked, they will be reported as
-!               12:00 AM UDT, Jan. 1, 1970 (i.e. 0 seconds past the UNIX
-!               epoch) when queried.
-!
-! Inputs:
-!		plist_id	- property list id
-!               flag            - object timestamp setting
-!                                 .TRUE.,.FALSE.
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	M.S. Breitenfeld
-!		February 22, 2008
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
+!****s* H5P/H5Pset_obj_track_times_f 
+! NAME
+!  H5Pset_obj_track_times_f 
+!
+! PURPOSE
+!  Set whether the birth, access, modification & change times for
+!  an object are stored.
+!
+!  Birth time is the time the object was created.  Access time is
+!  the last time that metadata or raw data was read from this
+!  object.  Modification time is the last time the data for
+!  this object was changed (either writing raw data to a dataset
+!  or inserting/modifying/deleting a link in a group).  Change
+!  time is the last time the metadata for this object was written
+!  (adding/modifying/deleting an attribute on an object, extending
+!  the size of a dataset, etc).
+!
+!   If these times are not tracked, they will be reported as
+!   12:00 AM UDT, Jan. 1, 1970 (i.e. 0 seconds past the UNIX
+!   epoch) when queried.
+!
+! INPUTS
+!  
+!  plist_id	- property list id
+!  flag         - object timestamp setting
+!                 .TRUE.,.FALSE.
+! OUTPUTS
+!
+!  hdferr       - error code		
+!	           Success:  0
+!	           Failure: -1   
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 22, 2008
+!	
+!  
+! SOURCE  
   SUBROUTINE h5pset_obj_track_times_f(plist_id, flag, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset creation property
                                            ! list identifier
     LOGICAL, INTENT(IN) :: flag    ! Object timestamp setting
     INTEGER, INTENT(OUT) :: hdferr ! Error code
+                                   ! 0 on success and -1 on failure
+!***** 
     INTEGER :: status
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
@@ -5973,7 +5197,7 @@
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
          !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_OBJ_TRACK_TIMES_C'::h5pset_obj_track_times_c
          !DEC$ENDIF
-         INTEGER(HID_T), INTENT(IN) :: plist_id ! File creation property list identifier
+         INTEGER(HID_T), INTENT(IN) :: plist_id ! File creation property list identifier 
          INTEGER, INTENT(IN) :: status
        END FUNCTION h5pset_obj_track_times_c
     END INTERFACE
@@ -5985,38 +5209,41 @@
 
   END SUBROUTINE h5pset_obj_track_times_f
 
-!----------------------------------------------------------------------
-! Name:		H5Pset_create_inter_group_f
+!****s* H5P/H5Pset_create_inter_group_f
+! NAME
+!  H5Pset_create_inter_group_f
 !
-! Purpose: 	Specifies in property list whether to create missing intermediate groups.
+! PURPOSE
+!  Specifies in property list whether to create missing intermediate groups.
 !
-! Inputs:
-!		lcpl_id            - Link creation property list identifier
-!               crt_intermed_group - crt_intermed_group specifying whether
-!                                    to create intermediate groups upon the creation
-!                                    of an object
-! Outputs:
-!		hdferr:		   - error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+!  
+!  lcpl_id            - Link creation property list identifier
+!  crt_intermed_group - crt_intermed_group specifying whether 
+!                       to create intermediate groups upon the creation 
+!                       of an object
+! OUTPUTS
 !
-! Programmer:	M.S. Breitenfeld
-!		February 22, 2008
+!  hdferr	      - Error code		
+!  		 	  Success:  0
+!  		 	  Failure: -1   
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 22, 2008
 !
-! Comment: The long subroutine name (>31) on older f90 compilers causes problems
+! HISTORY	
+! The long subroutine name (>31) on older f90 compilers causes problems
 !          so had to shorten the name
-!--------------------------------------------------------------------------------------
-
+! SOURCE
   SUBROUTINE h5pset_create_inter_group_f(lcpl_id, crt_intermed_group, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: lcpl_id ! Link creation property list identifier
+    INTEGER(HID_T), INTENT(IN) :: lcpl_id      ! Link creation property list identifier
     INTEGER, INTENT(IN) :: crt_intermed_group  ! specifying whether to create intermediate groups
                                                ! upon the creation of an object
     INTEGER, INTENT(OUT) :: hdferr ! Error code
+                                   ! 0 on success and -1 on failure
+!***** 
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -6035,35 +5262,36 @@
 
   END SUBROUTINE h5pset_create_inter_group_f
 
-!----------------------------------------------------------------------
-! Name:	      H5Pget_link_creation_order_f
+!****s* H5P/H5Pget_link_creation_order_f
+! NAME
+!  H5Pget_link_creation_order_f
 !
-! Purpose:    Queries whether link creation order is tracked and/or indexed in a group.
+! PURPOSE
+!  Queries whether link creation order is tracked and/or indexed in a group.
 !
-! Inputs:
-!             gcpl_id - Group creation property list identifier
+! INPUTS
 !
-! Outputs:
-!             crt_order_flags - Creation order flag(s)
-!	      hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+!  gcpl_id - Group creation property list identifier
 !
-! Programmer:	M.S. Breitenfeld
-!		March 3, 2008
+! OUTPUTS
 !
-! Modifications:
+!  crt_order_flags - Creation order flag(s)
+!  hdferr	   - Error code		
+!  		      Success:  0
+!  		      Failure: -1   
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 3, 2008
+!
+! SOURCE  
   SUBROUTINE h5pget_link_creation_order_f(gcpl_id, crt_order_flags, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: gcpl_id   ! Group creation property list identifier
     INTEGER, INTENT(OUT) :: crt_order_flags ! Creation order flag(s)
     INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                            ! 0 on success and -1 on failure
+!***** 
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -6084,40 +5312,39 @@
 
   END SUBROUTINE h5pget_link_creation_order_f
 
-!----------------------------------------------------------------------
-! Name:	      H5Pset_char_encoding
+!****s* H5P/H5Pset_char_encoding_f
+! NAME
+!  H5Pset_char_encoding_f
 !
-! Purpose:    Sets the character encoding used to encode a string.
+! PURPOSE
+!  Sets the character encoding used to encode a string.
 !
-! Inputs:
-!             plist_id - Property list identifier
-!             encoding - Valid values for encoding are:
-!     	                    H5T_CSET_ASCII_F -> US ASCII
-!     	                    H5T_CSET_UTF8_F -> UTF-8 Unicode encoding
+! INPUTS
 !
-! Outputs:
-!	      hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+!  plist_id - Property list identifier
+!  encoding - Valid values for encoding are:
+!     	        H5T_CSET_ASCII_F -> US ASCII
+!     	        H5T_CSET_UTF8_F -> UTF-8 Unicode encoding
 !
-! Programmer:	M.S. Breitenfeld
-!		March 3, 2008
+! OUTPUTS
+!  hdferr   - Error code		
+!  	        Success:  0
+!  		Failure: -1   
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 3, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! SOURCE  
   SUBROUTINE h5pset_char_encoding_f(plist_id, encoding, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: plist_id ! Property list identifier
-
-    INTEGER, INTENT(IN) :: encoding ! String encoding character set:
-!     	                                    H5T_CSET_ASCII_F -> US ASCII
-!     	                                    H5T_CSET_UTF8_F  -> UTF-8 Unicode encoding
-    INTEGER, INTENT(OUT) :: hdferr   ! Error code
+    INTEGER, INTENT(IN) :: encoding        ! String encoding character set:
+     	                                   !   H5T_CSET_ASCII_F -> US ASCII
+     	                                   !   H5T_CSET_UTF8_F  -> UTF-8 Unicode encoding
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                           ! 0 on success and -1 on failure
+!***** 
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -6138,40 +5365,41 @@
 
   END SUBROUTINE h5pset_char_encoding_f
 
-!----------------------------------------------------------------------
-! Name:	      H5Pget_char_encoding
+!****s* H5P/H5Pget_char_encoding_f
+! NAME
+!  H5Pget_char_encoding_f
 !
-! Purpose:    Retrieves the character encoding used to create a string
+! PURPOSE
+!  Retrieves the character encoding used to create a string
 !
-! Inputs:
-!             plist_id - Property list identifier
+! INPUTS
 !
-! Outputs:
-!             encoding - Valid values for encoding are:
-!     	                    H5T_CSET_ASCII_F -> US ASCII
-!     	                    H5T_CSET_UTF8_F -> UTF-8 Unicode encoding
-!	        hdferr - error code
-!		            Success:  0
-!		            Failure: -1
-! Optional parameters:
-!				NONE
+!  plist_id - Property list identifier
 !
-! Programmer:	M.S. Breitenfeld
-!		March 3, 2008
+! OUTPUTS
 !
-! Modifications:
+!  encoding - Valid values for encoding are:
+!     	        H5T_CSET_ASCII_F -> US ASCII
+!     	        H5T_CSET_UTF8_F -> UTF-8 Unicode encoding
+!  hdferr   - Error code		
+!               Success:  0
+!               Failure: -1   
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 3, 2008
+!
+! SOURCE  
   SUBROUTINE  h5pget_char_encoding_f(plist_id, encoding, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: plist_id ! Property list identifier
 
-    INTEGER, INTENT(OUT) :: encoding ! Valid values for encoding are:
-!     	                                            H5T_CSET_ASCII_F -> US ASCII
-!     	                                            H5T_CSET_UTF8_F  -> UTF-8 Unicode encoding
+    INTEGER, INTENT(OUT) :: encoding       ! Valid values for encoding are:
+     	                                   !  H5T_CSET_ASCII_F -> US ASCII
+     	                                   !  H5T_CSET_UTF8_F  -> UTF-8 Unicode encoding
     INTEGER, INTENT(OUT) :: hdferr   ! Error code
+                                     ! 0 on success and -1 on failure
+!***** 
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -6192,29 +5420,31 @@
 
   END SUBROUTINE h5pget_char_encoding_f
 
-!----------------------------------------------------------------------
-! Name:		h5pset_copy_object_f
+!****s* H5P/h5pset_copy_object_f
+! NAME
+!  h5pset_copy_object_f 
 !
-! Purpose: 	Sets properties to be used when an object is copied.
+! PURPOSE
+!  Sets properties to be used when an object is copied.
 !
-! Inputs:
-!               ocp_plist_id - Object copy property list identifier
-!               copy_options - Copy option(s) to be set
-! Outputs:
-!		hdferr	     - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+! 
+!  ocp_plist_id - Object copy property list identifier
+!  copy_options - Copy option(s) to be set
+! OUTPUTS
+!  
+!  hdferr	- error code		
+!  		   Success:  0
+!  		   Failure: -1   
 !
-! Programmer:	M.S. Breitenfeld
-!		March 3, 2008
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 3, 2008
 !
-! Modifications:
+! HISTORY
 !
-! Comment:
-!----------------------------------------------------------------------
-
+!  
+! SOURCE  
   SUBROUTINE h5pset_copy_object_f(ocp_plist_id, copy_options, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: ocp_plist_id ! Object copy property list identifier
@@ -6226,6 +5456,7 @@
                                         !   H5O_COPY_WITHOUT_ATTR_FLAG_F
     INTEGER, INTENT(OUT) :: hdferr      ! Error code
                                         ! 0 on success and -1 on failure
+!***** 
 
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -6242,39 +5473,43 @@
     hdferr = h5pset_copy_object_c(ocp_plist_id, copy_options)
   END SUBROUTINE h5pset_copy_object_f
 
-!----------------------------------------------------------------------
-! Name:		h5pget_copy_object_f
+!****s* H5P/h5pget_copy_object_f
+! NAME
+!  h5pget_copy_object_f 
 !
-! Purpose: 	Retrieves the properties to be used when an object is copied.
+! PURPOSE
+!  Retrieves the properties to be used when an object is copied.
 !
-! Inputs:
-!               ocp_plist_id - Object copy property list identifier
-! Outputs:
-!               copy_options - Copy option(s) to be get
-!		hdferr	     - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+! 
+!  ocp_plist_id - Object copy property list identifier
+! OUTPUTS
+!  
+!  copy_options - Copy option(s) to be get
+!  hdferr	- Error code		
+!  		   Success:  0
+!  		   Failure: -1   
 !
-! Programmer:	M.S. Breitenfeld
-!		March 3, 2008
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 3, 2008
 !
-! Modifications:
+! HISTORY
 !
-! Comment:
-!----------------------------------------------------------------------
-
+!  
+! SOURCE
   SUBROUTINE h5pget_copy_object_f(ocp_plist_id, copy_options, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: ocp_plist_id ! Object copy property list identifier
-    INTEGER, INTENT(OUT) :: copy_options ! valid copy options returned are:
-                                         !   H5O_COPY_SHALLOW_HIERARCHY_F
-                                         !   H5O_COPY_EXPAND_SOFT_LINK_F
-                                         !   H5O_COPY_EXPAND_EXT_LINK_F
-                                         !   H5O_COPY_EXPAND_REFERENCE_F
-                                         !   H5O_COPY_WITHOUT_ATTR_FLAG_F
-    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+    INTEGER, INTENT(OUT) :: copy_options       ! Valid copy options returned are:
+                                               !   H5O_COPY_SHALLOW_HIERARCHY_F
+                                               !   H5O_COPY_EXPAND_SOFT_LINK_F 
+                                               !   H5O_COPY_EXPAND_EXT_LINK_F
+                                               !   H5O_COPY_EXPAND_REFERENCE_F
+                                               !   H5O_COPY_WITHOUT_ATTR_FLAG_F
+    INTEGER, INTENT(OUT) :: hdferr             ! Error code
+                                               ! 0 on success and -1 on failure
+!***** 
 
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -6291,41 +5526,43 @@
     hdferr = h5pget_copy_object_c(ocp_plist_id, copy_options)
   END SUBROUTINE h5pget_copy_object_f
 
-!----------------------------------------------------------------------
-! Name:		h5pget_data_transform_f
-!
-! Purpose: 	Retrieves a data transform expression.
-!
-! Inputs:
-!               plist_id - Identifier of the property list or class
-! Outputs:
-!               expression - buffer to hold transform expression
-!		hdferr	   - error code
-!                                       Success:  Actual lenght of the expression
-!                                                 If provided buffer "expression" is
-!                                                 smaller, than expression will be
-!                                                 truncated to fit into
-!                                                 provided user buffer
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	M.S. Breitenfeld
-!		March 19, 2008
-!
-! Modifications:
-!
-! Comment: Should hdferr return just 0 or 1 and add another arguement for the size?
-!----------------------------------------------------------------------
-
-  SUBROUTINE h5pget_data_transform_f(plist_id, expression, hdferr, size)
+!****s* H5P/h5pget_data_transform_f 
+! NAME
+!  h5pget_data_transform_f 
+!
+! PURPOSE
+!  Retrieves a data transform expression.
+!
+! INPUTS
+! 
+!  plist_id   - Identifier of the property list or class
+! OUTPUTS
+!  
+!  expression - buffer to hold transform expression
+!  hdferr     - Error code
+!                 Success:  Actual lenght of the expression
+!                           If provided buffer "expression" is 
+!                           smaller, than expression will be 
+!                           truncated to fit into
+!                           provided user buffer
+!  		  Failure: -1
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 19, 2008
+!
+! HISTORY
+!
+! Should hdferr return just 0 or 1 and add another arguement for the size?
+! SOURCE
+SUBROUTINE h5pget_data_transform_f(plist_id, expression, hdferr, size)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: plist_id ! Identifier of the property list or class
-    CHARACTER(LEN=*), INTENT(OUT) :: expression  ! Buffer to hold transform expression
-
-    INTEGER(SIZE_T), INTENT(OUT), OPTIONAL :: size ! registered size of the transform expression
-
-    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+    INTEGER(HID_T), INTENT(IN) :: plist_id         ! Identifier of the property list or class
+    CHARACTER(LEN=*), INTENT(OUT) :: expression    ! Buffer to hold transform expression
+    INTEGER(SIZE_T), INTENT(OUT), OPTIONAL :: size ! Registered size of the transform expression
+    INTEGER, INTENT(OUT) :: hdferr                 ! Error code
+                                                   !  0 on success and -1 on failure
+!***** 
     INTEGER :: expression_len
     INTEGER(SIZE_T) :: size_default
 
@@ -6339,8 +5576,8 @@
          !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_DATA_TRANSFORM_C'::h5pget_data_transform_c
          !DEC$ENDIF
          !DEC$ATTRIBUTES reference :: expression
-         INTEGER(HID_T), INTENT(IN) :: plist_id
-         CHARACTER(LEN=*), INTENT(OUT) :: expression
+         INTEGER(HID_T), INTENT(IN) :: plist_id 
+         CHARACTER(LEN=*), INTENT(OUT) :: expression 
          INTEGER(SIZE_T) :: size_default
          INTEGER :: expression_len
        END FUNCTION h5pget_data_transform_c
@@ -6355,34 +5592,35 @@
 
   END SUBROUTINE h5pget_data_transform_f
 
-!----------------------------------------------------------------------
-! Name:		h5pset_data_transform_f
-!
-! Purpose: 	Sets a data transform expression.
+!****s* H5P/h5pset_data_transform_f 
+! NAME
+!  h5pset_data_transform_f 
 !
-! Inputs:
-!               plist_id - Identifier of the property list or class
-!               expression - buffer to hold transform expression
-! Outputs:
-!		hdferr	   - error code
-!                                       Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Sets a data transform expression.
 !
-! Programmer:	M.S. Breitenfeld
-!		March 19, 2008
+! INPUTS
+! 
+!  plist_id   - Identifier of the property list or class 
+!  expression - Buffer to hold transform expression
+! OUTPUTS
+! 
+!  hdferr     - error code
+!                 Success:  0
+!  		  Failure: -1
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 19, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! SOURCE
   SUBROUTINE h5pset_data_transform_f(plist_id, expression, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: plist_id ! Identifier of the property list or class
-    CHARACTER(LEN=*), INTENT(IN) :: expression  ! Buffer to hold transform expression
-    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+    INTEGER(HID_T), INTENT(IN) :: plist_id     ! Identifier of the property list or class
+    CHARACTER(LEN=*), INTENT(IN) :: expression ! Buffer to hold transform expression
+    INTEGER, INTENT(OUT) :: hdferr             ! Error code
+                                               ! 0 on success and -1 on failure
+!***** 
     INTEGER :: expression_len
 
 !  MS FORTRAN needs explicit interface for C functions called here.
@@ -6394,7 +5632,7 @@
          !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_DATA_TRANSFORM_C'::h5pset_data_transform_c
          !DEC$ENDIF
          !DEC$ATTRIBUTES reference :: expression
-         INTEGER(HID_T), INTENT(IN) :: plist_id
+         INTEGER(HID_T), INTENT(IN) :: plist_id 
          CHARACTER(LEN=*), INTENT(IN) :: expression
          INTEGER :: expression_len
        END FUNCTION h5pset_data_transform_c
@@ -6405,34 +5643,35 @@
 
   END SUBROUTINE h5pset_data_transform_f
 
-!----------------------------------------------------------------------
-! Name:		H5Pget_local_heap_size_hint_f
+!****s* H5P/H5Pget_local_heap_size_hint_f 
+! NAME
+!  H5Pget_local_heap_size_hint_f 
 !
-! Purpose: 	Queries the local heap size hint for original-style groups.
+! PURPOSE
+!  Queries the local heap size hint for original-style groups.
 !
-! Inputs:
-!               gcpl_id - Group creation property list identifier
-! Outputs:
-!               size_hint - Hint for size of local heap
-!		hdferr	  - error code
-!                                    Success:  0
-!				     Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+! 
+!  gcpl_id   - Group creation property list identifier
+! OUTPUTS
 !
-! Programmer:	M.S. Breitenfeld
-!		March 21, 2008
+!  size_hint - Hint for size of local heap
+!  hdferr    - Error code
+!               Success:  0
+!  		Failure: -1
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 21, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! SOURCE
   SUBROUTINE h5pget_local_heap_size_hint_f(gcpl_id, size_hint, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: gcpl_id ! Group creation property list identifier
+    INTEGER(HID_T), INTENT(IN) :: gcpl_id     ! Group creation property list identifier
     INTEGER(SIZE_T), INTENT(OUT) :: size_hint ! Hint for size of local heap
-    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+    INTEGER, INTENT(OUT) :: hdferr            ! Error code
+                                              ! 0 on success and -1 on failure
+!***** 
 
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -6451,36 +5690,40 @@
 
   END SUBROUTINE h5pget_local_heap_size_hint_f
 
-!----------------------------------------------------------------------
-! Name:		H5Pget_est_link_info_f
+!****s* H5P/H5Pget_est_link_info_f 
+! NAME
+!  H5Pget_est_link_info_f 
 !
-! Purpose: 	Queries data required to estimate required local heap or object header size.
+! PURPOSE
+!  Queries data required to estimate required local heap or object header size.
 !
-! Inputs:
-!               gcpl_id - Group creation property list identifier
-! Outputs:
-!       est_num_entries - Estimated number of links to be inserted into group
-!          est_name_len - Estimated average length of link names
-!		hdferr	- error code
-!                                Success:  0
-!				 Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+! 
+!  gcpl_id         - Group creation property list identifier
+! OUTPUTS
+!  
+!  est_num_entries - Estimated number of links to be inserted into group
+!  est_name_len    - Estimated average length of link names
+!  hdferr	   - Error code
+!                     Success:  0
+!  		      Failure: -1
 !
-! Programmer:	M.S. Breitenfeld
-!		March 21, 2008
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 21, 2008
 !
-! Modifications:
+! HISTORY
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! 
+! SOURCE
   SUBROUTINE h5pget_est_link_info_f(gcpl_id, est_num_entries, est_name_len, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: gcpl_id ! Group creation property list identifier
+    INTEGER(HID_T), INTENT(IN) :: gcpl_id   ! Group creation property list identifier  
     INTEGER, INTENT(OUT) :: est_num_entries ! Estimated number of links to be inserted into group
     INTEGER, INTENT(OUT) :: est_name_len    ! Estimated average length of link names
-    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+                                            ! 0 on success and -1 on failure
+!***** 
 
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -6490,7 +5733,7 @@
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
          !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_EST_LINK_INFO_C'::h5pget_est_link_info_c
          !DEC$ENDIF
-         INTEGER(HID_T), INTENT(IN) :: gcpl_id
+         INTEGER(HID_T), INTENT(IN) :: gcpl_id  
          INTEGER, INTENT(OUT) :: est_num_entries
          INTEGER, INTENT(OUT) :: est_name_len
        END FUNCTION h5pget_est_link_info_c
@@ -6500,34 +5743,35 @@
 
   END SUBROUTINE h5pget_est_link_info_f
 
-!----------------------------------------------------------------------
-! Name:		H5Pset_local_heap_size_hint_f
+!****s* H5P/H5Pset_local_heap_size_hint_f 
+! NAME
+!  H5Pset_local_heap_size_hint_f 
 !
-! Purpose: 	Sets the local heap size hint for original-style groups.
+! PURPOSE
+!  Sets the local heap size hint for original-style groups.
 !
-! Inputs:
-!               gcpl_id - Group creation property list identifier
-!               size_hint - Hint for size of local heap
-! Outputs:
-!		hdferr	  - error code
-!                                    Success:  0
-!				     Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+! 
+!  gcpl_id   - Group creation property list identifier
+!  size_hint - Hint for size of local heap
+! OUTPUTS
 !
-! Programmer:	M.S. Breitenfeld
-!		March 21, 2008
+!  hdferr    - Error code
+!               Success:  0
+!  		Failure: -1
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 21, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! SOURCE
   SUBROUTINE h5pset_local_heap_size_hint_f(gcpl_id, size_hint, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: gcpl_id ! Group creation property list identifier
+    INTEGER(HID_T), INTENT(IN) :: gcpl_id    ! Group creation property list identifier
     INTEGER(SIZE_T), INTENT(IN) :: size_hint ! Hint for size of local heap
-    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+                                             ! 0 on success and -1 on failure
+!***** 
 
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -6546,36 +5790,37 @@
 
   END SUBROUTINE h5pset_local_heap_size_hint_f
 
-!----------------------------------------------------------------------
-! Name:		h5pset_est_link_info_f
+!****s* H5P/h5pset_est_link_info_f 
+! NAME
+!  h5pset_est_link_info_f 
 !
-! Purpose: 	Sets estimated number of links and length of link names in a group.
+! PURPOSE
+!  Sets estimated number of links and length of link names in a group.
 !
-! Inputs:
-!               gcpl_id - Group creation property list identifier
-!       est_num_entries - Estimated number of links to be inserted into group
-!          est_name_len - Estimated average length of link names
-! Outputs:
-!		hdferr	- error code
-!                                Success:  0
-!				 Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+! 
+! gcpl_id         - Group creation property list identifier  
+! est_num_entries - Estimated number of links to be inserted into group
+! est_name_len    - Estimated average length of link names
+! OUTPUTS
 !
-! Programmer:	M.S. Breitenfeld
-!		March 21, 2008
+!  hdferr	  - Error code
+!                    Success:  0
+!  		     Failure: -1
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 21, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! SOURCE
   SUBROUTINE h5pset_est_link_info_f(gcpl_id, est_num_entries, est_name_len, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: gcpl_id ! Group creation property list identifier
+    INTEGER(HID_T), INTENT(IN) :: gcpl_id  ! Group creation property list identifier  
     INTEGER, INTENT(IN) :: est_num_entries ! Estimated number of links to be inserted into group
     INTEGER, INTENT(IN) :: est_name_len    ! Estimated average length of link names
-    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                           ! 0 on success and -1 on failure
+!***** 
 
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -6585,7 +5830,7 @@
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
          !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_EST_LINK_INFO_C'::h5pset_est_link_info_c
          !DEC$ENDIF
-         INTEGER(HID_T), INTENT(IN) :: gcpl_id
+         INTEGER(HID_T), INTENT(IN) :: gcpl_id  
          INTEGER, INTENT(IN) :: est_num_entries
          INTEGER, INTENT(IN) :: est_name_len
        END FUNCTION h5pset_est_link_info_c
@@ -6595,36 +5840,37 @@
 
   END SUBROUTINE h5pset_est_link_info_f
 
-!----------------------------------------------------------------------
-! Name:		h5pset_link_phase_change_f
+!****s* H5P/h5pset_link_phase_change_f
+! NAME
+!  h5pset_link_phase_change_f
 !
-! Purpose: 	Sets the parameters for conversion between compact and dense groups.
+! PURPOSE
+!  Sets the parameters for conversion between compact and dense groups.
 !
-! Inputs:
-!		gcpl_id  	- Group creation property list identifier
-!               max_compact     - Maximum number of attributes to be stored in compact storage
-!               min_dense       - Minimum number of attributes to be stored in dense storage
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+!  
+!  gcpl_id         - Group creation property list identifier  
+!  max_compact     - Maximum number of attributes to be stored in compact storage
+!  min_dense       - Minimum number of attributes to be stored in dense storage
+! OUTPUTS
 !
-! Programmer:	M.S. Breitenfeld
-!		March 21, 2008
+!  hdferr          - error code		
+!	              Success:  0
+!	              Failure: -1   
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 21, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
-
-  SUBROUTINE h5pset_link_phase_change_f(gcpl_id, max_compact, min_dense, hdferr)
+! SOURCE
+SUBROUTINE h5pset_link_phase_change_f(gcpl_id, max_compact, min_dense, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: gcpl_id ! Group creation property list identifier
-    INTEGER, INTENT(IN) :: max_compact  ! Maximum number of attributes to be stored in compact storage
-    INTEGER, INTENT(IN) :: min_dense  ! Minimum number of attributes to be stored in dense storage
-    INTEGER, INTENT(OUT) :: hdferr   ! Error code
+    INTEGER, INTENT(IN) :: max_compact    ! Maximum number of attributes to be stored in compact storage
+    INTEGER, INTENT(IN) :: min_dense      ! Minimum number of attributes to be stored in dense storage
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                          ! 0 on success and -1 on failure
+!***** 
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -6644,38 +5890,39 @@
     hdferr = h5pset_link_phase_change_c(gcpl_id, max_compact, min_dense)
   END SUBROUTINE h5pset_link_phase_change_f
 
-!----------------------------------------------------------------------
-! Name:		h5pset_fapl_direct_f
-!
-! Purpose: 	Sets up use of the direct I/O driver.
-!
-! Inputs:
-!    fapl_id 	- File access property list identifier
-!    alignment 	- Required memory alignment boundary
-!    block_size - File system block size
-!    cbuf_size 	- Copy buffer size
-! Outputs:
-!     hdferr:   - error code
-!		    Success:  0
-!		    Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	M.S. Breitenfeld
-!		March 21, 2008
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-  SUBROUTINE h5pset_fapl_direct_f(fapl_id, alignment, block_size, cbuf_size, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: fapl_id ! File access property list identifier
-    INTEGER(SIZE_T), INTENT(IN) :: alignment 	  ! Required memory alignment boundary!
-    INTEGER(SIZE_T), INTENT(IN) :: block_size     ! File system block size
-    INTEGER(SIZE_T), INTENT(IN) :: cbuf_size 	  ! Copy buffer size
-    INTEGER, INTENT(OUT) :: hdferr   ! Error code
+!****s* H5P/h5pset_fapl_direct_f
+! NAME
+!  h5pset_fapl_direct_f
+!
+! PURPOSE
+!  Sets up use of the direct I/O driver.
+!
+! INPUTS
+!  
+!  fapl_id 	- File access property list identifier
+!  alignment 	- Required memory alignment boundary
+!  block_size   - File system block size
+!  cbuf_size 	- Copy buffer size
+! OUTPUTS
+!
+!  hdferr       - error code		
+!                  Success:  0
+!                  Failure: -1   
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 21, 2008
+!
+! SOURCE
+SUBROUTINE h5pset_fapl_direct_f(fapl_id, alignment, block_size, cbuf_size, hdferr)
+    IMPLICIT NONE  
+    INTEGER(HID_T), INTENT(IN) :: fapl_id     ! File access property list identifier
+    INTEGER(SIZE_T), INTENT(IN) :: alignment  ! Required memory alignment boundary!
+    INTEGER(SIZE_T), INTENT(IN) :: block_size ! File system block size
+    INTEGER(SIZE_T), INTENT(IN) :: cbuf_size  ! Copy buffer size
+    INTEGER, INTENT(OUT) :: hdferr            ! Error code
+                                              ! 0 on success and -1 on failure
+!***** 
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -6685,7 +5932,7 @@
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
          !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FAPL_DIRECT_C'::h5pset_fapl_direct_c
          !DEC$ENDIF
-         INTEGER(HID_T), INTENT(IN) :: fapl_id
+         INTEGER(HID_T), INTENT(IN) :: fapl_id 
          INTEGER(SIZE_T), INTENT(IN) :: alignment
          INTEGER(SIZE_T), INTENT(IN) :: block_size
          INTEGER(SIZE_T), INTENT(IN) :: cbuf_size
@@ -6695,38 +5942,39 @@
     hdferr = H5Pset_fapl_direct_c(fapl_id, alignment, block_size, cbuf_size)
   END SUBROUTINE h5pset_fapl_direct_f
 
-!----------------------------------------------------------------------
-! Name:		h5pget_fapl_direct_f
+!****s* H5P/h5pget_fapl_direct_f
+! NAME
+!  h5pget_fapl_direct_f
 !
-! Purpose: 	Gets up use of the direct I/O driver.
+! PURPOSE
+!  Gets up use of the direct I/O driver.
 !
-! Inputs:
-!    fapl_id 	- File access property list identifier
-! Outputs:
-!    alignment 	- Required memory alignment boundary
-!    block_size - File system block size
-!    cbuf_size 	- Copy buffer size
-!     hdferr:   - error code
-!		    Success:  0
-!		    Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+!  
+!  fapl_id 	- File access property list identifier
+! OUTPUTS
 !
-! Programmer:	M.S. Breitenfeld
-!		March 21, 2008
+!  alignment 	- Required memory alignment boundary
+!  block_size   - File system block size
+!  cbuf_size 	- Copy buffer size
+!  hdferr       - error code		
+!                  Success:  0
+!                  Failure: -1   
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 21, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! SOURCE
   SUBROUTINE h5pget_fapl_direct_f(fapl_id, alignment, block_size, cbuf_size, hdferr)
-    IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: fapl_id ! File access property list identifier
-    INTEGER(SIZE_T), INTENT(OUT) :: alignment 	  ! Required memory alignment boundary!
-    INTEGER(SIZE_T), INTENT(OUT) :: block_size     ! File system block size
-    INTEGER(SIZE_T), INTENT(OUT) :: cbuf_size 	  ! Copy buffer size
-    INTEGER, INTENT(OUT) :: hdferr   ! Error code
+    IMPLICIT NONE  
+    INTEGER(HID_T), INTENT(IN) :: fapl_id       ! File access property list identifier
+    INTEGER(SIZE_T), INTENT(OUT) :: alignment   ! Required memory alignment boundary!
+    INTEGER(SIZE_T), INTENT(OUT) :: block_size  ! File system block size
+    INTEGER(SIZE_T), INTENT(OUT) :: cbuf_size 	! Copy buffer size
+    INTEGER, INTENT(OUT) :: hdferr              ! Error code
+                                                ! 0 on success and -1 on failure
+!***** 
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -6736,7 +5984,7 @@
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
          !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FAPL_DIRECT_C'::h5pget_fapl_direct_c
          !DEC$ENDIF
-         INTEGER(HID_T), INTENT(IN) :: fapl_id
+         INTEGER(HID_T), INTENT(IN) :: fapl_id 
          INTEGER(SIZE_T), INTENT(OUT) :: alignment
          INTEGER(SIZE_T), INTENT(OUT) :: block_size
          INTEGER(SIZE_T), INTENT(OUT) :: cbuf_size
@@ -6746,40 +5994,41 @@
     hdferr = H5Pget_fapl_direct_c(fapl_id, alignment, block_size, cbuf_size)
   END SUBROUTINE h5pget_fapl_direct_f
 
-!----------------------------------------------------------------------
-! Name:		H5Pset_attr_phase_change_f
-!
-! Purpose: 	Sets attribute storage phase change thresholds.
-!
-! Inputs:
-!		ocpl_id		- Object (dataset or group) creation property list identifier
-! Outputs:
-!               max_compact     - Maximum number of attributes to be stored in compact storage
-!                                 (Default: 8)
-!               min_dense       - Minimum number of attributes to be stored in dense storage
-!                                 (Default: 6)
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	M.S. Breitenfeld
-!		January, 2008
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-  SUBROUTINE h5pset_attr_phase_change_f(ocpl_id, max_compact, min_dense, hdferr)
+!****s* H5P/H5Pset_attr_phase_change_f
+! NAME
+!  H5Pset_attr_phase_change_f 
+!
+! PURPOSE
+!  Sets attribute storage phase change thresholds.
+!
+! INPUTS
+!  
+!  ocpl_id - Object (dataset or group) creation property list identifier
+! OUTPUTS
+!  
+!  max_compact     - Maximum number of attributes to be stored in compact storage
+!                    (Default: 8)
+!  min_dense       - Minimum number of attributes to be stored in dense storage
+!                    (Default: 6)
+!  hdferr          - Error code		
+!	              Success:  0
+!	              Failure: -1   
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  January, 2008
+!
+! SOURCE
+SUBROUTINE h5pset_attr_phase_change_f(ocpl_id, max_compact, min_dense, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: ocpl_id ! Object (dataset or group) creation property list identifier
-    INTEGER, INTENT(IN) :: max_compact  ! Maximum number of attributes to be stored in compact storage
-                                         !(Default: 8)
-    INTEGER, INTENT(IN) :: min_dense  ! Minimum number of attributes to be stored in dense storage
-                                       ! (Default: 6)
-    INTEGER, INTENT(OUT) :: hdferr   ! Error code
+    INTEGER, INTENT(IN) :: max_compact    ! Maximum number of attributes to be stored in compact storage
+                                          !(Default: 8)
+    INTEGER, INTENT(IN) :: min_dense      ! Minimum number of attributes to be stored in dense storage
+                                          ! (Default: 6)
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+                                          ! 0 on success and -1 on failure
+!***** 
 !
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -6801,33 +6050,36 @@
 
   END SUBROUTINE h5pset_attr_phase_change_f
 
-!----------------------------------------------------------------------
-! Name:		H5Pset_nbit_f
+!****s* H5P/H5Pset_nbit_f
+! NAME
+!  H5Pset_nbit_f 
 !
-! Purpose: 	Sets up the use of the N-Bit filter.
+! PURPOSE
+!  Sets up the use of the N-Bit filter.
 !
-! Inputs:
-!               plist_id - Dataset creation property list identifier.
-! Outputs:
-!		hdferr	  - error code
-!                                    Success:  0
-!				     Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+! 
+!  plist_id - Dataset creation property list identifier.
+! OUTPUTS
 !
-! Programmer:	M.S. Breitenfeld
-!		March 21, 2008
+!  hdferr   - Error code
+!              Success:  0
+!  	       Failure: -1
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 21, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! HISTORY
+!
+! 
+! SOURCE
   SUBROUTINE h5pset_nbit_f(plist_id, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset creation property list identifier
-    INTEGER, INTENT(OUT) :: hdferr       ! Error code
-
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                           ! 0 on success and -1 on failure
+!***** 
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
     INTERFACE
@@ -6844,37 +6096,40 @@
 
   END SUBROUTINE h5pset_nbit_f
 
-!----------------------------------------------------------------------
-! Name:		h5pset_scaleoffset_f
+!****s* H5P/h5pset_scaleoffset_f
+! NAME
+!  h5pset_scaleoffset_f 
 !
-! Purpose: 	Sets up the use of the Scale-Offset filter.
+! PURPOSE
+!  Sets up the use of the Scale-Offset filter.
 !
-! Inputs:
-!               plist_id - Dataset creation property list identifier.
-!             scale_type - Flag indicating compression method.
-!           scale_factor - Parameter related to scale.
-! Outputs:
-!		hdferr	 - error code
-!                                   Success:  0
-!				    Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+! 
+!  plist_id     - Dataset creation property list identifier.
+!  scale_type   - Flag indicating compression method.
+!  scale_factor - Parameter related to scale.
+! OUTPUTS
 !
-! Programmer:	M.S. Breitenfeld
-!		March 21, 2008
+!  hdferr	 - Error code
+!                   Success:  0
+!  		    Failure: -1
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 21, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! HISTORY
+!
+! 
+! SOURCE
   SUBROUTINE h5pset_scaleoffset_f(plist_id, scale_type, scale_factor, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: plist_id ! Dataset creation property list identifier
-    INTEGER, INTENT(IN) :: scale_type                  ! Flag indicating compression method.
-    INTEGER, INTENT(IN) :: scale_factor                ! parameter related to scale.
+    INTEGER, INTENT(IN) :: scale_type      ! Flag indicating compression method.
+    INTEGER, INTENT(IN) :: scale_factor    ! Parameter related to scale.
     INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
+                                           ! 0 on success and -1 on failure
+!***** 
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
     INTERFACE
@@ -6893,35 +6148,39 @@
 
   END SUBROUTINE h5pset_scaleoffset_f
 
-!----------------------------------------------------------------------
-! Name:		h5pset_nlinks_f
+!****s* H5P/h5pset_nlinks_f 
+! NAME
+!  h5pset_nlinks_f 
 !
-! Purpose: 	Sets maximum number of soft or user-defined link traversals.
+! PURPOSE
+!  Sets maximum number of soft or user-defined link traversals.
 !
-! Inputs:
-!            lapl_id - File access property list identifier
-!             nlinks - Maximum number of links to traverse
+! INPUTS
+! 
+!  lapl_id - File access property list identifier
+!   nlinks - Maximum number of links to traverse
 !
-! Outputs:
-!		hdferr	 - error code
-!                                   Success:  0
-!				    Failure: -1
-! Optional parameters:
-!				NONE
+! OUTPUTS
 !
-! Programmer:	M.S. Breitenfeld
-!		March 24, 2008
+!  hdferr  - Error code
+!             Success:  0
+!  	      Failure: -1
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 24, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! HISTORY
+!
+! 
+! SOURCE
   SUBROUTINE h5pset_nlinks_f(lapl_id, nlinks, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: lapl_id ! File access property list identifier
     INTEGER(SIZE_T), INTENT(IN) :: nlinks ! Maximum number of links to traverse
-    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code   
+                                          ! 0 on success and -1 on failure
+!*****      
 
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
@@ -6940,36 +6199,36 @@
 
   END SUBROUTINE h5pset_nlinks_f
 
-!----------------------------------------------------------------------
-! Name:		h5pget_nlinks_f
+!****s* H5P/h5pget_nlinks_f 
+! NAME
+!  h5pget_nlinks_f 
 !
-! Purpose:  Gets maximum number of soft or user-defined link traversals.
+! PURPOSE
+!  Gets maximum number of soft or user-defined link traversals.
 !
-! Inputs:
-!            lapl_id - File access property list identifier
-!             nlinks - Maximum number of links to traverse
+! INPUTS
+! 
+!  lapl_id - File access property list identifier
+!  nlinks  - Maximum number of links to traverse
 !
-! Outputs:
-!		hdferr	 - error code
-!                                   Success:  0
-!				    Failure: -1
-! Optional parameters:
-!				NONE
+! OUTPUTS
 !
-! Programmer:	M.S. Breitenfeld
-!		March 24, 2008
+!  hdferr  - error code
+!             Success:  0
+!  	      Failure: -1
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 24, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! SOURCE
   SUBROUTINE h5pget_nlinks_f(lapl_id, nlinks, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: lapl_id ! File access property list identifier
+    INTEGER(HID_T), INTENT(IN) :: lapl_id  ! File access property list identifier
     INTEGER(SIZE_T), INTENT(OUT) :: nlinks ! Maximum number of links to traverse
-    INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+                                           ! 0 on success and -1 on failure
+!***** 
 !  MS FORTRAN needs explicit interface for C functions called here.
 !
     INTERFACE
@@ -6987,38 +6246,41 @@
 
   END SUBROUTINE h5pget_nlinks_f
 
-!----------------------------------------------------------------------
-! Name:		H5Pget_create_inter_group_f
-!
-! Purpose: 	Determines whether property is set to enable creating missing intermediate groups.
-!
-! Inputs:
-!		lcpl_id            - Link creation property list identifier
-!               crt_intermed_group - Specifying whether to create intermediate groups upon
-!                                    the creation of an object
-! Outputs:
-!		hdferr:		   - error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	M.S. Breitenfeld
-!		April 4, 2008
-!
-! Modifications:
-!
-! Comment: The long subroutine name (>31) on older f90 compilers causes problems
-!          so had to shorten the name
-!--------------------------------------------------------------------------------------
-
+!****s* H5P/H5Pget_create_inter_group_f
+! NAME
+!  H5Pget_create_inter_group_f
+!
+! PURPOSE
+!  Determines whether property is set to enable creating missing intermediate groups.
+!
+! INPUTS
+!  
+!  lcpl_id            - Link creation property list identifier
+!  crt_intermed_group - Specifying whether to create intermediate groups upon 
+!                       the creation of an object
+! OUTPUTS
+!
+!  hdferr	      - Error code		
+!  		 	 Success:  0
+!  		 	 Failure: -1   
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  April 4, 2008
+!
+! HISTORY
+! 	
+! The long subroutine name (>31) on older f90 compilers causes problems
+!          so the name was shortened
+! SOURCE
   SUBROUTINE h5pget_create_inter_group_f(lcpl_id, crt_intermed_group, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: lcpl_id      ! Link creation property list identifier
     INTEGER, INTENT(IN) :: crt_intermed_group  ! Flag specifying whether to create intermediate groups
                                                ! upon creation of an object
-    INTEGER, INTENT(OUT) :: hdferr ! Error code
-
+    INTEGER, INTENT(OUT) :: hdferr             ! Error code
+                                               ! 0 on success and -1 on failure
+!***** 
     INTERFACE
        INTEGER FUNCTION h5pget_create_inter_group_c(lcpl_id, crt_intermed_group)
          USE H5GLOBAL
@@ -7034,56 +6296,59 @@
 
   END SUBROUTINE h5pget_create_inter_group_f
 
-!----------------------------------------------------------------------
-! Name:		H5Pset_chunk_cache_f
-!
-! Purpose: 	Set the number of objects in the meta data cache and the
-!            maximum number of chunks and bytes in the raw data chunk cache.
-!            Once set, these values will override the values in the file access
-!            property list.  Each of these values can be individually unset
-!            (or not set at all) by passing the macros:
-!                H5D_CHUNK_CACHE_NSLOTS_DFLT_F,
-!                H5D_CHUNK_CACHE_NBYTES_DFLT_F, and/or
-!                H5D_CHUNK_CACHE_W0_DFLT_F
-!            as appropriate.
-!
-! 	     The RDCC_W0 value should be between 0 and 1 inclusive and
-!	     indicates how much chunks that have been fully read or fully
-!	     written are favored for preemption.  A value of zero means
-!	     fully read or written chunks are treated no differently than
-!            other chunks (the preemption is strictly LRU) while a value
-!	     of one means fully read chunks are always preempted before
-!	     other chunks.
-!
-! Inputs:
-!		dapl_id            - Dataset access property list identifier.
-!               rdcc_nslots        - The number of chunk slots in the raw data chunk cache for this dataset.
-!               rdcc_nbytes        - The total size of the raw data chunk cache for this dataset.
-!               rdcc_w0            - The chunk preemption policy for this dataset.
-! Outputs:
-!		hdferr:		   - error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	M.S. Breitenfeld
-!		April 13, 2009
-!
-! Modifications:
-!--------------------------------------------------------------------------------------
-
+!****s* H5P/H5Pset_chunk_cache_f
+! NAME
+!  H5Pset_chunk_cache_f
+!
+! PURPOSE
+!  Set the number of objects in the meta data cache and the
+!  maximum number of chunks and bytes in the raw data chunk cache.
+!  Once set, these values will override the values in the file access
+!  property list.  Each of these values can be individually unset
+!  (or not set at all) by passing the macros:
+!    H5D_CHUNK_CACHE_NSLOTS_DFLT_F,
+!    H5D_CHUNK_CACHE_NBYTES_DFLT_F, and/or
+!    H5D_CHUNK_CACHE_W0_DFLT_F
+!    as appropriate.
+!
+!  The RDCC_W0 value should be between 0 and 1 inclusive and
+!  indicates how much chunks that have been fully read or fully
+!  written are favored for preemption.  A value of zero means
+!  fully read or written chunks are treated no differently than
+!  other chunks (the preemption is strictly LRU) while a value
+!  of one means fully read chunks are always preempted before
+!  other chunks.
+!
+! INPUTS
+!  
+!  dapl_id          - Dataset access property list identifier.
+!  rdcc_nslots      - The number of chunk slots in the raw data chunk cache for this dataset.
+!  rdcc_nbytes      - The total size of the raw data chunk cache for this dataset.
+!  rdcc_w0          - The chunk preemption policy for this dataset.
+! OUTPUTS
+!
+!  hdferr	    - Error code		
+!  		 	Success:  0
+!  		 	Failure: -1   
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  April 13, 2009
+!
+! HISTORY
+!
+! SOURCE
   SUBROUTINE h5pset_chunk_cache_f(dapl_id, rdcc_nslots, rdcc_nbytes, rdcc_w0, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: dapl_id      ! Dataset access property list identifier.
-    INTEGER(SIZE_T), INTENT(IN) :: rdcc_nslots ! The number of chunk slots in the raw data
+    INTEGER(SIZE_T), INTENT(IN) :: rdcc_nslots ! The number of chunk slots in the raw data 
                                                ! chunk cache for this dataset.
-    INTEGER(SIZE_T), INTENT(IN) :: rdcc_nbytes ! The total size of the raw data chunk cache
+    INTEGER(SIZE_T), INTENT(IN) :: rdcc_nbytes ! The total size of the raw data chunk cache 
                                                ! for this dataset.
     REAL, INTENT(IN) :: rdcc_w0                ! The chunk preemption policy for this dataset.
     INTEGER, INTENT(OUT) :: hdferr             ! Error code
                                                ! 0 on success and -1 on failure
-
+!*****       
 
     INTERFACE
        INTEGER FUNCTION h5pset_chunk_cache_c(dapl_id, rdcc_nslots, rdcc_nbytes, rdcc_w0)
@@ -7102,43 +6367,47 @@
 
   END SUBROUTINE h5pset_chunk_cache_f
 
-!----------------------------------------------------------------------
-! Name:		H5Pget_chunk_cache_f
-!
-! Purpose: Retrieves the maximum possible number of elements in the meta
-!	   data cache and the maximum possible number of elements and
-!	   bytes and the RDCC_W0 value in the raw data chunk cache.  Any
-!	   (or all) arguments may be null pointers in which case the
-!	   corresponding datum is not returned.  If these properties have
-!          not been set on this property list, the default values for a
-!          file access property list are returned.
-!
-! Inputs:
-!		dapl_id            - Dataset access property list identifier.
-! Outputs:
-!               rdcc_nslots        - Number of chunk slots in the raw data chunk cache hash table.
-!               rdcc_nbytes        - Total size of the raw data chunk cache, in bytes.
-!               rdcc_w0            - Preemption policy.
-!		hdferr:		   - error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	M.S. Breitenfeld
-!		April 13, 2009
-!
-! Modifications:
-!--------------------------------------------------------------------------------------
-
+!****s* H5P/H5Pget_chunk_cache_f
+! NAME
+!  H5Pget_chunk_cache_f
+!
+! PURPOSE
+!  Retrieves the maximum possible number of elements in the meta
+!  data cache and the maximum possible number of elements and
+!  bytes and the RDCC_W0 value in the raw data chunk cache.  Any
+!  (or all) arguments may be null pointers in which case the
+!  corresponding datum is not returned.  If these properties have
+!  not been set on this property list, the default values for a
+!  file access property list are returned.
+!
+! INPUTS
+!  
+!  dapl_id            - Dataset access property list identifier.
+! OUTPUTS
+! 
+!  rdcc_nslots        - Number of chunk slots in the raw data chunk cache hash table. 
+!  rdcc_nbytes        - Total size of the raw data chunk cache, in bytes. 
+!  rdcc_w0            - Preemption policy. 
+!  hdferr	      - Error code		
+!  		 	 Success:  0
+!  		 	 Failure: -1   
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  April 13, 2009
+!
+! HISTORY
+!
+! SOURCE
   SUBROUTINE h5pget_chunk_cache_f(dapl_id, rdcc_nslots, rdcc_nbytes, rdcc_w0, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: dapl_id ! Dataset access property list identifier.
+    INTEGER(HID_T), INTENT(IN) :: dapl_id       ! Dataset access property list identifier.
     INTEGER(SIZE_T), INTENT(OUT) :: rdcc_nslots ! Number of chunk slots in the raw data chunk cache hash table.
-    INTEGER(SIZE_T), INTENT(OUT) :: rdcc_nbytes ! Total size of the raw data chunk cache, in bytes.
-    REAL, INTENT(OUT) :: rdcc_w0 ! Preemption policy.
-    INTEGER, INTENT(OUT) :: hdferr ! error code
-
+    INTEGER(SIZE_T), INTENT(OUT) :: rdcc_nbytes ! Total size of the raw data chunk cache, in bytes. 
+    REAL, INTENT(OUT) :: rdcc_w0                ! Preemption policy.
+    INTEGER, INTENT(OUT) :: hdferr              ! Error code:
+                                                ! 0 on success and -1 on failure
+!*****    
     INTERFACE
        INTEGER FUNCTION h5pget_chunk_cache_c(dapl_id, rdcc_nslots, rdcc_nbytes, rdcc_w0)
          USE H5GLOBAL
diff --git a/fortran/src/H5Pff_F03.f90 b/fortran/src/H5Pff_F03.f90
new file mode 100644
index 0000000..b601e69
--- /dev/null
+++ b/fortran/src/H5Pff_F03.f90
@@ -0,0 +1,1185 @@
+!****h* ROBODoc/H5P (F03)
+!
+! NAME
+!  H5P_PROVISIONAL
+!
+! PURPOSE
+!  This file contains Fortran 90 and Fortran 2003 interfaces for H5P functions.
+!  It contains the same functions as H5Pff_F90.f90 but includes the
+!  Fortran 2003 functions and the interface listings. This file will be compiled
+!  instead of H5Pff_F90.f90 if Fortran 2003 functions are enabled.
+!
+! COPYRIGHT
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!  Copyright by The HDF Group.                                               *
+!  Copyright by the Board of Trustees of the University of Illinois.         *
+!  All rights reserved.                                                      *
+!  *
+!  This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!  terms governing use, modification, and redistribution, is contained in    *
+!  the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!  of the source code distribution tree; Copyright.html can be found at the  *
+!  root level of an installed copy of the electronic HDF5 document set and   *
+!  is linked from the top-level documents page.  It can also be found at     *
+!  http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!  access to either file, you may request a copy from help at hdfgroup.org.     *
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5P function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!
+!*****
+
+MODULE H5P_PROVISIONAL
+
+  USE H5GLOBAL
+
+  INTERFACE h5pset_fill_value_f
+     MODULE PROCEDURE h5pset_fill_value_integer
+     MODULE PROCEDURE h5pset_fill_value_real
+     MODULE PROCEDURE h5pset_fill_value_char
+     ! Recommended procedure:
+     MODULE PROCEDURE h5pset_fill_value_ptr
+
+  END INTERFACE
+
+  INTERFACE h5pget_fill_value_f
+     MODULE PROCEDURE h5pget_fill_value_integer
+     MODULE PROCEDURE h5pget_fill_value_real
+     MODULE PROCEDURE h5pget_fill_value_char
+     ! Recommended procedure:
+     MODULE PROCEDURE h5pget_fill_value_ptr
+
+  END INTERFACE
+
+  INTERFACE h5pset_f
+     MODULE PROCEDURE h5pset_integer
+     MODULE PROCEDURE h5pset_real
+     MODULE PROCEDURE h5pset_char
+     ! Recommended procedure:
+     MODULE PROCEDURE h5pset_ptr
+
+  END INTERFACE
+
+  INTERFACE h5pget_f
+     MODULE PROCEDURE h5pget_integer
+     MODULE PROCEDURE h5pget_real
+     MODULE PROCEDURE h5pget_char
+     ! Recommended procedure:
+     MODULE PROCEDURE h5pget_ptr
+  END INTERFACE
+
+  INTERFACE h5pregister_f
+     MODULE PROCEDURE h5pregister_integer
+     MODULE PROCEDURE h5pregister_real
+     MODULE PROCEDURE h5pregister_char
+     ! Recommended procedure:
+     MODULE PROCEDURE h5pregister_ptr
+  END INTERFACE
+
+  INTERFACE h5pinsert_f
+     MODULE PROCEDURE h5pinsert_integer
+     MODULE PROCEDURE h5pinsert_real
+     MODULE PROCEDURE h5pinsert_char
+     ! Recommended procedure:
+     MODULE PROCEDURE h5pinsert_ptr
+  END INTERFACE
+
+  INTERFACE
+     INTEGER FUNCTION h5pget_fill_value_c(prp_id, type_id, fillvalue)
+       USE H5GLOBAL
+       USE, INTRINSIC :: ISO_C_BINDING
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FILL_VALUE_C'::h5pget_fill_value_c
+       !DEC$ENDIF
+       INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+       INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
+                                             ! of fillvalue datatype
+                                             ! (in memory)
+       TYPE(C_PTR), VALUE :: fillvalue       ! Fillvalue
+     END FUNCTION h5pget_fill_value_c
+  END INTERFACE
+
+  INTERFACE
+     INTEGER FUNCTION h5pset_fill_value_c(prp_id, type_id, fillvalue)
+       USE H5GLOBAL
+       USE, INTRINSIC :: ISO_C_BINDING
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FILL_VALUE_C'::h5pset_fill_value_c
+       !DEC$ENDIF
+       INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+       INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
+                                             ! of fillvalue datatype
+                                             ! (in memory)
+       TYPE(C_PTR), VALUE :: fillvalue       ! Fillvalue
+     END FUNCTION h5pset_fill_value_c
+  END INTERFACE
+
+  INTERFACE
+     INTEGER FUNCTION h5pset_c(prp_id, name, name_len, value)
+       USE H5GLOBAL
+       USE, INTRINSIC :: ISO_C_BINDING
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_C'::h5pset_c
+       !DEC$ENDIF
+       INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+       CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+       INTEGER :: name_len
+       TYPE(C_PTR), VALUE :: value ! Property value
+     END FUNCTION h5pset_c
+  END INTERFACE
+
+  INTERFACE
+     INTEGER FUNCTION h5pget_c(prp_id, name, name_len, value)
+       USE, INTRINSIC :: ISO_C_BINDING
+       USE H5GLOBAL
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_C'::h5pget_c
+       !DEC$ENDIF
+       INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+       CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+       INTEGER :: name_len
+       TYPE(C_PTR), VALUE :: value ! Property value
+     END FUNCTION h5pget_c
+  END INTERFACE
+
+  INTERFACE
+     INTEGER FUNCTION h5pregister_c(class, name, name_len, size, value)
+       USE iso_c_binding
+       USE H5GLOBAL
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PREGISTER_C'::h5pregister_c
+       !DEC$ENDIF
+       !DEC$ATTRIBUTES reference :: name
+       INTEGER(HID_T), INTENT(IN) :: class
+       CHARACTER(LEN=*), INTENT(IN) :: name
+       INTEGER, INTENT(IN)         :: name_len
+       INTEGER(SIZE_T), INTENT(IN) :: size
+       TYPE(C_PTR), INTENT(IN), VALUE :: value
+     END FUNCTION h5pregister_c
+  END INTERFACE
+
+  INTERFACE
+     INTEGER FUNCTION h5pinsert_c(plist, name, name_len, size, value)
+       USE iso_c_binding
+       USE H5GLOBAL
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PINSERT_C'::h5pinsert_c
+       !DEC$ENDIF
+       !DEC$ATTRIBUTES reference :: name
+       INTEGER(HID_T), INTENT(IN) :: plist
+       CHARACTER(LEN=*), INTENT(IN) :: name
+       INTEGER, INTENT(IN)         :: name_len
+       INTEGER(SIZE_T), INTENT(IN) :: size
+       TYPE(c_ptr), INTENT(IN), value :: value
+     END FUNCTION h5pinsert_c
+  END INTERFACE
+
+CONTAINS
+
+!
+!****s* H5P (F03)/h5pset_fill_value_f_F90
+!
+! NAME
+!  h5pset_fill_value_f
+!
+! PURPOSE
+!  Sets fill value for a dataset creation property list
+!
+! Inputs:
+!  prp_id    - Property list identifier
+!  type_id   - Datatype identifier of fill value datatype (in memory)
+!  fillvalue - Fillvalue
+!
+! Outputs:
+!  hdferr    - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001
+!
+!  Added the recommended way of passing fillvalue
+!  and that is by passing the C address, all other
+!  ways are obsolete and should be avoided. June, 2008 MSB
+!
+! NOTES
+!  h5pset(get)fill_value_f function is overloaded to support
+!  INTEGER, REAL, DOUBLE PRECISION and CHARACTER dtatypes.
+!
+! Fortran90 Interface:
+!!  SUBROUTINE h5pset_fill_value_f(prp_id, type_id, fillvalue, hdferr) 
+!!    IMPLICIT NONE
+!!    INTEGER(HID_T), INTENT(IN)  :: prp_id
+!!    INTEGER(HID_T), INTENT(IN)  :: type_id
+!!    TYPE(VOID)    , INTENT(IN)  :: fillvalue
+!!    INTEGER       , INTENT(OUT) :: hdferr
+!*****
+
+
+  SUBROUTINE h5pset_fill_value_integer(prp_id, type_id, fillvalue, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
+                                          ! of fillvalue datatype
+                                          ! (in memory)
+    INTEGER, INTENT(IN), TARGET :: fillvalue   ! Fillvalue
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    TYPE(C_PTR) :: f_ptr ! C address
+
+    f_ptr = C_LOC(fillvalue)
+
+    hdferr = h5pset_fill_value_c(prp_id, type_id, f_ptr)
+
+  END SUBROUTINE h5pset_fill_value_integer
+!
+!****s* H5P (F03)/h5pget_fill_value_f_F90
+!
+! NAME
+!  h5pget_fill_value_f
+!
+! PURPOSE
+!  Gets fill value for a dataset creation property list
+!
+! Inputs:
+!  prp_id    - Property list identifier
+!  type_id   - Datatype identifier of fill value datatype (in memory)
+!
+! Outputs:
+!  fillvalue - Fillvalue
+!  hdferr    - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001
+!
+!  Added the recommended way of passing fillvalue
+!  and that is by passing the C address, all other
+!  ways are obsolete and should be avoided. June, 2008 MSB
+!
+! NOTES
+!  h5pget(get)fill_value_f function is overloaded to support
+!  INTEGER, REAL, DOUBLE PRECISION and CHARACTER dtatypes.
+!
+! Fortran90 Interface:
+!!  SUBROUTINE h5pget_fill_value_f(prp_id, type_id, fillvalue, hdferr)
+!!    INTEGER(HID_T), INTENT(IN)  :: prp_id 
+!!    INTEGER(HID_T), INTENT(IN)  :: type_id
+!!    TYPE(VOID)    , INTENT(OUT) :: fillvalue
+!!    INTEGER       , INTENT(OUT) :: hdferr
+!*****
+
+  SUBROUTINE h5pget_fill_value_integer(prp_id, type_id, fillvalue, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
+                                          ! of fillvalue datatype
+                                          ! (in memory)
+    INTEGER, INTENT(OUT), TARGET :: fillvalue ! Fillvalue
+    INTEGER, INTENT(OUT) :: hdferr            ! Error code
+    TYPE(C_PTR) :: f_ptr                      ! C address
+
+    f_ptr = C_LOC(fillvalue)
+
+    hdferr = h5pget_fill_value_c(prp_id, type_id, f_ptr)
+
+  END SUBROUTINE h5pget_fill_value_integer
+
+
+  SUBROUTINE h5pset_fill_value_real(prp_id, type_id, fillvalue, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
+                                          ! of fillvalue datatype
+                                          ! (in memory)
+    REAL, INTENT(IN), TARGET :: fillvalue ! Fillvalue
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+    TYPE(C_PTR) :: f_ptr                  ! C address
+
+    f_ptr = C_LOC(fillvalue)
+
+    hdferr = h5pset_fill_value_c(prp_id, type_id, f_ptr)
+
+  END SUBROUTINE h5pset_fill_value_real
+
+
+  SUBROUTINE h5pget_fill_value_real(prp_id, type_id, fillvalue, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
+                                          ! of fillvalue datatype
+                                          ! (in memory)
+    REAL, INTENT(OUT), TARGET :: fillvalue  ! Fillvalue
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    TYPE(C_PTR) :: f_ptr                    ! C address
+
+    f_ptr = C_LOC(fillvalue)
+
+    hdferr = h5pget_fill_value_c(prp_id, type_id, f_ptr)
+
+  END SUBROUTINE h5pget_fill_value_real
+
+  SUBROUTINE h5pset_fill_value_char(prp_id, type_id, fillvalue, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
+                                          ! of fillvalue datatype
+                                          ! (in memory)
+    CHARACTER, INTENT(IN), TARGET :: fillvalue ! Fillvalue
+    INTEGER, INTENT(OUT) :: hdferr             ! Error code
+    TYPE(C_PTR) :: f_ptr                       ! C address
+
+    f_ptr = C_LOC(fillvalue)
+
+    hdferr = h5pset_fill_value_c(prp_id, type_id, f_ptr)
+
+  END SUBROUTINE h5pset_fill_value_char
+
+  SUBROUTINE h5pget_fill_value_char(prp_id, type_id, fillvalue, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
+                                          ! of fillvalue datatype
+                                          ! (in memory)
+    CHARACTER, INTENT(OUT) :: fillvalue   ! Fillvalue
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+    INTEGER :: i
+    CHARACTER(LEN=1), ALLOCATABLE, DIMENSION(:), TARGET :: chr
+    INTEGER :: chr_len
+
+    TYPE(C_PTR) :: f_ptr ! C address
+    ! To resolve Issue #1 outlined in the preamble of this file we
+    ! need to pack the character string into an array.
+
+    chr_len = LEN(fillvalue)
+    ALLOCATE(chr(1:chr_len), STAT=hdferr)
+    IF (hdferr .NE. 0) THEN
+       hdferr = -1
+       RETURN
+    ENDIF
+
+    f_ptr = C_LOC(chr(1)(1:1))
+
+    hdferr = h5pget_fill_value_c(prp_id, type_id, f_ptr)
+
+    DO i = 1, chr_len
+       fillvalue(i:i) = chr(i)
+    ENDDO
+    DEALLOCATE(chr)
+
+  END SUBROUTINE h5pget_fill_value_char
+!
+!****s* H5P (F03)/h5pset_fill_value_f_F03
+!
+! NAME
+!  h5pset_fill_value_f
+!
+! PURPOSE
+!  Sets fill value for a dataset creation property list
+!
+! Inputs:
+!  prp_id    - Property list identifier
+!  type_id   - Datatype identifier of fill value datatype (in memory)
+!  fillvalue - Fillvalue
+!
+! Outputs:
+!  hdferr    - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001
+!
+!  Added the recommended way of passing fillvalue
+!  and that is by passing the C address, all other
+!  ways are obsolete and should be avoided. June, 2008 MSB
+!
+! NOTES
+!  h5pset(get)fill_value_f function is overloaded to support
+!  INTEGER, REAL, DOUBLE PRECISION and CHARACTER dtatypes.
+!
+! Fortran2003 Interface:
+!!  SUBROUTINE h5pset_fill_value_f(prp_id, type_id, fillvalue, hdferr)
+!!    INTEGER(HID_T), INTENT(IN)  :: prp_id 
+!!    INTEGER(HID_T), INTENT(IN)  :: type_id
+!!    TYPE(C_PTR)   , INTENT(IN)  :: fillvalue
+!!    INTEGER       , INTENT(OUT) :: hdferr
+!*****
+
+  SUBROUTINE h5pset_fill_value_ptr(prp_id, type_id, fillvalue, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id    ! Property list identifier
+    INTEGER(HID_T), INTENT(IN) :: type_id   ! Datatype identifier of
+                                            ! of fillvalue datatype
+                                            ! (in memory)
+    TYPE(C_PTR), INTENT(IN)    :: fillvalue ! Fillvalue
+    INTEGER, INTENT(OUT)       :: hdferr    ! Error code
+
+    hdferr = h5pset_fill_value_c(prp_id, type_id, fillvalue)
+
+  END SUBROUTINE h5pset_fill_value_ptr
+
+!
+!****s* H5P (F03)/h5pget_fill_value_f_F03
+!
+! NAME
+!  h5pget_fill_value_f
+!
+! PURPOSE
+!  Gets fill value for a dataset creation property list
+!
+! Inputs:
+!  prp_id    - Property list identifier
+!  type_id   - Datatype identifier of fill value datatype (in memory)
+!
+! Outputs:
+!  fillvalue - Fillvalue
+!  hdferr    - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001
+!
+!  Added the recommended way of passing fillvalue
+!  and that is by passing the C address, all other
+!  ways are obsolete and should be avoided. June, 2008 MSB
+!
+! NOTES
+!  h5pget(get)fill_value_f function is overloaded to support
+!  INTEGER, REAL, DOUBLE PRECISION and CHARACTER dtatypes.
+!
+! Fortran2003 Interface:
+!!  SUBROUTINE h5pget_fill_value_f(prp_id, type_id, fillvalue, hdferr)
+!!    INTEGER(HID_T), INTENT(IN)  :: prp_id 
+!!    INTEGER(HID_T), INTENT(IN)  :: type_id
+!!    TYPE(C_PTR)   , INTENT(OUT) :: fillvalue
+!!    INTEGER       , INTENT(OUT) :: hdferr
+!*****
+
+  SUBROUTINE h5pget_fill_value_ptr(prp_id, type_id, fillvalue, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
+                                          ! of fillvalue datatype
+                                          ! (in memory)
+    TYPE(C_PTR), INTENT(OUT) :: fillvalue ! Fillvalue
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+    hdferr = h5pget_fill_value_c(prp_id, type_id, fillvalue)
+
+  END SUBROUTINE h5pget_fill_value_ptr
+
+!
+!****s* H5P (F03)/h5pset_f_F90
+!
+! NAME
+!  h5pset_f
+!
+! PURPOSE
+!  Sets a property list value
+!
+! Inputs:
+!  prp_id  - Property list identifier to modify
+!  name    - Name of property to modify
+!  value   - Property value, supported types are:
+!             INTEGER
+!             REAL
+!             DOUBLE PRECISION
+!             CHARACTER(LEN=*)
+! Outputs:
+!  hdferr  - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002
+!
+! Fortran90 Interface:
+!!  SUBROUTINE h5pset_f(plid, name, value, hdferr)
+!!    INTEGER(HID_T)  , INTENT(IN)  :: plid
+!!    CHARACTER(LEN=*), INTENT(IN)  :: name
+!!    TYPE            , INTENT(IN)  :: value
+!!    INTEGER         , INTENT(OUT) :: hdferr
+!*****
+  SUBROUTINE h5pset_integer(prp_id, name, value, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id   ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of property to modify
+    INTEGER,   INTENT(IN), TARGET :: value ! Property value
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+
+    INTEGER :: name_len
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(value)
+
+    name_len = LEN(name)
+    hdferr = h5pget_c(prp_id, name, name_len, f_ptr)
+
+  END SUBROUTINE h5pset_integer
+
+  SUBROUTINE h5pset_real(prp_id, name, value, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name ! Name of property to modify
+    REAL,   INTENT(IN), TARGET :: value  ! Property value
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+    INTEGER :: name_len
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(value)
+
+    name_len = LEN(name)
+    hdferr = h5pget_c(prp_id, name, name_len, f_ptr)
+
+  END SUBROUTINE h5pset_real
+
+  SUBROUTINE h5pset_char(prp_id, name, value, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id    ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name    ! Name of property to modify
+    CHARACTER(LEN=*),   INTENT(IN) :: value ! Property value
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    INTEGER :: name_len
+
+    INTEGER :: i
+    CHARACTER(LEN=1), ALLOCATABLE, DIMENSION(:), TARGET :: chr
+    INTEGER :: chr_len
+
+    TYPE(C_PTR) :: f_ptr
+    ! To resolve Issue #1 outlined in the preamble of this file we
+    ! need to pack the character string into an array.
+
+    chr_len = LEN(value)
+    ALLOCATE(chr(1:chr_len), STAT=hdferr)
+    IF (hdferr .NE. 0) THEN
+       hdferr = -1
+       RETURN
+    ENDIF
+
+    DO i = 1, chr_len
+       chr(i) = value(i:i)
+    ENDDO
+
+    f_ptr = C_LOC(chr(1)(1:1))
+
+    name_len = LEN(name)
+    hdferr = h5pget_c(prp_id, name, name_len, f_ptr)
+
+    DEALLOCATE(chr)
+
+  END SUBROUTINE h5pset_char
+!
+!****s* H5P (F03)/h5pget_f_F90
+!
+! NAME
+!  h5pget_f
+!
+! PURPOSE
+!  Queries the value of a property.
+!
+! Inputs:
+!  prp_id  - Property list identifier to modify
+!  name    - Name of property to get
+!  value   - Property value, supported types are:
+!             INTEGER
+!             REAL
+!             DOUBLE PRECISION
+!             CHARACTER(LEN=*)
+! Outputs:
+!  hdferr  - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002
+!
+! Fortran90 Interface:
+!!  SUBROUTINE h5pget_f(plid, name, value, hdferr)
+!!    INTEGER(HID_T)  , INTENT(IN)  :: plid
+!!    CHARACTER(LEN=*), INTENT(IN)  :: name
+!!    TYPE            , INTENT(OUT) :: value
+!!    INTEGER         , INTENT(OUT) :: hdferr
+!*****
+
+  SUBROUTINE h5pget_integer(prp_id, name, value, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id    ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name    ! Name of property to modify
+    INTEGER,   INTENT(OUT), TARGET :: value ! Property value
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    INTEGER :: name_len
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(value)
+
+    name_len = LEN(name)
+    hdferr = h5pget_c(prp_id, name, name_len, f_ptr)
+
+  END SUBROUTINE h5pget_integer
+
+  SUBROUTINE h5pget_real(prp_id, name, value, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name ! Name of property to modify
+    REAL,   INTENT(OUT), TARGET :: value ! Property value
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+    INTEGER :: name_len
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(value)
+
+    name_len = LEN(name)
+    hdferr = h5pget_c(prp_id, name, name_len, f_ptr)
+  END SUBROUTINE h5pget_real
+
+  SUBROUTINE h5pget_char(prp_id, name, value, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id   ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of property to modify
+    CHARACTER(LEN=*), INTENT(OUT) :: value ! Property value
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+    INTEGER :: name_len
+
+    INTEGER :: i
+    CHARACTER(LEN=1), ALLOCATABLE, DIMENSION(:), TARGET :: chr
+    INTEGER :: chr_len
+    TYPE(C_PTR) :: f_ptr
+
+    chr_len = LEN(value)
+    ALLOCATE(chr(1:chr_len), STAT=hdferr)
+    IF (hdferr .NE. 0) THEN
+       hdferr = -1
+       RETURN
+    ENDIF
+    f_ptr = C_LOC(chr(1)(1:1))
+
+    name_len = LEN(name)
+    hdferr = h5pget_c(prp_id, name, name_len, f_ptr)
+
+    DO i = 1, chr_len
+       value(i:i) = chr(i)
+    ENDDO
+
+    DEALLOCATE(chr)
+
+  END SUBROUTINE h5pget_char
+
+
+!
+!****s* H5P (F03)/h5pset_f_F03
+!
+! NAME
+!  h5pset_f
+!
+! PURPOSE
+!  Sets a property list value
+!
+! Inputs:
+!  prp_id  - Property list identifier to modify
+!  name    - Name of property to modify
+!  value   - Pointer to value to set the property to
+! Outputs:
+!  hdferr  - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002
+!
+! Fortran2003 Interface:
+!!  SUBROUTINE h5pset_f(plid, name, value, hdferr)
+!!    INTEGER(HID_T)  , INTENT(IN)  :: plid
+!!    CHARACTER(LEN=*), INTENT(IN)  :: name
+!!    TYPE(C_PTR)     , INTENT(IN)  :: value
+!!    INTEGER         , INTENT(OUT) :: hdferr
+!*****
+  SUBROUTINE h5pset_ptr(prp_id, name, value, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+    TYPE(C_PTR), INTENT(IN) :: value      ! Property value
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+    INTEGER :: name_len
+
+    name_len = LEN(name)
+    hdferr = h5pset_c(prp_id, name, name_len, value)
+
+  END SUBROUTINE h5pset_ptr
+!
+!****s* H5P (F03)/h5pget_f_F03
+!
+! NAME
+!  h5pget_f (F03)
+!
+! PURPOSE
+!  Queries the value of a property.
+!
+! Inputs:
+!  prp_id  - Property list identifier to modify
+!  name    - Name of property to get
+!  value   - Pointer to a location to which to copy the value of of the property
+! Outputs:
+!  hdferr  - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002
+!
+! Fortran2003 Interface:
+!!  SUBROUTINE h5pget_f(plid, name, value, hdferr)
+!!    INTEGER(HID_T)  , INTENT(IN)  :: plid
+!!    CHARACTER(LEN=*), INTENT(IN)  :: name
+!!    TYPE(C_PTR)     , INTENT(OUT) :: value
+!!    INTEGER         , INTENT(OUT) :: hdferr
+!*****
+  SUBROUTINE h5pget_ptr(prp_id, name, value, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+    TYPE(C_PTR), INTENT(OUT) :: value     ! Property value
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+    INTEGER :: name_len
+
+    name_len = LEN(name)
+    hdferr = h5pget_c(prp_id, name, name_len, value)
+
+  END SUBROUTINE h5pget_ptr
+
+
+!
+!****s* H5P (F03)/h5pregister_f_F90
+!
+! NAME
+!  h5pregister
+!
+! PURPOSE
+!  Registers a permanent property with a property list class.
+!
+! Inputs:
+!  class  - Property list class identifier
+!  name   - Name of property to register
+!  size   - Size of the property value
+!  value  - Property value, supported types are:
+!             INTEGER
+!             REAL
+!             DOUBLE PRECISION
+!             CHARACTER(LEN=*)
+!
+! Outputs:
+!  hdferr - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 10, 2002
+!
+! Fortran90 Interface:
+!!  SUBROUTINE h5pregister_f(class, name, size, value, hdferr)
+!!    INTEGER(HID_T)  , INTENT(IN)  :: class
+!!    CHARACTER(LEN=*), INTENT(IN)  :: name
+!!    INTEGER(SIZE_T) , INTENT(IN)  :: size
+!!    TYPE            , INTENT(IN)  :: value
+!!    INTEGER         , INTENT(OUT) :: hdferr  
+!*****
+  SUBROUTINE h5pregister_integer(class, name, size, value, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: class    ! Property list class identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of property to register
+    INTEGER(SIZE_T), INTENT(IN) :: size    ! Size of the property value
+    INTEGER,   INTENT(IN), TARGET :: value ! Property value
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+    INTEGER :: name_len
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(value)
+
+    name_len = LEN(name)
+    hdferr = h5pregister_c(class, name, name_len, size, f_ptr)
+
+  END SUBROUTINE h5pregister_integer
+
+  SUBROUTINE h5pregister_real(class, name, size, value, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: class   ! Property list class identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to register
+    INTEGER(SIZE_T), INTENT(IN) :: size   ! size of the property value
+    REAL,   INTENT(IN), TARGET :: value   ! Property value
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+    INTEGER :: name_len
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(value)
+
+    name_len = LEN(name)
+    hdferr = h5pregister_c(class, name, name_len, size, f_ptr)
+
+  END SUBROUTINE h5pregister_real
+
+  SUBROUTINE h5pregister_char(class, name, size, value, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: class     ! Property list class identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name    ! Name of property to register
+    INTEGER(SIZE_T), INTENT(IN) :: size     ! size of the property value
+    CHARACTER(LEN=*),   INTENT(IN) :: value ! Property value
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+    INTEGER :: name_len
+
+    INTEGER :: i
+    CHARACTER(LEN=1), ALLOCATABLE, DIMENSION(:), TARGET :: chr
+    INTEGER :: chr_len
+
+    TYPE(C_PTR) :: f_ptr
+    ! To resolve Issue #1 outlined in the preamble of this file we
+    ! need to pack the character string into an array.
+
+    chr_len = LEN(value)
+    ALLOCATE(chr(1:chr_len), STAT=hdferr)
+    IF (hdferr .NE. 0) THEN
+       hdferr = -1
+       RETURN
+    ENDIF
+
+    DO i = 1, chr_len
+       chr(i) = value(i:i)
+    ENDDO
+
+    f_ptr = C_LOC(chr(1)(1:1))
+
+    name_len = LEN(name)
+    hdferr = h5pregister_c(class, name, name_len, size, f_ptr)
+    DEALLOCATE(chr)
+  END SUBROUTINE h5pregister_char
+!
+!****s* H5P (F03)/h5pregister_f_F03
+!
+! NAME
+!  h5pregister (F03)
+!
+! PURPOSE
+!  Registers a permanent property with a property list class.
+!
+! Inputs:
+!  class  - Property list class identifier
+!  name   - Name of property to register
+!  size   - Size of the property value
+!  value  - Pointer to value to set the property to
+!
+! Outputs:
+!  hdferr - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  June 24, 2008
+!
+! Fortran2003 Interface:
+!!  SUBROUTINE h5pregister_f(class, name, size, value, hdferr)
+!!    INTEGER(HID_T)  , INTENT(IN)  :: class
+!!    CHARACTER(LEN=*), INTENT(IN)  :: name
+!!    INTEGER(SIZE_T) , INTENT(IN)  :: size
+!!    TYPE(C_PTR)     , INTENT(IN)  :: value
+!!    INTEGER         , INTENT(OUT) :: hdferr  
+!*****
+
+  SUBROUTINE h5pregister_ptr(class, name, size, value, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: class   ! Property list class identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to register
+    INTEGER(SIZE_T), INTENT(IN) :: size   ! Size of the property value
+    TYPE(C_PTR), INTENT(IN) :: value      ! Property value
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+    INTEGER :: name_len
+
+    name_len = LEN(name)
+    hdferr = h5pregister_c(class, name, name_len, size, value)
+  END SUBROUTINE h5pregister_ptr
+
+!
+!****s* H5P (F03)/h5pinsert_f_F90
+!
+! NAME
+!  h5pinsert  (f90)
+!
+! PURPOSE
+!  Registers a temporary property with a property list class.
+!
+! Inputs:
+!  plist  - Property list class identifier
+!  name   - Name of property to insert
+!  size   - Size of the property value
+!  value  - Property value, supported types are:
+!             INTEGER
+!             REAL
+!             DOUBLE PRECISION
+!             CHARACTER(LEN=*)
+! Outputs:
+!  hdferr - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  October 10, 2002
+!
+! Fortran90 Interface:
+!!  SUBROUTINE h5pinsert_f
+!!    INTEGER(HID_T)  , INTENT(IN)  :: plist
+!!    CHARACTER(LEN=*), INTENT(IN)  :: name
+!!    INTEGER(SIZE_T) , INTENT(IN)  :: size
+!!    TYPE            , INTENT(IN)  :: value
+!!    INTEGER         , INTENT(OUT) :: hdferr
+!*****
+  SUBROUTINE h5pinsert_integer(plist, name, size, value, hdferr)
+    USE iso_c_binding
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist    ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of property to insert
+    INTEGER(SIZE_T), INTENT(IN) :: size    ! Size of the property value
+    INTEGER,   INTENT(IN), TARGET :: value ! Property value
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+    INTEGER :: name_len
+    TYPE(c_ptr) :: f_ptr
+
+    f_ptr = c_loc(value)
+
+    name_len = LEN(name)
+    hdferr = h5pinsert_c(plist, name , name_len, size, f_ptr)
+  END SUBROUTINE h5pinsert_integer
+
+  SUBROUTINE h5pinsert_real(plist, name, size, value, hdferr)
+    USE iso_c_binding
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist   ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to insert
+    INTEGER(SIZE_T), INTENT(IN) :: size   ! Size of the property value
+    REAL,   INTENT(IN), TARGET :: value   ! Property value
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+    INTEGER :: name_len
+    TYPE(c_ptr) :: f_ptr
+
+    f_ptr = c_loc(value)
+
+    name_len = LEN(name)
+    hdferr = h5pinsert_c(plist, name , name_len, size, f_ptr)
+
+  END SUBROUTINE h5pinsert_real
+
+  SUBROUTINE h5pinsert_char(plist, name, size, value, hdferr)
+    USE iso_c_binding
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist      ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name     ! Name of property to insert
+    INTEGER(SIZE_T), INTENT(IN) :: size      ! Size of property value
+    CHARACTER(LEN=*),   INTENT(IN) :: value  ! Property value
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    INTEGER :: name_len
+
+    INTEGER :: i
+    CHARACTER(LEN=1), ALLOCATABLE, DIMENSION(:), TARGET :: chr
+    INTEGER :: chr_len
+
+    TYPE(c_ptr) :: f_ptr
+    ! To resolve Issue #1 outlined in the preamble of this file we
+    ! need to pack the character string into an array.
+
+    chr_len = LEN(value)
+    ALLOCATE(chr(1:chr_len), STAT=hdferr)
+    IF (hdferr .NE. 0) THEN
+       hdferr = -1
+       RETURN
+    ENDIF
+
+    DO i = 1, chr_len
+       chr(i) = value(i:i)
+    ENDDO
+
+    f_ptr = C_LOC(chr(1)(1:1))
+
+    name_len = LEN(name)
+    hdferr = h5pinsert_c(plist, name , name_len, size, f_ptr)
+
+    DEALLOCATE(chr)
+
+  END SUBROUTINE h5pinsert_char
+
+!
+!****s* H5P (F03)/h5pinsert_f_F03
+!
+! NAME
+!  h5pinsert  (f03)
+!
+! PURPOSE
+!  Registers a temporary property with a property list class.
+!
+! Inputs:
+!  plist  - Property list class identifier
+!  name   - Name of property to insert
+!  size   - Size of the property value
+!  value  - Pointer to new value pointer for the property being modified
+!
+! Outputs:
+!  hdferr - Returns 0 if successful and -1 if fails
+!
+! AUTHOR 
+!  M. Scot Breitenfeld
+!  June 24, 2008
+!
+! Fortran90 Interface:
+!!  SUBROUTINE h5pinsert_f
+!!    INTEGER(HID_T)  , INTENT(IN)  :: plist
+!!    CHARACTER(LEN=*), INTENT(IN)  :: name
+!!    INTEGER(SIZE_T) , INTENT(IN)  :: size
+!!    TYPE(C_PTR)     , INTENT(IN)  :: value
+!!    INTEGER         , INTENT(OUT) :: hdferr
+!*****
+  SUBROUTINE h5pinsert_ptr(plist, name, size, value, hdferr)
+    USE iso_c_binding
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist  ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name ! Name of property to insert
+    INTEGER(SIZE_T), INTENT(IN) :: size  ! Size of property value
+    TYPE(c_ptr),   INTENT(IN) :: value   ! Property value
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+    INTEGER :: name_len
+
+    name_len = LEN(name)
+    hdferr = h5pinsert_c(plist, name , name_len, size, value)
+  END SUBROUTINE h5pinsert_ptr
+!
+!****s* H5P (F03)/h5pcreate_class_f_F03
+!
+! NAME
+!  h5pcreate_class_f
+!
+! PURPOSE
+!  Create a new property list class
+!
+! Inputs:
+!  parent  - Parent property list class identifier
+!            Possible values include:
+!              H5P_ROOT_F
+!              H5P_FILE_CREATE_F
+!              H5P_FILE_ACCESS_F
+!              H5P_DATASET_CREATE_F
+!              H5P_DATASET_XFER_F
+!              H5P_FILE_MOUNT_F
+!  name    - Name of property to create
+!
+! Outputs:
+!  class   - Property list class identifier
+!  hdferr  - Returns 0 if successful and -1 if fails
+!
+! Optional parameters:
+!  H5P_cls_create_func_t (create) - Callback routine called when a property list is created
+!  create_data 	                  - User pointer to any class creation information needed
+!  H5P_cls_copy_func_t   (copy)   - Callback routine called when a property list is copied
+!  copy_data 	                  - User pointer to any class copy information needed
+!  H5P_cls_close_func_t  (close)  - Callback routine called when a property list is being closed
+!  close_data 	                  - User pointer to any class close information needed
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002
+!
+! HISTORY
+!  Added callback arguments
+!  M. Scot Breitenfeld, July 3, 2008
+!
+! Fortran2003 Interface:
+  SUBROUTINE h5pcreate_class_f(parent, name, class, hdferr, create, create_data, copy, copy_data, close, close_data)
+    USE iso_c_binding
+    IMPLICIT NONE
+    INTEGER(HID_T)  , INTENT(IN)  :: parent
+    CHARACTER(LEN=*), INTENT(IN)  :: name
+    INTEGER(HID_T)  , INTENT(OUT) :: class
+    INTEGER         , INTENT(OUT) :: hdferr
+    TYPE(C_PTR)     , OPTIONAL    :: create_data, copy_data, close_data
+    TYPE(C_FUNPTR)  , OPTIONAL    :: create, copy, close
+!*****
+    INTEGER :: name_len
+    TYPE(C_PTR) :: create_data_default, copy_data_default, close_data_default
+    TYPE(C_FUNPTR) :: create_default, copy_default, close_default
+    INTERFACE
+       INTEGER FUNCTION h5pcreate_class_c(parent, name, name_len, class, &
+            create, create_data, &
+            copy, copy_data, &
+            close, close_data)
+
+         USE iso_c_binding
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDCLOSEF90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PCREATE_CLASS_C'::h5pcreate_class_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: parent
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+         INTEGER(HID_T), INTENT(OUT) :: class
+         TYPE(C_PTR), VALUE :: create_data, copy_data, close_data
+         TYPE(C_FUNPTR), VALUE :: create, copy, close
+       END FUNCTION h5pcreate_class_c
+    END INTERFACE
+    name_len = LEN(name)
+
+    create_default = c_null_funptr     !fix:scot
+    create_data_default = c_null_ptr
+    copy_default = c_null_funptr    !fix:scot
+    copy_data_default = c_null_ptr
+    close_default = c_null_funptr   !fix:scot
+    close_data_default = c_null_ptr
+
+    IF(PRESENT(create)) create_default = create
+    IF(PRESENT(create_data)) create_data_default = create_data
+    IF(PRESENT(copy)) copy_default = copy
+    IF(PRESENT(copy_data)) copy_data_default = copy_data
+    IF(PRESENT(close)) close_default = close
+    IF(PRESENT(close_data)) close_data_default = close_data
+
+    hdferr = h5pcreate_class_c(parent, name , name_len, class, &
+         create_default, create_data_default, &
+         copy_default, copy_data_default, &
+         close_default, close_data_default)
+
+  END SUBROUTINE h5pcreate_class_f
+
+END MODULE H5P_PROVISIONAL
+
diff --git a/fortran/src/H5Pff_F90.f90 b/fortran/src/H5Pff_F90.f90
new file mode 100644
index 0000000..ebdd185
--- /dev/null
+++ b/fortran/src/H5Pff_F90.f90
@@ -0,0 +1,950 @@
+!****h* ROBODoc/H5P (_F90)
+!
+! NAME
+!  H5P_PROVISIONAL
+!
+! PURPOSE
+!
+!  This file contains Fortran 90 interfaces for H5P functions. It contains
+!  the same functions as H5Pff_F03.f90 but excludes the Fortran 2003 functions
+!  and the interface listings. This file will be compiled instead of H5Pff_F03.f90
+!  if Fortran 2003 functions are not enabled.
+!
+! COPYRIGHT
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!  Copyright by The HDF Group.                                               *
+!  Copyright by the Board of Trustees of the University of Illinois.         *
+!  All rights reserved.                                                      *
+!  *
+!  This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!  terms governing use, modification, and redistribution, is contained in    *
+!  the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!  of the source code distribution tree; Copyright.html can be found at the  *
+!  root level of an installed copy of the electronic HDF5 document set and   *
+!  is linked from the top-level documents page.  It can also be found at     *
+!  http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!  access to either file, you may request a copy from help at hdfgroup.org.     *
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5P function you must add the function name to the
+!  Windows dll file '*hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!*****
+
+MODULE H5P_PROVISIONAL
+
+  USE H5GLOBAL
+
+  INTERFACE h5pset_fill_value_f
+     MODULE PROCEDURE h5pset_fill_value_integer
+     MODULE PROCEDURE h5pset_fill_value_real
+     MODULE PROCEDURE h5pset_fill_value_char
+  END INTERFACE
+
+  INTERFACE h5pget_fill_value_f
+     MODULE PROCEDURE h5pget_fill_value_integer
+     MODULE PROCEDURE h5pget_fill_value_real
+     MODULE PROCEDURE h5pget_fill_value_char
+  END INTERFACE
+
+  INTERFACE h5pset_f
+     MODULE PROCEDURE h5pset_integer
+     MODULE PROCEDURE h5pset_real
+     MODULE PROCEDURE h5pset_char
+  END INTERFACE
+
+  INTERFACE h5pget_f
+     MODULE PROCEDURE h5pget_integer
+     MODULE PROCEDURE h5pget_real
+     MODULE PROCEDURE h5pget_char
+  END INTERFACE
+
+  INTERFACE h5pregister_f
+     MODULE PROCEDURE h5pregister_integer
+     MODULE PROCEDURE h5pregister_real
+     MODULE PROCEDURE h5pregister_char
+  END INTERFACE
+
+  INTERFACE h5pinsert_f
+     MODULE PROCEDURE h5pinsert_integer
+     MODULE PROCEDURE h5pinsert_real
+     MODULE PROCEDURE h5pinsert_char
+  END INTERFACE
+
+CONTAINS
+!
+!****s* H5P (F90)/h5pset(get)fill_value_f
+!
+! NAME
+!  h5pset(get)fill_value_f
+!
+! PURPOSE
+!  Sets(gets) fill value for a dataset creation property list
+!
+! INPUTS
+!  prp_id 	 - dataset creation property list identifier
+!  type_id 	 - datatype identifier for fill value
+!  fillvalue 	 - fill value
+! OUTPUTS
+!  type_id	- datatype identifier for fill value
+!  fillvalue	- fill value
+!  hdferr 	- error code
+!                  Success:  0
+!                  Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 14, 2001
+!
+! NOTES
+!  h5pset(get)fill_value_f function is overloaded to support
+!  INTEGER, REAL, DOUBLE PRECISION and CHARACTER dtatypes.
+!
+! SOURCE
+  SUBROUTINE h5pset_fill_value_integer(prp_id, type_id, fillvalue, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
+                                          ! of fillvalue datatype
+                                          ! (in memory)
+    INTEGER, INTENT(IN) :: fillvalue      ! Fillvalue
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5pset_fill_value_integer_c(prp_id, type_id, fillvalue)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FILL_VALUE_INTEGER_C'::h5pset_fill_value_integer_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER(HID_T), INTENT(IN) :: type_id
+         INTEGER, INTENT(IN) :: fillvalue
+       END FUNCTION h5pset_fill_value_integer_c
+    END INTERFACE
+
+    hdferr = h5pset_fill_value_integer_c(prp_id, type_id, fillvalue)
+  END SUBROUTINE h5pset_fill_value_integer
+
+
+  SUBROUTINE h5pget_fill_value_integer(prp_id, type_id, fillvalue, &
+       hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
+    INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
+                                          ! of fillvalue datatype
+                                          ! (in memory)
+    INTEGER, INTENT(IN) :: fillvalue   ! Fillvalue
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+    INTERFACE
+       INTEGER FUNCTION h5pget_fill_value_integer_c(prp_id, type_id, fillvalue)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FILL_VALUE_INTEGER_C'::h5pget_fill_value_integer_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER(HID_T), INTENT(IN) :: type_id
+         INTEGER :: fillvalue
+       END FUNCTION h5pget_fill_value_integer_c
+    END INTERFACE
+
+    hdferr = h5pget_fill_value_integer_c(prp_id, type_id, fillvalue)
+  END SUBROUTINE h5pget_fill_value_integer
+
+
+  SUBROUTINE h5pset_fill_value_real(prp_id, type_id, fillvalue, &
+       hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
+                                          ! of fillvalue datatype
+                                          ! (in memory)
+    REAL, INTENT(IN) :: fillvalue   ! Fillvalue
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+    INTERFACE
+       INTEGER FUNCTION h5pset_fill_value_real_c(prp_id, type_id, fillvalue)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FILL_VALUE_REAL_C'::h5pset_fill_value_real_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER(HID_T), INTENT(IN) :: type_id
+         REAL, INTENT(IN) :: fillvalue
+       END FUNCTION h5pset_fill_value_real_c
+    END INTERFACE
+
+    hdferr = h5pset_fill_value_real_c(prp_id, type_id, fillvalue)
+  END SUBROUTINE h5pset_fill_value_real
+
+
+  SUBROUTINE h5pget_fill_value_real(prp_id, type_id, fillvalue, &
+       hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
+                                          ! of fillvalue datatype
+                                          ! (in memory)
+    REAL, INTENT(IN) :: fillvalue   ! Fillvalue
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+
+    INTERFACE
+       INTEGER FUNCTION h5pget_fill_value_real_c(prp_id, type_id, fillvalue)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FILL_VALUE_REAL_C'::h5pget_fill_value_real_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER(HID_T), INTENT(IN) :: type_id
+         REAL :: fillvalue
+       END FUNCTION h5pget_fill_value_real_c
+    END INTERFACE
+
+    hdferr = h5pget_fill_value_real_c(prp_id, type_id, fillvalue)
+  END SUBROUTINE h5pget_fill_value_real
+
+  SUBROUTINE h5pset_fill_value_char(prp_id, type_id, fillvalue, &
+       hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
+                                          ! of fillvalue datatype
+                                          ! (in memory)
+    CHARACTER, INTENT(IN) :: fillvalue    ! Fillvalue
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+    INTERFACE
+       INTEGER FUNCTION h5pset_fill_valuec_c(prp_id, type_id, fillvalue)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_FILL_VALUEC_C'::h5pset_fill_valuec_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: fillvalue
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER(HID_T), INTENT(IN) :: type_id
+         CHARACTER, INTENT(IN) :: fillvalue
+       END FUNCTION h5pset_fill_valuec_c
+    END INTERFACE
+
+    hdferr = h5pset_fill_valuec_c(prp_id, type_id, fillvalue)
+  END SUBROUTINE h5pset_fill_value_char
+
+  SUBROUTINE h5pget_fill_value_char(prp_id, type_id, fillvalue, &
+       hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
+                                          ! of fillvalue datatype
+                                          ! (in memory)
+    CHARACTER, INTENT(IN) :: fillvalue    ! Fillvalue
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+
+    INTERFACE
+       INTEGER FUNCTION h5pget_fill_valuec_c(prp_id, type_id, fillvalue)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_FILL_VALUEC_C'::h5pget_fill_valuec_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: fillvalue
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         INTEGER(HID_T), INTENT(IN) :: type_id
+         CHARACTER :: fillvalue
+       END FUNCTION h5pget_fill_valuec_c
+    END INTERFACE
+
+    hdferr = h5pget_fill_valuec_c(prp_id, type_id, fillvalue)
+  END SUBROUTINE h5pget_fill_value_char
+!
+!****s* H5P (F90)/h5pset_integer
+!
+! NAME
+!  h5pset_integer
+!
+! PURPOSE
+!  Sets a property list value
+!
+! INPUTS
+!  prp_id 	 - iproperty list identifier to modify
+!  name 	 - name of property to modify
+!  value 	 - value to set property to
+! OUTPUTS
+!  hdferr:	 - error code
+!                   Success:  0
+!                   Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002
+!
+! SOURCE
+  SUBROUTINE h5pset_integer(prp_id, name, value, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+    INTEGER, INTENT(IN) :: value          ! Property value
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
+    INTEGER :: name_len
+
+    INTERFACE
+       INTEGER FUNCTION h5pset_integer_c(prp_id, name, name_len, value)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_INTEGER_C'::h5pset_integer_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+         INTEGER, INTENT(IN) :: value
+       END FUNCTION h5pset_integer_c
+    END INTERFACE
+
+    name_len = LEN(name)
+    hdferr = h5pset_integer_c(prp_id, name , name_len, value)
+  END SUBROUTINE h5pset_integer
+
+!
+!****s* H5P (F90)/h5pset_real
+!
+! NAME
+!  h5pset_real
+!
+! PURPOSE
+!  Sets a property list value
+!
+! INPUTS
+!  prp_id 	 - iproperty list identifier to modify
+!  name 	 - name of property to modify
+!  value 	 - value to set property to
+! OUTPUTS
+!  hdferr:	 - error code
+!                   Success:  0
+!                   Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002
+!
+! SOURCE
+  SUBROUTINE h5pset_real(prp_id, name, value, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+    REAL, INTENT(IN) :: value             ! Property value
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
+    INTEGER :: name_len
+
+    INTERFACE
+       INTEGER FUNCTION h5pset_real_c(prp_id, name, name_len, value)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSET_REAL_C'::h5pset_real_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+         REAL, INTENT(IN) :: value
+       END FUNCTION h5pset_real_c
+    END INTERFACE
+
+    name_len = LEN(name)
+    hdferr = h5pset_real_c(prp_id, name , name_len, value)
+  END SUBROUTINE h5pset_real
+
+!****s* H5P (F90)/h5pset_char
+!
+! NAME
+!  h5pset_char
+!
+! PURPOSE
+!  Sets a property list value
+!
+! INPUTS
+!  prp_id 	 - iproperty list identifier to modify
+!  name 	 - name of property to modify
+!  value 	 - value to set property to
+! OUTPUTS
+!  hdferr	 - error code
+!                   Success:  0
+!                   Failure: -1
+! OPTIONAL PARAMETERS
+!  NONE
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002
+! SOURCE
+  SUBROUTINE h5pset_char(prp_id, name, value, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id    ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name    ! Name of property to modify
+    CHARACTER(LEN=*),   INTENT(IN) :: value ! Property value
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+!*****
+    INTEGER :: name_len
+    INTEGER :: value_len
+
+    INTERFACE
+       INTEGER FUNCTION h5psetc_c(prp_id, name, name_len, value, value_len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PSETC_C'::h5psetc_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         !DEC$ATTRIBUTES reference :: value
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+         CHARACTER(LEN=*), INTENT(IN) :: value
+         INTEGER, INTENT(IN)         :: value_len
+       END FUNCTION h5psetc_c
+    END INTERFACE
+
+    name_len = LEN(name)
+    value_len = LEN(value)
+    hdferr = h5psetc_c(prp_id, name , name_len, value, value_len)
+  END SUBROUTINE h5pset_char
+
+!****s* H5P (F90)/h5pget_integer
+!
+! NAME
+!  h5pget_integer
+!
+! PURPOSE
+!  Gets a property list value
+!
+! INPUTS
+!  prp_id 	 - iproperty list identifier to modify
+!  name 	 - name of property to modify
+! OUTPUTS
+!  value 	 - value of property
+!  hdferr	 - error code
+!                   Success:  0
+!                   Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002
+!
+! SOURCE
+  SUBROUTINE h5pget_integer(prp_id, name, value, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+    INTEGER,   INTENT(OUT) :: value       ! Property value
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
+    INTEGER :: name_len
+
+    INTERFACE
+       INTEGER FUNCTION h5pget_integer_c(prp_id, name, name_len, value)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_INTEGER_C'::h5pget_integer_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+         INTEGER, INTENT(OUT) :: value
+       END FUNCTION h5pget_integer_c
+    END INTERFACE
+
+    name_len = LEN(name)
+    hdferr = h5pget_integer_c(prp_id, name , name_len, value)
+  END SUBROUTINE h5pget_integer
+
+!
+!****s* H5P (F90)/h5pget_real
+!
+! NAME
+!  h5pget_real
+!
+! PURPOSE
+!  Gets a property list value
+!
+! INPUTS
+!  prp_id 	 - iproperty list identifier to modify
+!  name 	 - name of property to modify
+! OUTPUTS
+!  value 	 - value of property
+!  hdferr	 - error code
+!                   Success:  0
+!                   Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002
+! SOURCE
+  SUBROUTINE h5pget_real(prp_id, name, value, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+    REAL,   INTENT(OUT) :: value          ! Property value
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
+    INTEGER :: name_len
+
+    INTERFACE
+       INTEGER FUNCTION h5pget_real_c(prp_id, name, name_len, value)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGET_REAL_C'::h5pget_real_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+         REAL, INTENT(OUT) :: value
+       END FUNCTION h5pget_real_c
+    END INTERFACE
+
+    name_len = LEN(name)
+    hdferr = h5pget_real_c(prp_id, name , name_len, value)
+  END SUBROUTINE h5pget_real
+
+!
+!****s* H5P (F90)/h5pget_char
+!
+! NAME
+!  h5pget_char
+!
+! PURPOSE
+!  Gets a property list value
+!
+! INPUTS
+!  prp_id 	 - iproperty list identifier to modify
+!  name 	 - name of property to modify
+! OUTPUTS
+!  value 	 - value of property
+!  hdferr	 - error code
+!                   Success:  0
+!                   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002
+!
+! SOURCE
+  SUBROUTINE h5pget_char(prp_id, name, value, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: prp_id     ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name     ! Name of property to modify
+    CHARACTER(LEN=*),   INTENT(OUT) :: value ! Property value
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+!*****
+    INTEGER :: name_len
+    INTEGER :: value_len
+
+    INTERFACE
+       INTEGER FUNCTION h5pgetc_c(prp_id, name, name_len, value, value_len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PGETC_C'::h5pgetc_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         !DEC$ATTRIBUTES reference :: value
+         INTEGER(HID_T), INTENT(IN) :: prp_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+         CHARACTER(LEN=*), INTENT(OUT) :: value
+         INTEGER, INTENT(IN)         :: value_len
+       END FUNCTION h5pgetc_c
+    END INTERFACE
+
+    name_len = LEN(name)
+    value_len = LEN(value)
+    hdferr = h5pgetc_c(prp_id, name , name_len, value, value_len)
+  END SUBROUTINE h5pget_char
+
+!
+!****s* H5P (F90)/h5pregister_integer
+!
+! NAME
+!  h5pregister_integer
+!
+! PURPOSE
+!  Registers a permanent property with a property list class.
+!
+! INPUTS
+!  class 	 - property list class to register
+!  permanent property within
+!  name 	 - name of property to register
+!  size 	 - size of property in bytes
+!  value 	 - default value for property in newly
+!  created property lists
+! OUTPUTS
+!  hdferr	 - error code
+!                   Success:  0
+!                   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 10, 2002
+!
+! SOURCE
+  SUBROUTINE h5pregister_integer(class, name, size, value, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: class   ! Property list class identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to register
+    INTEGER(SIZE_T), INTENT(IN) :: size   ! Size of the property value
+    INTEGER,   INTENT(IN) :: value        ! Property value
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
+    INTEGER :: name_len
+
+    INTERFACE
+       INTEGER FUNCTION h5pregister_integer_c(class, name, name_len, size, value)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PREGISTER_INTEGER_C'::h5pregister_integer_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: class
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+         INTEGER(SIZE_T), INTENT(IN) :: size
+         INTEGER, INTENT(IN) :: value
+       END FUNCTION h5pregister_integer_c
+    END INTERFACE
+
+    name_len = LEN(name)
+    hdferr = h5pregister_integer_c(class, name , name_len, size, value)
+  END SUBROUTINE h5pregister_integer
+
+!****s* H5P (F90)/h5pregister_real
+!
+! NAME
+!
+!  h5pregister_real
+!
+! PURPOSE 	Registers a permanent property with a property list class.
+!
+! INPUTS
+!  class 	 - property list class to register
+!                  permanent property within
+!  name 	 - name of property to register
+!  size 	 - size of property in bytes
+!  value 	 - default value for property in newly
+!                  created property lists
+! OUTPUTS
+!  hdferr	 - error code
+!                   Success:  0
+!                   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  October 10, 2002
+! SOURCE
+  SUBROUTINE h5pregister_real(class, name, size, value, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: class   ! Property list class identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to register
+    INTEGER(SIZE_T), INTENT(IN) :: size   ! size of the property value
+    REAL,   INTENT(IN) :: value           ! Property value
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
+    INTEGER :: name_len
+
+    INTERFACE
+       INTEGER FUNCTION h5pregister_real_c(class, name, name_len, size, value)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PREGISTER_REAL_C'::h5pregister_real_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: class
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+         INTEGER(SIZE_T), INTENT(IN) :: size
+         REAL, INTENT(IN) :: value
+       END FUNCTION h5pregister_real_c
+    END INTERFACE
+
+    name_len = LEN(name)
+    hdferr = h5pregister_real_c(class, name , name_len, size, value)
+  END SUBROUTINE h5pregister_real
+
+!
+!****s* H5P (F90)/h5pregister_char
+!
+! NAME
+!  h5pregister_char
+!
+! PURPOSE
+!  Registers a permanent property with a property list class.
+!
+! INPUTS
+!  class 	 - property list class to register
+!                  permanent property within
+!  name 	 - name of property to register
+!  size 	 - size of property in bytes
+!  value 	 - default value for property in newly
+!                  created property lists
+! OUTPUTS
+!  hdferr	 - error code
+!                   Success:  0
+!                   Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  October 10, 2002
+! SOURCE
+  SUBROUTINE h5pregister_char(class, name, size, value, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: class     ! Property list class identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name    ! Name of property to register
+    INTEGER(SIZE_T), INTENT(IN) :: size     ! size of the property value
+    CHARACTER(LEN=*),   INTENT(IN) :: value ! Property value
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+!*****
+    INTEGER :: name_len
+    INTEGER :: value_len
+
+    INTERFACE
+       INTEGER FUNCTION h5pregisterc_c(class, name, name_len, size, value, &
+            value_len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PREGISTERC_C'::h5pregisterc_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         !DEC$ATTRIBUTES reference :: value
+         INTEGER(HID_T), INTENT(IN) :: class
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+         INTEGER(SIZE_T), INTENT(IN) :: size
+         CHARACTER(LEN=*), INTENT(IN) :: value
+         INTEGER, INTENT(IN)          :: value_len
+       END FUNCTION h5pregisterc_c
+    END INTERFACE
+
+    name_len = LEN(name)
+    value_len = LEN(value)
+    hdferr = h5pregisterc_c(class, name , name_len, size, value, value_len)
+  END SUBROUTINE h5pregister_char
+!
+!****s* H5P (F90)/h5pinsert_integer
+!
+! NAME
+!  h5pinsert_integer
+!
+! PURPOSE
+!  Registers a temporary property with a property list class.
+!
+! INPUTS
+!  plist 	 - property list identifier
+!  name 	 - name of property to insert
+!  size 	 - size of property in bytes
+!  value 	 - initial value for the property
+! OUTPUTS
+!  hdferr	 - error code
+!                   Success:  0
+!                   Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  October 10, 2002
+! SOURCE
+  SUBROUTINE h5pinsert_integer(plist, name, size, value, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist   ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to insert
+    INTEGER(SIZE_T), INTENT(IN) :: size   ! Size of the property value
+    INTEGER,   INTENT(IN) :: value        ! Property value
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
+    INTEGER :: name_len
+
+    INTERFACE
+       INTEGER FUNCTION h5pinsert_integer_c(plist, name, name_len, size, value)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PINSERT_INTEGER_C'::h5pinsert_integer_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: plist
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+         INTEGER(SIZE_T), INTENT(IN) :: size
+         INTEGER, INTENT(IN) :: value
+       END FUNCTION h5pinsert_integer_c
+    END INTERFACE
+
+    name_len = LEN(name)
+    hdferr = h5pinsert_integer_c(plist, name , name_len, size, value)
+  END SUBROUTINE h5pinsert_integer
+
+!
+!****s* H5P (F90)/h5pinsert_real
+!
+! NAME
+!  h5pinsert_real
+!
+! PURPOSE
+!  Registers a temporary property with a property list class.
+!
+! INPUTS
+!  plist 	 - property list identifier
+!                  permanent property within
+!  name 	 - name of property to insert
+!  size 	 - size of property in bytes
+!  value 	 - initial value for the property
+! OUTPUTS
+!  hdferr	 - error code
+!                   Success:  0
+!                   Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  October 10, 2002
+! SOURCE
+  SUBROUTINE h5pinsert_real(plist, name, size, value, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist   ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to insert
+    INTEGER(SIZE_T), INTENT(IN) :: size   ! Size of the property value
+    REAL,   INTENT(IN) :: value           ! Property value
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
+    INTEGER :: name_len
+
+    INTERFACE
+       INTEGER FUNCTION h5pinsert_real_c(plist, name, name_len, size, value)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PINSERT_REAL_C'::h5pinsert_real_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: plist
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+         INTEGER(SIZE_T), INTENT(IN) :: size
+         REAL, INTENT(IN) :: value
+       END FUNCTION h5pinsert_real_c
+    END INTERFACE
+
+    name_len = LEN(name)
+    hdferr = h5pinsert_real_c(plist, name , name_len, size, value)
+  END SUBROUTINE h5pinsert_real
+
+
+!
+!****s* H5P (F90)/h5pinsert_char
+!
+! NAME
+!  h5pinsert_char
+!
+! PURPOSE
+!  Registers a temporary property with a property list class.
+!
+! INPUTS
+!  plist 	 - property list identifier
+!                  permanent property within
+!  name 	 - name of property to insert
+!  size 	 - size of property in bytes
+!  value 	 - initial value for the property
+! OUTPUTS
+!  hdferr	 - error code
+!                   Success:  0
+!                   Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  October 10, 2002
+! SOURCE
+SUBROUTINE h5pinsert_char(plist, name, size, value, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: plist      ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name     ! Name of property to insert
+    INTEGER(SIZE_T), INTENT(IN) :: size      ! Size of property value
+    CHARACTER(LEN=*),   INTENT(IN) :: value  ! Property value
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+!*****
+    INTEGER :: name_len
+    INTEGER :: value_len
+
+    INTERFACE
+       INTEGER FUNCTION h5pinsertc_c(plist, name, name_len, size, value, value_len)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PINSERTC_C'::h5pinsertc_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         !DEC$ATTRIBUTES reference :: value
+         INTEGER(HID_T), INTENT(IN) :: plist
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+         INTEGER(SIZE_T), INTENT(IN) :: size
+         CHARACTER(LEN=*), INTENT(IN) :: value
+         INTEGER, INTENT(IN)         :: value_len
+       END FUNCTION h5pinsertc_c
+    END INTERFACE
+
+    name_len = LEN(name)
+    value_len = LEN(value)
+    hdferr = h5pinsertc_c(plist, name , name_len, size, value, value_len)
+  END SUBROUTINE h5pinsert_char
+
+!
+!****s* H5P (F90)/h5pcreate_class_f
+!
+! NAME
+!  h5pcreate_class_f
+!
+! PURPOSE
+!  Create a new property list class
+!
+! INPUTS
+!  parent 	 - Property list identifier of the parent class
+!                  Possible values include:
+!                    H5P_ROOT_F
+!                    H5P_FILE_CREATE_F
+!                    H5P_FILE_ACCESS_F
+!                    H5P_DATASET_CREATE_F
+!                    H5P_DATASET_XFER_F
+!                    H5P_FILE_MOUNT_F
+!  name 	 - name of the class we are creating
+! OUTPUTS
+!  class 	 - property list class identifier
+!  hdferr	 - error code
+!                   Success: 0
+!                   Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002
+!
+! SOURCE
+  SUBROUTINE h5pcreate_class_f(parent, name, class, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: parent  ! parent property list class
+                                          ! identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name  ! name of property tocreate
+    INTEGER(HID_T), INTENT(OUT) :: class  ! property list class identifier
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
+    INTEGER :: name_len
+
+    INTERFACE
+       INTEGER FUNCTION h5pcreate_class_c(parent, name, name_len,&
+            class)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5PCREATE_CLASS_C'::h5pcreate_class_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: parent
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER, INTENT(IN)         :: name_len
+         INTEGER(HID_T), INTENT(OUT) :: class
+       END FUNCTION h5pcreate_class_c
+    END INTERFACE
+
+    name_len = LEN(name)
+    hdferr = h5pcreate_class_c(parent, name, name_len, class)
+
+  END SUBROUTINE h5pcreate_class_f
+
+END MODULE H5P_PROVISIONAL
+
diff --git a/fortran/src/H5Rf.c b/fortran/src/H5Rf.c
index 51a775f..0c3e5a7 100644
--- a/fortran/src/H5Rf.c
+++ b/fortran/src/H5Rf.c
@@ -1,4 +1,9 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* H5Rf/H5Rf
+ * PURPOSE
+ *   This file contains C stubs for H5R Fortran APIs
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,26 +16,35 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This files contains C stubs for H5R Fortran APIs */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include "H5f90.h"
 #include "H5Eprivate.h"
 
-/*----------------------------------------------------------------------------
- * Name:        h5rcreate_object_c
- * Purpose:     Call H5Rcreate to create a reference to an object
- * Inputs:      loc_id - file or group identifier
- *              name - name of the dataset
- *              namelen - name length
- * Outputs:     ref  - reference to the object
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              Wednesday, December 1, 1999
- *---------------------------------------------------------------------------*/
+/****if* H5Rf/h5rcreate_object_c
+ * NAME
+ *     h5rcreate_object_c
+ * PURPOSE
+ *     Call H5Rcreate to create a reference to an object
+ * INPUTS
+ *     loc_id - file or group identifier
+ *       name - name of the dataset
+ *    namelen - name length
+ * OUTPUTS
+ *     ref  - reference to the object
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  Wednesday, December 1, 1999
+ * SOURCE
+*/
 int_f
 nh5rcreate_object_c(haddr_t_f *ref, hid_t_f *loc_id, _fcd name, int_f *namelen)
+/******/
 {
      char *c_name = NULL;
      hobj_ref_t ref_c;
@@ -57,21 +71,31 @@ done:
      return ret_value;
 } /* nh5rcreate_object_c() */
 
-/*----------------------------------------------------------------------------
- * Name:        h5rcreate_region_c
- * Purpose:     Call H5Rcreate to create a reference to dataset region
+/****if* H5Rf/h5rcreate_region_c
+ * NAME
+ *        h5rcreate_region_c
+ * PURPOSE
+ *     Call H5Rcreate to create a reference to dataset region
  *              region
- * Inputs:      loc_id - file or group identifier
+ * INPUTS
+ *      loc_id - file or group identifier
  *              name - name of the dataset
  *              namelen - name length
  *              space_id - dataset space identifier
- * Outputs:     ref  - reference to the dataset region
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              Wednesday, December 1, 1999
- *---------------------------------------------------------------------------*/
+ * OUTPUTS
+ *     ref  - reference to the dataset region
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  Wednesday, December 1, 1999
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5rcreate_region_c(int_f *ref, hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *space_id)
+/******/
 {
      char *c_name = NULL;
      hdset_reg_ref_t ref_c;
@@ -98,18 +122,73 @@ done:
      return ret_value;
 } /* end nh5rcreate_region_c() */
 
-/*----------------------------------------------------------------------------
- * Name:        h5rdereference_region_c
- * Purpose:     Call H5Rdereference to dereference to dataset region
- * Inputs:      dset_id - dataset identifier
+/****if* H5Rf/h5rcreate_ptr_c
+ * NAME
+ *  h5rcreate_ptr_c
+ * PURPOSE
+ *  Call H5Rcreate to create a reference to dataset region
+ * INPUTS
+ *  loc_id    - file or group identifier
+ *  name      - name of the dataset
+ *  namelen   - name length
+ *  space_id  - dataset space identifier
+ * OUTPUTS
+ *  ref       - reference to the dataset region
+ * RETURNS
+ *  0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  June 20, 2008
+ *
+ * SOURCE
+*/
+int_f
+nh5rcreate_ptr_c (void *ref, hid_t_f *loc_id, _fcd name, int_f *namelen, int_f *ref_type, hid_t_f *space_id)
+/******/
+{
+     int ret_value = -1;
+     char *c_name;
+     size_t c_namelen;
+
+     /*
+      * Convert FORTRAN name to C name
+      */
+     c_namelen = *namelen;
+     c_name = (char *)HD5f2cstring(name, c_namelen);
+     if (c_name == NULL) return ret_value;
+
+     /*
+      * Call H5Rcreate function.
+      */
+     if(H5Rcreate(ref, (hid_t)*loc_id, c_name, (H5R_type_t)*ref_type, (hid_t)*space_id) >= 0)
+       ret_value = 0;
+
+     HDfree(c_name);
+     return ret_value;
+}
+
+/****if* H5Rf/h5rdereference_region_c
+ * NAME
+ *        h5rdereference_region_c
+ * PURPOSE
+ *     Call H5Rdereference to dereference to dataset region
+ * INPUTS
+ *      dset_id - dataset identifier
  *              ref - reference to the dataset region
- * Outputs:     obj_id - dereferenced dataset identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              Wednesday, December 1, 1999
- *---------------------------------------------------------------------------*/
+ * OUTPUTS
+ *     obj_id - dereferenced dataset identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  Wednesday, December 1, 1999
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5rdereference_region_c(hid_t_f *dset_id, int_f *ref, hid_t_f *obj_id)
+/******/
 {
      hdset_reg_ref_t ref_c;
      hid_t c_obj_id;
@@ -131,18 +210,28 @@ done:
      return ret_value;
 } /* end nh5rdereference_region_c() */
 
-/*----------------------------------------------------------------------------
- * Name:        h5rdereference_object_c
- * Purpose:     Call H5Rdereference to dereference an object
- * Inputs:      dset_id - dataset identifier
+/****if* H5Rf/h5rdereference_object_c
+ * NAME
+ *        h5rdereference_object_c
+ * PURPOSE
+ *     Call H5Rdereference to dereference an object
+ * INPUTS
+ *      dset_id - dataset identifier
  *              ref - reference to an object
- * Outputs:     obj_id - dereferenced  object identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              Wednesday, December 1, 1999
- *---------------------------------------------------------------------------*/
+ * OUTPUTS
+ *     obj_id - dereferenced  object identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  Wednesday, December 1, 1999
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5rdereference_object_c(hid_t_f *dset_id, haddr_t_f *ref, hid_t_f *obj_id)
+/******/
 {
      hid_t c_obj_id;
      hobj_ref_t ref_c = (hobj_ref_t)*ref;
@@ -161,18 +250,66 @@ done:
      return ret_value;
 } /* end nh5rdereference_object_c() */
 
-/*----------------------------------------------------------------------------
- * Name:        h5rget_region_region_object_c
- * Purpose:     Call H5Rget_region to dereference dataspace region
- * Inputs:      dset_id - dataset identifier
- *              ref - reference to the dataset region
- * Outputs:     space_id - dereferenced  dataset dataspace identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              Wednesday, December 1, 1999
- *---------------------------------------------------------------------------*/
+/****if* H5Rf/h5rdereference_ptr_c
+ * NAME
+ *        h5rdereference_ptr_c
+ * PURPOSE
+ *     Call H5Rdereference
+ * INPUTS
+ *      obj_id - Valid identifier for the file containing the
+ *                       referenced object or any object in that file.
+ *             ref_typ - The reference type of ref.
+ *                 ref - Object reference
+ * OUTPUTS
+ *     ref_obj_id - Identifier of referenced object
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  June 20, 2008
+ * HISTORY
+ *
+ * SOURCE
+*/
+int_f
+nh5rdereference_ptr_c (hid_t_f *obj_id, int_f *ref_type, void *ref, hid_t_f *ref_obj_id)
+/******/
+{
+  int ret_value = -1;
+  hid_t c_ref_obj_id;
+
+  /*
+   * Call H5Rdereference function.
+   */
+  c_ref_obj_id = H5Rdereference((hid_t)*obj_id, (H5R_type_t)*ref_type, ref);
+  if(c_ref_obj_id < 0) return ret_value;
+  *ref_obj_id = (hid_t_f)c_ref_obj_id;
+  ret_value = 0;
+  return ret_value;
+}
+
+/****if* H5Rf/h5rget_region_region_object_c
+ * NAME
+ *  h5rget_region_region_object_c
+ * PURPOSE
+ *  Call H5Rget_region to dereference dataspace region
+ * INPUTS
+ *   dset_id - dataset identifier
+ *       ref - reference to the dataset region
+ * OUTPUTS
+ *  space_id - dereferenced  dataset dataspace identifier
+ * RETURNS
+ *  0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  Wednesday, December 1, 1999
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5rget_region_region_c(hid_t_f *dset_id, int_f *ref, hid_t_f *space_id)
+/******/
 {
      hid_t c_space_id;
      hdset_reg_ref_t ref_c;
@@ -194,19 +331,29 @@ done:
      return ret_value;
 } /* end nh5rget_region_region_c() */
 
-/*----------------------------------------------------------------------------
- * Name:        h5rget_object_type_obj_c
- * Purpose:     Call H5Rget_object_type to retrieve the type of the object reference points
+/****if* H5Rf/h5rget_object_type_obj_c
+ * NAME
+ *        h5rget_object_type_obj_c
+ * PURPOSE
+ *     Call H5Rget_object_type to retrieve the type of the object reference points
  *              to
- * Inputs:      dset_id - dataset identifier
+ * INPUTS
+ *      dset_id - dataset identifier
  *              ref - reference to the dataset region
- * Outputs:     obj_type - type of dereferenced object
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              Wednesday, December 1, 1999
- *---------------------------------------------------------------------------*/
+ * OUTPUTS
+ *     obj_type - type of dereferenced object
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  Wednesday, December 1, 1999
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5rget_object_type_obj_c(hid_t_f *dset_id, haddr_t_f *ref, int_f *obj_type)
+/******/
 {
      H5O_type_t c_obj_type;
      hobj_ref_t ref_c = (hobj_ref_t)*ref;
@@ -225,22 +372,32 @@ done:
      return ret_value;
 } /* end nh5rget_object_type_obj_c() */
 
-/*----------------------------------------------------------------------------
- * Name:        h5rget_name_object_c
- * Purpose:     Call H5Rget_name for an object
- * Inputs:
+/****if* H5Rf/h5rget_name_object_c
+ * NAME
+ *        h5rget_name_object_c
+ * PURPOSE
+ *     Call H5Rget_name for an object
+ * INPUTS
+ *
  *       loc_id - Identifier for the dataset containing the reference or for the group that dataset is in.
  *          ref - An object or dataset region reference.
  *
- * Outputs:     name - A name associated with the referenced object or dataset region.
+ * OUTPUTS
+ *     name - A name associated with the referenced object or dataset region.
  *              size - The size of the name buffer.
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              March 31, 2008
- *---------------------------------------------------------------------------*/
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  March 31, 2008
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5rget_name_object_c(hid_t_f *loc_id, haddr_t_f *ref, _fcd name, size_t_f *name_len, size_t_f *size_default)
+/******/
 {
      hobj_ref_t ref_c = (hobj_ref_t)*ref;
      ssize_t c_size;
@@ -273,22 +430,32 @@ done:
      return ret_value;
 } /* end nh5rget_name_object_c() */
 
-/*----------------------------------------------------------------------------
- * Name:        h5rget_name_region_c
- * Purpose:     Call H5Rget_name for a dataset region
- * Inputs:
+/****if* H5Rf/h5rget_name_region_c
+ * NAME
+ *        h5rget_name_region_c
+ * PURPOSE
+ *     Call H5Rget_name for a dataset region
+ * INPUTS
+ *
  *       loc_id - Identifier for the dataset containing the reference or for the group that dataset is in.
  *          ref - An object or dataset region reference.
  *
- * Outputs:     name - A name associated with the referenced object or dataset region.
+ * OUTPUTS
+ *     name - A name associated with the referenced object or dataset region.
  *              size - The size of the name buffer.
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              March 31, 2008
- *---------------------------------------------------------------------------*/
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  March 31, 2008
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5rget_name_region_c(hid_t_f *loc_id, int_f *ref, _fcd name, size_t_f *name_len, size_t_f *size_default)
+/******/
 {
      hdset_reg_ref_t ref_c;
      ssize_t c_size;
@@ -321,5 +488,108 @@ done:
      if(c_buf) 
          HDfree(c_buf);
      return ret_value;
-} /* end nh5rget_name_region_c() */
+}
+
+/****if* H5Rf/h5rget_name_ptr_c
+ * NAME
+ *        h5rget_name_ptr_c
+ * PURPOSE
+ *     Call H5Rget_name
+ * INPUTS
+ *
+ *       loc_id - Identifier for the dataset containing the reference or for the group that dataset is in.
+ *     ref_type - Type of reference.
+ *          ref - An object or dataset region reference.
+ *
+ * OUTPUTS
+ *     name - A name associated with the referenced object or dataset region.
+ *     size - The size of the name buffer.
+ *
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  June 20, 2008
+ * HISTORY
+ *
+ * SOURCE
+*/
+int_f
+nh5rget_name_ptr_c (hid_t_f *loc_id, int_f *ref_type, void *ref, _fcd name, size_t_f *name_len, size_t_f *size_default)
+/******/
+{
+     int_f ret_value = -1;
+     ssize_t c_size;
+     size_t c_bufsize;
+     char *c_buf= NULL;  /* Buffer to hold C string */
+
+     c_bufsize = (size_t)*name_len+1;
+     /*
+      * Allocate buffer to hold name of an attribute
+      */
+     if ((c_buf = HDmalloc(c_bufsize)) == NULL)
+       return ret_value;
+
+     /*
+      * Call H5Rget_name function.
+      */
+     if((c_size=H5Rget_name((hid_t)*loc_id, (H5R_type_t)*ref_type, ref, c_buf, c_bufsize)) < 0){
+       if(c_buf) HDfree(c_buf);
+       return ret_value;
+     }
+     /*
+      * Convert C name to FORTRAN and place it in the given buffer
+      */
+     HD5packFstring(c_buf, _fcdtocp(name), c_bufsize-1);
+
+     *size_default = (size_t_f)c_size;
+     ret_value = 0;
+     if(c_buf) HDfree(c_buf);
+
+     return ret_value;
+}
+
+/****if* H5Rf/h5rget_obj_type_c
+ * NAME
+ *   h5rget_obj_type_c
+ * PURPOSE
+ *   Call H5Rget_obj_type
+ * INPUTS
+ *   loc_id   - Identifier for the dataset containing the reference or
+ *              for the group that dataset is in.
+ *   ref_type - Type of reference to query.
+ *   ref      - Reference to query.
+ *
+ * OUTPUTS
+ *   obj_type - Type of referenced object. 
+ *                H5G_UNKNOWN_F (-1)
+ *                H5G_LINK_F      0
+ *                H5G_GROUP_F     1
+ *                H5G_DATASET_F   2
+ *                H5G_TYPE_F      3
+ * RETURNS
+ *   0 on success, -1 on failure
+ * AUTHOR
+ *   M. Scot Breitenfeld
+ *   December 17, 2008
+ *
+ * SOURCE
+*/
+int_f
+nh5rget_obj_type_c (hid_t_f *loc_id, int_f *ref_type, void *ref, int_f *obj_type)
+/******/
+{
+  int_f ret_value = -1;
+  H5O_type_t obj_type_c;
+
+  /*
+   * Call H5Rget_obj_type function.
+   */
+  if((H5Rget_obj_type2((hid_t)*loc_id, (H5R_type_t)*ref_type, ref, &obj_type_c)) < 0)
+    return ret_value;
+
+  *obj_type = (int_f)obj_type_c;
 
+  ret_value = 0;
+  return ret_value;
+}
diff --git a/fortran/src/H5Rff.f90 b/fortran/src/H5Rff.f90
index 6c557e3..35a3ed6 100644
--- a/fortran/src/H5Rff.f90
+++ b/fortran/src/H5Rff.f90
@@ -1,3 +1,18 @@
+!****h* ROBODoc/H5R
+!
+! NAME
+!  MODULE H5R
+!
+! FILE
+!  fortran/src/H5Rff.f90
+!
+! PURPOSE
+!  This file contains Fortran interfaces for H5R functions. It includes
+!  all the functions that are independent on whether the Fortran 2003 functions
+!  are enabled or disabled.
+!
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,565 +28,164 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5R function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
 !
-! This file contains Fortran90 interfaces for H5R functions.
-!
-      MODULE H5R
-        USE H5GLOBAL
-
-! If you change the value of these parameters, do not forget to change corresponding
-! values in the H5f90.h file.
-!        INTEGER, PARAMETER :: REF_OBJ_BUF_LEN = 2
-!        INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3
-!
-!        TYPE hobj_ref_t_f
-!             INTEGER ref(REF_OBJ_BUF_LEN)
-!        END TYPE
-!
-!        TYPE hdset_reg_ref_t_f
-!             INTEGER ref(REF_REG_BUF_LEN)
-!        END TYPE
-!
-          INTERFACE h5rcreate_f
-
-            MODULE PROCEDURE h5rcreate_object_f
-            MODULE PROCEDURE h5rcreate_region_f
-
-          END INTERFACE
-
-          INTERFACE h5rdereference_f
-
-            MODULE PROCEDURE h5rdereference_object_f
-            MODULE PROCEDURE h5rdereference_region_f
-
-          END INTERFACE
-
-          INTERFACE h5rget_region_f
-
-            MODULE PROCEDURE h5rget_region_region_f
-
-          END INTERFACE
-
-          INTERFACE h5rget_object_type_f
-
-            MODULE PROCEDURE h5rget_object_type_obj_f
-
-          END INTERFACE
-
-          INTERFACE h5rget_name_f
-
-            MODULE PROCEDURE h5rget_name_object_f
-            MODULE PROCEDURE h5rget_name_region_f
-
-          END INTERFACE
-
-        CONTAINS
-
-!----------------------------------------------------------------------
-! Name:		h5rcreate_object_f
-!
-! Purpose: 	Creates reference to the object
-!
-! Inputs:
-!		loc_id		- location identifier
-!		name		- name of the object at the specified location
-! Outputs:
-!		ref		- reference to the specified object
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:		This is a module procedure for the h5rcreate_f
-!			subroutine.
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5rcreate_object_f(loc_id, name, ref, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: loc_id   ! Location identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the object at location specified
-                                                   ! by loc_id identifier
-            TYPE(hobj_ref_t_f), INTENT(OUT) :: ref   ! Object reference
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
-            INTEGER :: namelen                     ! Name length
-            INTEGER(HADDR_T) :: ref_f              ! Local buffer to pass reference
-
-!            INTEGER, EXTERNAL :: h5fcreate_object_c
-!  Interface is needed for MS FORTRAN
-!
-            INTERFACE
-              INTEGER FUNCTION h5rcreate_object_c(ref_f, loc_id, name, namelen)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RCREATE_OBJECT_C':: h5rcreate_object_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-              INTEGER(HADDR_T) :: ref_f
-              INTEGER(HID_T), INTENT(IN) :: loc_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER :: namelen
-              END FUNCTION h5rcreate_object_c
-            END INTERFACE
-
-            namelen = LEN(name)
-            ref_f = 0
-            hdferr = h5rcreate_object_c(ref_f, loc_id, name, namelen )
-            ref%ref = ref_f
-
-          END SUBROUTINE h5rcreate_object_f
-
-!----------------------------------------------------------------------
-! Name:		h5rcreate_region_f
-!
-! Purpose: 	Creates r eference to the dataset region
-!
-! Inputs:
-!		loc_id		- location identifier
-!		name		- name of the dataset at the specified location
-!		space_id	- dataspace identifier that describes selected region
-! Outputs:
-!		ref		- reference to the dataset region
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:		This is a module procedure for the h5rcreate_f
-!			subroutine.
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5rcreate_region_f(loc_id, name, space_id, ref, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: loc_id   ! Location identifier
-            CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the dataset at location specified
-                                                   ! by loc_id identifier
-            INTEGER(HID_T), INTENT(IN) :: space_id ! Dataset's dataspace identifier
-            TYPE(hdset_reg_ref_t_f), INTENT(OUT) :: ref ! Dataset region reference
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
-            INTEGER :: namelen                     ! Name length
-            INTEGER :: ref_f(REF_REG_BUF_LEN)          ! Local buffer to pass reference
+!*****
 
-!            INTEGER, EXTERNAL :: h5fcreate_region_c
-!  Interface is needed for MS FORTRAN
-!
-            INTERFACE
-              INTEGER FUNCTION h5rcreate_region_c(ref_f, loc_id, name, namelen, space_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RCREATE_REGION_C':: h5rcreate_region_c
-              !DEC$ENDIF
-              !DEC$ATTRIBUTES reference :: name
-!              INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3
-              INTEGER :: ref_f(REF_REG_BUF_LEN)
-              INTEGER(HID_T), INTENT(IN) :: loc_id
-              CHARACTER(LEN=*), INTENT(IN) :: name
-              INTEGER :: namelen
-              INTEGER(HID_T), INTENT(IN) :: space_id
-              END FUNCTION h5rcreate_region_c
-            END INTERFACE
-
-            namelen = LEN(name)
-            ref_f = 0
-            hdferr = h5rcreate_region_c(ref_f, loc_id, name, namelen, space_id )
-            ref%ref = ref_f
+MODULE H5R
+  USE H5GLOBAL
 
-          END SUBROUTINE h5rcreate_region_f
+  ! If you change the value of these parameters, do not forget to change corresponding
+  ! values in the H5f90.h file.
+  !        INTEGER, PARAMETER :: REF_OBJ_BUF_LEN = 2
+  !        INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3
+  !
+  !        TYPE hobj_ref_t_f
+  !             INTEGER ref(REF_OBJ_BUF_LEN)
+  !        END TYPE
+  !
+  !        TYPE hdset_reg_ref_t_f
+  !             INTEGER ref(REF_REG_BUF_LEN)
+  !        END TYPE
+  !
 
-!----------------------------------------------------------------------
-! Name:		h5rdereference_object_f
-!
-! Purpose: 	Opens the HDF5 object referenced
-!
-! Inputs:
-!		dset_id		- identifier of the dataset containing
-!				  reference
-!		ref		- reference to open
-! Outputs:
-!		obj_id		- object_identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:		This is a module procedure for the h5rdereference_f
-!			subroutine.
-!----------------------------------------------------------------------
+  INTERFACE h5rget_region_f
 
+     MODULE PROCEDURE h5rget_region_region_f
 
-          SUBROUTINE h5rdereference_object_f(dset_id, ref, obj_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            TYPE(hobj_ref_t_f), INTENT(IN) :: ref   ! Object reference
-            INTEGER(HID_T), INTENT(OUT) :: obj_id   ! Object identifier
-            INTEGER, INTENT(OUT) :: hdferr         ! Error code
+  END INTERFACE
 
-            INTEGER(HADDR_T) :: ref_f          ! Local buffer to pass reference
+  INTERFACE h5rget_object_type_f
 
-!            INTEGER, EXTERNAL :: h5h5rdereference_object_c
-!  Interface is needed for MS FORTRAN
-!
-            INTERFACE
-              INTEGER FUNCTION h5rdereference_object_c(dset_id, ref_f, obj_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-           !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RDEREFERENCE_OBJECT_C':: h5rdereference_object_c
-              !DEC$ENDIF
-!              INTEGER, PARAMETER :: REF_OBJ_BUF_LEN = 2
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HADDR_T) :: ref_f
-              INTEGER(HID_T), INTENT(OUT) :: obj_id
-              END FUNCTION h5rdereference_object_c
-            END INTERFACE
+     MODULE PROCEDURE h5rget_object_type_obj_f
 
-            ref_f = ref%ref
-            hdferr = h5rdereference_object_c(dset_id, ref_f, obj_id )
+  END INTERFACE
 
-          END SUBROUTINE h5rdereference_object_f
+CONTAINS
 
-!----------------------------------------------------------------------
-! Name:		h5rdereference_region_f
+!****s* H5R/h5rget_region_region_f
 !
-! Purpose: 	Opens the dataset region
+! NAME
+!  h5rget_region_region_f
 !
-! Inputs:
-!		dset_id		- identifier of the dataset containing
-!				  reference to teh regions
-!		ref		- reference to open
-! Outputs:
-!		obj_id		- dataspace identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Retrieves a dataspace with the specified region selected
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! INPUTS
+!  dset_id 	 - identifier of the dataset containing
+!                  reference to the regions
+!  ref 	         - reference to open
+! OUTPUTS
+!  space_id 	 - dataspace identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
+! HISTORY 	
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
 !
-! Comment:		This is a module procedure for the h5rdereference_f
-!			subroutine.
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5rdereference_region_f(dset_id, ref, obj_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            TYPE(hdset_reg_ref_t_f), INTENT(IN) :: ref   ! Object reference
-            INTEGER(HID_T), INTENT(OUT) :: obj_id   ! Dataspace identifier
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-            INTEGER :: ref_f(REF_REG_BUF_LEN)          ! Local buffer to pass reference
-
-!            INTEGER, EXTERNAL :: h5rdereference_region_c
-!  Interface is needed for MS FORTRAN
+! NOTES
+!  This is a module procedure for the h5rget_region_f subroutine.
 !
-            INTERFACE
-              INTEGER FUNCTION h5rdereference_region_c(dset_id, ref_f, obj_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-           !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RDEREFERENCE_REGION_C':: h5rdereference_region_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-!              INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3
-              INTEGER :: ref_f(REF_REG_BUF_LEN)
-              INTEGER(HID_T), INTENT(OUT) :: obj_id
-              END FUNCTION h5rdereference_region_c
-            END INTERFACE
-
-            ref_f = ref%ref
-            hdferr = h5rdereference_region_c(dset_id, ref_f, obj_id )
-
-          END SUBROUTINE h5rdereference_region_f
-
-!----------------------------------------------------------------------
-! Name:		h5rget_region_region_f
-!
-! Purpose: 	Retrieves a dataspace with the specified region selected
-!
-! Inputs:
-!		dset_id		- identifier of the dataset containing
-!				  reference to the regions
-!		ref		- reference to open
-! Outputs:
-!		space_id	- dataspace identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:		This is a module procedure for the h5rget_region_f
-!			subroutine.
-!----------------------------------------------------------------------
-
-
-
-          SUBROUTINE h5rget_region_region_f(dset_id, ref, space_id, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            TYPE(hdset_reg_ref_t_f), INTENT(IN) :: ref   ! Dataset region reference
-            INTEGER(HID_T), INTENT(OUT) :: space_id   ! Space identifier
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-            INTEGER :: ref_f(REF_REG_BUF_LEN)          ! Local buffer to pass reference
-
-!            INTEGER, EXTERNAL :: h5rget_region_region_c
-!  Interface is needed for MS FORTRAN
-!
-            INTERFACE
-              INTEGER FUNCTION h5rget_region_region_c(dset_id, ref_f, space_id)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-           !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RGET_REGION_REGION_C':: h5rget_region_region_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-!              INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3
-              INTEGER :: ref_f(REF_REG_BUF_LEN)
-              INTEGER(HID_T), INTENT(OUT) :: space_id
-              END FUNCTION h5rget_region_region_c
-            END INTERFACE
-
-            ref_f = ref%ref
-            hdferr = h5rget_region_region_c(dset_id, ref_f, space_id )
-
-          END SUBROUTINE h5rget_region_region_f
-
-!----------------------------------------------------------------------
-! Name:		h5rget_object_type_obj_f
-!
-! Purpose: 	Retrieves the type of object that an object reference points to.
-!
-! Inputs:
-!		dset_id		- identifier of the dataset containing
-!				  reference to the objects
-!		ref		- reference to open
-! Outputs:
-!		obj_type	- object_type, possible values:
-!					  H5G_UNKNOWN_F     (-1)
-!					  H5G_GROUP_F        0
-!					  H5G_DATASET_F      1
-! 					  H5G_TYPE_F         2
-!					  H5G_LINK_F         3
-!
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
-!
-! Comment:		This is a module procedure for the h5rget_object_type_f
-!			subroutine.
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5rget_object_type_obj_f(dset_id, ref, obj_type, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
-            TYPE(hobj_ref_t_f), INTENT(IN) :: ref   ! Object reference
-            INTEGER, INTENT(OUT) :: obj_type   ! Object type
-                                               !  H5G_UNKNOWN_F     (-1)
-                                               !  H5G_GROUP_F        0
-                                               !  H5G_DATASET_F      1
-                                               !  H5G_TYPE_F         2
-                                               !  H5G_LINK_F         3
-
-            INTEGER, INTENT(OUT) :: hdferr          ! Error code
-            INTEGER(HADDR_T) :: ref_f          ! Local buffer to pass reference
-
-!            INTEGER, EXTERNAL :: h5rget_object_type_obj_c
-!  Interface is needed for MS FORTRAN
-!
-            INTERFACE
-              INTEGER FUNCTION h5rget_object_type_obj_c(dset_id, ref_f, obj_type)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-           !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RGET_OBJECT_TYPE_OBJ_C':: h5rget_object_type_obj_c
-              !DEC$ENDIF
-!              INTEGER, PARAMETER :: REF_OBJ_BUF_LEN = 2
-              INTEGER(HID_T), INTENT(IN) :: dset_id
-              INTEGER(HADDR_T) :: ref_f
-              INTEGER, INTENT(OUT) :: obj_type
-              END FUNCTION h5rget_object_type_obj_c
-            END INTERFACE
-
-            ref_f = ref%ref
-            hdferr = h5rget_object_type_obj_c(dset_id, ref_f, obj_type )
-
-          END SUBROUTINE h5rget_object_type_obj_f
-
-!----------------------------------------------------------------------
-! Name:		h5rget_name_object_f
-!
-! Purpose: 	Retrieves a name of a referenced object.
-!
-! Inputs:
-!                   loc_id - Identifier for the dataset containing the reference or for the group that dataset is in.
-!                      ref - An object or dataset region reference.
-!
-! Outputs:
-!                     name - A name associated with the referenced object or dataset region.
-!
-!		hdferr:    - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!                     size - The size of the name buffer.
-!
-! Programmer:	M.S. Breitenfeld
-!		March 28, 2008
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-  SUBROUTINE h5rget_name_object_f(loc_id,  ref, name, hdferr, size)
+! SOURCE
+  SUBROUTINE h5rget_region_region_f(dset_id, ref, space_id, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: loc_id   ! Identifier for the dataset containing the reference
-                                           ! or for the group that dataset is in.
-    TYPE(hobj_ref_t_f), INTENT(IN) :: ref  ! Object reference
-    INTEGER(SIZE_T), OPTIONAL, INTENT(OUT) :: size   ! The size of the name buffer,
-                                           ! returning 0 (zero) if no name is associated with the identifier
-    CHARACTER(LEN=*), INTENT(OUT) :: name  ! A name associated with the referenced object or dataset region.
-    INTEGER, INTENT(OUT) :: hdferr         ! Error code
-    INTEGER(HADDR_T) :: ref_f              ! Local buffer to pass reference
-
-    INTEGER(SIZE_T) :: size_default
-    INTEGER(SIZE_T) :: name_len
+    INTEGER(HID_T), INTENT(IN) :: dset_id      ! Dataset identifier
+    TYPE(hdset_reg_ref_t_f), INTENT(IN) :: ref ! Dataset region reference
+    INTEGER(HID_T), INTENT(OUT) :: space_id    ! Space identifier
+    INTEGER, INTENT(OUT) :: hdferr             ! Error code
+!*****
+    INTEGER :: ref_f(REF_REG_BUF_LEN)          ! Local buffer to pass reference
 
     INTERFACE
-       INTEGER FUNCTION h5rget_name_object_c(loc_id, ref_f, name, name_len, size_default)
+       INTEGER FUNCTION h5rget_region_region_c(dset_id, ref_f, space_id)
          USE H5GLOBAL
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RGET_NAME_OBJECT_C':: h5rget_name_object_c
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RGET_REGION_REGION_C':: h5rget_region_region_c
          !DEC$ENDIF
-         !DEC$ATTRIBUTES reference :: name
-         INTEGER(HID_T), INTENT(IN) :: loc_id
-         INTEGER(SIZE_T)  :: size_default
-         CHARACTER(LEN=*), INTENT(OUT) :: name
-         INTEGER(HADDR_T) :: ref_f
-
-         INTEGER(SIZE_T) :: name_len
-       END FUNCTION h5rget_name_object_c
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         !              INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3
+         INTEGER :: ref_f(REF_REG_BUF_LEN)
+         INTEGER(HID_T), INTENT(OUT) :: space_id
+       END FUNCTION h5rget_region_region_c
     END INTERFACE
 
-    name_len=LEN(name)
-
     ref_f = ref%ref
-    hdferr = h5rget_name_object_c(loc_id, ref_f, name, name_len, size_default)
-
-    IF(PRESENT(size)) size = size_default
-
-  END SUBROUTINE h5rget_name_object_f
-
-!----------------------------------------------------------------------
-! Name:		h5rget_name_region_f
-!
-! Purpose: 	Retrieves a name of a dataset region.
-!
-! Inputs:
-!                   loc_id - Identifier for the dataset containing the reference or for the group that dataset is in.
-!                      ref - An object or dataset region reference.
-!
-! Outputs:
-!                     name - A name associated with the referenced object or dataset region.
-!
-!		hdferr:    - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!                     size - The size of the name buffer.
-!
-! Programmer:	M.S. Breitenfeld
-!		March 28, 2008
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-  SUBROUTINE h5rget_name_region_f(loc_id, ref, name, hdferr, size)
+    hdferr = h5rget_region_region_c(dset_id, ref_f, space_id )
+
+  END SUBROUTINE h5rget_region_region_f
+
+!****s* H5R/h5rget_object_type_obj_f
+!
+! NAME
+!  h5rget_object_type_obj_f
+!
+! PURPOSE
+!  Retrieves the type of object that an object reference points to.
+!
+! INPUTS
+!  dset_id 	 - identifier of the dataset containing
+!                  reference to the objects
+!  ref 	         - reference to open
+! OUTPUTS
+!  obj_type 	 - object_type, possible values:
+!                    H5G_UNKNOWN_F     (-1)
+!                    H5G_GROUP_F        0
+!                    H5G_DATASET_F      1
+!                    H5G_TYPE_F         2
+!                    H5G_LINK_F         3
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! NOTES
+!  This is a module procedure for the h5rget_object_type_f
+!  subroutine.
+! SOURCE
+  SUBROUTINE h5rget_object_type_obj_f(dset_id, ref, obj_type, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: loc_id   ! Identifier for the dataset containing the reference
-                                           ! or for the group that dataset is in.
-    TYPE(hdset_reg_ref_t_f), INTENT(IN) :: ref  ! Object reference
-    INTEGER(SIZE_T), OPTIONAL, INTENT(OUT) :: size   ! The size of the name buffer,
-                                           ! returning 0 (zero) if no name is associated with the identifier
-    CHARACTER(LEN=*), INTENT(OUT) :: name  ! A name associated with the referenced object or dataset region.
-    INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
-    INTEGER :: ref_f(REF_REG_BUF_LEN)      ! Local buffer to pass reference
-    INTEGER(SIZE_T) :: size_default
-    INTEGER(SIZE_T) :: name_len
+    INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
+    TYPE(hobj_ref_t_f), INTENT(IN) :: ref   ! Object reference
+    INTEGER, INTENT(OUT) :: obj_type     ! Object type
+                                         !  H5G_UNKNOWN_F     (-1)
+                                         !  H5G_GROUP_F        0
+                                         !  H5G_DATASET_F      1
+                                         !  H5G_TYPE_F         2
+                                         !  H5G_LINK_F         3
+    INTEGER, INTENT(OUT) :: hdferr       ! Error code
+!*****
+    INTEGER(HADDR_T) :: ref_f          ! Local buffer to pass reference
 
     INTERFACE
-       INTEGER FUNCTION h5rget_name_region_c(loc_id, ref_f, name, name_len, size_default)
+       INTEGER FUNCTION h5rget_object_type_obj_c(dset_id, ref_f, obj_type)
          USE H5GLOBAL
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RGET_NAME_REGION_C':: h5rget_name_region_c
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RGET_OBJECT_TYPE_OBJ_C':: h5rget_object_type_obj_c
          !DEC$ENDIF
-         !DEC$ATTRIBUTES reference :: name
-         INTEGER(HID_T), INTENT(IN) :: loc_id
-         INTEGER(SIZE_T)  :: size_default
-         CHARACTER(LEN=*), INTENT(OUT) :: name
-         INTEGER :: ref_f(REF_REG_BUF_LEN)
-
-         INTEGER(SIZE_T) :: name_len
-       END FUNCTION h5rget_name_region_c
+         !              INTEGER, PARAMETER :: REF_OBJ_BUF_LEN = 2
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HADDR_T) :: ref_f
+         INTEGER, INTENT(OUT) :: obj_type
+       END FUNCTION h5rget_object_type_obj_c
     END INTERFACE
 
-    name_len=LEN(name)
-
     ref_f = ref%ref
-    hdferr = h5rget_name_region_c(loc_id, ref_f, name, name_len, size_default)
-
-    IF(PRESENT(size)) size = size_default
+    hdferr = h5rget_object_type_obj_c(dset_id, ref_f, obj_type )
 
-  END SUBROUTINE h5rget_name_region_f
+  END SUBROUTINE h5rget_object_type_obj_f
 
 END MODULE H5R
diff --git a/fortran/src/H5Rff_F03.f90 b/fortran/src/H5Rff_F03.f90
new file mode 100644
index 0000000..7f66745
--- /dev/null
+++ b/fortran/src/H5Rff_F03.f90
@@ -0,0 +1,655 @@
+!****h* ROBODoc/H5R (F03)
+!
+! NAME
+!  MODULE H5R_PROVISIONAL
+!
+! FILE
+!  fortran/src/H5Rff_F03.f90
+!
+! PURPOSE
+!  This file contains Fortran 90 and Fortran 2003 interfaces for H5R functions.
+!  It contains the same functions as H5Rff_DEPRECIATE.f90 but includes the
+!  Fortran 2003 functions and the interface listings. This file will be compiled
+!  instead of H5Rff_DEPRECIATE.f90 if Fortran 2003 functions are enabled.
+!
+! COPYRIGHT
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!  Copyright by The HDF Group.                                               *
+!  Copyright by the Board of Trustees of the University of Illinois.         *
+!  All rights reserved.                                                      *
+!  *
+!  This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!  terms governing use, modification, and redistribution, is contained in    *
+!  the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!  of the source code distribution tree; Copyright.html can be found at the  *
+!  root level of an installed copy of the electronic HDF5 document set and   *
+!  is linked from the top-level documents page.  It can also be found at     *
+!  http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!  access to either file, you may request a copy from help at hdfgroup.org.     *
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5R function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!
+!*****
+MODULE H5R_PROVISIONAL
+  USE H5GLOBAL
+
+  ! If you change the value of these parameters, do not forget to change corresponding
+  ! values in the H5f90.h file.
+  !        INTEGER, PARAMETER :: REF_OBJ_BUF_LEN = 2
+  !        INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3
+  !
+  !        TYPE hobj_ref_t_f
+  !             INTEGER ref(REF_OBJ_BUF_LEN)
+  !        END TYPE
+  !
+  !        TYPE hdset_reg_ref_t_f
+  !             INTEGER ref(REF_REG_BUF_LEN)
+  !        END TYPE
+  !
+  INTERFACE h5rcreate_f
+
+     MODULE PROCEDURE h5rcreate_object_f ! obsolete
+     MODULE PROCEDURE h5rcreate_region_f ! obsolete
+     MODULE PROCEDURE h5rcreate_ptr_f  ! F2003
+
+  END INTERFACE
+
+  INTERFACE h5rdereference_f
+
+     MODULE PROCEDURE h5rdereference_object_f ! obsolete
+     MODULE PROCEDURE h5rdereference_region_f ! obsolete
+     MODULE PROCEDURE h5rdereference_ptr_f ! F2003
+
+  END INTERFACE
+
+  INTERFACE h5rget_name_f
+
+     MODULE PROCEDURE h5rget_name_object_f ! obsolete
+     MODULE PROCEDURE h5rget_name_region_f ! obsolete
+     MODULE PROCEDURE h5rget_name_ptr_f ! F2003
+
+  END INTERFACE
+
+  INTERFACE
+     INTEGER FUNCTION h5rget_name_ptr_c(loc_id, ref_type, ref, name, name_len, size_default)
+       USE, INTRINSIC :: ISO_C_BINDING
+       USE H5GLOBAL
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RGET_NAME_PTR_C':: h5rget_name_ptr_c
+       !DEC$ENDIF
+       !DEC$ATTRIBUTES reference :: name
+       INTEGER(HID_T), INTENT(IN) :: loc_id
+       INTEGER, INTENT(IN) :: ref_type
+       TYPE(C_PTR), INTENT(IN), VALUE :: ref
+       CHARACTER(LEN=*), INTENT(OUT) :: name
+       INTEGER(SIZE_T) :: name_len
+       INTEGER(SIZE_T) :: size_default
+     END FUNCTION h5rget_name_ptr_c
+  END INTERFACE
+
+  INTERFACE
+     INTEGER FUNCTION h5rdereference_ptr_c(obj_id, ref_type, ref, ref_obj_id)
+       USE H5GLOBAL
+       USE, INTRINSIC :: ISO_C_BINDING
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RDEREFERENCE_PTR_C':: h5rdereference_ptr_c
+       !DEC$ENDIF
+       INTEGER(HID_T), INTENT(IN) :: obj_id
+       INTEGER, INTENT(IN) :: ref_type
+       TYPE(C_PTR), INTENT(IN), VALUE :: ref
+       INTEGER(HID_T), INTENT(OUT) :: ref_obj_id
+     END FUNCTION h5rdereference_ptr_c
+  END INTERFACE
+
+  INTERFACE
+     INTEGER FUNCTION h5rcreate_ptr_c(ref, loc_id, name, namelen, ref_type, space_id)
+       USE, INTRINSIC :: ISO_C_BINDING
+       USE H5GLOBAL
+       !DEC$IF DEFINED(HDF5F90_WINDOWS)
+       !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RCREATE_PTR_C':: h5rcreate_ptr_c
+       !DEC$ENDIF
+       !DEC$ATTRIBUTES reference :: name
+       TYPE(C_PTR), VALUE :: ref
+       INTEGER(HID_T), INTENT(IN) :: loc_id
+       CHARACTER(LEN=*), INTENT(IN) :: name
+       INTEGER :: namelen
+       INTEGER, INTENT(IN) :: ref_type
+       INTEGER(HID_T), INTENT(IN) :: space_id
+     END FUNCTION h5rcreate_ptr_c
+  END INTERFACE
+
+CONTAINS
+
+!****s* H5R (F03)/h5rcreate_object_f
+!
+! NAME
+!  h5rcreate_object_f
+!
+! PURPOSE
+!  Creates reference to the object
+!
+! Inputs:
+!  loc_id    - location identifier
+!  name      - name of the object at the specified location
+! Outputs:
+!  ref 	     - reference to the specified object
+!  hdferr:   - error code
+!               Success:  0
+!               Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! NOTES
+!  This is a module procedure for the h5rcreate_f subroutine.
+!
+! Signature:
+  SUBROUTINE h5rcreate_object_f(loc_id, name, ref, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! Location identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the object at location specified
+                                           ! by loc_id identifier
+    TYPE(hobj_ref_t_f), INTENT(INOUT), TARGET :: ref   ! Object reference
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
+    INTEGER :: namelen                     ! Name length
+
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(ref)
+
+    namelen = LEN(name)
+
+    hdferr = h5rcreate_ptr_c(f_ptr, loc_id, name, namelen, INT(0), INT(-1,HID_T))
+
+  END SUBROUTINE h5rcreate_object_f
+
+!****s* H5R (F03)/h5rcreate_region_f
+!
+! NAME
+!  h5rcreate_region_f
+!
+! PURPOSE
+!  Creates reference to the dataset region
+!
+! Inputs:
+!  loc_id 	 - location identifier
+!  name 	 - name of the dataset at the specified location
+!  space_id 	 - dataspace identifier that describes selected region
+! Outputs:
+!  ref 	         - reference to the dataset region
+!  hdferr:	 - error code
+!                   Success:  0
+!                   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! NOTES
+!  This is a module procedure for the h5rcreate_f subroutine.
+!
+! Signature:
+  SUBROUTINE h5rcreate_region_f(loc_id, name, space_id, ref, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! Location identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the dataset at location specified
+                                           ! by loc_id identifier
+    INTEGER(HID_T), INTENT(IN) :: space_id ! Dataset's dataspace identifier
+    TYPE(hdset_reg_ref_t_f), INTENT(INOUT), TARGET :: ref ! Dataset region reference
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
+    INTEGER :: namelen                     ! Name length
+    INTEGER :: ref_f(REF_REG_BUF_LEN)      ! Local buffer to pass reference
+
+    TYPE(C_PTR) :: f_ptr
+
+!  !$    INTERFACE
+!  !$       INTEGER FUNCTION h5rcreate_region_c(ref_f, loc_id, name, namelen, space_id)
+!  !$         USE H5GLOBAL
+!  !$         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+!  !$         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RCREATE_REGION_C':: h5rcreate_region_c
+!  !$         !DEC$ENDIF
+!  !$         !DEC$ATTRIBUTES reference :: name
+!  !$         !              INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3
+!  !$         INTEGER :: ref_f(REF_REG_BUF_LEN)
+!  !$         INTEGER(HID_T), INTENT(IN) :: loc_id
+!  !$         CHARACTER(LEN=*), INTENT(IN) :: name
+!  !$         INTEGER :: namelen
+!  !$         INTEGER(HID_T), INTENT(IN) :: space_id
+!  !$       END FUNCTION h5rcreate_region_c
+!  !$    END INTERFACE
+
+    f_ptr = C_LOC(ref)
+
+    namelen = LEN(name)
+    hdferr = h5rcreate_ptr_c(f_ptr, loc_id, name, namelen, 1, space_id)
+
+!  !$            ref_f = 0
+!  !$            hdferr = h5rcreate_region_c(ref_f, loc_id, name, namelen, space_id )
+!  !$            ref%ref = ref_f
+
+  END SUBROUTINE h5rcreate_region_f
+
+!****s* H5R (F03)/h5rcreate_ptr_f
+!
+! NAME
+!  h5rcreate_ptr_f
+!
+! PURPOSE
+!  Creates a reference.
+!
+! Inputs:
+!  loc_id     - location identifier
+!  name	      - name of the dataset at the specified location
+!  ref_type   - type of reference:
+!                H5R_OBJECT
+!                H5T_STD_REF_DSETREG
+! Outputs:
+!  ref	      - reference created by the function call.
+!  hdferr     - error code
+!		   Success:  0
+!		   Failure: -1
+! OPTIONAL
+!  space_id   - dataspace identifier that describes selected region
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  June 20, 2008
+!
+! NOTES
+!  This is a module procedure for the h5rcreate_f
+!  subroutine where the output is a pointer.
+!
+! Signature:
+  SUBROUTINE h5rcreate_ptr_f(loc_id, name, ref_type, ref, hdferr, space_id)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id     ! Location identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name     ! Name of the dataset at location specified
+                                             ! by loc_id identifier
+    INTEGER, INTENT(IN) :: ref_type          ! type of reference
+    TYPE(C_PTR), INTENT(INOUT) :: ref        ! Reference created by the function call
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+    INTEGER(HID_T), INTENT(IN), OPTIONAL :: space_id ! Dataset's dataspace identifier
+!*****
+    INTEGER :: namelen                       ! Name length
+    INTEGER(HID_T) :: space_id_c
+
+    namelen = LEN(name)
+    space_id_c = -1
+    IF(PRESENT(space_id)) space_id_c =  space_id
+    hdferr = h5rcreate_ptr_c(ref, loc_id, name, namelen, ref_type, space_id_c)
+
+  END SUBROUTINE h5rcreate_ptr_f
+!****s* H5R (F03)/h5rdereference_object_f
+!
+! NAME
+!  h5rdereference_object_f
+!
+! PURPOSE
+!  Opens the HDF5 object referenced
+!
+! Inputs:
+!  dset_id  - identifier of the dataset containing
+!             reference
+!  ref 	    - reference to open
+! Outputs:
+!  obj_id   - object_identifier
+!  hdferr:  - error code
+!              Success:  0
+!              Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! NOTES
+!  This is a module procedure for the h5rdereference_f subroutine.
+!
+! Signature:
+  SUBROUTINE h5rdereference_object_f(obj_id, ref, ref_obj_id, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: obj_id          ! Dataset identifier
+    TYPE(hobj_ref_t_f), INTENT(IN), TARGET :: ref ! Object reference
+    INTEGER(HID_T), INTENT(OUT) :: ref_obj_id     ! Object identifier
+    INTEGER, INTENT(OUT) :: hdferr                ! Error code
+!*****
+    INTEGER(HADDR_T) :: ref_f          ! Local buffer to pass reference
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(ref)
+    hdferr = h5rdereference_ptr_c(obj_id, 0, f_ptr, ref_obj_id)
+
+  END SUBROUTINE h5rdereference_object_f
+!****s* H5R (F03)/h5rdereference_region_f
+!
+! NAME
+!  h5rdereference_region_f
+!
+! PURPOSE
+!  Opens the dataset region
+!
+! Inputs:
+!  dset_id 	 - identifier of the dataset containing
+!                  reference to teh regions
+!  ref 	         - reference to open
+! Outputs:
+!  obj_id 	 - dataspace identifier
+!  hdferr:	 - error code
+!                   Success:  0
+!                   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! NOTES
+!  This is a module procedure for the h5rdereference_f subroutine.
+!
+! Signature:
+  SUBROUTINE h5rdereference_region_f(obj_id, ref, ref_obj_id, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: obj_id   ! Dataset identifier
+    TYPE(hdset_reg_ref_t_f), INTENT(IN), TARGET :: ref   ! Object reference
+    INTEGER(HID_T), INTENT(OUT) :: ref_obj_id  ! Dataspace identifier
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+!*****
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(ref)
+    hdferr = h5rdereference_ptr_c(obj_id, 1, f_ptr, ref_obj_id)
+
+  END SUBROUTINE h5rdereference_region_f
+
+!****s* H5R (F03)/h5rdereference_ptr_f
+!
+! NAME
+!  h5rdereference_ptr_f
+!
+! PURPOSE
+!  Opens the HDF5 object referenced.
+!
+! Inputs:
+!  obj_id     - valid identifier for the file containing the
+!               referenced object or any object in that file.
+!  ref_type   - the reference type of ref.
+!  ref        - Reference to open.
+! Outputs:
+!  ref_obj_id - identifier of referenced object
+!  hdferr     - error code
+!		 Success:  0
+!		 Failure: -1
+! AUTHOR
+!  M. Scot Breitenfeld
+!  June 20, 2008
+!
+! NOTES
+!  This is a module procedure for the h5rdereference_f
+!  subroutine using pointers.
+!
+! Signature:
+  SUBROUTINE h5rdereference_ptr_f(obj_id, ref_type, ref, ref_obj_id, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: obj_id  ! Valid identifier for the file containing the
+                                          !  referenced object or any object in that file.
+    INTEGER, INTENT(IN) :: ref_type       ! The reference type of ref.
+    TYPE(C_PTR), INTENT(IN) :: ref        ! Object reference
+    INTEGER(HID_T), INTENT(OUT) :: ref_obj_id
+                                          ! Identifier of referenced object
+    INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!***** 
+    hdferr = h5rdereference_ptr_c(obj_id, ref_type, ref, ref_obj_id)
+
+  END SUBROUTINE h5rdereference_ptr_f
+!
+!****s* H5R (F03)/h5rget_name_object_f
+!
+! NAME
+!  h5rget_name_object_f
+!
+! PURPOSE
+!  Retrieves a name of a referenced object.
+!
+! Inputs:
+!  loc_id    - Identifier for the dataset containing the reference or for the group that dataset is in.
+!  ref 	     - An object or dataset region reference.
+!
+! Outputs:
+!  name      - A name associated with the referenced object or dataset region.
+!
+!  hdferr:   - error code
+!               Success:  0
+!               Failure: -1
+!
+! Optional parameters:
+!  size     - The size of the name buffer.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 28, 2008
+!
+! Signature:S
+  SUBROUTINE h5rget_name_object_f(loc_id,  ref, name, hdferr, size)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! Identifier for the dataset containing the reference
+                                           ! or for the group that dataset is in.
+    TYPE(hobj_ref_t_f), INTENT(IN), TARGET :: ref  ! Object reference
+    INTEGER(SIZE_T), OPTIONAL, INTENT(OUT) :: size ! The size of the name buffer,
+                                                   ! returning 0 (zero) if no name is associated
+                                                   ! with the identifier
+    CHARACTER(LEN=*), INTENT(OUT) :: name  ! A name associated with the referenced object or dataset region.
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
+    INTEGER(HADDR_T) :: ref_f              ! Local buffer to pass reference
+
+    INTEGER(SIZE_T) :: size_default
+    INTEGER(SIZE_T) :: name_len
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(ref)
+
+    name_len=LEN(name)
+
+    hdferr = h5rget_name_ptr_c(loc_id, 0, f_ptr, name, name_len, size_default)
+
+
+    IF(PRESENT(size)) size = size_default
+
+  END SUBROUTINE h5rget_name_object_f
+!****s* H5R (F03)/h5rget_name_region_f
+!
+! NAME
+!  h5rget_name_region_f
+!
+! PURPOSE
+!  Retrieves a name of a dataset region.
+!
+! Inputs:
+!  loc_id  - Identifier for the dataset containing the reference or
+!            for the group that dataset is in.
+!  ref 	   - An object or dataset region reference.
+!
+! Outputs:
+!  name    - A name associated with the referenced object or dataset region.
+!  hdferr  - error code
+!              Success:  0
+!              Failure: -1
+!
+! Optional parameters:
+!  size    - The size of the name buffer.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 28, 2008
+!
+! Signature:
+  SUBROUTINE h5rget_name_region_f(loc_id, ref, name, hdferr, size)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! Identifier for the dataset containing the reference
+                                           ! or for the group that dataset is in.
+    TYPE(hdset_reg_ref_t_f), INTENT(IN), TARGET :: ref ! Object reference
+    INTEGER(SIZE_T), OPTIONAL, INTENT(OUT) :: size     ! The size of the name buffer,
+                                                       ! returning 0 (zero) if no name is associated with the identifier
+    CHARACTER(LEN=*), INTENT(OUT) :: name  ! A name associated with the referenced object or dataset region.
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
+    INTEGER :: ref_f(REF_REG_BUF_LEN)      ! Local buffer to pass reference
+    INTEGER(SIZE_T) :: size_default
+    INTEGER(SIZE_T) :: name_len
+    TYPE(C_PTR) :: f_ptr
+
+    f_ptr = C_LOC(ref)
+
+    name_len=LEN(name)
+
+    hdferr = h5rget_name_ptr_c(loc_id, 1, f_ptr, name, name_len, size_default)
+
+    IF(PRESENT(size)) size = size_default
+
+  END SUBROUTINE h5rget_name_region_f
+
+  !****s* H5R (F03)/h5rget_name_ptr_f
+  !
+  ! NAME
+  !  h5rget_name_ptr_f
+  !
+  ! PURPOSE
+  !  Retrieves a name of a referenced object.
+  !
+  ! Inputs:
+  !  loc_id   - Identifier for the dataset containing the reference or
+  !             for the group that dataset is in.
+  !  ref_type - Type of reference.
+  !  ref      - An object or dataset region reference.
+  !
+  ! Outputs:
+  !  name     - A name associated with the referenced object or dataset ptr.
+  !
+  !  hdferr   - error code
+  !		  Success:  0
+  !		  Failure: -1
+  !
+  ! Optional parameters:
+  !   size   - The size of the name buffer.
+  !
+  ! AUTHOR
+  !  M. Scot Breitenfeld
+  !  March 28, 2008
+  !
+  ! Signature:
+  SUBROUTINE h5rget_name_ptr_f(loc_id, ref_type, ref, name, hdferr, size)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! Identifier for the dataset containing the reference
+                                           !  or for the group that dataset is in.
+    INTEGER, INTENT(IN) :: ref_type ! Type of reference.
+    TYPE(C_PTR), INTENT(IN) :: ref  ! An object or dataset region reference.
+    CHARACTER(LEN=*), INTENT(OUT) :: name  ! A name associated with the referenced object or dataset ptr.
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+    INTEGER(SIZE_T), OPTIONAL, INTENT(OUT) :: size   ! The size of the name buffer,
+                                                     ! returning 0 (zero) if no name is associated
+                                                     ! with the identifier
+!*****
+    INTEGER(SIZE_T) :: size_default
+    INTEGER(SIZE_T) :: name_len
+
+    name_len=LEN(name)
+
+    hdferr = h5rget_name_ptr_c(loc_id, ref_type, ref, name, name_len, size_default)
+
+    IF(PRESENT(size)) size = size_default
+
+  END SUBROUTINE h5rget_name_ptr_f
+
+  !****s* H5R (F03)/h5rget_obj_type_f
+  !
+  ! NAME
+  !  h5rget_obj_type_f
+  !
+  ! PURPOSE
+  !  Retrieves the type of object that an object reference points to.
+  !
+  ! Inputs:
+  !  loc_id   - Identifier for the dataset containing the reference or
+  !             for the group that dataset is in.
+  !  ref_type - Type of reference to query.
+  !  ref      - Reference to query.
+  !
+  ! Outputs:
+  !  obj_type - Type of referenced object. 
+  !               H5G_UNKNOWN_F (-1)
+  !               H5G_LINK_F      0
+  !               H5G_GROUP_F     1
+  !               H5G_DATASET_F   2
+  !               H5G_TYPE_F      3
+  !              
+  !  hdferr   - error code
+  !		  Success:  0
+  !		  Failure: -1
+  !
+  ! AUTHOR
+  !  M. Scot Breitenfeld
+  !  Decemeber 17, 2008
+  !
+  ! Signature:
+  SUBROUTINE h5rget_obj_type_f(loc_id, ref_type, ref, obj_type, hdferr)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id
+    INTEGER, INTENT(IN) :: ref_type
+    TYPE(C_PTR), INTENT(IN) :: ref
+    INTEGER, INTENT(OUT) :: obj_type
+    INTEGER, INTENT(OUT) :: hdferr
+    !*****
+
+    INTERFACE
+       INTEGER FUNCTION h5rget_obj_type_c(loc_id, ref_type, ref, obj_type)
+         USE, INTRINSIC :: ISO_C_BINDING
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RGET_OBJ_TYPE_C':: h5rget_obj_type_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         INTEGER, INTENT(IN) :: ref_type
+         TYPE(C_PTR), VALUE :: ref
+         INTEGER :: obj_type
+       END FUNCTION h5rget_obj_type_c
+    END INTERFACE
+
+    hdferr = h5rget_obj_type_c(loc_id, ref_type, ref, obj_type)
+
+  END SUBROUTINE h5rget_obj_type_f
+
+END MODULE H5R_PROVISIONAL
diff --git a/fortran/src/H5Rff_F90.f90 b/fortran/src/H5Rff_F90.f90
new file mode 100644
index 0000000..3f02825
--- /dev/null
+++ b/fortran/src/H5Rff_F90.f90
@@ -0,0 +1,449 @@
+!****h* ROBODoc/H5R (F90)
+!
+! NAME
+!  MODULE H5R_PROVISIONAL
+!
+! FILE
+!  fortran/src/H5Rff_F90.f90
+!
+! PURPOSE
+!  This file contains Fortran 90 interfaces for H5R functions. It contains
+!  the same functions as H5Rff_F03.f90 but excludes the Fortran 2003 functions
+!  and the interface listings. This file will be compiled instead of H5Rff_F03.f90
+!  if Fortran 2003 functions are not enabled.
+!
+! COPYRIGHT
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!  Copyright by The HDF Group.                                               *
+!  Copyright by the Board of Trustees of the University of Illinois.         *
+!  All rights reserved.                                                      *
+!  *
+!  This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!  terms governing use, modification, and redistribution, is contained in    *
+!  the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!  of the source code distribution tree; Copyright.html can be found at the  *
+!  root level of an installed copy of the electronic HDF5 document set and   *
+!  is linked from the top-level documents page.  It can also be found at     *
+!  http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!  access to either file, you may request a copy from help at hdfgroup.org.     *
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5R function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!*****
+
+MODULE H5R_PROVISIONAL
+  USE H5GLOBAL
+
+!  If you change the value of these parameters, do not forget to change corresponding
+!  values in the H5f90.h file.
+!  INTEGER, PARAMETER :: REF_OBJ_BUF_LEN = 2
+!  INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3
+!
+!  TYPE hobj_ref_t_f
+!  INTEGER ref(REF_OBJ_BUF_LEN)
+!  END TYPE
+!
+!  TYPE hdset_reg_ref_t_f
+!  INTEGER ref(REF_REG_BUF_LEN)
+!  END TYPE
+!
+  INTERFACE h5rcreate_f
+
+     MODULE PROCEDURE h5rcreate_object_f
+     MODULE PROCEDURE h5rcreate_region_f
+
+  END INTERFACE
+
+  INTERFACE h5rdereference_f
+
+     MODULE PROCEDURE h5rdereference_object_f
+     MODULE PROCEDURE h5rdereference_region_f
+
+  END INTERFACE
+
+  INTERFACE h5rget_name_f
+
+     MODULE PROCEDURE h5rget_name_object_f
+     MODULE PROCEDURE h5rget_name_region_f
+
+  END INTERFACE
+
+CONTAINS
+
+!****s* H5R (F90)/h5rcreate_object_f
+!
+! NAME
+!  h5rcreate_object_f
+!
+! PURPOSE
+!  Creates reference to the object
+!
+! INPUTS
+!  loc_id 	 - location identifier
+!  name 	 - name of the object at the specified location
+! OUTPUTS
+!  ref 	         - reference to the specified object
+!  hdferr:	 - error code
+!                   Success:  0
+!                   Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! NOTES
+!  This is a module procedure for the h5rcreate_f subroutine.
+!
+! SOURCE
+  SUBROUTINE h5rcreate_object_f(loc_id, name, ref, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! Location identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the object at location specified
+                                           ! by loc_id identifier
+    TYPE(hobj_ref_t_f), INTENT(OUT) :: ref ! Object reference
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
+    INTEGER :: namelen                     ! Name length
+    INTEGER(HADDR_T) :: ref_f              ! Local buffer to pass reference
+
+    INTERFACE
+       INTEGER FUNCTION h5rcreate_object_c(ref_f, loc_id, name, namelen)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RCREATE_OBJECT_C':: h5rcreate_object_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HADDR_T) :: ref_f
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER :: namelen
+       END FUNCTION h5rcreate_object_c
+    END INTERFACE
+
+    namelen = LEN(name)
+    ref_f = 0
+    hdferr = h5rcreate_object_c(ref_f, loc_id, name, namelen )
+    ref%ref = ref_f
+
+  END SUBROUTINE h5rcreate_object_f
+
+!****s* H5R (F90)/h5rcreate_region_f
+!
+! NAME
+!  h5rcreate_region_f
+!
+! PURPOSE
+!  Creates reference to the dataset region
+!
+! INPUTS
+!  loc_id 	 - location identifier
+!  name 	 - name of the dataset at the specified location
+!  space_id 	 - dataspace identifier that describes selected region
+! OUTPUTS
+!  ref 	         - reference to the dataset region
+!  hdferr:	 - error code
+!                   Success:  0
+!                   Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! NOTES
+!  This is a module procedure for the h5rcreate_f subroutine.
+!
+! SOURCE
+  SUBROUTINE h5rcreate_region_f(loc_id, name, space_id, ref, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! Location identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name   ! Name of the dataset at location specified
+                                           ! by loc_id identifier
+    INTEGER(HID_T), INTENT(IN) :: space_id ! Dataset's dataspace identifier
+    TYPE(hdset_reg_ref_t_f), INTENT(OUT) :: ref ! Dataset region reference
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
+    INTEGER :: namelen                     ! Name length
+    INTEGER :: ref_f(REF_REG_BUF_LEN)      ! Local buffer to pass reference
+
+    INTERFACE
+       INTEGER FUNCTION h5rcreate_region_c(ref_f, loc_id, name, namelen, space_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RCREATE_REGION_C':: h5rcreate_region_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         !              INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3
+         INTEGER :: ref_f(REF_REG_BUF_LEN)
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         CHARACTER(LEN=*), INTENT(IN) :: name
+         INTEGER :: namelen
+         INTEGER(HID_T), INTENT(IN) :: space_id
+       END FUNCTION h5rcreate_region_c
+    END INTERFACE
+
+    namelen = LEN(name)
+    ref_f = 0
+    hdferr = h5rcreate_region_c(ref_f, loc_id, name, namelen, space_id )
+    ref%ref = ref_f
+
+  END SUBROUTINE h5rcreate_region_f
+!****s* H5R (F90)/h5rdereference_object_f
+!
+! NAME
+!  h5rdereference_object_f
+!
+! PURPOSE
+!  Opens the HDF5 object referenced
+!
+! INPUTS
+!  dset_id  - identifier of the dataset containing reference
+!  ref 	    - reference to open
+! OUTPUTS
+!  obj_id   - object_identifier
+!  hdferr   - error code
+!              Success:  0
+!              Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! NOTES
+!  This is a module procedure for the h5rdereference_f subroutine.
+!
+! SOURCE
+  SUBROUTINE h5rdereference_object_f(dset_id, ref, obj_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id   ! Dataset identifier
+    TYPE(hobj_ref_t_f), INTENT(IN) :: ref   ! Object reference
+    INTEGER(HID_T), INTENT(OUT) :: obj_id   ! Object identifier
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+!*****
+    INTEGER(HADDR_T) :: ref_f          ! Local buffer to pass reference
+
+    INTERFACE
+       INTEGER FUNCTION h5rdereference_object_c(dset_id, ref_f, obj_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RDEREFERENCE_OBJECT_C':: h5rdereference_object_c
+         !DEC$ENDIF
+         !              INTEGER, PARAMETER :: REF_OBJ_BUF_LEN = 2
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+         INTEGER(HADDR_T) :: ref_f
+         INTEGER(HID_T), INTENT(OUT) :: obj_id
+       END FUNCTION h5rdereference_object_c
+    END INTERFACE
+
+    ref_f = ref%ref
+    hdferr = h5rdereference_object_c(dset_id, ref_f, obj_id )
+
+  END SUBROUTINE h5rdereference_object_f
+!****s* H5R (F90)/h5rdereference_region_f
+!
+! NAME
+!  h5rdereference_region_f
+!
+! PURPOSE
+!  Opens the dataset region
+!
+! INPUTS
+!  dset_id 	 - identifier of the dataset containing
+!                  reference to teh regions
+!  ref 	         - reference to open
+! OUTPUTS
+!  obj_id 	 - dataspace identifier
+!  hdferr 	 - error code
+!                   Success:  0
+!                   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
+!
+! NOTES
+!  This is a module procedure for the h5rdereference_f subroutine.
+!
+! SOURCE
+  SUBROUTINE h5rdereference_region_f(dset_id, ref, obj_id, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: dset_id      ! Dataset identifier
+    TYPE(hdset_reg_ref_t_f), INTENT(IN) :: ref ! Object reference
+    INTEGER(HID_T), INTENT(OUT) :: obj_id   ! Dataspace identifier
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+!*****
+    INTEGER :: ref_f(REF_REG_BUF_LEN)       ! Local buffer to pass reference
+
+    INTERFACE
+       INTEGER FUNCTION h5rdereference_region_c(dset_id, ref_f, obj_id)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RDEREFERENCE_REGION_C':: h5rdereference_region_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: dset_id
+!  INTEGER, PARAMETER :: REF_REG_BUF_LEN = 3
+         INTEGER :: ref_f(REF_REG_BUF_LEN)
+         INTEGER(HID_T), INTENT(OUT) :: obj_id
+       END FUNCTION h5rdereference_region_c
+    END INTERFACE
+
+    ref_f = ref%ref
+    hdferr = h5rdereference_region_c(dset_id, ref_f, obj_id )
+
+  END SUBROUTINE h5rdereference_region_f
+!****s* H5R (F90)/h5rget_name_object_f
+!
+! NAME
+!  h5rget_name_object_f
+!
+! PURPOSE
+!  Retrieves a name of a referenced object.
+!
+! INPUTS
+!  loc_id  - Identifier for the dataset containing the reference or for the group that dataset is in.
+!  ref 	   - An object or dataset region reference.
+!
+! OUTPUTS
+!  name    - A name associated with the referenced object or dataset region.
+!
+!  hdferr  - error code
+!             Success:  0
+!             Failure: -1
+!
+! OPTIONAL PARAMETERS
+!  size    - The size of the name buffer.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 28, 2008
+!
+! SOURCES
+  SUBROUTINE h5rget_name_object_f(loc_id,  ref, name, hdferr, size)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! Identifier for the dataset containing the reference
+                                           ! or for the group that dataset is in.
+    TYPE(hobj_ref_t_f), INTENT(IN) :: ref  ! Object reference
+    INTEGER(SIZE_T), OPTIONAL, INTENT(OUT) :: size   ! The size of the name buffer,
+                                           ! returning 0 (zero) if no name is associated with the identifier
+    CHARACTER(LEN=*), INTENT(OUT) :: name  ! A name associated with the referenced object or dataset region.
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
+    INTEGER(HADDR_T) :: ref_f              ! Local buffer to pass reference
+
+    INTEGER(SIZE_T) :: size_default
+    INTEGER(SIZE_T) :: name_len
+
+    INTERFACE
+       INTEGER FUNCTION h5rget_name_object_c(loc_id, ref_f, name, name_len, size_default)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RGET_NAME_OBJECT_C':: h5rget_name_object_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         INTEGER(SIZE_T)  :: size_default
+         CHARACTER(LEN=*), INTENT(OUT) :: name
+         INTEGER(HADDR_T) :: ref_f
+
+         INTEGER(SIZE_T) :: name_len
+       END FUNCTION h5rget_name_object_c
+    END INTERFACE
+
+    name_len=LEN(name)
+
+    ref_f = ref%ref
+    hdferr = h5rget_name_object_c(loc_id, ref_f, name, name_len, size_default)
+
+    IF(PRESENT(size)) size = size_default
+
+  END SUBROUTINE h5rget_name_object_f
+
+!****s* H5R (F90)/h5rget_name_region_f
+!
+! NAME
+!  h5rget_name_region_f
+!
+! PURPOSE
+!  Retrieves a name of a dataset region.
+!
+! INPUTS
+!  loc_id 	 - Identifier for the dataset containing the reference or
+!                  for the group that dataset is in.
+!  ref 	         - An object or dataset region reference.
+!
+! OUTPUTS
+!  name 	 - A name associated with the referenced object or dataset region.
+!  hdferr 	 - error code
+!                   Success:  0
+!                   Failure: -1
+!
+! OPTIONAL PARAMETERS
+!  size 	 - The size of the name buffer.
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 28, 2008
+!
+! SOURCE
+  SUBROUTINE h5rget_name_region_f(loc_id, ref, name, hdferr, size)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: loc_id   ! Identifier for the dataset containing the reference
+                                           ! or for the group that dataset is in.
+    TYPE(hdset_reg_ref_t_f), INTENT(IN) :: ref       ! Object reference
+    INTEGER(SIZE_T), OPTIONAL, INTENT(OUT) :: size   ! The size of the name buffer,
+                                                     ! returning 0 (zero) if no name is associated 
+                                                     ! with the identifier
+    CHARACTER(LEN=*), INTENT(OUT) :: name  ! A name associated with the referenced object or dataset region.
+    INTEGER, INTENT(OUT) :: hdferr         ! Error code
+!*****
+    INTEGER :: ref_f(REF_REG_BUF_LEN)      ! Local buffer to pass reference
+    INTEGER(SIZE_T) :: size_default
+    INTEGER(SIZE_T) :: name_len
+
+    INTERFACE
+       INTEGER FUNCTION h5rget_name_region_c(loc_id, ref_f, name, name_len, size_default)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5RGET_NAME_REGION_C':: h5rget_name_region_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(HID_T), INTENT(IN) :: loc_id
+         INTEGER(SIZE_T)  :: size_default
+         CHARACTER(LEN=*), INTENT(OUT) :: name
+         INTEGER :: ref_f(REF_REG_BUF_LEN)
+
+         INTEGER(SIZE_T) :: name_len
+       END FUNCTION h5rget_name_region_c
+    END INTERFACE
+
+    name_len=LEN(name)
+
+    ref_f = ref%ref
+    hdferr = h5rget_name_region_c(loc_id, ref_f, name, name_len, size_default)
+
+    IF(PRESENT(size)) size = size_default
+
+  END SUBROUTINE h5rget_name_region_f
+
+END MODULE H5R_PROVISIONAL
diff --git a/fortran/src/H5Sf.c b/fortran/src/H5Sf.c
index e161618..2cfb1eb 100644
--- a/fortran/src/H5Sf.c
+++ b/fortran/src/H5Sf.c
@@ -1,4 +1,9 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* H5Sf/H5Sf
+ * PURPOSE
+ *   This file contains C stubs for H5S Fortran APIs
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,26 +16,38 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include "H5f90.h"
 #include "H5Eprivate.h"
 
-/*----------------------------------------------------------------------------
- * Name:        h5screate_simple_c
- * Purpose:     Call H5Screate_simple to create a dataspace
- * Inputs:      rank - number of dimensions of dataspace
+/****if* H5Sf/h5screate_simple_c
+ * NAME
+ *        h5screate_simple_c
+ * PURPOSE
+ *     Call H5Screate_simple to create a dataspace
+ * INPUTS
+ *      rank - number of dimensions of dataspace
  *              dims - array of the size of each dimension
                 maxdims - an array of the maximum size of each dimension
- * Outputs:     space_id - identifier of the created dataspace
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     space_id - identifier of the created dataspace
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 4, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5screate_simple_c ( int_f *rank, hsize_t_f *dims, hsize_t_f *maxdims, hid_t_f *space_id )
+/******/
 {
     hsize_t c_dims[H5S_MAX_RANK];
     hsize_t c_maxdims[H5S_MAX_RANK];
@@ -56,18 +73,26 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sclose_c
- * Purpose:     Call H5Sclose to close the dataspace
- * Inputs:      space_id - identifier of the dataspace to be closed
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Sf/h5sclose_c
+ * NAME
+ *        h5sclose_c
+ * PURPOSE
+ *     Call H5Sclose to close the dataspace
+ * INPUTS
+ *      space_id - identifier of the dataspace to be closed
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 4, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sclose_c ( hid_t_f *space_id )
+/******/
 {
   int ret_value = 0;
   hid_t c_space_id;
@@ -77,20 +102,28 @@ nh5sclose_c ( hid_t_f *space_id )
   return ret_value;
 }
 
-
-/*----------------------------------------------------------------------------
- * Name:        h5screate_c
- * Purpose:     Call H5Screate to create a dataspace
- * Inputs:      classtype - type of the dataspace class
- * Outputs:     space_id - identifier of the created dataspace
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Sf/h5screate_c
+ * NAME
+ *        h5screate_c
+ * PURPOSE
+ *     Call H5Screate to create a dataspace
+ * INPUTS
+ *      classtype - type of the dataspace class
+ * OUTPUTS
+ *     space_id - identifier of the created dataspace
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, August 10, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5screate_c ( int_f *classtype, hid_t_f *space_id )
+/******/
 {
   H5S_class_t c_classtype;
   int ret_value = 0;
@@ -103,19 +136,28 @@ nh5screate_c ( int_f *classtype, hid_t_f *space_id )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5scopy_c
- * Purpose:     Call H5Scopy to copy dataspace
- * Inputs:      space_id - identifier of the dataspace to be copied
- * Outputs:     new_space_id - identifier of the new datspace
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Sf/h5scopy_c
+ * NAME
+ *        h5scopy_c
+ * PURPOSE
+ *     Call H5Scopy to copy dataspace
+ * INPUTS
+ *      space_id - identifier of the dataspace to be copied
+ * OUTPUTS
+ *     new_space_id - identifier of the new datspace
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, August 10, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5scopy_c( hid_t_f *space_id , hid_t_f *new_space_id)
+/******/
 {
   int ret_value = 0;
   hid_t c_new_space_id;
@@ -129,22 +171,31 @@ nh5scopy_c( hid_t_f *space_id , hid_t_f *new_space_id)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sget_select_hyper_nblocks_c
- * Purpose:     Call H5SH5Sget_select_hyper_nblocks to
+/****if* H5Sf/h5sget_select_hyper_nblocks_c
+ * NAME
+ *        h5sget_select_hyper_nblocks_c
+ * PURPOSE
+ *     Call H5SH5Sget_select_hyper_nblocks to
  *              get the the number of hyperslab blocks in
  *              the current dataspace selection if successful
- * Inputs:      space_id - identifier of the dataspace
- * Outputs:     num_blocks -  number of hyperslab blocks in
+ * INPUTS
+ *      space_id - identifier of the dataspace
+ * OUTPUTS
+ *     num_blocks -  number of hyperslab blocks in
  *              the current dataspace selection
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, November 12, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sget_select_hyper_nblocks_c( hid_t_f *space_id , hssize_t_f * num_blocks)
+/******/
 {
   int ret_value = 0;
   hid_t c_space_id;
@@ -158,22 +209,31 @@ nh5sget_select_hyper_nblocks_c( hid_t_f *space_id , hssize_t_f * num_blocks)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sget_select_elem_npoints_c
- * Purpose:     Call H5Sget_select_elem_npoints to
+/****if* H5Sf/h5sget_select_elem_npoints_c
+ * NAME
+ *        h5sget_select_elem_npoints_c
+ * PURPOSE
+ *     Call H5Sget_select_elem_npoints to
  *              get the the number of element points in
  *              the current dataspace selection if successful
- * Inputs:      space_id - identifier of the dataspace
- * Outputs:     num_points -  number of element points in
+ * INPUTS
+ *      space_id - identifier of the dataspace
+ * OUTPUTS
+ *     num_points -  number of element points in
  *              the current dataspace selection
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Monday, November 15, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sget_select_elem_npoints_c( hid_t_f *space_id , hssize_t_f * num_points)
+/******/
 {
   int ret_value = 0;
   hid_t c_space_id;
@@ -187,31 +247,40 @@ nh5sget_select_elem_npoints_c( hid_t_f *space_id , hssize_t_f * num_points)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sget_select_hyper_blocklist_c
- * Purpose:     Call H5Sget_select_hyper_blocklist to
+/****if* H5Sf/h5sget_select_hyper_blocklist_c
+ * NAME
+ *        h5sget_select_hyper_blocklist_c
+ * PURPOSE
+ *     Call H5Sget_select_hyper_blocklist to
  *              get a list of the hyperslab blocks currently selected
  *              Starting with the startblock-th block in the
  *              list of blocks, num_blocks blocks are put into the user's
  *              buffer. If the user's buffer fills up before numblocks
  *              blocks are inserted, the buffer
  *              will contain only as many blocks as fit.
- * Inputs:      space_id - identifier of the dataspace
+ * INPUTS
+ *      space_id - identifier of the dataspace
  *              startblock - Hyperslab block to start with
  *              num_blocks -  number of hyperslab blocks in
  *                            the current dataspace selection
- * Outputs:     buf - List of hyperslab blocks selected
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * OUTPUTS
+ *     buf - List of hyperslab blocks selected
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Monday, November 15, 1999
- * Modifications:
+ * HISTORY
+ *
  *              Transpose dimension arrays because of C-FORTRAN storage order
- *              M.S. Breitenfeld
- *---------------------------------------------------------------------------*/
+ *              M. Scot Breitenfeld
+ * SOURCE
+*/
 
 int_f
 nh5sget_select_hyper_blocklist_c( hid_t_f *space_id ,hsize_t_f * startblock,
                                   hsize_t_f * num_blocks, hsize_t_f * buf)
+/******/
 {
   int ret_value = -1;
   hid_t c_space_id;
@@ -256,25 +325,34 @@ nh5sget_select_hyper_blocklist_c( hid_t_f *space_id ,hsize_t_f * startblock,
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sget_select_bounds_c
- * Purpose:     Call H5Sget_select_bounds to retrieve the coordinates
+/****if* H5Sf/h5sget_select_bounds_c
+ * NAME
+ *        h5sget_select_bounds_c
+ * PURPOSE
+ *     Call H5Sget_select_bounds to retrieve the coordinates
  *              of the bounding box containing the current selection
  *              and places them into user-supplied buffers
- * Inputs:      space_id - identifier of the dataspace
- * Outputs:     start -  Starting coordinates of the bounding box
+ * INPUTS
+ *      space_id - identifier of the dataspace
+ * OUTPUTS
+ *     start -  Starting coordinates of the bounding box
  *              end -  Ending coordinates of the bounding box,
  *                     i.e., the coordinates of the diagonally opposite corne
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Wednesday, November 17, 1999
- * Modifications: swapped array bounds to account for C and Fortran reversed
+ * HISTORY
+ * swapped array bounds to account for C and Fortran reversed
  *                matrix notation.
- *                M.S. Breitenfeld
- *---------------------------------------------------------------------------*/
+ *                M. Scot Breitenfeld
+ * SOURCE
+*/
 
 int_f
 nh5sget_select_bounds_c( hid_t_f *space_id , hsize_t_f * start, hsize_t_f * end)
+/******/
 {
     hid_t c_space_id;
     hsize_t c_start[H5S_MAX_RANK];
@@ -299,9 +377,11 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sget_select_elem_pointlist_c
- * Purpose:     Call  H5Sget_select_elem_pointlist
+/****if* H5Sf/h5sget_select_elem_pointlist_c
+ * NAME
+ *        h5sget_select_elem_pointlist_c
+ * PURPOSE
+ *     Call  H5Sget_select_elem_pointlist
  *              get a list of  element points in the
  *              current dataspace selectin.
  *              Starting with the startpoint-th point in the
@@ -309,19 +389,26 @@ done:
  *              buffer. If the user's buffer fills up before numpoints
  *              points are inserted, the buffer
  *              will contain only as many points as fit.
- * Inputs:      space_id - identifier of the dataspace
+ * INPUTS
+ *      space_id - identifier of the dataspace
  *              startpoint - Element point to start with
  *              numpoints -  Number of element points to get
- * Outputs:     buf - List of element points selected
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * OUTPUTS
+ *     buf - List of element points selected
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Wednesday, November 17, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sget_select_elem_pointlist_c( hid_t_f *space_id ,hsize_t_f * startpoint,
                                   hsize_t_f * numpoints, hsize_t_f * buf)
+/******/
 {
   int ret_value = -1;
   hid_t c_space_id;
@@ -368,18 +455,26 @@ nh5sget_select_elem_pointlist_c( hid_t_f *space_id ,hsize_t_f * startpoint,
 
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5sselect_all_c
- * Purpose:     Call H5Sselect_all to select entire dataspace
- * Inputs:      space_id - identifier of the dataspace
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Sf/h5sselect_all_c
+ * NAME
+ *        h5sselect_all_c
+ * PURPOSE
+ *     Call H5Sselect_all to select entire dataspace
+ * INPUTS
+ *      space_id - identifier of the dataspace
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, August 10, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sselect_all_c ( hid_t_f *space_id )
+/******/
 {
   int ret_value = 0;
   hid_t c_space_id;
@@ -389,18 +484,26 @@ nh5sselect_all_c ( hid_t_f *space_id )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sselect_none_c
- * Purpose:     Call H5Sselect_none to reset the selection region
- * Inputs:      space_id - identifier of the dataspace
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Sf/h5sselect_none_c
+ * NAME
+ *        h5sselect_none_c
+ * PURPOSE
+ *     Call H5Sselect_none to reset the selection region
+ * INPUTS
+ *      space_id - identifier of the dataspace
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, August 10, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sselect_none_c ( hid_t_f *space_id )
+/******/
 {
   int ret_value = 0;
   hid_t c_space_id;
@@ -410,21 +513,30 @@ nh5sselect_none_c ( hid_t_f *space_id )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sselect_valid_c
- * Purpose:     Call H5Sselect_valid to verify that selection
+/****if* H5Sf/h5sselect_valid_c
+ * NAME
+ *        h5sselect_valid_c
+ * PURPOSE
+ *     Call H5Sselect_valid to verify that selection
  *              is within dataspace extent.
- * Inputs:      space_id - identifier of the dataspace
- * Outputs:     flag - 0 if not valid selection, 1 if is valid selection,
+ * INPUTS
+ *      space_id - identifier of the dataspace
+ * OUTPUTS
+ *     flag - 0 if not valid selection, 1 if is valid selection,
  *              and negative on failure.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, August 10, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sselect_valid_c ( hid_t_f *space_id , int_f *flag )
+/******/
 {
   int ret_value = 0;
   hid_t c_space_id;
@@ -437,20 +549,29 @@ nh5sselect_valid_c ( hid_t_f *space_id , int_f *flag )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sget_simple_extent_npoints_c
- * Purpose:     Call H5Sget_simple_extent_npoints to determine the number
+/****if* H5Sf/h5sget_simple_extent_npoints_c
+ * NAME
+ *        h5sget_simple_extent_npoints_c
+ * PURPOSE
+ *     Call H5Sget_simple_extent_npoints to determine the number
  *              of elements in a dataspace
- * Inputs:      space_id - identifier of the dataspace
- * Outputs:     npoints - number of points in a dataspace
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * INPUTS
+ *      space_id - identifier of the dataspace
+ * OUTPUTS
+ *     npoints - number of points in a dataspace
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 11, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sget_simple_extent_npoints_c ( hid_t_f *space_id , hsize_t_f *npoints )
+/******/
 {
   int ret_value = 0;
   hid_t c_space_id;
@@ -463,20 +584,29 @@ nh5sget_simple_extent_npoints_c ( hid_t_f *space_id , hsize_t_f *npoints )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sget_select_npoints_c
- * Purpose:     Call H5Sget_select_npoints to determine the number
+/****if* H5Sf/h5sget_select_npoints_c
+ * NAME
+ *        h5sget_select_npoints_c
+ * PURPOSE
+ *     Call H5Sget_select_npoints to determine the number
  *              of elements in a dataspace selection
- * Inputs:      space_id - identifier of the dataspace
- * Outputs:     npoints - number of points in a dataspace selection
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * INPUTS
+ *      space_id - identifier of the dataspace
+ * OUTPUTS
+ *     npoints - number of points in a dataspace selection
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 11, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sget_select_npoints_c ( hid_t_f *space_id , hssize_t_f *npoints )
+/******/
 {
   int ret_value = 0;
   hssize_t c_npoints;
@@ -489,20 +619,29 @@ nh5sget_select_npoints_c ( hid_t_f *space_id , hssize_t_f *npoints )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sget_simple_extent_ndims_c
- * Purpose:     Call H5Sget_simple_extent_ndims to determine the number
+/****if* H5Sf/h5sget_simple_extent_ndims_c
+ * NAME
+ *        h5sget_simple_extent_ndims_c
+ * PURPOSE
+ *     Call H5Sget_simple_extent_ndims to determine the number
  *              dimensions
- * Inputs:      space_id - identifier of the dataspace
- * Outputs:     rank - number of dataspace dimensions
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * INPUTS
+ *      space_id - identifier of the dataspace
+ * OUTPUTS
+ *     rank - number of dataspace dimensions
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 11, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sget_simple_extent_ndims_c ( hid_t_f *space_id , int_f *ndims )
+/******/
 {
   int ret_value = 0;
   hid_t c_space_id;
@@ -515,21 +654,30 @@ nh5sget_simple_extent_ndims_c ( hid_t_f *space_id , int_f *ndims )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sget_simple_extent_type_c
- * Purpose:     Call H5Sget_simple_extent_type to determine the class type
+/****if* H5Sf/h5sget_simple_extent_type_c
+ * NAME
+ *        h5sget_simple_extent_type_c
+ * PURPOSE
+ *     Call H5Sget_simple_extent_type to determine the class type
  *              of a dataspace
- * Inputs:      space_id - identifier of the dataspace
- * Outputs:     classtype - class type; possible values are:
+ * INPUTS
+ *      space_id - identifier of the dataspace
+ * OUTPUTS
+ *     classtype - class type; possible values are:
  *              H5S_SCALAR_F (0), H5S_SIMPLE_F (1), H5S_NULL_F (2)
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 11, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sget_simple_extent_type_c ( hid_t_f *space_id , int_f *classtype)
+/******/
 {
   int ret_value = 0;
   hid_t c_space_id;
@@ -547,20 +695,28 @@ nh5sget_simple_extent_type_c ( hid_t_f *space_id , int_f *classtype)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5soffset_simple_c
- * Purpose:     Call H5Soffset_simple to set the offset of a simple
+/****if* H5Sf/h5soffset_simple_c
+ * NAME
+ *        h5soffset_simple_c
+ * PURPOSE
+ *     Call H5Soffset_simple to set the offset of a simple
  *              dataspace
- * Inputs:      space_id - identifier of the dataspace
+ * INPUTS
+ *      space_id - identifier of the dataspace
  *              offset - offset array
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 11, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5soffset_simple_c ( hid_t_f *space_id , hssize_t_f *offset)
+/******/
 {
     hid_t c_space_id;
     int rank;
@@ -586,22 +742,30 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sset_extent_simple_c
- * Purpose:     Call H5Sset_extent_simple to set or reset size of
+/****if* H5Sf/h5sset_extent_simple_c
+ * NAME
+ *        h5sset_extent_simple_c
+ * PURPOSE
+ *     Call H5Sset_extent_simple to set or reset size of
  *              existing  dataspace
- * Inputs:      space_id - identifier of the dataspace
+ * INPUTS
+ *      space_id - identifier of the dataspace
  *              rank - dataspace rank
  *              current_size - array with the new dimension sizes
  *              maximum_size - aray with maximum sizes of dimensions
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 11, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sset_extent_simple_c ( hid_t_f *space_id , int_f *rank, hsize_t_f *current_size, hsize_t_f *maximum_size)
+/******/
 {
     hsize_t c_current_size[H5S_MAX_RANK];
     hsize_t c_maximum_size[H5S_MAX_RANK];
@@ -623,21 +787,31 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sget_simple_extent_dims_c
- * Purpose:     Call H5Sget_simple_extent_dims to retrieve sizes of an
+
+/****if* H5Sf/h5sget_simple_extent_dims_c
+ * NAME
+ *        h5sget_simple_extent_dims_c
+ * PURPOSE
+ *     Call H5Sget_simple_extent_dims to retrieve sizes of an
  *              existing  dataspace
- * Inputs:      space_id - identifier of the dataspace
- * Outputs:     dims - array with the dimension sizes
+ * INPUTS
+ *      space_id - identifier of the dataspace
+ * OUTPUTS
+ *     dims - array with the dimension sizes
  *              maxdims - aray with maximum sizes of dimensions
- * Returns:     number of dataspace dimensions (rank) on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     number of dataspace dimensions (rank) on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 11, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sget_simple_extent_dims_c ( hid_t_f *space_id , hsize_t_f *dims, hsize_t_f *maxdims)
+/******/
 {
     hid_t c_space_id;
     hsize_t c_dims[H5S_MAX_RANK];
@@ -668,21 +842,30 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sis_simple_c
- * Purpose:     Call H5Sis_simple to detrmine if the dataspace
+/****if* H5Sf/h5sis_simple_c
+ * NAME
+ *        h5sis_simple_c
+ * PURPOSE
+ *     Call H5Sis_simple to detrmine if the dataspace
  *              is simple.
- * Inputs:      space_id - identifier of the dataspace
- * Outputs:     flag - 0 if not simple, 1 if is simple,
+ * INPUTS
+ *      space_id - identifier of the dataspace
+ * OUTPUTS
+ *     flag - 0 if not simple, 1 if is simple,
  *              and negative on failure.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 11, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sis_simple_c ( hid_t_f *space_id , int_f *flag )
+/******/
 {
   int ret_value = 0;
   hid_t c_space_id;
@@ -696,19 +879,27 @@ nh5sis_simple_c ( hid_t_f *space_id , int_f *flag )
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5sextent_copy_c
- * Purpose:     Call H5Sextent_copy to copy an extent of dataspace
- * Inputs:      dest_space_id - identifier of the destination dataspace
+/****if* H5Sf/h5sextent_copy_c
+ * NAME
+ *        h5sextent_copy_c
+ * PURPOSE
+ *     Call H5Sextent_copy to copy an extent of dataspace
+ * INPUTS
+ *      dest_space_id - identifier of the destination dataspace
  *              source_space_id - identifier of the source dataspace
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 11, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sextent_copy_c ( hid_t_f *dest_space_id , hid_t_f *source_space_id)
+/******/
 {
   int ret_value = 0;
   hid_t c_dest_space_id, c_source_space_id;
@@ -721,18 +912,26 @@ nh5sextent_copy_c ( hid_t_f *dest_space_id , hid_t_f *source_space_id)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sset_extent_none_c
- * Purpose:     Call H5Sset_extent_none to remove extent from a dataspace
- * Inputs:      space_id - dataspace identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Sf/h5sset_extent_none_c
+ * NAME
+ *        h5sset_extent_none_c
+ * PURPOSE
+ *     Call H5Sset_extent_none to remove extent from a dataspace
+ * INPUTS
+ *      space_id - dataspace identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 11, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sset_extent_none_c ( hid_t_f *space_id )
+/******/
 {
   int ret_value = 0;
   hid_t c_space_id;
@@ -744,10 +943,13 @@ nh5sset_extent_none_c ( hid_t_f *space_id )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sselect_hyperslab_c
- * Purpose:     Call H5Sselect_hyperslab to select a hyperslab
- * Inputs:      space_id - identifier of the dataspace
+/****if* H5Sf/h5sselect_hyperslab_c
+ * NAME
+ *        h5sselect_hyperslab_c
+ * PURPOSE
+ *     Call H5Sselect_hyperslab to select a hyperslab
+ * INPUTS
+ *      space_id - identifier of the dataspace
  *              operator - defines how the new selection is combined
  *              with the previous one; current values are
  *              H5S_SELECT_SET_F (0) and H5S_SELECT_OR_F (1)
@@ -755,14 +957,19 @@ nh5sset_extent_none_c ( hid_t_f *space_id )
  *              count - number of blocks included in the hyperslab
  *              stride - hyperslab stride (interval between blocks)
  *              block - size of block in the hyperslab
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 11, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sselect_hyperslab_c ( hid_t_f *space_id , int_f *op, hsize_t_f *start, hsize_t_f *count, hsize_t_f *stride, hsize_t_f *block)
+/******/
 {
     hsize_t c_start[H5S_MAX_RANK];
     hsize_t c_count[H5S_MAX_RANK];
@@ -795,25 +1002,35 @@ done:
     return ret_value;
 }
 
+
 #ifdef NEW_HYPERSLAB_API
-/*----------------------------------------------------------------------------
- * Name:        h5scombine_hyperslab_c
- * Purpose:     Call H5Scombine_hyperslab
- * Inputs:      space_id - identifier of the dataspace
+/****if* H5Sf/h5scombine_hyperslab_c
+ * NAME
+ *        h5scombine_hyperslab_c
+ * PURPOSE
+ *     Call H5Scombine_hyperslab
+ * INPUTS
+ *      space_id - identifier of the dataspace
  *              operator - defines how the new selection is combined
  *              start - offset of start of hyperslab
  *              count - number of blocks included in the hyperslab
  *              stride - hyperslab stride (interval between blocks)
  *              block - size of block in the hyperslab
- * Outputs:     hyper_id - identifier for the new dataspace
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     hyper_id - identifier for the new dataspace
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, October 7, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5scombine_hyperslab_c ( hid_t_f *space_id , int_f *op, hsize_t_f *start, hsize_t_f *count, hsize_t_f *stride, hsize_t_f *block, hid_t_f *hyper_id)
+/******/
 {
   int ret_value = -1;
   hid_t c_space_id;
@@ -869,21 +1086,30 @@ DONE:
   if(c_block != NULL) HDfree(c_block);
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5scombine_select_c
- * Purpose:     Call H5Scombine_ select
- * Inputs:      space1_id - identifier of the first dataspace
+/****if* H5Sf/h5scombine_select_c
+ * NAME
+ *        h5scombine_select_c
+ * PURPOSE
+ *     Call H5Scombine_ select
+ * INPUTS
+ *      space1_id - identifier of the first dataspace
  *              operator - defines how the new selection is combined
  *              space2_id - identifier of the second dataspace
- * Outputs:     ds_id   - identifier for the new dataspace
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     ds_id   - identifier for the new dataspace
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, October 7, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5scombine_select_c ( hid_t_f *space1_id , int_f *op, hid_t_f *space2_id, hid_t_f *ds_id)
+/******/
 {
   int ret_value = -1;
   hid_t c_space1_id;
@@ -901,20 +1127,28 @@ nh5scombine_select_c ( hid_t_f *space1_id , int_f *op, hid_t_f *space2_id, hid_t
   ret_value = 0;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5sselect_select_c
- * Purpose:     Call H5Sselect_ select
- * Inputs:      space1_id - identifier of the first dataspace  to modify
+/****if* H5Sf/h5sselect_select_c
+ * NAME
+ *        h5sselect_select_c
+ * PURPOSE
+ *     Call H5Sselect_ select
+ * INPUTS
+ *      space1_id - identifier of the first dataspace  to modify
  *              operator - defines how the new selection is combined
  *              space2_id - identifier of the second dataspace
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, October 7, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sselect_select_c ( hid_t_f *space1_id , int_f *op, hid_t_f *space2_id)
+/******/
 {
   int ret_value = -1;
   hid_t c_space1_id;
@@ -930,19 +1164,27 @@ nh5sselect_select_c ( hid_t_f *space1_id , int_f *op, hid_t_f *space2_id)
   return ret_value;
 }
 #endif /*NEW_HYPERSLAB_API*/
-/*----------------------------------------------------------------------------
- * Name:        h5sget_select_type_c
- * Purpose:     Call H5Sget_select_type
- * Inputs:      space_id - identifier of the dataspace
- * Outputs:     type - type of selection
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Sf/h5sget_select_type_c
+ * NAME
+ *        h5sget_select_type_c
+ * PURPOSE
+ *     Call H5Sget_select_type
+ * INPUTS
+ *      space_id - identifier of the dataspace
+ * OUTPUTS
+ *     type - type of selection
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Monday, October 7, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
-
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5sget_select_type_c ( hid_t_f *space_id , int_f *type)
+/******/
 {
   int ret_value = -1;
   hid_t c_space_id;
@@ -957,23 +1199,31 @@ nh5sget_select_type_c ( hid_t_f *space_id , int_f *type)
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5sselect_elements_c
- * Purpose:     Call H5Sselect_elements to select elements of a dataspace
- * Inputs:      space_id - identifier of the dataspace
+/****if* H5Sf/h5sselect_elements_c
+ * NAME
+ *        h5sselect_elements_c
+ * PURPOSE
+ *     Call H5Sselect_elements to select elements of a dataspace
+ * INPUTS
+ *      space_id - identifier of the dataspace
  *              operator - defines how the new selection is combined
  *              with the previous one; current values are
  *              H5S_SELECT_SET_F (0)
  *              nelements - number of elements in the selection
  *              coord - arrays with the elements coordinates
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, August 11, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sselect_elements_c ( hid_t_f *space_id , int_f *op, size_t_f *nelements,  hsize_t_f *coord)
+/******/
 {
   int ret_value = -1;
   hid_t c_space_id;
@@ -1004,22 +1254,31 @@ nh5sselect_elements_c ( hid_t_f *space_id , int_f *op, size_t_f *nelements,  hsi
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sdecode_c
- * Purpose:     Call H5Sdecode
- * Inputs:
+/****if* H5Sf/h5sdecode_c
+ * NAME
+ *        h5sdecode_c
+ * PURPOSE
+ *     Call H5Sdecode
+ * INPUTS
+ *
  *		buf     - Buffer for the data space object to be decoded.
- * Outputs:
+ * OUTPUTS
+ *
  *              obj_id  - Object_id (non-negative)
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 26, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sdecode_c ( _fcd buf, hid_t_f *obj_id )
+/******/
 {
   int ret_value = -1;
   unsigned char *c_buf = NULL;  /* Buffer to hold C string */
@@ -1041,21 +1300,29 @@ nh5sdecode_c ( _fcd buf, hid_t_f *obj_id )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sencode_c
- * Purpose:     Call H5Sencode
- * Inputs:
+/****if* H5Sf/h5sencode_c
+ * NAME
+ *        h5sencode_c
+ * PURPOSE
+ *     Call H5Sencode
+ * INPUTS
+ *
  *            obj_id - Identifier of the object to be encoded.
  *		 buf - Buffer for the object to be encoded into.
  *            nalloc - The size of the allocated buffer.
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              March 26, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sencode_c (_fcd buf, hid_t_f *obj_id, size_t_f *nalloc )
+/******/
 {
   int ret_value = -1;
   unsigned char *c_buf = NULL;          /* Buffer to hold C string */
@@ -1102,22 +1369,31 @@ nh5sencode_c (_fcd buf, hid_t_f *obj_id, size_t_f *nalloc )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5sextent_equal_c
- * Purpose:     Call H5Sextent_equal
- * Inputs:
+/****if* H5Sf/h5sextent_equal_c
+ * NAME
+ *        h5sextent_equal_c
+ * PURPOSE
+ *     Call H5Sextent_equal
+ * INPUTS
+ *
  *		space1_id - First dataspace identifier.
  *              space2_id - Second dataspace identifier.
- * Outputs:
+ * OUTPUTS
+ *
  *              equal - TRUE if equal, FALSE if unequal.
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
  *              April 4, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5sextent_equal_c ( hid_t_f * space1_id, hid_t_f *space2_id, hid_t_f *c_equal)
+/******/
 {
   int ret_value = -1;
 
diff --git a/fortran/src/H5Sff.f90 b/fortran/src/H5Sff.f90
index 06bebef..9ef8ca8 100644
--- a/fortran/src/H5Sff.f90
+++ b/fortran/src/H5Sff.f90
@@ -1,3 +1,18 @@
+!****h* ROBODoc/H5S
+!
+! NAME
+!  MODULE H5S
+!
+! FILE
+!  fortran/src/H5Sff.f90
+!
+! PURPOSE
+!  This file contains Fortran interfaces for H5S functions. It includes
+!  all the functions that are independent on whether the Fortran 2003 functions
+!  are enabled or disabled.
+!
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,44 +28,50 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5S function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
 !
-! This file contains Fortran90 interfaces for H5S functions.
-!
-      MODULE H5S
-        USE H5GLOBAL
+!*****
 
-        CONTAINS
+MODULE H5S
+  USE H5GLOBAL
 
-!----------------------------------------------------------------------
-! Name:		h5screate_simple_f
+CONTAINS
+
+!
+!****s* H5S/h5screate_simple_f
 !
-! Purpose: 	Creates a new simple data space and opens it for access	.
+! NAME
+!  h5screate_simple_f
 !
-! Inputs:
-!		rank		- number of dimensions
-!		dims		- an array of the size of each dimension
-! Outputs:
-!		space_id	- dataspace identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!		maxdims		- an array of the maximum size of each
-!				  dimension
+! PURPOSE 	
+!  Creates a new simple data space and opens it for access	.
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! INPUTS
+!  rank        - number of dimensions
+!  dims        - an array of the size of each dimension
+! OUTPUTS
+!  space_id    - dataspace identifier
+!  hdferr      - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  maxdims     - an array of the maximum size of each dimension
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+! SOURCE
           SUBROUTINE h5screate_simple_f(rank, dims, space_id, hdferr, maxdims)
 
             IMPLICIT NONE
-            INTEGER, INTENT(IN) :: rank     ! Number of dataspace dimensions
+            INTEGER, INTENT(IN) :: rank             ! Number of dataspace dimensions
             INTEGER(HSIZE_T), INTENT(IN) :: dims(rank)
                                                     ! Array with the dimension
                                                     ! sizes
@@ -59,11 +80,9 @@
             INTEGER(HSIZE_T), OPTIONAL, INTENT(IN) :: maxdims(rank)
                                                     ! Array with the maximum
                                                     ! dimension sizes
+!*****
             INTEGER(HSIZE_T), ALLOCATABLE, DIMENSION(:) :: f_maxdims
 
-!            INTEGER, EXTERNAL :: h5screate_simple_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5screate_simple_c(rank, dims, maxdims, space_id)
               USE H5GLOBAL
@@ -92,38 +111,34 @@
 
           END SUBROUTINE h5screate_simple_f
 
-!----------------------------------------------------------------------
-! Name:		h5sclose_f
 !
-! Purpose: 	Releases and terminates access to a dataspace.
+!****s* H5S/h5sclose_f
 !
-! Inputs:
-!		space_id	- identifier of dataspace to release
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5sclose_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Releases and terminates access to a dataspace.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! INPUTS
+!  space_id    - identifier of dataspace to release
+! OUTPUTS
+!  hdferr      - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+!
+! SOURCE
           SUBROUTINE h5sclose_f(space_id, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier
             INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
-!            INTEGER, EXTERNAL :: h5sclose_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5sclose_c(space_id)
               USE H5GLOBAL
@@ -138,31 +153,34 @@
 
           END SUBROUTINE h5sclose_f
 
-!----------------------------------------------------------------------
-! Name:		h5screate_f
 !
-! Purpose: 	Creates a new dataspace of a specified type.
+!****s* H5S/h5screate_f
+!
+! NAME
+!  h5screate_f
+!
+! PURPOSE
+!  Creates a new dataspace of a specified type.
 !
-! Inputs:
-!		classtype	- the type of the dataspace to be created
-! Outputs:
-!		space_id	- dataspace identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! INPUTS
+!  classtype   - the type of the dataspace to be created
+! OUTPUTS
+!  space_id    - dataspace identifier
+!  hdferr      - Returns 0 if successful and -1 if fails
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+!
+! NOTES
 !
-! Comment:
-!----------------------------------------------------------------------
 
+! SOURCE
           SUBROUTINE h5screate_f(classtype, space_id, hdferr)
             IMPLICIT NONE
             INTEGER, INTENT(IN) :: classtype     ! The type of the dataspace
@@ -173,10 +191,7 @@
                                                  !  H5S_NULL_F(2)
             INTEGER(HID_T), INTENT(OUT) :: space_id ! Dataspace identifier
             INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5screate_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5screate_c(classtype, space_id)
               USE H5GLOBAL
@@ -192,41 +207,41 @@
 
           END SUBROUTINE h5screate_f
 
-!----------------------------------------------------------------------
-! Name:		h5scopy_f
 !
-! Purpose: 	Creates an exact copy of a dataspace.
+!****s* H5S/h5scopy_f
+!
+! NAME
+!  h5scopy_f
 !
-! Inputs:
-!		space_id	- dataspace identifier
-! Outputs:
-!		new_space_id	- identifier of dataspace's copy
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Creates an exact copy of a dataspace.
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! INPUTS
+!  space_id 	 - dataspace identifier
+! OUTPUTS
+!  new_space_id  - identifier of dataspace's copy
+!  hdferr        - Returns 0 if successful and -1 if fails
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+!
+! NOTES
 !
-! Comment:
-!----------------------------------------------------------------------
 
+! SOURCE
           SUBROUTINE h5scopy_f(space_id, new_space_id, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier
             INTEGER(HID_T), INTENT(OUT) :: new_space_id
                                              ! Identifier of dataspace's copy
             INTEGER, INTENT(OUT) :: hdferr   ! Error code
-
-!            INTEGER, EXTERNAL :: h5scopy_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5scopy_c(space_id, new_space_id)
               USE H5GLOBAL
@@ -242,31 +257,31 @@
 
           END SUBROUTINE h5scopy_f
 
-!----------------------------------------------------------------------
-! Name:		h5sget_select_hyper_nblocks_f
 !
-! Purpose: 	Get number of hyperslab blocks.
+!****s* H5S/h5sget_select_hyper_nblocks_f
 !
-! Inputs:
-!		space_id	- dataspace identifier
-! Outputs:
-!		num_blocks	- number of hyperslab blocks in the current
-!				  hyperslab selection
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5sget_select_hyper_nblocks_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Get number of hyperslab blocks.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! INPUTS
+!  space_id    - dataspace identifier
+! OUTPUTS
+!  num_blocks  - number of hyperslab blocks in the current
+!                hyperslab selection
+!  hdferr      - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+!
+! SOURCE
           SUBROUTINE h5sget_select_hyper_nblocks_f(space_id, num_blocks, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier
@@ -275,15 +290,12 @@
                                              !in the current dataspace
                                              !selection
             INTEGER, INTENT(OUT) :: hdferr   ! Error code
-
-!            INTEGER, EXTERNAL :: h5sget_select_hyper_nblocks_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5sget_select_hyper_nblocks_c (space_id, num_blocks)
               USE H5GLOBAL
               !DEC$IF DEFINED(HDF5F90_WINDOWS)
-!DEC$ATTRIBUTES C,reference,decorate,alias:'H5SGET_SELECT_HYPER_NBLOCKS_C'::h5sget_select_hyper_nblocks_c
+!  DEC$ ATTRIBUTES C,reference,decorate,alias:'H5SGET_SELECT_HYPER_NBLOCKS_C'::h5sget_select_hyper_nblocks_c
               !DEC$ENDIF
               INTEGER(HID_T), INTENT(IN) :: space_id
               INTEGER(HSSIZE_T), INTENT(OUT) :: num_blocks
@@ -294,33 +306,32 @@
 
           END SUBROUTINE h5sget_select_hyper_nblocks_f
 
-!----------------------------------------------------------------------
-! Name:		h5sget_select_hyper_blocklist_f
 !
-! Purpose: 	Gets the list of hyperslab blocks currently selected.
+!****s* H5S/h5sget_select_hyper_blocklist_f
 !
-! Inputs:
-!		space_id	- dataspace identifier
-!		startblock	- hyperslab block to start with
-!		num_blocks	- number of blocks to get
-! Outputs:
-!		buf		- buffer to hold block list
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5sget_select_hyper_blocklist_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Gets the list of hyperslab blocks currently selected.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! INPUTS
+!  space_id    - dataspace identifier
+!  startblock  - hyperslab block to start with
+!  num_blocks  - number of blocks to get
+! OUTPUTS
+!  buf 	       - buffer to hold block list
+!  hdferr      - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+! SOURCE
           SUBROUTINE h5sget_select_hyper_blocklist_f(space_id, startblock, &
                                                     num_blocks, buf, hdferr)
             IMPLICIT NONE
@@ -334,11 +345,8 @@
             INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: buf
                                              !List of hyperslab blocks selected
             INTEGER, INTENT(OUT) :: hdferr   ! Error code
+!*****
 
-
-!            INTEGER, EXTERNAL :: h5sget_select_hyper_blocklist_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5sget_select_hyper_blocklist_c(space_id, startblock, &
                                                               num_blocks, buf )
@@ -359,33 +367,34 @@
 
           END SUBROUTINE h5sget_select_hyper_blocklist_f
 
-!----------------------------------------------------------------------
-! Name:		h5sget_select_bounds_f
 !
-! Purpose: 	Gets the bounding box containing the current selection.
+!****s* H5S/h5sget_select_bounds_f
 !
-! Inputs:
-!		space_id	- dataspace identifier
+! NAME
+!  h5sget_select_bounds_f
 !
-! Outputs:
-!		start		- starting coordinates of bounding box
-!		end		- ending coordinates of bounding box
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Gets the bounding box containing the current selection.
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! INPUTS
+!  space_id    - dataspace identifier
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! OUTPUTS
+!  start       - starting coordinates of bounding box
+!  end 	       - ending coordinates of bounding box
+!  hdferr      - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  NONE
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+! SOURCE
   SUBROUTINE  h5sget_select_bounds_f(space_id, start, END, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier
@@ -396,7 +405,7 @@
                                            !i.e., the coordinates of the diagonally
                                            !opposite corner
     INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
+!*****
     INTERFACE
        INTEGER FUNCTION h5sget_select_bounds_c(space_id, start, END)
          USE H5GLOBAL
@@ -413,31 +422,31 @@
 
   END SUBROUTINE h5sget_select_bounds_f
 
-!----------------------------------------------------------------------
-! Name:		h5sget_select_elem_npoints_f
 !
-! Purpose: 	Gets the number of element points in the current selection
+!****s* H5S/h5sget_select_elem_npoints_f
+!
+! NAME
+!  h5sget_select_elem_npoints_f
 !
-! Inputs:
-!		space_id	- dataspace identifier
-! Outputs:
-!		num_points	- number of element points in the current
-!				  dataspace selection
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Gets the number of element points in the current selection
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! INPUTS
+!  space_id 	 - dataspace identifier
+! OUTPUTS
+!  num_points 	 - number of element points in the current
+!                  dataspace selection
+!  hdferr        - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
 !
-! Comment:
-!----------------------------------------------------------------------
+! SOURCE
           SUBROUTINE h5sget_select_elem_npoints_f(space_id, num_points, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier
@@ -446,15 +455,12 @@
                                              !in the current dataspace
                                              !selection
             INTEGER, INTENT(OUT) :: hdferr   ! Error code
-
-!            INTEGER, EXTERNAL :: h5sget_select_elem_npoints_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5sget_select_elem_npoints_c (space_id, num_points)
               USE H5GLOBAL
               !DEC$IF DEFINED(HDF5F90_WINDOWS)
-!DEC$ATTRIBUTES C,reference,decorate,alias:'H5SGET_SELECT_ELEM_NPOINTS_C'::h5sget_select_elem_npoints_c
+!  DEC$ ATTRIBUTES C,reference,decorate,alias:'H5SGET_SELECT_ELEM_NPOINTS_C'::h5sget_select_elem_npoints_c
               !DEC$ENDIF
               INTEGER(HID_T), INTENT(IN) :: space_id
               INTEGER(HSSIZE_T), INTENT(OUT) :: num_points
@@ -465,33 +471,32 @@
 
           END SUBROUTINE h5sget_select_elem_npoints_f
 
-!----------------------------------------------------------------------
-! Name:		h5sget_select_elem_pointlist_f
 !
-! Purpose:	Gets the list of element points currently selected.
+!****s* H5S/h5sget_select_elem_pointlist_f
 !
-! Inputs:
-!		space_id	- dataspace identifier
-!		startpoint	- element point to start with
-!		num_points	- number of elemnt points to get
-! Outputs:
-!		buf		- buffer with element points selected
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5sget_select_elem_pointlist_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Gets the list of element points currently selected.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! INPUTS
+!  space_id    - dataspace identifier
+!  startpoint  - element point to start with
+!  num_points  - number of elemnt points to get
+! OUTPUTS
+!  buf 	       - buffer with element points selected
+!  hdferr      - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+!
+! SOURCE
           SUBROUTINE h5sget_select_elem_pointlist_f(space_id, startpoint, &
                                                     num_points, buf, hdferr)
             IMPLICIT NONE
@@ -503,13 +508,13 @@
             INTEGER(HSIZE_T), DIMENSION(*), INTENT(OUT) :: buf
                                              !List of element points selected
             INTEGER, INTENT(OUT) :: hdferr   ! Error code
-
+!*****
             INTERFACE
               INTEGER FUNCTION h5sget_select_elem_pointlist_c(space_id, startpoint, &
                                                               num_points, buf )
               USE H5GLOBAL
               !DEC$IF DEFINED(HDF5F90_WINDOWS)
-!DEC$ATTRIBUTES C,reference,decorate,alias:'H5SGET_SELECT_ELEM_POINTLIST_C'::h5sget_select_elem_pointlist_c
+!  DEC$ ATTRIBUTES C,reference,decorate,alias:'H5SGET_SELECT_ELEM_POINTLIST_C'::h5sget_select_elem_pointlist_c
               !DEC$ENDIF
               INTEGER(HID_T), INTENT(IN) :: space_id
               INTEGER(HSIZE_T), INTENT(IN) :: startpoint
@@ -523,52 +528,48 @@
 
           END SUBROUTINE h5sget_select_elem_pointlist_f
 
-!----------------------------------------------------------------------
-! Name:		h5sselect_elements_f
-!
-! Purpose:	Selects elements to be included in the selection for
-!		a dataspace
-!
-! Inputs:
-!		space_id	- dataspace identifier
-!		operator	- flag, valid values are:
-!				  H5S_SELECT_SET_F (0)
-!				  H5S_SELECT_OR_F (1)
-!		rank		- number of dataspace dimensions
-!		num_elements	- number of elements to be selected
-!		coord		- 2D (rank x num_elements) array with the
-!				  elements coordinates
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
+!
+!****s* H5S/h5sselect_elements_f
+!
+! NAME
+!  h5sselect_elements_f
+!
+! PURPOSE
+!  Selects elements to be included in the selection for
+!  a dataspace
+!
+! INPUTS
+!  space_id 	 - dataspace identifier
+!  operator 	 - flag, valid values are:
+!                   H5S_SELECT_SET_F 
+!                   H5S_SELECT_APPEND_F 
+!                   H5S_SELECT_PREPEND_F
+!  rank 	 - number of dataspace dimensions
+!  num_elements  - number of elements to be selected
+!  coord 	 - 2D (rank x num_elements) array with the
+!                  elements coordinates ( 1-based); in C the
+!                  array is stored in 2D as (num_element x rank)
+! OUTPUTS
+!  hdferr        - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+! SOURCE
   SUBROUTINE h5sselect_elements_f(space_id, OPERATOR, rank, &
        num_elements, coord, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier
-    INTEGER, INTENT(IN) :: OPERATOR    ! Flag, valid values are:
-                                       ! H5S_SELECT_SET_F (0)
-                                       ! H5S_SELECT_OR_F (1)
-    INTEGER, INTENT(IN) :: rank     ! Number of dataspace dimensions
-    INTEGER(SIZE_T), INTENT(IN) :: num_elements  ! Number of elements to be
-                                                 ! selected
-    INTEGER(HSIZE_T), DIMENSION(rank,num_elements), INTENT(IN) :: coord
-                                          ! Array with the coordinates
-                                          ! of the selected elements
-                                          ! coord(rank, num_elements)
-    INTEGER, INTENT(OUT) :: hdferr     ! Error code
+    INTEGER(HID_T),   INTENT(IN)                                :: space_id
+    INTEGER,          INTENT(IN)                                :: OPERATOR
+    INTEGER,          INTENT(IN)                                :: rank
+    INTEGER(SIZE_T),  INTENT(IN)                                :: num_elements
+    INTEGER(HSIZE_T), INTENT(IN) , DIMENSION(rank,num_elements) :: coord
+    INTEGER,          INTENT(OUT)                               :: hdferr 
+!*****
     INTEGER(HSIZE_T), ALLOCATABLE, DIMENSION(:,:) :: c_coord
     INTEGER :: error, i
 
@@ -596,43 +597,49 @@
     ENDDO
     hdferr = h5sselect_elements_c(space_id, OPERATOR, num_elements, c_coord)
 
+!  ALLOCATE(c_coord(num_elements,rank), stat = error)
+!  IF (error.NE. 0) THEN
+!  hdferr = -1
+!  RETURN
+!  ENDIF
+!
+!  c_coord = TRANSPOSE(coord)
+!  hdferr = h5sselect_elements_c(space_id, OPERATOR, INT(rank,size_t), c_coord)
+
+
     DEALLOCATE(c_coord)
 
   END SUBROUTINE h5sselect_elements_f
 
-!----------------------------------------------------------------------
-! Name:		h5sselect_all_f
 !
-! Purpose: 	Selects the entire dataspace.
+!****s* H5S/h5sselect_all_f
 !
-! Inputs:
-!		space_id	- identifier for the dataspace in which
-!				  selection being made
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5sselect_all_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Selects the entire dataspace.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! INPUTS
+!  space_id    - Identifier for the dataspace in which
+!                selection being made
+! OUTPUTS
+!  hdferr      - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+!
+! SOURCE
           SUBROUTINE h5sselect_all_f(space_id, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: space_id  ! Dataspace identifier
             INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5sselect_all_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5sselect_all_c(space_id)
               USE H5GLOBAL
@@ -647,39 +654,36 @@
 
           END SUBROUTINE h5sselect_all_f
 
-!----------------------------------------------------------------------
-! Name:		h5sselect_none_f
 !
-! Purpose: 	Resets the selection region to include no elements.
+!****s* H5S/h5sselect_none_f
 !
-! Inputs:
-!		space_id	- the identifier for the dataspace in which
-!                                 the selection is being reset.
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5sselect_none_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Resets the selection region to include no elements.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! INPUTS
+!  space_id    - the identifier for the dataspace in which
+!                the selection is being reset.
+! OUTPUTS
+!  hdferr      - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+!
+! SOURCE
           SUBROUTINE h5sselect_none_f(space_id, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: space_id  ! Dataspace identifier
             INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5sselect_none_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5sselect_none_c(space_id)
               USE H5GLOBAL
@@ -694,31 +698,32 @@
 
           END SUBROUTINE h5sselect_none_f
 
-!----------------------------------------------------------------------
-! Name:		h5sselect_valid_f
 !
-! Purpose:	Verifies that the selection is within the extent of
-!		the dataspace.
+!****s* H5S/h5sselect_valid_f
+!
+! NAME
+!  h5sselect_valid_f
 !
-! Inputs:
-!		space_id	- identifier for the dataspace for which
-!				  selection is verified
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Verifies that the selection is within the extent of
+!  the dataspace.
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! INPUTS
+!  space_id 	 - identifier for the dataspace for which
+!  selection is verified
+! OUTPUTS
+!  hdferr      - Returns 0 if successful and -1 if fails
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+!
+! SOURCE
           SUBROUTINE h5sselect_valid_f(space_id, status, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: space_id  ! Dataspace identifier
@@ -726,11 +731,9 @@
                                                     ! contained within the extent,
                                                     ! FALSE otherwise.
             INTEGER, INTENT(OUT) :: hdferr          ! Error code
+!*****
             INTEGER :: flag ! "TRUE/FALSE/ERROR" flag from C routine
 
-!            INTEGER, EXTERNAL :: h5sselect_valid_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5sselect_valid_c(space_id, flag)
               USE H5GLOBAL
@@ -748,41 +751,38 @@
 
           END SUBROUTINE h5sselect_valid_f
 
-!----------------------------------------------------------------------
-! Name:		h5sget_simple_extent_npoints_f
 !
-! Purpose: 	Determines the number of elements in a dataspace.
+!****s* H5S/h5sget_simple_extent_npoints_f
 !
-! Inputs:
-!		space_id	- dataspace identifier
-! Outputs:
-!		npoints		- number of elements in the dataspace
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5sget_simple_extent_npoints_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Determines the number of elements in a dataspace.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! INPUTS
+!  space_id 	 - dataspace identifier
+! OUTPUTS
+!  npoints 	 - number of elements in the dataspace
+!  hdferr      - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+!
+! SOURCE
           SUBROUTINE h5sget_simple_extent_npoints_f(space_id, npoints, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: space_id     ! Dataspace identifier
             INTEGER(HSIZE_T), INTENT(OUT) :: npoints  ! Number of elements in
                                                        ! dataspace
             INTEGER, INTENT(OUT) :: hdferr             ! Error code
-
-!            INTEGER, EXTERNAL :: h5sget_simple_extent_npoints_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5sget_simple_extent_npoints_c( space_id, npoints)
               USE H5GLOBAL
@@ -798,41 +798,36 @@
 
           END SUBROUTINE h5sget_simple_extent_npoints_f
 
-!----------------------------------------------------------------------
-! Name:		h5sget_select_npoints_f
 !
-! Purpose: 	Determines the number of elements in a dataspace selection.
+!****s* H5S/h5sget_select_npoints_f
 !
-! Inputs:
-!		space_id	- dataspace identifier
-! Outputs:
-!		npoints		- number of points in the dataspace selection
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5sget_select_npoints_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Determines the number of elements in a dataspace selection.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! INPUTS
+!  space_id 	 - dataspace identifier
+! OUTPUTS
+!  npoints 	 - number of points in the dataspace selection
+!  hdferr      - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+! SOURCE
           SUBROUTINE h5sget_select_npoints_f(space_id, npoints, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: space_id     ! Dataspace identifier
             INTEGER(HSSIZE_T), INTENT(OUT) :: npoints  ! Number of elements in the
                                                        ! selection
             INTEGER, INTENT(OUT) :: hdferr             ! Error code
-
-!            INTEGER, EXTERNAL :: h5sget_select_npoints_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5sget_select_npoints_c(space_id, npoints)
               USE H5GLOBAL
@@ -848,40 +843,36 @@
 
           END SUBROUTINE h5sget_select_npoints_f
 
-!----------------------------------------------------------------------
-! Name:		h5sget_simple_extent_ndims_f
 !
-! Purpose: 	Determines the dimensionality of a dataspace
+!****s* H5S/h5sget_simple_extent_ndims_f
 !
-! Inputs:
-!		space_id	- dataspace identifier
-! Outputs:
-!		rank		- number of dataspace dimensions
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5sget_simple_extent_ndims_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Determines the dimensionality of a dataspace
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! INPUTS
+!  space_id 	 - dataspace identifier
+! OUTPUTS
+!  rank 	 - number of dataspace dimensions
+!  hdferr      - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+!
+! SOURCE
           SUBROUTINE h5sget_simple_extent_ndims_f(space_id, rank, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: space_id     ! Dataspace identifier
             INTEGER, INTENT(OUT) :: rank               ! Number of dimensions
             INTEGER, INTENT(OUT) :: hdferr             ! Error code
-
-!            INTEGER, EXTERNAL :: h5sget_simple_extent_ndims_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5sget_simple_extent_ndims_c(space_id, rank)
               USE H5GLOBAL
@@ -896,34 +887,32 @@
             hdferr = h5sget_simple_extent_ndims_c(space_id, rank)
 
           END SUBROUTINE h5sget_simple_extent_ndims_f
-
-!----------------------------------------------------------------------
-! Name:		h5sget_simple_extent_dims_f
 !
-! Purpose: 	Retrieves dataspace dimension size and maximum size.
+!****s* H5S/h5sget_simple_extent_dims_f
 !
-! Inputs:
-!		space_id	- dataspace identifier
-! Outputs:
-!		dims		- array to store size of each dimension
-!		maxdims		- array to store maximum size of each
-!				  dimension
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5sget_simple_extent_dims_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Retrieves dataspace dimension size and maximum size.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! INPUTS
+!  space_id 	 - dataspace identifier
+! OUTPUTS
+!  dims 	 - array to store size of each dimension
+!  maxdims 	 - array to store maximum size of each
+!  dimension
+!  hdferr      - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+!
+! SOURCE
           SUBROUTINE h5sget_simple_extent_dims_f(space_id, dims, maxdims, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier
@@ -935,10 +924,7 @@
             INTEGER, INTENT(OUT) :: hdferr         ! Error code: -1 on failure,
                                                    ! number of dimensions on
                                                    ! on success
-
-!            INTEGER, EXTERNAL :: h5sget_simple_extent_dims_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5sget_simple_extent_dims_c(space_id, dims, maxdims)
               USE H5GLOBAL
@@ -955,35 +941,34 @@
 
           END SUBROUTINE h5sget_simple_extent_dims_f
 
-!----------------------------------------------------------------------
-! Name:		h5sget_simple_extent_type_f
 !
-! Purpose: 	Determine the current class of a dataspace
+!****s* H5S/h5sget_simple_extent_type_f
 !
-! Inputs:
-!		space_id	- dataspace identifier
-! Outputs:
-!		classtype	- class type, possible values are:
-!				  H5S_NO_CLASS_F (-1)
-!				  H5S_SCALAR_F (0)
-!				  H5S_SIMPLE_F (1)
-!				  H5S_NULL_F   (2)
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5sget_simple_extent_type_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Determine the current class of a dataspace
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! INPUTS
+!  space_id 	 - dataspace identifier
+! OUTPUTS
+!  classtype 	 - class type, possible values are:
+!  H5S_NO_CLASS_F (-1)
+!  H5S_SCALAR_F (0)
+!  H5S_SIMPLE_F (1)
+!  H5S_NULL_F   (2)
+!  hdferr      - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+!
+! SOURCE
           SUBROUTINE h5sget_simple_extent_type_f(space_id, classtype, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier
@@ -994,10 +979,7 @@
                                                    !  H5S_SIMPLE_F (1)
                                                    !  H5S_NULL_F   (2)
             INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
-!            INTEGER, EXTERNAL :: h5sget_simple_extent_type_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5sget_simple_extent_type_c(space_id, classtype)
               USE H5GLOBAL
@@ -1012,35 +994,33 @@
             hdferr = h5sget_simple_extent_type_c(space_id, classtype)
 
           END SUBROUTINE h5sget_simple_extent_type_f
-
-!----------------------------------------------------------------------
-! Name:		h5sset_extent_simple_f
 !
-! Purpose: 	Sets or resets the size of an existing dataspace.
+!****s* H5S/h5sset_extent_simple_f
 !
-! Inputs:
-!		space_id	- dataspace identifier
-!		rank		- dataspace number of dimensions
-!		current_size	- array with the new sizes of dimensions
-!		maximum_size	- array with the new maximum sizes of
-!				  dimensions
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5sset_extent_simple_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Sets or resets the size of an existing dataspace.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! INPUTS
+!  space_id 	 - dataspace identifier
+!  rank 	 - dataspace number of dimensions
+!  current_size 	 - array with the new sizes of dimensions
+!  maximum_size 	 - array with the new maximum sizes of
+!  dimensions
+! OUTPUTS
+!  hdferr      - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+!
+! SOURCE
           SUBROUTINE h5sset_extent_simple_f(space_id, rank, current_size, &
                                             maximum_size, hdferr)
             IMPLICIT NONE
@@ -1054,10 +1034,7 @@
                                                    ! sizes of dimensions
                                                    ! sizes
             INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
-!            INTEGER, EXTERNAL :: h5sset_extent_simple_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5sset_extent_simple_c(space_id, rank, &
                                current_size,  maximum_size)
@@ -1076,33 +1053,31 @@
                                             maximum_size)
 
           END SUBROUTINE h5sset_extent_simple_f
-
-!----------------------------------------------------------------------
-! Name:		h5sis_simple_f
 !
-! Purpose: 	Determines whether a dataspace is a simple dataspace.
+!****s* H5S/h5sis_simple_f
 !
-! Inputs:
-!		space_id	- dataspace identifier
-! Outputs:
-!		status		- flag to indicate if dataspace
-!				  is simple or not
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5sis_simple_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Determines whether a dataspace is a simple dataspace.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! INPUTS
+!  space_id 	 - dataspace identifier
+! OUTPUTS
+!  status 	 - flag to indicate if dataspace
+!  is simple or not
+!  hdferr      - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+!
+! SOURCE
           SUBROUTINE h5sis_simple_f(space_id, status, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: space_id  ! Dataspace identifier
@@ -1110,11 +1085,9 @@
                                                 ! is simple or not ( TRUE or
                                                 ! FALSE)
             INTEGER, INTENT(OUT) :: hdferr      ! Error code
+!*****
             INTEGER :: flag                     ! "TRUE/FALSE/ERROR from C"
 
-!            INTEGER, EXTERNAL :: h5sis_simple_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5sis_simple_c(space_id, flag)
               USE H5GLOBAL
@@ -1132,31 +1105,34 @@
 
           END SUBROUTINE h5sis_simple_f
 
-!----------------------------------------------------------------------
-! Name:		h5soffset_simple_f
 !
-! Purpose:	Sets the offset of a simple dataspace.
+!****s* H5S/h5soffset_simple_f
 !
-! Inputs:
-!		space_id	- dataspace identifier
-!		offset		- the offset at which to position the
-!				  selection
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5soffset_simple_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Sets the offset of a simple dataspace.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! INPUTS
+!  space_id 	 - dataspace identifier
+!  offset 	 - the offset at which to position the
+!  selection
+! OUTPUTS
+!  hdferr      - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  NONE
 !
-! Comment:
-!----------------------------------------------------------------------
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+!
+! SOURCE
           SUBROUTINE h5soffset_simple_f(space_id, offset, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier
@@ -1164,10 +1140,7 @@
                                                    ! The offset at which to position
                                                    ! the selection
             INTEGER, INTENT(OUT) :: hdferr         ! Error code
-
-!            INTEGER, EXTERNAL :: h5soffset_simple_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5soffset_simple_c(space_id, offset)
               USE H5GLOBAL
@@ -1183,33 +1156,38 @@
 
           END SUBROUTINE h5soffset_simple_f
 
-!----------------------------------------------------------------------
-! Name:		h5sextent_copy_f
 !
-! Purpose: 	Copies the extent of a dataspace.
+!****s* H5S/h5sextent_copy_f
+!
+! NAME
+!  h5sextent_copy_f
+!
+! PURPOSE
+!  Copies the extent of a dataspace.
+!
+! INPUTS
+!  dest_space_id 	 - the identifier for the dataspace to which
+!  the extent is copied
+!  source_space_id 	 - the identifier for the dataspace from
+!  which the extent is copied
+! OUTPUTS
+!  hdferr      - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  NONE
 !
-! Inputs:
-!		dest_space_id	- the identifier for the dataspace to which
-!				  the extent is copied
-!		source_space_id	- the identifier for the dataspace from
-!				  which the extent is copied
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! NOTES
 !
-! Comment:
-!----------------------------------------------------------------------
 
+! SOURCE
           SUBROUTINE h5sextent_copy_f(dest_space_id, source_space_id, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: dest_space_id  ! Identifier of destination
@@ -1217,10 +1195,7 @@
             INTEGER(HID_T), INTENT(IN) :: source_space_id ! Identifier of source
                                                           ! dataspace
             INTEGER, INTENT(OUT) :: hdferr                ! Error code
-
-!            INTEGER, EXTERNAL :: h5sextent_copy_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5sextent_copy_c(dest_space_id, source_space_id)
               USE H5GLOBAL
@@ -1236,37 +1211,34 @@
 
           END SUBROUTINE h5sextent_copy_f
 
-!----------------------------------------------------------------------
-! Name:		h5sset_extent_none_f
 !
-! Purpose:	Removes the extent from a dataspace.
+!****s* H5S/h5sset_extent_none_f
 !
-! Inputs:
-!		space_id	- dataspace identifier
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5sset_extent_none_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Removes the extent from a dataspace.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
+! INPUTS
+!  space_id 	 - dataspace identifier
+! OUTPUTS
+!  hdferr      - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+!
+! SOURCE
           SUBROUTINE h5sset_extent_none_f(space_id, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: space_id  ! Dataspace identifier
             INTEGER, INTENT(OUT) :: hdferr          ! Error code
-
-!            INTEGER, EXTERNAL :: h5sset_extent_none_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5sset_extent_none_c(space_id)
               USE H5GLOBAL
@@ -1281,38 +1253,40 @@
 
           END SUBROUTINE h5sset_extent_none_f
 
-!----------------------------------------------------------------------
-! Name:		h5sselect_hyperslab_f
-!
-! Purpose:	Selects a hyperslab region to add to the current selected
-!		region
-!
-! Inputs:
-!		space_id	- dataspace identifier
-!		operator	- flag, valid values are:
-!				  H5S_SELECT_SET_F (0)
-!				  H5S_SELECT_OR_F (1)
-!		start		- array with hyperslab offsets
-!		count		- number of blocks included in the
-!				  hyperslab
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!		stride		- array with hyperslab strides
-!		block		- array with hyperslab block sizes
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 6, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
+!
+!****s* H5S/h5sselect_hyperslab_f
+!
+! NAME
+!  h5sselect_hyperslab_f
+!
+! PURPOSE
+!  Selects a hyperslab region to add to the current selected
+!  region
+!
+! INPUTS
+!  space_id 	 - dataspace identifier
+!  operator 	 - flag, valid values are:
+!  H5S_SELECT_SET_F (0)
+!  H5S_SELECT_OR_F (1)
+!  start 	 - array with hyperslab offsets
+!  count 	 - number of blocks included in the
+!  hyperslab
+! OUTPUTS
+!  hdferr      - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  stride 	 - array with hyperslab strides
+!  block 	 - array with hyperslab block sizes
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 6, 2001
+!
+! SOURCE
           SUBROUTINE h5sselect_hyperslab_f(space_id, operator, start, count, &
                                            hdferr, stride, block)
             IMPLICIT NONE
@@ -1332,14 +1306,12 @@
                                           ! in each direction
             INTEGER(HSIZE_T), DIMENSION(:), OPTIONAL, INTENT(IN) :: block
                                           ! Sizes of element block
+!*****
             INTEGER(HSIZE_T), DIMENSION(:), ALLOCATABLE :: def_block
             INTEGER(HSIZE_T), DIMENSION(:), ALLOCATABLE :: def_stride
             INTEGER :: rank
             INTEGER :: error1, error2
 
-!            INTEGER, EXTERNAL :: h5sselect_hyperslab_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5sselect_hyperslab_c(space_id, operator, &
                                start, count, stride, block)
@@ -1408,49 +1380,56 @@
             deallocate(def_stride)
 
           END SUBROUTINE h5sselect_hyperslab_f
-!----------------------------------------------------------------------
-! Name:		h5scombine_hyperslab_f
-!
-! Purpose:	Combine a hyperslab selection with the current
-!               selection for a dataspace
-!
-! Inputs:
-!		space_id	- dataspace of selection to use
-!		operator	- flag, valid values are:
-!				  H5S_SELECT_NOOP_F
-!				  H5S_SELECT_SET_F
-!				  H5S_SELECT_OR_F
-!				  H5S_SELECT_AND_F
-!				  H5S_SELECT_XOR_F
-!				  H5S_SELECT_NOTB_F
-!				  H5S_SELECT_NOTA_F
-!				  H5S_SELECT_APPEND_F
-!				  H5S_SELECT_PREPEND_F
-!		start		- array with hyperslab offsets
-!		count		- number of blocks included in the
-!				  hyperslab
-! Outputs:
-!               hyper_id        - identifier for the new hyperslab
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!		stride		- array with hyperslab strides
-!		block		- array with hyperslab block sizes
-!
-! Programmer:	Elena Pourmal
-!		October 7, 2002
-!
-! Modifications:
-!
-! Comment:	Commented out until 1.6 ? 10/08/2002
-!----------------------------------------------------------------------
-
-!          SUBROUTINE h5scombine_hyperslab_f(space_id, operator, start, count, &
-!                                            hyper_id,  hdferr, stride, block)
-!            IMPLICIT NONE
-!            INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier
-!            INTEGER, INTENT(IN) :: operator     ! Flag, valid values are:
+!  !$!
+!  !$!****s* H5S/h5scombine_hyperslab_f
+!  !$!
+!  !$! NAME
+!  !$!		h5scombine_hyperslab_f
+!  !$!
+!  !$! PURPOSE
+!  !$!	Combine a hyperslab selection with the current
+!  !$!               selection for a dataspace
+!  !$!
+!  !$! INPUTS
+!  !$!		space_id	- dataspace of selection to use
+!  !$!		operator	- flag, valid values are:
+!  !$!				  H5S_SELECT_NOOP_F
+!  !$!				  H5S_SELECT_SET_F
+!  !$!				  H5S_SELECT_OR_F
+!  !$!				  H5S_SELECT_AND_F
+!  !$!				  H5S_SELECT_XOR_F
+!  !$!				  H5S_SELECT_NOTB_F
+!  !$!				  H5S_SELECT_NOTA_F
+!  !$!				  H5S_SELECT_APPEND_F
+!  !$!				  H5S_SELECT_PREPEND_F
+!  !$!		start		- array with hyperslab offsets
+!  !$!		count		- number of blocks included in the
+!  !$!				  hyperslab
+!  !$! OUTPUTS
+!  !$!               hyper_id        - identifier for the new hyperslab
+!  !$!		hdferr:		- error code
+!  !$!				 	Success:  0
+!  !$!				 	Failure: -1
+!  !$! OPTIONAL PARAMETERS
+!  !$!		stride		- array with hyperslab strides
+!  !$!		block		- array with hyperslab block sizes
+!  !$!
+!  !$! AUTHOR
+!  !$!	Elena Pourmal
+!  !$!		October 7, 2002
+!  !$!
+!  !$! HISTORY
+!  !$!
+!  !$!
+!  !$! NOTES
+!  !$! Commented out until 1.6 ? 10/08/2002
+!  !$!
+!  !$! SOURCE
+!  SUBROUTINE h5scombine_hyperslab_f(space_id, operator, start, count, &
+!  hyper_id,  hdferr, stride, block)
+!  IMPLICIT NONE
+!  INTEGER(HID_T), INTENT(IN) :: space_id ! Dataspace identifier
+!  INTEGER, INTENT(IN) :: operator     ! Flag, valid values are:
 						!  H5S_SELECT_NOOP_F
 						!  H5S_SELECT_SET_F
 						!  H5S_SELECT_OR_F
@@ -1461,133 +1440,140 @@
 						!  H5S_SELECT_APPEND_F
 						!  H5S_SELECT_PREPEND_F
                                                 !
-!            INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: start
+!  INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: start
                                           ! Starting coordinates of the hyperslab
-!            INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: count
+!  INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: count
                                           ! Number of blocks to select
                                           ! from dataspace
-!            INTEGER(HID_T), INTENT(OUT) :: hyper_id ! New hyperslab identifier
-!            INTEGER, INTENT(OUT) :: hdferr     ! Error code
-!            INTEGER(HSIZE_T), DIMENSION(:), OPTIONAL, INTENT(IN) :: stride
+!  INTEGER(HID_T), INTENT(OUT) :: hyper_id ! New hyperslab identifier
+!  INTEGER, INTENT(OUT) :: hdferr     ! Error code
+!  INTEGER(HSIZE_T), DIMENSION(:), OPTIONAL, INTENT(IN) :: stride
                                           ! Array of how many elements to move
                                           ! in each direction
-!            INTEGER(HSIZE_T), DIMENSION(:), OPTIONAL, INTENT(IN) :: block
+!  INTEGER(HSIZE_T), DIMENSION(:), OPTIONAL, INTENT(IN) :: block
                                           ! Sizes of element block
-!            INTEGER(HSIZE_T), DIMENSION(:), ALLOCATABLE :: def_block
-!            INTEGER(HSIZE_T), DIMENSION(:), ALLOCATABLE :: def_stride
-!            INTEGER :: rank
-!            INTEGER :: error1, error2
-
-!            INTERFACE
-!              INTEGER FUNCTION h5scombine_hyperslab_c(space_id, operator, &
-!                               start, count, stride, block, hyper_id)
-!              USE H5GLOBAL
-!             !DEC$IF DEFINED(HDF5F90_WINDOWS)
-!             !DEC$ATTRIBUTES C,reference,decorate,alias:'H5SCOMBINE_HYPERSLAB_C'::h5scombine_hyperslab_c
-!             !DEC$ENDIF
-!              INTEGER(HID_T), INTENT(IN) :: space_id
-!              INTEGER, INTENT(IN) :: operator
-!              INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: start
-!              INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: count
-!              INTEGER(HSIZE_T), DIMENSION(*), OPTIONAL, INTENT(IN) :: stride
-!              INTEGER(HSIZE_T), DIMENSION(*), OPTIONAL, INTENT(IN) :: block
-!              INTEGER(HID_T), INTENT(OUT) :: hyper_id
-!              END FUNCTION h5scombine_hyperslab_c
-!            END INTERFACE
-
-!            if (present(stride).and. present(block)) then
-!            hdferr = h5scombine_hyperslab_c(space_id, operator, start, count, &
-!                                           stride, block, hyper_id)
-!            return
-!            endif
+!  INTEGER(HSIZE_T), DIMENSION(:), ALLOCATABLE :: def_block
+!  INTEGER(HSIZE_T), DIMENSION(:), ALLOCATABLE :: def_stride
+!  INTEGER :: rank
+!  INTEGER :: error1, error2
+
+!  INTERFACE
+!  INTEGER FUNCTION h5scombine_hyperslab_c(space_id, operator, &
+!  start, count, stride, block, hyper_id)
+!  USE H5GLOBAL
+!  !DEC$IF DEFINED(HDF5F90_WINDOWS)
+!  !DEC$ATTRIBUTES C,reference,decorate,alias:'H5SCOMBINE_HYPERSLAB_C'::h5scombine_hyperslab_c
+!  !DEC$ENDIF
+!  INTEGER(HID_T), INTENT(IN) :: space_id
+!  INTEGER, INTENT(IN) :: operator
+!  INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: start
+!  INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: count
+!  INTEGER(HSIZE_T), DIMENSION(*), OPTIONAL, INTENT(IN) :: stride
+!  INTEGER(HSIZE_T), DIMENSION(*), OPTIONAL, INTENT(IN) :: block
+!  INTEGER(HID_T), INTENT(OUT) :: hyper_id
+!  END FUNCTION h5scombine_hyperslab_c
+!  END INTERFACE
+
+!  if (present(stride).and. present(block)) then
+!  hdferr = h5scombine_hyperslab_c(space_id, operator, start, count, &
+!  stride, block, hyper_id)
+!  return
+!  endif
             ! Case of optional parameters.
             !
             ! Find the rank of the dataspace to allocate memery for
             ! default stride and block arrays.
             !
-!            CALL h5sget_simple_extent_ndims_f(space_id, rank, hdferr)
-!            if( hdferr .EQ. -1) return
+!  CALL h5sget_simple_extent_ndims_f(space_id, rank, hdferr)
+!  if( hdferr .EQ. -1) return
             !
-!            if (present(stride).and. .not.present(block)) then
-!            allocate(def_block(rank), stat=error1)
-!                if (error1.NE.0) then
-!                    hdferr = -1
-!                    return
-!                endif
-!            def_block = 1
-!            hdferr = h5scombine_hyperslab_c(space_id, operator, start, count, &
-!                                           stride, def_block, hyper_id)
-!            deallocate(def_block)
-!            return
-!            endif
-
-!            if (.not.present(stride).and. present(block)) then
-!            allocate(def_stride(rank), stat=error2)
-!                if (error2.NE.0) then
-!                    hdferr = -1
-!                    return
-!                endif
-!            def_stride = 1
-!            hdferr = h5scombine_hyperslab_c(space_id, operator, start, count, &
-!                                           def_stride, block, hyper_id)
-!            deallocate(def_stride)
-!            return
-!            endif
-!            allocate(def_block(rank), stat=error1)
-!            allocate(def_stride(rank), stat=error2)
-!                if ((error1.NE.0) .OR. (error2.NE.0)) then
-!                    hdferr = -1
-!                    return
-!                endif
-!            def_block = 1
-!            def_stride = 1
-!            hdferr = h5scombine_hyperslab_c(space_id, operator, start, count, &
-!                                           def_stride, def_block, hyper_id)
-!            deallocate(def_block)
-!            deallocate(def_stride)
-
-!          END SUBROUTINE h5scombine_hyperslab_f
-
-!----------------------------------------------------------------------
-! Name:		h5scombine_select_f
-!
-! Purpose:	Combine two hyperslab selections with an operation
-!               and return a dataspace with resulting selection.
-!
-! Inputs:
-!		space1_id	- dataspace of selection to use
-!		operator	- flag, valid values are:
-!				  H5S_SELECT_NOOP_F
-!				  H5S_SELECT_SET_F
-!				  H5S_SELECT_OR_F
-!				  H5S_SELECT_AND_F
-!				  H5S_SELECT_XOR_F
-!				  H5S_SELECT_NOTB_F
-!				  H5S_SELECT_NOTA_F
-!				  H5S_SELECT_APPEND_F
-!				  H5S_SELECT_PREPEND_F
-!		space2_id	- dataspace of selection to use
-! Outputs:
-!               ds_id           - idataspace identifier with the new selection
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:		- NONE
-!
-! Programmer:	Elena Pourmal
-!		October 7, 2002
-!
-! Modifications:
-!
-! Comment: commented out until 1.6 release(?) 10/08/2002
-!----------------------------------------------------------------------
-
-!          SUBROUTINE h5scombine_select_f(space1_id, operator, space2_id, &
-!                                            ds_id,  hdferr)
-!            IMPLICIT NONE
-!            INTEGER(HID_T), INTENT(IN) :: space1_id ! First dataspace identifier
-!            INTEGER(HID_T), INTENT(IN) :: space2_id ! Second dataspace identifier
-!            INTEGER, INTENT(IN) :: operator     ! Flag, valid values are:
+!  if (present(stride).and. .not.present(block)) then
+!  allocate(def_block(rank), stat=error1)
+!  if (error1.NE.0) then
+!  hdferr = -1
+!  return
+!  endif
+!  def_block = 1
+!  hdferr = h5scombine_hyperslab_c(space_id, operator, start, count, &
+!  stride, def_block, hyper_id)
+!  deallocate(def_block)
+!  return
+!  endif
+
+!  if (.not.present(stride).and. present(block)) then
+!  allocate(def_stride(rank), stat=error2)
+!  if (error2.NE.0) then
+!  hdferr = -1
+!  return
+!  endif
+!  def_stride = 1
+!  hdferr = h5scombine_hyperslab_c(space_id, operator, start, count, &
+!  def_stride, block, hyper_id)
+!  deallocate(def_stride)
+!  return
+!  endif
+!  allocate(def_block(rank), stat=error1)
+!  allocate(def_stride(rank), stat=error2)
+!  if ((error1.NE.0) .OR. (error2.NE.0)) then
+!  hdferr = -1
+!  return
+!  endif
+!  def_block = 1
+!  def_stride = 1
+!  hdferr = h5scombine_hyperslab_c(space_id, operator, start, count, &
+!  def_stride, def_block, hyper_id)
+!  deallocate(def_block)
+!  deallocate(def_stride)
+
+!  END SUBROUTINE h5scombine_hyperslab_f
+
+!  !$!
+!  !$!****s* H5S/
+!  !$!
+!  !$! NAME
+!  !$!		h5scombine_select_f
+!  !$!
+!  !$! PURPOSE
+!  !$!	Combine two hyperslab selections with an operation
+!  !$!               and return a dataspace with resulting selection.
+!  !$!
+!  !$! INPUTS
+!  !$!		space1_id	- dataspace of selection to use
+!  !$!		operator	- flag, valid values are:
+!  !$!				  H5S_SELECT_NOOP_F
+!  !$!				  H5S_SELECT_SET_F
+!  !$!				  H5S_SELECT_OR_F
+!  !$!				  H5S_SELECT_AND_F
+!  !$!				  H5S_SELECT_XOR_F
+!  !$!				  H5S_SELECT_NOTB_F
+!  !$!				  H5S_SELECT_NOTA_F
+!  !$!				  H5S_SELECT_APPEND_F
+!  !$!				  H5S_SELECT_PREPEND_F
+!  !$!		space2_id	- dataspace of selection to use
+!  !$! OUTPUTS
+!  !$!               ds_id           - idataspace identifier with the new selection
+!  !$!		hdferr:		- error code
+!  !$!				 	Success:  0
+!  !$!				 	Failure: -1
+!  !$! OPTIONAL PARAMETERS		- NONE
+!  !$!
+!  !$! AUTHOR
+!  !$!	Elena Pourmal
+!  !$!		October 7, 2002
+!  !$!
+!  !$! HISTORY
+!  !$!
+!  !$!
+!  !$! NOTES commented out until 1.6 release(?) 10/08/2002
+!  !$!
+
+!  ! SOURCE
+!  !$          SUBROUTINE h5scombine_select_f(space1_id, operator, space2_id, &
+!  ds_id,  hdferr)
+!  IMPLICIT NONE
+!  INTEGER(HID_T), INTENT(IN) :: space1_id ! First dataspace identifier
+!  INTEGER(HID_T), INTENT(IN) :: space2_id ! Second dataspace identifier
+!  INTEGER, INTENT(IN) :: operator     ! Flag, valid values are:
 						!  H5S_SELECT_NOOP_F
 						!  H5S_SELECT_SET_F
 						!  H5S_SELECT_OR_F
@@ -1598,70 +1584,77 @@
 						!  H5S_SELECT_APPEND_F
 						!  H5S_SELECT_PREPEND_F
                                                 !
-!            INTEGER(HID_T), INTENT(OUT) :: ds_id ! New dataspace identifier
-!            INTEGER, INTENT(OUT) :: hdferr     ! Error code
-!
-!            INTERFACE
-!              INTEGER FUNCTION h5scombine_select_c(space1_id, operator, &
-!                               space2_id, ds_id)
-!              USE H5GLOBAL
-!             !DEC$IF DEFINED(HDF5F90_WINDOWS)
-!             !DEC$ATTRIBUTES C,reference,decorate,alias:'H5SCOMBINE_SELECT_C'::h5scombine_select_c
-!             !DEC$ENDIF
-!              INTEGER(HID_T), INTENT(IN) :: space1_id
-!              INTEGER(HID_T), INTENT(IN) :: space2_id
-!              INTEGER, INTENT(IN) :: operator
-!              INTEGER(HID_T), INTENT(OUT) :: ds_id
-!              END FUNCTION h5scombine_select_c
-!            END INTERFACE
-
-!            hdferr = h5scombine_select_c(space1_id, operator, space2_id, &
-!                                         ds_id)
-!            return
-
-!          END SUBROUTINE h5scombine_select_f
-
-!----------------------------------------------------------------------
-! Name:		h5sselect_select_f
-!
-! Purpose:	Refine a hyperslab selection with an operation
-!               using second hyperslab
-!
-! Inputs:
-!		space1_id	- dataspace of selection  to modify
-!		operator	- flag, valid values are:
-!				  H5S_SELECT_NOOP_F
-!				  H5S_SELECT_SET_F
-!				  H5S_SELECT_OR_F
-!				  H5S_SELECT_AND_F
-!				  H5S_SELECT_XOR_F
-!				  H5S_SELECT_NOTB_F
-!				  H5S_SELECT_NOTA_F
-!				  H5S_SELECT_APPEND_F
-!				  H5S_SELECT_PREPEND_F
-!		space2_id	- dataspace of selection to use
-!
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:		- NONE
-!
-! Programmer:	Elena Pourmal
-!		October 7, 2002
-!
-! Modifications:
-!
-! Comment:Commented out until 1.6 release(?) 10/08/2002 EIP
-!----------------------------------------------------------------------
-
-!          SUBROUTINE h5sselect_select_f(space1_id, operator, space2_id, &
-!                                        hdferr)
-!            IMPLICIT NONE
-!            INTEGER(HID_T), INTENT(INOUT) :: space1_id ! Dataspace identifier to
+!  INTEGER(HID_T), INTENT(OUT) :: ds_id ! New dataspace identifier
+!  INTEGER, INTENT(OUT) :: hdferr     ! Error code
+!
+!  INTERFACE
+!  INTEGER FUNCTION h5scombine_select_c(space1_id, operator, &
+!  space2_id, ds_id)
+!  USE H5GLOBAL
+!  !DEC$IF DEFINED(HDF5F90_WINDOWS)
+!  !DEC$ATTRIBUTES C,reference,decorate,alias:'H5SCOMBINE_SELECT_C'::h5scombine_select_c
+!  !DEC$ENDIF
+!  INTEGER(HID_T), INTENT(IN) :: space1_id
+!  INTEGER(HID_T), INTENT(IN) :: space2_id
+!  INTEGER, INTENT(IN) :: operator
+!  INTEGER(HID_T), INTENT(OUT) :: ds_id
+!  END FUNCTION h5scombine_select_c
+!  END INTERFACE
+
+!  hdferr = h5scombine_select_c(space1_id, operator, space2_id, &
+!  ds_id)
+!  return
+
+!  END SUBROUTINE h5scombine_select_f
+
+!  !$!
+!  !$!****s* H5S/
+!  !$!
+!  !$! NAME
+!  !$!		h5sselect_select_f
+!  !$!
+!  !$! PURPOSE
+!  !$!	Refine a hyperslab selection with an operation
+!  !$!               using second hyperslab
+!  !$!
+!  !$! INPUTS
+!  !$!		space1_id	- dataspace of selection  to modify
+!  !$!		operator	- flag, valid values are:
+!  !$!				  H5S_SELECT_NOOP_F
+!  !$!				  H5S_SELECT_SET_F
+!  !$!				  H5S_SELECT_OR_F
+!  !$!				  H5S_SELECT_AND_F
+!  !$!				  H5S_SELECT_XOR_F
+!  !$!				  H5S_SELECT_NOTB_F
+!  !$!				  H5S_SELECT_NOTA_F
+!  !$!				  H5S_SELECT_APPEND_F
+!  !$!				  H5S_SELECT_PREPEND_F
+!  !$!		space2_id	- dataspace of selection to use
+!  !$!
+!  !$! OUTPUTS
+!  !$!		hdferr:		- error code
+!  !$!				 	Success:  0
+!  !$!				 	Failure: -1
+!  !$! OPTIONAL PARAMETERS		- NONE
+!  !$!
+!  !$! AUTHOR
+!  !$!	Elena Pourmal
+!  !$!		October 7, 2002
+!  !$!
+!  !$! HISTORY
+!  !$!
+!  !$!
+!  !$! NOTESCommented out until 1.6 release(?) 10/08/2002 EIP
+!  !$!
+
+!  ! SOURCE
+!  SUBROUTINE h5sselect_select_f(space1_id, operator, space2_id, &
+!  hdferr)
+!  IMPLICIT NONE
+!  INTEGER(HID_T), INTENT(INOUT) :: space1_id ! Dataspace identifier to
                                                        ! modify
-!            INTEGER(HID_T), INTENT(IN) :: space2_id ! Second dataspace identifier
-!            INTEGER, INTENT(IN) :: operator     ! Flag, valid values are:
+!  INTEGER(HID_T), INTENT(IN) :: space2_id ! Second dataspace identifier
+!  INTEGER, INTENT(IN) :: operator     ! Flag, valid values are:
 						!  H5S_SELECT_NOOP_F
 						!  H5S_SELECT_SET_F
 						!  H5S_SELECT_OR_F
@@ -1672,53 +1665,50 @@
 						!  H5S_SELECT_APPEND_F
 						!  H5S_SELECT_PREPEND_F
                                                 !
-!            INTEGER, INTENT(OUT) :: hdferr     ! Error code
-
-!            INTERFACE
-!              INTEGER FUNCTION h5sselect_select_c(space1_id, operator, &
-!                               space2_id)
-!              USE H5GLOBAL
-!             !DEC$IF DEFINED(HDF5F90_WINDOWS)
-!             !DEC$ATTRIBUTES C,reference,decorate,alias:'H5SSELECT_SELECT_C'::h5sselect_select_c
-!             !DEC$ENDIF
-!              INTEGER(HID_T), INTENT(INOUT) :: space1_id
-!              INTEGER(HID_T), INTENT(IN) :: space2_id
-!              INTEGER, INTENT(IN) :: operator
-!              END FUNCTION h5sselect_select_c
-!            END INTERFACE
-
-!            hdferr = h5sselect_select_c(space1_id, operator, space2_id)
-!            return
-
-!          END SUBROUTINE h5sselect_select_f
-
-!----------------------------------------------------------------------
-! Name:		h5sget_select_type_f
-!
-! Purpose:	Retrieve the type of selection
-!
-! Inputs:
-!		space_id	- dataspace iidentifier with selection
-! Outputs:
-!		type    	- flag, valid values are:
-!				  H5S_SEL_ERROR_F
-!				  H5S_SEL_NONE_F
-!				  H5S_SEL_POINTS_F
-!				  H5S_SEL_HYPERSLABS_F
-!				  H5S_SEL_ALL_F
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:		- NONE
-!
-! Programmer:	Elena Pourmal
-!		October 7, 2002
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
+!  INTEGER, INTENT(OUT) :: hdferr     ! Error code
+
+!  INTERFACE
+!  INTEGER FUNCTION h5sselect_select_c(space1_id, operator, &
+!  space2_id)
+!  USE H5GLOBAL
+!  !DEC$IF DEFINED(HDF5F90_WINDOWS)
+!  !DEC$ATTRIBUTES C,reference,decorate,alias:'H5SSELECT_SELECT_C'::h5sselect_select_c
+!  !DEC$ENDIF
+!  INTEGER(HID_T), INTENT(INOUT) :: space1_id
+!  INTEGER(HID_T), INTENT(IN) :: space2_id
+!  INTEGER, INTENT(IN) :: operator
+!  END FUNCTION h5sselect_select_c
+!  END INTERFACE
+
+!  hdferr = h5sselect_select_c(space1_id, operator, space2_id)
+!  return
+
+!  END SUBROUTINE h5sselect_select_f
+
+!
+!****s* H5S/h5sget_select_type_f
+!
+! NAME
+!  h5sget_select_type_f
+!
+! PURPOSE
+!  Retrieve the type of selection
+!
+! INPUTS
+!  space_id 	 - dataspace iidentifier with selection
+! OUTPUTS
+!  type 	 - flag, valid values are:
+!                    H5S_SEL_ERROR_F
+!                    H5S_SEL_NONE_F
+!                    H5S_SEL_POINTS_F
+!                    H5S_SEL_HYPERSLABS_F
+!                    H5S_SEL_ALL_F
+!  hdferr      - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  October 7, 2002
+!
+! SOURCE
           SUBROUTINE h5sget_select_type_f(space_id, type, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(INOUT) :: space_id ! Dataspace identifier to
@@ -1729,7 +1719,7 @@
 						!  H5S_SEL_HYPERSLABS_F
 						!  H5S_SEL_ALL_F
             INTEGER, INTENT(OUT) :: hdferr     ! Error code
-
+!*****
             INTERFACE
               INTEGER FUNCTION h5sget_select_type_c(space_id, type)
               USE H5GLOBAL
@@ -1746,35 +1736,31 @@
 
           END SUBROUTINE h5sget_select_type_f
 
-!----------------------------------------------------------------------
-! Name:		H5Sdecode_f
-!
-! Purpose:	Decode a binary object description of data space and return a new object handle.
 !
-! Inputs:
-!		buf -  Buffer for the data space object to be decoded.
-!            obj_id - Object ID
-! Outputs:
-!           hdferr: - error code
-!			Success:  0
-!			Failure: -1
+!****s* H5S/H5Sdecode_f
 !
-! Optional parameters:		- NONE
+! NAME
+!  H5Sdecode_f
 !
-! Programmer:	M.S. Breitenfeld
-!		March 26, 2008
+! PURPOSE
+!  Decode a binary object description of data space and return a new object handle.
 !
-! Modifications:
+! INPUTS
+!  buf 	 -  Buffer for the data space object to be decoded.
+!  obj_id 	 - Object ID
+! OUTPUTS
+!  hdferr      - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 26, 2008
+! SOURCE
   SUBROUTINE h5sdecode_f(buf, obj_id, hdferr)
     IMPLICIT NONE
     CHARACTER(LEN=*), INTENT(IN) :: buf ! Buffer for the data space object to be decoded.
     INTEGER(HID_T), INTENT(OUT) :: obj_id  ! Object ID
     INTEGER, INTENT(OUT) :: hdferr     ! Error code
-
+!*****
     INTERFACE
        INTEGER FUNCTION h5sdecode_c(buf, obj_id)
          USE H5GLOBAL
@@ -1791,38 +1777,34 @@
 
   END SUBROUTINE h5sdecode_f
 
-!----------------------------------------------------------------------
-! Name:		H5Sencode_f
 !
-! Purpose:	Encode a data space object description into a binary buffer.
+!****s* H5S/H5Sencode_f
 !
-! Inputs:
-!            obj_id - Identifier of the object to be encoded.
-!		buf - Buffer for the object to be encoded into.
-!            nalloc - The size of the allocated buffer.
-! Outputs:
-!            nalloc - The size of the buffer needed.
-!           hdferr: - error code
-!	                Success:  0
-!		        Failure: -1
+! NAME
+!  H5Sencode_f
 !
-! Optional parameters:		- NONE
+! PURPOSE
+!  Encode a data space object description into a binary buffer.
 !
-! Programmer:	M.S. Breitenfeld
-!		March 26, 2008
+! INPUTS
+!  obj_id 	 - Identifier of the object to be encoded.
+!  buf 	 - Buffer for the object to be encoded into.
+!  nalloc 	 - The size of the allocated buffer.
+! OUTPUTS
+!  nalloc 	 - The size of the buffer needed.
+!  hdferr      - Returns 0 if successful and -1 if fails.
 !
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  M. Scot Breitenfeld
+!  March 26, 2008
+! SOURCE
   SUBROUTINE h5sencode_f(obj_id, buf, nalloc, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: obj_id ! Identifier of the object to be encoded.
     CHARACTER(LEN=*), INTENT(OUT) :: buf ! Buffer for the object to be encoded into.
     INTEGER(SIZE_T), INTENT(INOUT) :: nalloc ! The size of the allocated buffer.
     INTEGER, INTENT(OUT) :: hdferr     ! Error code
-
+!*****
 
     INTERFACE
        INTEGER FUNCTION h5sencode_c(buf, obj_id, nalloc)
@@ -1841,38 +1823,32 @@
 
   END SUBROUTINE h5sencode_f
 
-
-!----------------------------------------------------------------------
-! Name:		h5sextent_equal_f
+!****s* H5S/h5sextent_equal_f
 !
-! Purpose: 	Determines whether two dataspace extents are equal.
+! NAME
+!  h5sextent_equal_f
 !
-! Inputs:
-!		space1_id - First dataspace identifier.
-!               space2_id - Second dataspace identifier.
-! Outputs:
-!                   Equal - .TRUE. if equal, .FALSE. if unequal.
-!		  hdferr: - error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Determines whether two dataspace extents are equal.
 !
-! Programmer: M.S. Breitenfeld
-!             April 2, 2008
+! INPUTS
+!  space1_id 	 - First dataspace identifier.
+!  space2_id 	 - Second dataspace identifier.
+! OUTPUTS
+!  Equal 	 - .TRUE. if equal, .FALSE. if unequal.
+!  hdferr      - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  M. Scot Breitenfeld
+!  April 2, 2008
 !
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
+! SOURCE
   SUBROUTINE h5sextent_equal_f(space1_id, space2_id, equal, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: space1_id ! First dataspace identifier.
     INTEGER(HID_T), INTENT(IN) :: space2_id ! Second dataspace identifier.
     LOGICAL, INTENT(OUT) :: Equal ! .TRUE. if equal, .FALSE. if unequal.
     INTEGER, INTENT(OUT) :: hdferr                ! Error code
-
+!*****
     INTEGER(HID_T) :: c_equal
 
     INTERFACE
diff --git a/fortran/src/H5Tf.c b/fortran/src/H5Tf.c
index 37cfca0..c8ff6e0 100644
--- a/fortran/src/H5Tf.c
+++ b/fortran/src/H5Tf.c
@@ -1,4 +1,9 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* H5Tf/H5Tf
+ * PURPOSE
+ *   This file contains C stubs for H5T Fortran APIs
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,28 +16,38 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This files contains C stubs for H5T Fortran APIs */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include "H5f90.h"
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5topen_c
- * Purpose:     Call H5Topen2 to open a datatype
- * Inputs:      loc_id - file or group identifier
+/****if* H5Tf/h5topen_c
+ * NAME
+ *        h5topen_c
+ * PURPOSE
+ *     Call H5Topen2 to open a datatype
+ * INPUTS
+ *      loc_id - file or group identifier
  *              name - name of the datatype within file or  group
  *              namelen - name length
  *              tapl_id - datatype access property list identifier
- * Outputs:     type_id - dataset identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     type_id - dataset identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Saturday, August 14, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5topen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id, hid_t_f *tapl_id)
+/******/
 {
     char *c_name = NULL;
     hid_t c_type_id;
@@ -61,26 +76,34 @@ done:
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5tcommit_c
- * Purpose:     Call H5Tcommit2 to commit a datatype
- * Inputs:      loc_id - file or group identifier
+/****if* H5Tf/h5tcommit_c
+ * NAME
+ *        h5tcommit_c
+ * PURPOSE
+ *     Call H5Tcommit2 to commit a datatype
+ * INPUTS
+ *      loc_id - file or group identifier
  *              name - name of the datatype within file or  group
  *              namelen - name length
  *              type_id - dataset identifier
  *              lcpl_id - Link creation property list
  *              tcpl_id - Datatype creation property list
  *              tapl_id - Datatype access property list
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Saturday, August 14, 1999
- * Modifications:
+ * HISTORY
+ *
  *              - Added passing optional parameters for version 1.8
- *                M.S. Breitenfeld
- *---------------------------------------------------------------------------*/
+ *                M. Scot Breitenfeld
+ * SOURCE
+*/
 int_f
 nh5tcommit_c(hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id,
 	     hid_t_f *lcpl_id, hid_t_f *tcpl_id, hid_t_f *tapl_id)
+/******/
 {
     char *c_name = NULL;
     int ret_value = -1;
@@ -101,18 +124,26 @@ done:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tclose_c
- * Purpose:     Call H5Tclose to close the datatype
- * Inputs:      type_id - identifier of the datatype to be closed
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Tf/h5tclose_c
+ * NAME
+ *        h5tclose_c
+ * PURPOSE
+ *     Call H5Tclose to close the datatype
+ * INPUTS
+ *      type_id - identifier of the datatype to be closed
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Saturday, August 14, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tclose_c ( hid_t_f *type_id )
+/******/
 {
   int ret_value = 0;
   hid_t c_type_id;
@@ -123,19 +154,28 @@ nh5tclose_c ( hid_t_f *type_id )
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5tcopy_c
- * Purpose:     Call H5Tcopy to copy a datatype
- * Inputs:      type_id - identifier of the datatype to be copied
- * Outputs:     new_type_id - identifier of the new datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Tf/h5tcopy_c
+ * NAME
+ *        h5tcopy_c
+ * PURPOSE
+ *     Call H5Tcopy to copy a datatype
+ * INPUTS
+ *      type_id - identifier of the datatype to be copied
+ * OUTPUTS
+ *     new_type_id - identifier of the new datatype
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Saturday, August 14, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tcopy_c ( hid_t_f *type_id , hid_t_f *new_type_id)
+/******/
 {
   int ret_value = 0;
   hid_t c_type_id;
@@ -148,20 +188,29 @@ nh5tcopy_c ( hid_t_f *type_id , hid_t_f *new_type_id)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tequal_c
- * Purpose:     Call H5Tequal to copy a datatype
- * Inputs:      type1_id - datatype identifier
+/****if* H5Tf/h5tequal_c
+ * NAME
+ *        h5tequal_c
+ * PURPOSE
+ *     Call H5Tequal to copy a datatype
+ * INPUTS
+ *      type1_id - datatype identifier
  *              type2_id - datatype identifier
- * Outputs:     c_flag - flag; indicates if two datatypes are equal or not.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     c_flag - flag; indicates if two datatypes are equal or not.
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Tuesday, February 22, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tequal_c ( hid_t_f *type1_id , hid_t_f *type2_id, int_f *c_flag)
+/******/
 {
   int ret_value = -1;
   hid_t c_type1_id, c_type2_id;
@@ -177,11 +226,15 @@ nh5tequal_c ( hid_t_f *type1_id , hid_t_f *type2_id, int_f *c_flag)
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_class_c
- * Purpose:     Call H5Tget_class to determine the datatype class
- * Inputs:      type_id - identifier of the dataspace
- * Outputs:     classtype - class type; possible values are:
+/****if* H5Tf/h5tget_class_c
+ * NAME
+ *        h5tget_class_c
+ * PURPOSE
+ *     Call H5Tget_class to determine the datatype class
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * OUTPUTS
+ *     classtype - class type; possible values are:
  *              H5T_NO_CLASS_F (-1)
  *              H5T_INTEGER_F (0)
  *              H5T_FLOAT_F (1)
@@ -192,14 +245,19 @@ nh5tequal_c ( hid_t_f *type1_id , hid_t_f *type2_id, int_f *c_flag)
  *              H5T_COMPOUNDF (6)
  *              H5T_REFERENCE_F (7)
  *              H5T_ENUMF (8)
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Saturday, August 14, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_class_c ( hid_t_f *type_id , int_f *classtype)
+/******/
 {
   int ret_value = 0;
   hid_t c_type_id;
@@ -228,22 +286,31 @@ nh5tget_class_c ( hid_t_f *type_id , int_f *classtype)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_order_c
- * Purpose:     Call H5Tget_order to determine byte order
- * Inputs:      type_id - identifier of the dataspace
- * Outputs:     order; possible values are:
+/****if* H5Tf/h5tget_order_c
+ * NAME
+ *        h5tget_order_c
+ * PURPOSE
+ *     Call H5Tget_order to determine byte order
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * OUTPUTS
+ *     order; possible values are:
  *              H5T_ORDER_LE_F (0)
  *              H5T_ORDER_BE_F (1)
  *              H5T_ORDER_VAX_F (2)
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Saturday, August 14, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_order_c ( hid_t_f *type_id , int_f *order)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -263,22 +330,30 @@ nh5tget_order_c ( hid_t_f *type_id , int_f *order)
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5tset_order_c
- * Purpose:     Call H5Tset_order to set byte order
- * Inputs:      type_id - identifier of the dataspace
+/****if* H5Tf/h5tset_order_c
+ * NAME
+ *        h5tset_order_c
+ * PURPOSE
+ *     Call H5Tset_order to set byte order
+ * INPUTS
+ *      type_id - identifier of the dataspace
  *              order; possible values are:
  *              H5T_ORDER_LE_F (0)
  *              H5T_ORDER_BE_F (1)
  *              H5T_ORDER_VAX_F (2)
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Saturday, August 14, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tset_order_c ( hid_t_f *type_id , int_f *order)
+/******/
 {
   int ret_value = 0;
   hid_t c_type_id;
@@ -296,19 +371,28 @@ nh5tset_order_c ( hid_t_f *type_id , int_f *order)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_size_c
- * Purpose:     Call H5Tget_size to get size of the datatype
- * Inputs:      type_id - identifier of the dataspace
- * Outputs:     size (in bytes)
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Tf/h5tget_size_c
+ * NAME
+ *        h5tget_size_c
+ * PURPOSE
+ *     Call H5Tget_size to get size of the datatype
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * OUTPUTS
+ *     size (in bytes)
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Saturday, August 14, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_size_c ( hid_t_f *type_id , size_t_f *size)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -322,19 +406,28 @@ nh5tget_size_c ( hid_t_f *type_id , size_t_f *size)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tset_size_c
- * Purpose:     Call H5Tget_size to get size of the datatype
- * Inputs:      type_id - identifier of the dataspace
- * Outputs:     size (in bytes)
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Tf/h5tset_size_c
+ * NAME
+ *        h5tset_size_c
+ * PURPOSE
+ *     Call H5Tget_size to get size of the datatype
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * OUTPUTS
+ *     size (in bytes)
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Saturday, August 14, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tset_size_c ( hid_t_f *type_id , size_t_f *size)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -349,19 +442,28 @@ nh5tset_size_c ( hid_t_f *type_id , size_t_f *size)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_precision_c
- * Purpose:     Call H5Tget_precision to get precision of the datatype
- * Inputs:      type_id - identifier of the dataspace
- * Outputs:     precision -  number of significant bits
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+/****if* H5Tf/h5tget_precision_c
+ * NAME
+ *        h5tget_precision_c
+ * PURPOSE
+ *     Call H5Tget_precision to get precision of the datatype
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * OUTPUTS
+ *     precision -  number of significant bits
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Tuesday, January 25, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_precision_c ( hid_t_f *type_id , size_t_f *precision)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -375,19 +477,27 @@ nh5tget_precision_c ( hid_t_f *type_id , size_t_f *precision)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tset_precision_c
- * Purpose:     Call H5Tset_precision to set precision of the datatype
- * Inputs:      type_id - identifier of the dataspace
+/****if* H5Tf/h5tset_precision_c
+ * NAME
+ *        h5tset_precision_c
+ * PURPOSE
+ *     Call H5Tset_precision to set precision of the datatype
+ * INPUTS
+ *      type_id - identifier of the dataspace
  *              precision -  number of significant bits
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Tuesday, January 25, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tset_precision_c ( hid_t_f *type_id , size_t_f *precision)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -402,20 +512,29 @@ nh5tset_precision_c ( hid_t_f *type_id , size_t_f *precision)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_offset_c
- * Purpose:     Call H5Tget_offset to get bit offset of the first
+/****if* H5Tf/h5tget_offset_c
+ * NAME
+ *        h5tget_offset_c
+ * PURPOSE
+ *     Call H5Tget_offset to get bit offset of the first
  *              significant bit of the datatype
- * Inputs:      type_id - identifier of the dataspace
- * Outputs:     offset - bit offset of the first significant bit
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * OUTPUTS
+ *     offset - bit offset of the first significant bit
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Tuesday, January 25, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_offset_c ( hid_t_f *type_id , size_t_f *offset)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -430,20 +549,28 @@ nh5tget_offset_c ( hid_t_f *type_id , size_t_f *offset)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tset_offset_c
- * Purpose:     Call H5Tset_offset to set bit offset of the first
+/****if* H5Tf/h5tset_offset_c
+ * NAME
+ *        h5tset_offset_c
+ * PURPOSE
+ *     Call H5Tset_offset to set bit offset of the first
  *              significant bit of the datatype
- * Inputs:      type_id - identifier of the dataspace
+ * INPUTS
+ *      type_id - identifier of the dataspace
  *              offset - bit offset of the first significant bit
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Tuesday, January 25, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tset_offset_c ( hid_t_f *type_id , size_t_f *offset)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -458,22 +585,31 @@ nh5tset_offset_c ( hid_t_f *type_id , size_t_f *offset)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_pad_c
- * Purpose:     Call H5Tget_pad to get the padding type of the least and
+/****if* H5Tf/h5tget_pad_c
+ * NAME
+ *        h5tget_pad_c
+ * PURPOSE
+ *     Call H5Tget_pad to get the padding type of the least and
  *              most-significant bit padding
  *
- * Inputs:      type_id - identifier of the dataspace
- * Outputs:     lsbpad - padding type of the least significant bit
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * OUTPUTS
+ *     lsbpad - padding type of the least significant bit
  *              msbpad - padding type of the least significant bit
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Wednesday, January 26, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_pad_c ( hid_t_f *type_id , int_f * lsbpad, int_f * msbpad)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -490,23 +626,32 @@ nh5tget_pad_c ( hid_t_f *type_id , int_f * lsbpad, int_f * msbpad)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tset_pad_c
- * Inputs:      type_id - identifier of the dataspace
- * Purpose:     Call H5Tset_pad to set the padding type of the least and
+/****if* H5Tf/h5tset_pad_c
+ * NAME
+ *        h5tset_pad_c
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * PURPOSE
+ *     Call H5Tset_pad to set the padding type of the least and
  *              most-significant bit padding
  *
- * Inputs:      type_id - identifier of the dataspace
+ * INPUTS
+ *      type_id - identifier of the dataspace
  *              lsbpad - padding type of the least significant bit
  *              msbpad - padding type of the least significant bit
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Wednesday, January 26, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tset_pad_c ( hid_t_f *type_id, int_f * lsbpad, int_f* msbpad )
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -522,19 +667,28 @@ nh5tset_pad_c ( hid_t_f *type_id, int_f * lsbpad, int_f* msbpad )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_sign_c
- * Purpose:     Call H5Tget_sign to get sign type for an integer type
- * Inputs:      type_id - identifier of the dataspace
- * Outputs:     sign - sign type for an integer type
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+/****if* H5Tf/h5tget_sign_c
+ * NAME
+ *        h5tget_sign_c
+ * PURPOSE
+ *     Call H5Tget_sign to get sign type for an integer type
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * OUTPUTS
+ *     sign - sign type for an integer type
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Wednesday, January 26, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_sign_c ( hid_t_f *type_id , int_f *sign)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -548,19 +702,27 @@ nh5tget_sign_c ( hid_t_f *type_id , int_f *sign)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tset_sign_c
- * Purpose:     Call H5Tset_sign to set sign type for an integer type
- * Inputs:      type_id - identifier of the dataspace
+/****if* H5Tf/h5tset_sign_c
+ * NAME
+ *        h5tset_sign_c
+ * PURPOSE
+ *     Call H5Tset_sign to set sign type for an integer type
+ * INPUTS
+ *      type_id - identifier of the dataspace
  *              sign - sign type for an integer typ
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Wednesday, January 26, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tset_sign_c ( hid_t_f *type_id , int_f* sign)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -576,23 +738,32 @@ nh5tset_sign_c ( hid_t_f *type_id , int_f* sign)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_fields_c
- * Purpose:     Call H5Tget_fields to get floating point datatype
+/****if* H5Tf/h5tget_fields_c
+ * NAME
+ *        h5tget_fields_c
+ * PURPOSE
+ *     Call H5Tget_fields to get floating point datatype
  *              bit field information
- * Inputs:      type_id - identifier of the dataspace
- * Outputs:     epos -  exponent bit-position
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * OUTPUTS
+ *     epos -  exponent bit-position
  *              esize - size of exponent in bits
  *              mpos -  mantissa bit-position
  *              msize -  size of mantissa in bits
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Thursday, January 27, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_fields_c ( hid_t_f *type_id , size_t_f *spos, size_t_f *epos, size_t_f* esize, size_t_f* mpos, size_t_f* msize)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -611,23 +782,31 @@ nh5tget_fields_c ( hid_t_f *type_id , size_t_f *spos, size_t_f *epos, size_t_f*
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tset_fields_c
- * Purpose:     Call H5Tset_fields to set floating point datatype
+/****if* H5Tf/h5tset_fields_c
+ * NAME
+ *        h5tset_fields_c
+ * PURPOSE
+ *     Call H5Tset_fields to set floating point datatype
  *              bit field information
- * Inputs:      type_id - identifier of the dataspace
+ * INPUTS
+ *      type_id - identifier of the dataspace
  *              epos -  exponent bit-position
  *              esize - size of exponent in bits
  *              mpos -  mantissa bit-position
  *              msize -  size of mantissa in bits
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Wednesday, January 26, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tset_fields_c ( hid_t_f *type_id, size_t_f *spos, size_t_f *epos, size_t_f* esize, size_t_f* mpos, size_t_f* msize)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -647,20 +826,29 @@ nh5tset_fields_c ( hid_t_f *type_id, size_t_f *spos, size_t_f *epos, size_t_f* e
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_ebias_c
- * Purpose:     Call H5Tget_ebias to get  exponent bias of a
+/****if* H5Tf/h5tget_ebias_c
+ * NAME
+ *        h5tget_ebias_c
+ * PURPOSE
+ *     Call H5Tget_ebias to get  exponent bias of a
  *              floating-point type of the datatype
- * Inputs:      type_id - identifier of the dataspace
- * Outputs:     ebias - exponent bias of a floating-point type of the datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * OUTPUTS
+ *     ebias - exponent bias of a floating-point type of the datatype
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, January 27, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_ebias_c ( hid_t_f *type_id , size_t_f *ebias)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -675,20 +863,28 @@ nh5tget_ebias_c ( hid_t_f *type_id , size_t_f *ebias)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tset_ebias_c
- * Purpose:     Call H5Tset_ebias to set exponent bias of a
+/****if* H5Tf/h5tset_ebias_c
+ * NAME
+ *        h5tset_ebias_c
+ * PURPOSE
+ *     Call H5Tset_ebias to set exponent bias of a
  *              floating-point type of the datatype
- * Inputs:      type_id - identifier of the dataspace
+ * INPUTS
+ *      type_id - identifier of the dataspace
  *              ebias - exponent bias of a floating-point type of the datatyp
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, January 27, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tset_ebias_c ( hid_t_f *type_id , size_t_f *ebias)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -704,20 +900,29 @@ nh5tset_ebias_c ( hid_t_f *type_id , size_t_f *ebias)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_norm_c
- * Purpose:     Call H5Tget_norm to get mantissa normalization
+/****if* H5Tf/h5tget_norm_c
+ * NAME
+ *        h5tget_norm_c
+ * PURPOSE
+ *     Call H5Tget_norm to get mantissa normalization
  *              of a floating-point datatype
- * Inputs:      type_id - identifier of the dataspace
- * Outputs:     norm - mantissa normalization of a floating-point type
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * OUTPUTS
+ *     norm - mantissa normalization of a floating-point type
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, January 27, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_norm_c ( hid_t_f *type_id , int_f *norm)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -732,20 +937,28 @@ nh5tget_norm_c ( hid_t_f *type_id , int_f *norm)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tset_norm_c
- * Purpose:     Call H5Tset_norm to set mantissa normalization of
+/****if* H5Tf/h5tset_norm_c
+ * NAME
+ *        h5tset_norm_c
+ * PURPOSE
+ *     Call H5Tset_norm to set mantissa normalization of
  *              floating-point type of the datatype
- * Inputs:      type_id - identifier of the dataspace
+ * INPUTS
+ *      type_id - identifier of the dataspace
  *              norm -  mantissa normalization of a floating-point type
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Friday, January 27, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tset_norm_c ( hid_t_f *type_id , int_f *norm)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -761,22 +974,31 @@ nh5tset_norm_c ( hid_t_f *type_id , int_f *norm)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_inpad_c
- * Purpose:     Call H5Tget_inpad to get the padding type for
+/****if* H5Tf/h5tget_inpad_c
+ * NAME
+ *        h5tget_inpad_c
+ * PURPOSE
+ *     Call H5Tget_inpad to get the padding type for
  *              unused bits in floating-point datatypes
  *
- * Inputs:      type_id - identifier of the dataspace
- * Outputs:     padtype - padding type for
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * OUTPUTS
+ *     padtype - padding type for
  *                        unused bits in floating-point datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Wednesday, January 26, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_inpad_c ( hid_t_f *type_id , int_f * padtype)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -791,23 +1013,32 @@ nh5tget_inpad_c ( hid_t_f *type_id , int_f * padtype)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tset_inpad_c
- * Inputs:      type_id - identifier of the dataspace
- * Purpose:     Call H5Tset_inpad to set the padding type
+/****if* H5Tf/h5tset_inpad_c
+ * NAME
+ *        h5tset_inpad_c
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * PURPOSE
+ *     Call H5Tset_inpad to set the padding type
  *              unused bits in floating-point datatype
  *
- * Inputs:      type_id - identifier of the dataspace
+ * INPUTS
+ *      type_id - identifier of the dataspace
  *              padtype - padding type for unused bits
  *                        in floating-point datatypes
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Wednesday, January 26, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tset_inpad_c ( hid_t_f *type_id, int_f * padtype)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -823,21 +1054,30 @@ nh5tset_inpad_c ( hid_t_f *type_id, int_f * padtype)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_cset_c
- * Purpose:     Call H5Tget_cset to get character set
+/****if* H5Tf/h5tget_cset_c
+ * NAME
+ *        h5tget_cset_c
+ * PURPOSE
+ *     Call H5Tget_cset to get character set
  *              type of a string datatype
  *
- * Inputs:      type_id - identifier of the dataspace
- * Outputs:     cset - character set type of a string datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * OUTPUTS
+ *     cset - character set type of a string datatype
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Wednesday, January 26, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_cset_c ( hid_t_f *type_id , int_f * cset)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -852,22 +1092,31 @@ nh5tget_cset_c ( hid_t_f *type_id , int_f * cset)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tset_cset_c
- * Inputs:      type_id - identifier of the dataspace
- * Purpose:     Call H5Tset_cset to set character set
+/****if* H5Tf/h5tset_cset_c
+ * NAME
+ *        h5tset_cset_c
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * PURPOSE
+ *     Call H5Tset_cset to set character set
  *              type of a string datatype
  *
- * Inputs:      type_id - identifier of the dataspace
+ * INPUTS
+ *      type_id - identifier of the dataspace
  *              cset -  character set type of a string datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Wednesday, January 26, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tset_cset_c ( hid_t_f *type_id, int_f * cset)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -883,20 +1132,28 @@ nh5tset_cset_c ( hid_t_f *type_id, int_f * cset)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_strpad_c
- * Purpose:     Call H5Tget_strpad to get string padding method
+/****if* H5Tf/h5tget_strpad_c
+ * NAME
+ *        h5tget_strpad_c
+ * PURPOSE
+ *     Call H5Tget_strpad to get string padding method
  *              for a string datatype
- * Inputs:      type_id - identifier of the dataspace
- * Outputs:     strpad - string padding method for a string datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * OUTPUTS
+ *     strpad - string padding method for a string datatype
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Wednesday, January 26, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
-
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5tget_strpad_c ( hid_t_f *type_id , int_f * strpad)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -911,22 +1168,31 @@ nh5tget_strpad_c ( hid_t_f *type_id , int_f * strpad)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tset_strpad_c
- * Inputs:      type_id - identifier of the dataspace
- * Purpose:     Call H5Tset_strpad to set string padding method
+/****if* H5Tf/h5tset_strpad_c
+ * NAME
+ *        h5tset_strpad_c
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * PURPOSE
+ *     Call H5Tset_strpad to set string padding method
  *              for a string datatype
  *
- * Inputs:      type_id - identifier of the dataspace
+ * INPUTS
+ *      type_id - identifier of the dataspace
  *              strpad - string padding method for a string datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Wednesday, January 26, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tset_strpad_c ( hid_t_f *type_id, int_f * strpad)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -942,20 +1208,29 @@ nh5tset_strpad_c ( hid_t_f *type_id, int_f * strpad)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_nmembers_c
- * Purpose:     Call H5Tget_nmembers to get number of fields
+/****if* H5Tf/h5tget_nmembers_c
+ * NAME
+ *        h5tget_nmembers_c
+ * PURPOSE
+ *     Call H5Tget_nmembers to get number of fields
  *              in a compound datatype
- * Inputs:      type_id - identifier of the dataspace
- * Outputs:     num_members - number of fields in a compound datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * OUTPUTS
+ *     num_members - number of fields in a compound datatype
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Thursday, February 3, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_nmembers_c ( hid_t_f *type_id , int_f * num_members)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -968,21 +1243,30 @@ nh5tget_nmembers_c ( hid_t_f *type_id , int_f * num_members)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_member_name_c
- * Purpose:     Call H5Tget_member_name to get name
+/****if* H5Tf/h5tget_member_name_c
+ * NAME
+ *        h5tget_member_name_c
+ * PURPOSE
+ *     Call H5Tget_member_name to get name
  *              of a compound datatype
- * Inputs:      type_id - identifier of the dataspace
- * Outputs:     member_name - name of a field of a compound datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * OUTPUTS
+ *     member_name - name of a field of a compound datatype
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Thursday, February 3, 2000
- * Modifications: Elena Pourmal
+ * HISTORY
+ * Elena Pourmal
  * Added namelen parameter to return length of the name to Fortran user
- *---------------------------------------------------------------------------*/
+ * SOURCE
+*/
 
 int_f
 nh5tget_member_name_c ( hid_t_f *type_id ,int_f* idx, _fcd member_name, int_f *namelen)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -1000,21 +1284,30 @@ nh5tget_member_name_c ( hid_t_f *type_id ,int_f* idx, _fcd member_name, int_f *n
   ret_value = 0;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5tget_member_index_c
- * Purpose:     Call H5Tget_member_index to get an index of
+/****if* H5Tf/h5tget_member_index_c
+ * NAME
+ *        h5tget_member_index_c
+ * PURPOSE
+ *     Call H5Tget_member_index to get an index of
  *              the specified datatype filed or member.
- * Inputs:      type_id - datatype identifier
+ * INPUTS
+ *      type_id - datatype identifier
  *              name - name of the datatype within file or  group
  *              namelen - name length
- * Outputs:     index - 0-based index
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * OUTPUTS
+ *     index - 0-based index
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, September 26, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5tget_member_index_c (hid_t_f *type_id, _fcd name, int_f *namelen, int_f *idx)
+/******/
 {
      int ret_value = -1;
      char *c_name;
@@ -1044,23 +1337,32 @@ DONE:
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_member_offset_c
- * Purpose:     Call H5Tget_member_offset to get byte offset of the
+/****if* H5Tf/h5tget_member_offset_c
+ * NAME
+ *        h5tget_member_offset_c
+ * PURPOSE
+ *     Call H5Tget_member_offset to get byte offset of the
  *              beginning of a field within a compound datatype with
  *              respect to the beginning of the compound data type datum
- * Inputs:      type_id - identifier of the dataspace
+ * INPUTS
+ *      type_id - identifier of the dataspace
  *              member_no - Number of the field whose offset is requested
- * Outputs:     offset - byte offset of the the beginning of the field of
+ * OUTPUTS
+ *     offset - byte offset of the the beginning of the field of
  *                       a compound datatype
- * Returns:     always 0
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     always 0
+ * AUTHOR
+ *  XIANGYANG SU
  *              Thursday, February 3, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_member_offset_c ( hid_t_f *type_id ,int_f* member_no, size_t_f * offset)
+/******/
 {
   int ret_value = -1;
   size_t c_offset;
@@ -1075,20 +1377,29 @@ nh5tget_member_offset_c ( hid_t_f *type_id ,int_f* member_no, size_t_f * offset)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_array_dims_c
- * Purpose:     Call H5Tget_array_dims2 to get
+/****if* H5Tf/h5tget_array_dims_c
+ * NAME
+ *        h5tget_array_dims_c
+ * PURPOSE
+ *     Call H5Tget_array_dims2 to get
  *              dimensions of array datatype
- * Inputs:      type_id - identifier of the array datatype
- * Outputs:     dims -  dimensions(sizes of dimensions) of the array
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * INPUTS
+ *      type_id - identifier of the array datatype
+ * OUTPUTS
+ *     dims -  dimensions(sizes of dimensions) of the array
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, November 16, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_array_dims_c ( hid_t_f *type_id , hsize_t_f * dims)
+/******/
 {
     hsize_t c_dims[H5S_MAX_RANK];
     int rank, i;
@@ -1109,20 +1420,29 @@ DONE:
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_array_ndims_c
- * Purpose:     Call H5Tget_array_ndims to get number
+/****if* H5Tf/h5tget_array_ndims_c
+ * NAME
+ *        h5tget_array_ndims_c
+ * PURPOSE
+ *     Call H5Tget_array_ndims to get number
  *              of dimensions of array datatype
- * Inputs:      type_id - identifier of the array datatype
- * Outputs:     ndims -  number of dimensions of the array
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * INPUTS
+ *      type_id - identifier of the array datatype
+ * OUTPUTS
+ *     ndims -  number of dimensions of the array
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, November 16, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_array_ndims_c ( hid_t_f *type_id , int_f * ndims)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -1137,20 +1457,29 @@ nh5tget_array_ndims_c ( hid_t_f *type_id , int_f * ndims)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_super_c
- * Purpose:     Call H5Tget_super to get base datatype from which
+/****if* H5Tf/h5tget_super_c
+ * NAME
+ *        h5tget_super_c
+ * PURPOSE
+ *     Call H5Tget_super to get base datatype from which
  *              datatype was derived
- * Inputs:      type_id - identifier of the array datatype
- * Outputs:     base_type_id - base datatype identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * INPUTS
+ *      type_id - identifier of the array datatype
+ * OUTPUTS
+ *     base_type_id - base datatype identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, November 16, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_super_c ( hid_t_f *type_id , hid_t_f *base_type_id)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -1166,21 +1495,30 @@ nh5tget_super_c ( hid_t_f *type_id , hid_t_f *base_type_id)
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_member_type_c
- * Purpose:     Call H5Tget_member_type to get the identifier of a copy of
+/****if* H5Tf/h5tget_member_type_c
+ * NAME
+ *        h5tget_member_type_c
+ * PURPOSE
+ *     Call H5Tget_member_type to get the identifier of a copy of
  *              the datatype of the field
- * Inputs:      type_id - identifier of the datatype
+ * INPUTS
+ *      type_id - identifier of the datatype
  *              field_idx - Field index (0-based) of the field type to retrieve
- * Outputs:     datatype - identifier of a copy of the datatype of the field
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * OUTPUTS
+ *     datatype - identifier of a copy of the datatype of the field
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Thursday, February 3, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_member_type_c ( hid_t_f *type_id ,int_f* field_idx, hid_t_f * datatype)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -1196,19 +1534,27 @@ nh5tget_member_type_c ( hid_t_f *type_id ,int_f* field_idx, hid_t_f * datatype)
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5tcreate_c
- * Purpose:     Call H5Tcreate to create a datatype
- * Inputs:      cls - class type
- *              size - size of the class memeber
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              Thursday, February 17, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+/****if* H5Tf/h5tcreate_c
+ * NAME
+ *        h5tcreate_c
+ * PURPOSE
+ *     Call H5Tcreate to create a datatype
+ * INPUTS
+ *      cls - class type
+ *     size - size of the class memeber
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  Thursday, February 17, 2000
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tcreate_c(int_f *cls, size_t_f *size, hid_t_f *type_id)
+/******/
 {
   int ret_value = -1;
   H5T_class_t c_class;
@@ -1224,22 +1570,30 @@ nh5tcreate_c(int_f *cls, size_t_f *size, hid_t_f *type_id)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tinsert_c
- * Purpose:     Call H5Tinsert to adds another member to the compound datatype
- * Inputs:      type_id - identifier of the datatype
+/****if* H5Tf/h5tinsert_c
+ * NAME
+ *        h5tinsert_c
+ * PURPOSE
+ *     Call H5Tinsert to adds another member to the compound datatype
+ * INPUTS
+ *      type_id - identifier of the datatype
  *              name  - Name of the field to insert
  *              namelen - length of the name
  *              offset - Offset in memory structure of the field to insert
  *              field_id - datatype identifier of the new member
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Thursday, February 3, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tinsert_c(hid_t_f *type_id, _fcd name, int_f* namelen, size_t_f *offset, hid_t_f * field_id)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -1264,20 +1618,28 @@ nh5tinsert_c(hid_t_f *type_id, _fcd name, int_f* namelen, size_t_f *offset, hid_
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5tpack_c
- * Purpose:     Call H5Tpack tor ecursively remove padding from
+/****if* H5Tf/h5tpack_c
+ * NAME
+ *        h5tpack_c
+ * PURPOSE
+ *     Call H5Tpack tor ecursively remove padding from
  *              within a compound datatype to make it more efficient
  *              (space-wise) to store that data
- * Inputs:      type_id - identifier of the datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * INPUTS
+ *      type_id - identifier of the datatype
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Thursday, February 3, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tpack_c(hid_t_f * type_id)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -1291,20 +1653,28 @@ nh5tpack_c(hid_t_f * type_id)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tarray_create_c
- * Purpose:     Call H5Tarray_create2 to create array datatype
- * Inputs:      base_id - identifier of array base datatype
+/****if* H5Tf/h5tarray_create_c
+ * NAME
+ *        h5tarray_create_c
+ * PURPOSE
+ *     Call H5Tarray_create2 to create array datatype
+ * INPUTS
+ *      base_id - identifier of array base datatype
  *              rank - array's rank
  *              dims - Size of new member array
  *              type_id - identifier of the array datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Thursday, November 16, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5tarray_create_c(hid_t_f * base_id, int_f *rank, hsize_t_f* dims, hid_t_f* type_id)
+/******/
 {
     hsize_t c_dims[H5S_MAX_RANK];
     hid_t c_type_id;
@@ -1329,20 +1699,29 @@ DONE:
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5tenum_create_c
- * Purpose:     Call H5Tenum_create to create a new enumeration datatype
- * Inputs:      parent_id - Datatype identifier for the base datatype
- * Outputs:     new_type_id - datatype identifier for the new
+/****if* H5Tf/h5tenum_create_c
+ * NAME
+ *        h5tenum_create_c
+ * PURPOSE
+ *     Call H5Tenum_create to create a new enumeration datatype
+ * INPUTS
+ *      parent_id - Datatype identifier for the base datatype
+ * OUTPUTS
+ *     new_type_id - datatype identifier for the new
  *                            enumeration datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  Xiangyang Su
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Xiangyang Su
  *              Tuesday, February 15, 1999
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tenum_create_c ( hid_t_f *parent_id , hid_t_f *new_type_id)
+/******/
 {
   int ret_value = 0;
   hid_t c_parent_id;
@@ -1356,21 +1735,29 @@ nh5tenum_create_c ( hid_t_f *parent_id , hid_t_f *new_type_id)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tenum_insert_c
- * Purpose:     Call H5Tenum_insert to insert a new enumeration datatype member.
- * Inputs:      type_id - identifier of the datatype
+/****if* H5Tf/h5tenum_insert_c
+ * NAME
+ *        h5tenum_insert_c
+ * PURPOSE
+ *     Call H5Tenum_insert to insert a new enumeration datatype member.
+ * INPUTS
+ *      type_id - identifier of the datatype
  *              name  - Name of  the new member
  *              namelen - length of the name
  *              value - value of the new member
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Thursday, February 3, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tenum_insert_c(hid_t_f *type_id, _fcd name, int_f* namelen, int_f* value)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -1394,22 +1781,30 @@ nh5tenum_insert_c(hid_t_f *type_id, _fcd name, int_f* namelen, int_f* value)
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5tenum_nameof_c
- * Purpose:     Call H5Tenum_nameof to find the symbol name that corresponds to
+/****if* H5Tf/h5tenum_nameof_c
+ * NAME
+ *        h5tenum_nameof_c
+ * PURPOSE
+ *     Call H5Tenum_nameof to find the symbol name that corresponds to
  *              the specified value of the enumeration datatype type
- * Inputs:      type_id - identifier of the datatype
+ * INPUTS
+ *      type_id - identifier of the datatype
  *              namelen - length of the name
  *              value - value of the enumeration datatype
  * Output:      name  - Name of  the enumeration datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Thursday, February 3, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tenum_nameof_c(hid_t_f *type_id, int_f* value, _fcd name, size_t_f* namelen)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -1430,22 +1825,30 @@ nh5tenum_nameof_c(hid_t_f *type_id, int_f* value, _fcd name, size_t_f* namelen)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tenum_valueof_c
- * Purpose:     Call H5Tenum_valueof to find the value of that corresponds to
+/****if* H5Tf/h5tenum_valueof_c
+ * NAME
+ *        h5tenum_valueof_c
+ * PURPOSE
+ *     Call H5Tenum_valueof to find the value of that corresponds to
  *              the specified name of the enumeration datatype type
- * Inputs:      type_id - identifier of the datatype
+ * INPUTS
+ *      type_id - identifier of the datatype
  *              name - Name of  the enumeration datatype
  *              namelen - length of name
  * Output:      value  - value of the enumeration datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Thursday, February 3, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tenum_valueof_c(hid_t_f *type_id, _fcd name, int_f* namelen, int_f* value)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -1466,21 +1869,29 @@ nh5tenum_valueof_c(hid_t_f *type_id, _fcd name, int_f* namelen, int_f* value)
 }
 
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_member_value_c
- * Purpose:     Call H5Tget_member_value to get the value of an
+/****if* H5Tf/h5tget_member_value_c
+ * NAME
+ *        h5tget_member_value_c
+ * PURPOSE
+ *     Call H5Tget_member_value to get the value of an
  *              enumeration datatype member
- * Inputs:      type_id - identifier of the datatype
+ * INPUTS
+ *      type_id - identifier of the datatype
  *              member_no - Number of the enumeration datatype member.
  * Output:      value  - value of the enumeration datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Thursday, February 3, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_member_value_c(hid_t_f *type_id, int_f* member_no, int_f* value)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -1498,21 +1909,30 @@ nh5tget_member_value_c(hid_t_f *type_id, int_f* member_no, int_f* value)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tset_tag_c
- * Inputs:      type_id - identifier of the dataspace
- * Purpose:     Call H5Tset_tag to set an opaque datatype tag
- * Inputs:      type_id - identifier of the dataspace
+/****if* H5Tf/h5tset_tag_c
+ * NAME
+ *        h5tset_tag_c
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * PURPOSE
+ *     Call H5Tset_tag to set an opaque datatype tag
+ * INPUTS
+ *      type_id - identifier of the dataspace
  *              tag -  Unique ASCII string with which the opaque
  *                     datatype is to be tagged
  *              namelen - length of tag
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
  *              Wednesday, January 26, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5tset_tag_c(hid_t_f* type_id, _fcd tag, int_f* namelen)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -1532,20 +1952,29 @@ nh5tset_tag_c(hid_t_f* type_id, _fcd tag, int_f* namelen)
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_tag_c
- * Purpose:     Call H5Tset_tag to set an opaque datatype tag
- * Inputs:      type_id - identifier of the datatype
- * Outputs:     tag -  Unique ASCII string with which the opaque
+/****if* H5Tf/h5tget_tag_c
+ * NAME
+ *        h5tget_tag_c
+ * PURPOSE
+ *  Call H5Tset_tag to set an opaque datatype tag
+ * INPUTS
+ *  type_id - identifier of the datatype
+ * OUTPUTS
+ *      tag -  Unique ASCII string with which the opaque
  *                     datatype is to be tagged
- *              taglen - length of tag
- * Returns:     0 on success, -1 on failure
- * Programmer:  XIANGYANG SU
- *              Wednesday, January 26, 2000
- * Modifications:
- *---------------------------------------------------------------------------*/
+ *   taglen - length of tag
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  XIANGYANG SU
+ *  Wednesday, January 26, 2000
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
-nh5tget_tag_c(hid_t_f* type_id, _fcd tag, int_f* taglen)
+nh5tget_tag_c(hid_t_f* type_id, _fcd tag, size_t_f* tag_size, int_f* taglen)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -1555,24 +1984,33 @@ nh5tget_tag_c(hid_t_f* type_id, _fcd tag, int_f* taglen)
   c_tag = H5Tget_tag(c_type_id);
   if (c_tag == NULL ) return ret_value;
 
-  HD5packFstring(c_tag, _fcdtocp(tag), strlen(c_tag));
+  HD5packFstring(c_tag, _fcdtocp(tag), (size_t)*tag_size);
   *taglen = (int_f)HDstrlen(c_tag);
   HDfree(c_tag);
   ret_value = 0;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5tvlen_create_c
- * Purpose:     Call H5Tvlen_create to create VL dtatype
- * Inputs:      type_id - identifier of the base datatype
- * Outputs:     vltype_id - identifier of the VL datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Tf/h5tvlen_create_c
+ * NAME
+ *        h5tvlen_create_c
+ * PURPOSE
+ *     Call H5Tvlen_create to create VL dtatype
+ * INPUTS
+ *      type_id - identifier of the base datatype
+ * OUTPUTS
+ *     vltype_id - identifier of the VL datatype
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, October 23, 2002
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5tvlen_create_c(hid_t_f* type_id, hid_t_f *vltype_id)
+/******/
 {
   int ret_value = -1;
   hid_t c_type_id;
@@ -1585,21 +2023,30 @@ nh5tvlen_create_c(hid_t_f* type_id, hid_t_f *vltype_id)
   ret_value = 0;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5tis_variable_str_c
- * Purpose:     Call H5Tis_variable_str to detrmine if the datatype
+/****if* H5Tf/h5tis_variable_str_c
+ * NAME
+ *        h5tis_variable_str_c
+ * PURPOSE
+ *     Call H5Tis_variable_str to detrmine if the datatype
  *              is a variable string.
- * Inputs:      type_id - identifier of the dataspace
- * Outputs:     flag - 0 if not VL str, 1 if is not
+ * INPUTS
+ *      type_id - identifier of the dataspace
+ * OUTPUTS
+ *     flag - 0 if not VL str, 1 if is not
  *              and negative on failure.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, March 12 , 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tis_variable_str_c ( hid_t_f *type_id , int_f *flag )
+/******/
 {
   int ret_value = 0;
   hid_t c_type_id;
@@ -1611,22 +2058,31 @@ nh5tis_variable_str_c ( hid_t_f *type_id , int_f *flag )
   if ( status < 0  ) ret_value = -1;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5tget_member_class_c
- * Purpose:     Call H5Tget_member_class to detrmine ithe class of the compound
+/****if* H5Tf/h5tget_member_class_c
+ * NAME
+ *        h5tget_member_class_c
+ * PURPOSE
+ *     Call H5Tget_member_class to detrmine ithe class of the compound
  *		datatype member
- * Inputs:      type_id - identifier of the dataspace
+ * INPUTS
+ *      type_id - identifier of the dataspace
  *              member_no - member's index
- * Outputs:     cls - member's class
- *              and negative on failure.
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
- *              Wednesday, April 6, 2005
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * OUTPUTS
+ *     class - member's class
+ *             and negative on failure.
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  Wednesday, April 6, 2005
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_member_class_c ( hid_t_f *type_id ,  int_f *member_no, int_f *cls )
+/******/
 {
   int ret_value = 0;
   hid_t c_type_id;
@@ -1642,21 +2098,29 @@ nh5tget_member_class_c ( hid_t_f *type_id ,  int_f *member_no, int_f *cls )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tcommit_anon_c
- * Purpose:     Call H5Tcommit_anon
- * Inputs:      loc_id - file or group identifier
+/****if* H5Tf/h5tcommit_anon_c
+ * NAME
+ *        h5tcommit_anon_c
+ * PURPOSE
+ *     Call H5Tcommit_anon
+ * INPUTS
+ *      loc_id - file or group identifier
  *              dtype_id - dataset identifier
  *              tcpl_id - Datatype creation property list
  *              tapl_id - Datatype access property list
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              February 25, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  February 25, 2008
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5tcommit_anon_c(hid_t_f *loc_id, hid_t_f *dtype_id,
 		  hid_t_f *tcpl_id, hid_t_f *tapl_id)
+/******/
 {
   int ret_value = -1;
 
@@ -1670,19 +2134,26 @@ nh5tcommit_anon_c(hid_t_f *loc_id, hid_t_f *dtype_id,
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tcommitted_c
- * Purpose:     Call H5Tcommitted
+/****if* H5Tf/h5tcommitted_c
+ * NAME
+ *        h5tcommitted_c
+ * PURPOSE
+ *     Call H5Tcommitted
  *              dtype_id - dataset identifier
- * Returns:     a positive value, for TRUE, if the datatype has been committed,
+ * RETURNS
+ *     a positive value, for TRUE, if the datatype has been committed,
  *              or 0 (zero), for FALSE, if the datatype has not been committed.
  *		Otherwise returns a negative value.
- * Programmer:  M.S. Breitenfeld
- *              February 25, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  February 25, 2008
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5tcommitted_c(hid_t_f *dtype_id)
+/******/
 {
   int_f ret_value;
 
@@ -1694,22 +2165,31 @@ nh5tcommitted_c(hid_t_f *dtype_id)
 
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tdecode_c
- * Purpose:     Call H5Tdecode
- * Inputs:
+/****if* H5Tf/h5tdecode_c
+ * NAME
+ *        h5tdecode_c
+ * PURPOSE
+ *     Call H5Tdecode
+ * INPUTS
+ *
  *		buf     - Buffer for the data space object to be decoded.
- * Outputs:
+ * OUTPUTS
+ *
  *              obj_id  - Object_id (non-negative)
  *
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              April 9, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  April 9, 2008
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tdecode_c ( _fcd buf, hid_t_f *obj_id )
+/******/
 {
   int ret_value = -1;
   unsigned char *c_buf = NULL;  /* Buffer to hold C string */
@@ -1731,21 +2211,29 @@ nh5tdecode_c ( _fcd buf, hid_t_f *obj_id )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tencode_c
- * Purpose:     Call H5Tencode
- * Inputs:
+/****if* H5Tf/h5tencode_c
+ * NAME
+ *        h5tencode_c
+ * PURPOSE
+ *     Call H5Tencode
+ * INPUTS
+ *
  *            obj_id - Identifier of the object to be encoded.
  *		 buf - Buffer for the object to be encoded into.
  *            nalloc - The size of the allocated buffer.
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              April 9, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  April 9, 2008
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tencode_c (_fcd buf, hid_t_f *obj_id, size_t_f *nalloc )
+/******/
 {
   int ret_value = -1;
   unsigned char *c_buf = NULL;          /* Buffer to hold C string */
@@ -1793,19 +2281,28 @@ nh5tencode_c (_fcd buf, hid_t_f *obj_id, size_t_f *nalloc )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tget_create_plist_c
- * Purpose:     Call H5Tget_create_plist
- * Inputs:      dtype_id          - Datatype identifier
- * Outputs:     dtpl_id           - Datatype property list identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              April 9, 2008
- * Modifications: N/A
- *---------------------------------------------------------------------------*/
+/****if* H5Tf/h5tget_create_plist_c
+ * NAME
+ *        h5tget_create_plist_c
+ * PURPOSE
+ *     Call H5Tget_create_plist
+ * INPUTS
+ *      dtype_id          - Datatype identifier
+ * OUTPUTS
+ *     dtpl_id           - Datatype property list identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  April 9, 2008
+ * HISTORY
+ * N/A
+ * SOURCE
+*/
 
 int_f
 nh5tget_create_plist_c ( hid_t_f *dtype_id,  hid_t_f *dtpl_id)
+/******/
 {
     int_f ret_value=-1;          /* Return value */
 
@@ -1816,21 +2313,30 @@ nh5tget_create_plist_c ( hid_t_f *dtype_id,  hid_t_f *dtpl_id)
     return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5tcompiler_conv_c
- * Purpose:     Call H5Tcompiler_conv
- * Inputs:
+/****if* H5Tf/h5tcompiler_conv_c
+ * NAME
+ *        h5tcompiler_conv_c
+ * PURPOSE
+ *     Call H5Tcompiler_conv
+ * INPUTS
+ *
  *              src_id - Identifier for the source datatype.
  *              dst_id - Identifier for the destination datatype.
- * Outputs:     c_flag - flag; TRUE for compiler conversion, FALSE for library conversion
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              April 9, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * OUTPUTS
+ *     c_flag - flag; TRUE for compiler conversion, FALSE for library conversion
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M.Scot Breitenfeld
+ *  April 9, 2008
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tcompiler_conv_c ( hid_t_f *src_id, hid_t_f *dst_id, int_f *c_flag)
+/******/
 {
   int ret_value = -1;
   htri_t status;
@@ -1841,21 +2347,30 @@ nh5tcompiler_conv_c ( hid_t_f *src_id, hid_t_f *dst_id, int_f *c_flag)
   ret_value = 0;
   return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5tget_native_type_c
- * Purpose:     Call H5Tget_native_type
- * Inputs:
+/****if* H5Tf/h5tget_native_type_c
+ * NAME
+ *        h5tget_native_type_c
+ * PURPOSE
+ *     Call H5Tget_native_type
+ * INPUTS
+ *
  *              dtype_id         - Datatype identifier for the dataset datatype.
  *              direction        - Direction of search.
- * Outputs:     native_dtype_id  - The native datatype identifier for the specified dataset datatype
- * Returns:     0 on success, -1 on failure
- * Programmer:  M.S. Breitenfeld
- *              June 18, 2008
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * OUTPUTS
+ *     native_dtype_id  - The native datatype identifier for the specified dataset datatype
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  June 18, 2008
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5tget_native_type_c(hid_t_f *dtype_id, int_f *direction, hid_t_f *native_dtype_id)
+/******/
 {
   int ret_value = -1;
   hid_t status;
@@ -1867,3 +2382,41 @@ nh5tget_native_type_c(hid_t_f *dtype_id, int_f *direction, hid_t_f *native_dtype
   return ret_value;
 }
 
+/****if* H5Tf/h5tconvert_c
+ * NAME
+ *        h5tconvert_c
+ * PURPOSE
+ *     Call H5Tconvert
+ * INPUTS
+ *
+ *  src_id     - Identifier for the source datatype.
+ *  dst_id     - Identifier for the destination datatype.
+ *  nelmts     - Size of array buf.
+ *  buf        - Array containing pre-conversion values.
+ *  background - Optional background buffer.
+ *  plist_id   - Dataset transfer property list identifier.
+ *
+ * OUTPUTS
+ *  buf        - Array containing post-conversion values.
+ *
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  M. Scot Breitenfeld
+ *  December 8, 2008
+ *
+ * SOURCE
+*/
+int_f
+nh5tconvert_c(hid_t_f *src_id, hid_t_f *dst_id, size_t_f *nelmts, void *buf, void *background, hid_t_f *plist_id)
+/******/
+{
+  int ret_value = -1;
+  hid_t status;
+
+  status = H5Tconvert( (hid_t)*src_id, (hid_t)*dst_id, (size_t)*nelmts, buf, background, (hid_t)*plist_id );
+  if ( status < 0  ) return ret_value;
+  ret_value = 0;
+  return ret_value;
+}
+
diff --git a/fortran/src/H5Tff.f90 b/fortran/src/H5Tff.f90
index c6c96d0..f5369d0 100644
--- a/fortran/src/H5Tff.f90
+++ b/fortran/src/H5Tff.f90
@@ -1,3 +1,15 @@
+!****h* ROBODoc/H5T
+!
+! NAME
+!  MODULE H5T
+!
+! PURPOSE
+!  This file contains Fortran interfaces for H5T functions. It includes
+!  all the functions that are independent on whether the Fortran 2003 functions
+!  are enabled or disabled.
+!
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,44 +25,51 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5T function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
 !
-! This file contains FORTRAN90 interfaces for H5T functions
-!
+!*****
+
 MODULE H5T
 
   USE H5GLOBAL
 
 CONTAINS
 
-!----------------------------------------------------------------------
-! Name:		h5topen_f
 !
-! Purpose: 	Opens named datatype.
+!****s* H5T/h5topen_f
 !
-! Inputs:
-!		loc_id		- location identifier
-!		name		- a datatype name
-! Outputs:
-!		type_id		- datatype identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!              tapl_id          - datatype access property list identifier.
+! NAME
+!  h5topen_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Opens named datatype.
 !
-! Modifications: Explicit Fortran interfaces were added for
-!		 called C functions (it is needed for Windows
-!		 port).  March 7, 2001
+! INPUTS
+!  loc_id 	 - location identifier
+!  name 	 - a datatype name
+! OUTPUTS
+!  type_id 	 - datatype identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  tapl_id 	 - datatype access property list identifier.
 !
-!                Added optional parameter 'tapl_id' for compatability
-!                with H5Topen2. April 9, 2009.
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+!
+!  Added optional parameter 'tapl_id' for compatability
+!  with H5Topen2. April 9, 2009.
+!
+! SOURCE
   SUBROUTINE h5topen_f(loc_id, name, type_id, hdferr, tapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id  ! File or group identifier
@@ -58,12 +77,10 @@ CONTAINS
     INTEGER(HID_T), INTENT(OUT) :: type_id  ! Datatype identifier
     INTEGER, INTENT(OUT) :: hdferr ! Error code
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: tapl_id ! datatype access property list identifier
-
+!*****
     INTEGER :: namelen                  ! Name length
     INTEGER(HID_T) :: tapl_id_default
-!
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+
     INTERFACE
        INTEGER FUNCTION h5topen_c(loc_id, name, namelen, type_id, tapl_id_default)
          USE H5GLOBAL
@@ -86,42 +103,41 @@ CONTAINS
 
     hdferr = h5topen_c(loc_id, name, namelen, type_id, tapl_id_default)
   END SUBROUTINE h5topen_f
-
-!----------------------------------------------------------------------
-! Name:		h5tcommit_f
 !
-! Purpose: 	Commits a transient datatype to a file, creating a
-!		new named datatype.
+!****s* H5T/h5tcommit_f
 !
-! Inputs:
-!		loc_id		- location identifier
-!		name		- name of the datatype to be stored
-!				  at the specified location
-!		type_id		- identifier of a datatype to be stored
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!	       lcpl_id          - Link creation property list
-!              tcpl_id          - Datatype creation property list
-!              tapl_id          - Datatype access property list
+! NAME
+!  h5tcommit_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Commits a transient datatype to a file, creating a
+!  new named datatype.
 !
-! Modifications: - Explicit Fortran interfaces were added for
-!		   called C functions (it is needed for Windows
-!	           port).  March 7, 2001
+! INPUTS
+!  loc_id 	 - location identifier
+!  name 	 - name of the datatype to be stored
+!                  at the specified location
+!  type_id 	 - identifier of a datatype to be stored
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  lcpl_id 	 - Link creation property list
+!  tcpl_id 	 - Datatype creation property list
+!  tapl_id 	 - Datatype access property list
 !
-!                - Added optional parameters introduced in version 1.8
-!                  M.S. Breitenfeld
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
+! HISTORY
+!   	 - Explicit Fortran interfaces were added for
+!          called C functions (it is needed for Windows
+!          port).  March 7, 2001
 !
+!   	 - Added optional parameters introduced in version 1.8
+!          M. Scot Breitenfeld
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! SOURCE
   SUBROUTINE h5tcommit_f(loc_id, name, type_id, hdferr, &
        lcpl_id, tcpl_id, tapl_id  )
     IMPLICIT NONE
@@ -133,7 +149,7 @@ CONTAINS
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: lcpl_id ! Link creation property list
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: tcpl_id ! Datatype creation property list
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: tapl_id ! Datatype access property list
-
+!*****
 
     INTEGER :: namelen          ! Name length
 
@@ -141,8 +157,6 @@ CONTAINS
     INTEGER(HID_T) :: tcpl_id_default
     INTEGER(HID_T) :: tapl_id_default
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5tcommit_c(loc_id, name, namelen, type_id, &
             lcpl_id_default, tcpl_id_default, tapl_id_default )
@@ -175,43 +189,37 @@ CONTAINS
          lcpl_id_default, tcpl_id_default, tapl_id_default )
 
   END SUBROUTINE h5tcommit_f
-
-!----------------------------------------------------------------------
-! Name:		h5tcopy_f
 !
-! Purpose: 	iCreates a copy of exisiting datatype.
+!****s* H5T/h5tcopy_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		new_type_id	- identifier of datatype's copy
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tcopy_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Creates a copy of exisiting datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+! OUTPUTS
+!  new_type_id 	 - identifier of datatype's copy
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5tcopy_f(type_id, new_type_id, hdferr)
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+!
+! SOURCE
+  SUBROUTINE h5tcopy_f(type_id, new_type_id, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER(HID_T), INTENT(OUT) :: new_type_id
                                  ! Identifier of datatype's copy
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tcopy_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION  h5tcopy_c(type_id, new_type_id)
               USE H5GLOBAL
@@ -225,46 +233,41 @@ CONTAINS
 
             hdferr = h5tcopy_c(type_id, new_type_id)
           END SUBROUTINE h5tcopy_f
-
-!----------------------------------------------------------------------
-! Name:		h5tequal_f
-!
-! Purpose: 	Determines whether two datatype identifiers refer
-!		to the same datatype.
 !
-! Inputs:
-!		type1_id	- datatype identifier
-!		type2_id	- datatype identifier
-! Outputs:
-!		flag		- TRUE/FALSE flag to indicate
-!				  if two datatypes are equal
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tequal_f(type1_id, type2_id, flag, hdferr)
+!****s* H5T/h5tequal_f
+!
+! NAME
+!  h5tequal_f
+!
+! PURPOSE
+!  Determines whether two datatype identifiers refer
+!  to the same datatype.
+!
+! INPUTS
+!  type1_id 	 - datatype identifier
+!  type2_id 	 - datatype identifier
+! OUTPUTS
+!  flag 	 - TRUE/FALSE flag to indicate
+!                  if two datatypes are equal
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tequal_f(type1_id, type2_id, flag, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type1_id ! Datatype identifier
             INTEGER(HID_T), INTENT(IN) :: type2_id ! Datatype identifier
             LOGICAL, INTENT(OUT) :: flag ! TRUE/FALSE flag to indicate if two
                                          ! datatypes are equal
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
             INTEGER :: c_flag
-
-!            INTEGER, EXTERNAL :: h5tequal_c
-!  MS FORTRAN needs explicit interface for C functions called here
             INTERFACE
               INTEGER FUNCTION h5tequal_c(type1_id, type2_id, c_flag)
               USE H5GLOBAL
@@ -281,40 +284,35 @@ CONTAINS
             hdferr = h5tequal_c(type1_id, type2_id, c_flag)
             if(c_flag .gt. 0) flag = .TRUE.
           END SUBROUTINE h5tequal_f
-
-!----------------------------------------------------------------------
-! Name:		h5tclose_f
 !
-! Purpose:	Releases a datatype.
+!****s* H5T/h5tclose_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tclose_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Releases a datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5tclose_f(type_id, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+!
+! SOURCE
+  SUBROUTINE h5tclose_f(type_id, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL ::  h5tclose_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tclose_c(type_id)
               USE H5GLOBAL
@@ -327,44 +325,42 @@ CONTAINS
 
             hdferr = h5tclose_c(type_id)
           END SUBROUTINE h5tclose_f
-
-!----------------------------------------------------------------------
-! Name:		h5tget_class_f
-!
-! Purpose:	Returns the datatype class identifier.
-!
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		class		- class, possible values are:
-!					 H5T_NO_CLASS_F (-1)
-!					 H5T_INTEGER_F  (0)
-!					 H5T_FLOAT_F (1)
-!					 H5T_TIME_F  (2)
-!					 H5T_STRING_F (3)
-!					 H5T_BITFIELD_F (4)
-!					 H5T_OPAQUE_F (5)
-!					 H5T_COMPOUND_F (6)
-!					 H5T_REFERENCE_F (7)
-!					 H5T_ENUM_F (8)
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5tget_class_f(type_id, class, hdferr)
+!
+!****s* H5T/h5tget_class_f
+!
+! NAME
+!  h5tget_class_f
+!
+! PURPOSE
+!  Returns the datatype class identifier.
+!
+! INPUTS
+!  type_id 	 - datatype identifier
+! OUTPUTS
+!  class 	 - class, possible values are:
+!                   H5T_NO_CLASS_F (-1)
+!                   H5T_INTEGER_F  (0)
+!                   H5T_FLOAT_F (1)
+!                   H5T_TIME_F  (2)
+!                   H5T_STRING_F (3)
+!                   H5T_BITFIELD_F (4)
+!                   H5T_OPAQUE_F (5)
+!                   H5T_COMPOUND_F (6)
+!                   H5T_REFERENCE_F (7)
+!                   H5T_ENUM_F (8)
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+!
+! SOURCE
+  SUBROUTINE h5tget_class_f(type_id, class, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(OUT) :: class
@@ -380,10 +376,7 @@ CONTAINS
                                           ! H5T_REFERENCE_F (7)
                                           ! H5T_ENUM_F (8)
           INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!          INTEGER, EXTERNAL :: h5tget_class_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tget_class_c(type_id, class)
               USE H5GLOBAL
@@ -397,42 +390,37 @@ CONTAINS
 
           hdferr = h5tget_class_c(type_id, class)
           END SUBROUTINE h5tget_class_f
-
-!----------------------------------------------------------------------
-! Name:		h5tget_size_f
 !
-! Purpose: 	Returns the size of a datatype.
+!****s* H5T/h5tget_size_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		size		- datatype size
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tget_size_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Returns the size of a datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+! OUTPUTS
+!  size 	 - datatype size
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5tget_size_f(type_id, size, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+!
+! SOURCE
+  SUBROUTINE h5tget_size_f(type_id, size, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER(SIZE_T), INTENT(OUT) :: size ! Datatype size
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tget_size_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tget_size_c(type_id, size)
               USE H5GLOBAL
@@ -447,41 +435,38 @@ CONTAINS
             hdferr = h5tget_size_c(type_id, size)
           END SUBROUTINE h5tget_size_f
 
-!----------------------------------------------------------------------
-! Name:		h5tset_size_f
 !
-! Purpose: 	Sets the total size for an atomic datatype.
+!****s* H5T/h5tset_size_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-!		size		- size of the datatype
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tset_size_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Sets the total size for an atomic datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+!  size 	 - size of the datatype
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5tset_size_f(type_id, size, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+!
+!
+! SOURCE
+  SUBROUTINE h5tset_size_f(type_id, size, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER(SIZE_T), INTENT(IN) :: size ! Datatype size
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tset_size_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tset_size_c(type_id, size)
               USE H5GLOBAL
@@ -496,155 +481,139 @@ CONTAINS
             hdferr = h5tset_size_c(type_id, size)
           END SUBROUTINE h5tset_size_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_order_f
 !
-! Purpose: 	Returns the byte order of an atomic datatype.
+!****s* H5T/h5tget_order_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		order		- byte order for the datatype, possible
-!				  values are:
-!					 H5T_ORDER_LE_F
-!					 H5T_ORDER_BE_F
-!					 H5T_ORDER_VAX_F (not implemented yet)
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tget_order_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Returns the byte order of an atomic datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+! OUTPUTS
+!  order 	 - byte order for the datatype, possible
+!                  values are:
+!                    H5T_ORDER_LE_F
+!                    H5T_ORDER_BE_F
+!                    H5T_ORDER_VAX_F (not implemented yet)
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5tget_order_f(type_id, order, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
-            INTEGER, INTENT(OUT) :: order
-                              ! Datatype byte order, bossible values are:
-                                          ! H5T_ORDER_LE_F
-                                          ! H5T_ORDER_BE_F
-                                          ! H5T_ORDER_VAX_F
-            INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tget_order_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
 !
-            INTERFACE
-              INTEGER FUNCTION h5tget_order_c(type_id, order)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5TGET_ORDER_C'::h5tget_order_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: type_id
-              INTEGER, INTENT(OUT) :: order
-              END FUNCTION h5tget_order_c
-            END INTERFACE
-
-            hdferr = h5tget_order_c(type_id, order)
-          END SUBROUTINE h5tget_order_f
+! SOURCE
+  SUBROUTINE h5tget_order_f(type_id, order, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
+    INTEGER, INTENT(OUT) :: order
+                                    ! Datatype byte order, possible values are:
+                                    ! H5T_ORDER_LE_F
+                                    ! H5T_ORDER_BE_F
+                                    ! H5T_ORDER_VAX_F
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5tget_order_c(type_id, order)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5TGET_ORDER_C'::h5tget_order_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: type_id
+         INTEGER, INTENT(OUT) :: order
+       END FUNCTION h5tget_order_c
+    END INTERFACE
+    
+    hdferr = h5tget_order_c(type_id, order)
+  END SUBROUTINE h5tget_order_f
+!
+!****s* H5T/h5tset_order_f
+!
+! NAME
+!  h5tset_order_f
+!
+! PURPOSE
+!  Sets the byte ordering of an atomic datatype.
+!
+! INPUTS
+!  type_id 	 - datatype identifier
+!  order 	 - datatype byte order Possible values are:
+!                    H5T_ORDER_LE_F
+!                    H5T_ORDER_BE_F
+!                    H5T_ORDER_VAX_F (not implemented yet)
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+!
+! SOURCE
+  SUBROUTINE h5tset_order_f(type_id, order, hdferr)
+    IMPLICIT NONE
+    INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
+    INTEGER, INTENT(IN) :: order   ! Datatype byte order, possible values
+                                   ! are:
+                                   ! H5T_ORDER_LE_F
+                                   ! H5T_ORDER_BE_F
+                                   ! H5T_ORDER_VAX_F
+    INTEGER, INTENT(OUT) :: hdferr ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5tset_order_c(type_id, order)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5TSET_ORDER_C'::h5tset_order_c
+         !DEC$ENDIF
+         INTEGER(HID_T), INTENT(IN) :: type_id
+         INTEGER, INTENT(IN) :: order
+       END FUNCTION h5tset_order_c
+    END INTERFACE
+    
+    hdferr = h5tset_order_c(type_id, order)
+  END SUBROUTINE h5tset_order_f
 
-!----------------------------------------------------------------------
-! Name:		h5tset_order_f
 !
-! Purpose: 	Sets the byte ordering of an atomic datatype.
+!****s* H5T/h5tget_precision_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-!		order		- datatype byte order
-!				  Possible values are:
-!					 H5T_ORDER_LE_F
-!					 H5T_ORDER_BE_F
-!					 H5T_ORDER_VAX_F (not implemented yet)
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tget_precision_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Returns the precision of an atomic datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5tset_order_f(type_id, order, hdferr)
-            IMPLICIT NONE
-            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
-            INTEGER, INTENT(IN) :: order ! Datatype byte order, bossible values
-                                          ! are:
-                                          ! H5T_ORDER_LE_F
-                                          ! H5T_ORDER_BE_F
-                                          ! H5T_ORDER_VAX_F
-            INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tset_order_c
-!  MS FORTRAN needs explicit interface for C functions called here.
+! INPUTS
+!  type_id 	 - datatype identifier
+! OUTPUTS
+!  precision 	 - precision of the datatype
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-            INTERFACE
-              INTEGER FUNCTION h5tset_order_c(type_id, order)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5TSET_ORDER_C'::h5tset_order_c
-              !DEC$ENDIF
-              INTEGER(HID_T), INTENT(IN) :: type_id
-              INTEGER, INTENT(IN) :: order
-              END FUNCTION h5tset_order_c
-            END INTERFACE
-
-            hdferr = h5tset_order_c(type_id, order)
-          END SUBROUTINE h5tset_order_f
-
-!----------------------------------------------------------------------
-! Name:		h5tget_precision_f
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Purpose: 	Returns the precision of an atomic datatype.
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
 !
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		precision	- precision of the datatype
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5tget_precision_f(type_id, precision, hdferr)
+! SOURCE
+  SUBROUTINE h5tget_precision_f(type_id, precision, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER(SIZE_T), INTENT(OUT) :: precision ! Datatype precision
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tget_precision_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tget_precision_c (type_id, precision)
               USE H5GLOBAL
@@ -659,40 +628,37 @@ CONTAINS
             hdferr = h5tget_precision_c(type_id, precision)
           END SUBROUTINE h5tget_precision_f
 
-!----------------------------------------------------------------------
-! Name:		h5tset_precision_f
 !
-! Purpose: 	Sets the precision of an atomic datatype.
+!****s* H5T/h5tset_precision_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-!		precision	- datatype precision
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tset_precision_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Sets the precision of an atomic datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+!  precision 	 - datatype precision
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tset_precision_f(type_id, precision, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+!
+! SOURCE
+  SUBROUTINE h5tset_precision_f(type_id, precision, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER(SIZE_T), INTENT(IN) :: precision ! Datatype precision
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tset_precision_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tset_precision_c (type_id, precision)
               USE H5GLOBAL
@@ -707,41 +673,37 @@ CONTAINS
             hdferr = h5tset_precision_c(type_id, precision)
           END SUBROUTINE h5tset_precision_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_offset_f
 !
-! Purpose: 	Retrieves the bit offset of the first significant bit.
+!****s* H5T/h5tget_offset_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		offset		- offset value
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tget_offset_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Retrieves the bit offset of the first significant bit.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+! OUTPUTS
+!  offset 	 - offset value
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_offset_f(type_id, offset, hdferr)
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+!
+! SOURCE
+  SUBROUTINE h5tget_offset_f(type_id, offset, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER(SIZE_T), INTENT(OUT) :: offset ! Datatype bit offset of the
                                            ! first significant bit
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tget_offset_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tget_offset_c(type_id, offset)
               USE H5GLOBAL
@@ -756,41 +718,37 @@ CONTAINS
             hdferr = h5tget_offset_c(type_id, offset)
           END SUBROUTINE h5tget_offset_f
 
-!----------------------------------------------------------------------
-! Name:		h5tset_offset_f
 !
-! Purpose: 	Sets the bit offset of the first significant bit.
+!****s* H5T/h5tset_offset_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-!		offset		- offset value
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tset_offset_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Sets the bit offset of the first significant bit.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+!  offset 	 - offset value
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tset_offset_f(type_id, offset, hdferr)
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+!
+! SOURCE
+  SUBROUTINE h5tset_offset_f(type_id, offset, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER(SIZE_T), INTENT(IN) :: offset ! Datatype bit offset of the
                                            ! first significant bit
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tset_offset_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tset_offset_c(type_id, offset)
               USE H5GLOBAL
@@ -805,40 +763,40 @@ CONTAINS
             hdferr = h5tset_offset_c(type_id, offset)
           END SUBROUTINE h5tset_offset_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_pad_f
-!
-! Purpose: 	Retrieves the padding type of the least and
-!		most-significant bit padding.
-!
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		lsbpad		- least-significant bit padding type
-!		msbpad		- most-significant bit padding type
-!					 Possible values of padding type are:
-!					 H5T_PAD_ERROR_F      = -1
-!					 H5T_PAD_ZERO_F = 0
-!					 H5T_PAD_ONE_F = 1
-!					 H5T_PAD_BACKGROUND_F = 2
-!					 H5T_PAD_NPAD_F      = 3
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_pad_f(type_id, lsbpad, msbpad, hdferr)
+!
+!****s* H5T/h5tget_pad_f
+!
+! NAME
+!  h5tget_pad_f
+!
+! PURPOSE
+!  Retrieves the padding type of the least and
+!  most 	 -significant bit padding.
+!
+! INPUTS
+!  type_id 	 - datatype identifier
+! OUTPUTS
+!  lsbpad 	 - least-significant bit padding type
+!  msbpad 	 - most-significant bit padding type
+!                  Possible values of padding type are:
+!                    H5T_PAD_ERROR_F      = -1
+!                    H5T_PAD_ZERO_F = 0
+!                    H5T_PAD_ONE_F = 1
+!                    H5T_PAD_BACKGROUND_F = 2
+!                    H5T_PAD_NPAD_F      = 3
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tget_pad_f(type_id, lsbpad, msbpad, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(OUT) :: lsbpad ! padding type of the
@@ -853,10 +811,7 @@ CONTAINS
                                            ! H5T_PAD_NPAD_F      = 3
 
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tget_pad_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tget_pad_c(type_id, lsbpad, msbpad)
               USE H5GLOBAL
@@ -872,39 +827,38 @@ CONTAINS
             hdferr = h5tget_pad_c(type_id, lsbpad, msbpad)
           END SUBROUTINE h5tget_pad_f
 
-!----------------------------------------------------------------------
-! Name:		h5tset_pad_f
-!
-! Purpose: 	Sets the least and most-significant bits padding types.
-!
-! Inputs:
-!		type_id		- datatype identifier
-!		lsbpad		- least-significant bit padding type
-!		msbpad		- most-significant bit padding type
-!					 Possible values of padding type are:
-!					 H5T_PAD_ERROR_F      = -1
-!					 H5T_PAD_ZERO_F = 0
-!					 H5T_PAD_ONE_F = 1
-!					 H5T_PAD_BACKGROUND_F = 2
-!					 H5T_PAD_NPAD_F      = 3
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tset_pad_f(type_id, lsbpad, msbpad, hdferr)
+!
+!****s* H5T/h5tset_pad_f
+!
+! NAME
+!  h5tset_pad_f
+!
+! PURPOSE
+!  Sets the least and most-significant bits padding types.
+!
+! INPUTS
+!  type_id 	 - datatype identifier
+!  lsbpad 	 - least-significant bit padding type
+!  msbpad 	 - most-significant bit padding type
+!                  Possible values of padding type are:
+!                    H5T_PAD_ERROR_F      = -1
+!                    H5T_PAD_ZERO_F = 0
+!                    H5T_PAD_ONE_F = 1
+!                    H5T_PAD_BACKGROUND_F = 2
+!                    H5T_PAD_NPAD_F      = 3
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tset_pad_f(type_id, lsbpad, msbpad, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(IN) :: lsbpad ! padding type of the
@@ -918,10 +872,7 @@ CONTAINS
                                            ! H5T_PAD_ERROR_F      = -1
                                            ! H5T_PAD_NPAD_F      = 3
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5sget_pad_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tset_pad_c(type_id, lsbpad, msbpad)
               USE H5GLOBAL
@@ -937,37 +888,37 @@ CONTAINS
             hdferr = h5tset_pad_c(type_id, lsbpad, msbpad)
           END SUBROUTINE h5tset_pad_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_sign_f
-!
-! Purpose: 	Retrieves the sign type for an integer type.
-!
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		sign		- sign type
-!					Possible values are:
-!					Unsigned integer type H5T_SGN_NONE_F = 0
-!					Two's complement signed integer type
-!					H5T_SGN_2_F = 1
-!					or error value: H5T_SGN_ERROR_F=-1
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_sign_f(type_id, sign, hdferr)
+!
+!****s* H5T/h5tget_sign_f
+!
+! NAME
+!  h5tget_sign_f
+!
+! PURPOSE
+!  Retrieves the sign type for an integer type.
+!
+! INPUTS
+!  type_id 	 - datatype identifier
+! OUTPUTS
+!  sign 	 - sign type
+!                  Possible values are:
+!                    - Unsigned integer type 
+!                        H5T_SGN_NONE_F = 0
+!                    - Two's complement signed integer type
+!                        H5T_SGN_2_F = 1
+!                    - error value: H5T_SGN_ERROR_F=-1
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tget_sign_f(type_id, sign, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(OUT) :: sign ! sign type for an integer type
@@ -977,10 +928,8 @@ CONTAINS
                                          !H5T_SGN_2_F = 1
                                          !or error value: H5T_SGN_ERROR_F=-1
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5tget_sign_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tget_sign_c(type_id, sign)
               USE H5GLOBAL
@@ -995,37 +944,37 @@ CONTAINS
             hdferr = h5tget_sign_c(type_id, sign)
           END SUBROUTINE h5tget_sign_f
 
-!----------------------------------------------------------------------
-! Name:		h5tset_sign_f
-!
-! Purpose: 	Sets the sign proprety for an integer type.
-!
-! Inputs:
-!		type_id		- datatype identifier
-!		sign		- sign type
-!					Possible values are:
-!					Unsigned integer type H5T_SGN_NONE_F = 0
-!					Two's complement signed integer type
-!					H5T_SGN_2_F = 1
-!					or error value: H5T_SGN_ERROR_F=-1
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tset_sign_f(type_id, sign, hdferr)
+!
+!****s* H5T/h5tset_sign_f
+!
+! NAME
+!  h5tset_sign_f
+!
+! PURPOSE
+!  Sets the sign proprety for an integer type.
+!
+! INPUTS
+!  type_id 	 - datatype identifier
+!  sign 	 - sign type
+!                  Possible values are:
+!                    - Unsigned integer type 
+!                        H5T_SGN_NONE_F = 0
+!                    - Two's complement signed integer type
+!                        H5T_SGN_2_F = 1
+!                    - error value: H5T_SGN_ERROR_F=-1
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tset_sign_f(type_id, sign, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(IN) :: sign !sign type for an integer type
@@ -1035,10 +984,8 @@ CONTAINS
                                          !H5T_SGN_2_F = 1
                                          !or error value: H5T_SGN_ERROR_F=-1
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5tset_sign_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tset_sign_c(type_id, sign)
               USE H5GLOBAL
@@ -1053,36 +1000,35 @@ CONTAINS
             hdferr = h5tset_sign_c(type_id, sign)
           END SUBROUTINE h5tset_sign_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_fields_f
 !
-! Purpose: 	Retrieves floating point datatype bit field information.
+!****s* H5T/h5tget_fields_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		spos		- sign bit-position
-!		epos		- exponent bit-position
-!		esize		- size of exponent in bits
-!		mpos		- mantissa position
-!		msize		- size of mantissa in bits
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tget_fields_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Retrieves floating point datatype bit field information.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+! OUTPUTS
+!  spos 	 - sign bit-position
+!  epos 	 - exponent bit-position
+!  esize 	 - size of exponent in bits
+!  mpos 	 - mantissa position
+!  msize 	 - size of mantissa in bits
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_fields_f(type_id, spos, epos, esize, mpos, msize, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tget_fields_f(type_id, spos, epos, esize, mpos, msize, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER(SIZE_T), INTENT(OUT) :: spos   ! sign bit-position
@@ -1091,10 +1037,8 @@ CONTAINS
             INTEGER(SIZE_T), INTENT(OUT) :: mpos   ! mantissa bit-position
             INTEGER(SIZE_T), INTENT(OUT) :: msize  ! size of mantissa in bits
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5tget_fields_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tget_fields_c(type_id, spos, epos, esize, mpos, msize)
               USE H5GLOBAL
@@ -1113,37 +1057,35 @@ CONTAINS
             hdferr = h5tget_fields_c(type_id, spos, epos, esize, mpos, msize)
           END SUBROUTINE h5tget_fields_f
 
-!----------------------------------------------------------------------
-! Name:		h5tset_fields_f
-!
-! Purpose: 	Sets locations and sizes of floating point bit fields.
-!
-! Inputs:
-!		type_id		- datatype identifier
-!		spos		- sign bit-position
-!		epos		- exponent bit-position
-!		esize		- size of exponent in bits
-!		mpos		- mantissa position
-!		msize		- size of mantissa in bits
-!		hdferr:		- error code
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tset_fields_f(type_id, spos, epos, esize, mpos, msize, hdferr)
+!
+!****s* H5T/h5tset_fields_f
+!
+! NAME
+!  h5tset_fields_f
+!
+! PURPOSE
+!  Sets locations and sizes of floating point bit fields.
+!
+! INPUTS
+!  type_id 	 - datatype identifier
+!  spos 	 - sign bit-position
+!  epos 	 - exponent bit-position
+!  esize 	 - size of exponent in bits
+!  mpos 	 - mantissa position
+!  msize 	 - size of mantissa in bits
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tset_fields_f(type_id, spos, epos, esize, mpos, msize, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER(SIZE_T), INTENT(IN) :: spos   ! sign bit-position
@@ -1152,10 +1094,8 @@ CONTAINS
             INTEGER(SIZE_T), INTENT(IN) :: mpos   ! mantissa bit-position
             INTEGER(SIZE_T), INTENT(IN) :: msize  ! size of mantissa in bits
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5tset_fields_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tset_fields_c(type_id, spos, epos, esize, mpos, msize)
               USE H5GLOBAL
@@ -1174,40 +1114,37 @@ CONTAINS
             hdferr = h5tset_fields_c(type_id, spos, epos, esize, mpos, msize)
           END SUBROUTINE h5tset_fields_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_ebias_f
 !
-! Purpose: 	Retrieves the exponent bias of a floating-point type.
+!****s* H5T/h5tget_ebias_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		ebias		- datatype exponent bias
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tget_ebias_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Retrieves the exponent bias of a floating-point type.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+! OUTPUTS
+!  ebias 	 - datatype exponent bias
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_ebias_f(type_id, ebias, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tget_ebias_f(type_id, ebias, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER(SIZE_T), INTENT(OUT) :: ebias ! Datatype exponent bias of a floating-point type
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5tget_ebias_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tget_ebias_c(type_id, ebias)
               USE H5GLOBAL
@@ -1222,41 +1159,37 @@ CONTAINS
             hdferr = h5tget_ebias_c(type_id, ebias)
           END SUBROUTINE h5tget_ebias_f
 
-!----------------------------------------------------------------------
-! Name:		h5tset_ebias_f
 !
-! Purpose: 	Sets the exponent bias of a floating-point type.
+!****s* H5T/h5tset_ebias_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-!		ebias		- datatype exponent bias
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tset_ebias_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Sets the exponent bias of a floating-point type.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+!  ebias 	 - datatype exponent bias
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5tset_ebias_f(type_id, ebias, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tset_ebias_f(type_id, ebias, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER(SIZE_T), INTENT(IN) :: ebias !Datatype exponent bias of a floating-point type
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5tset_ebias_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tset_ebias_c(type_id, ebias)
               USE H5GLOBAL
@@ -1271,36 +1204,35 @@ CONTAINS
             hdferr = h5tset_ebias_c(type_id, ebias)
           END SUBROUTINE h5tset_ebias_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_norm_f
 !
-! Purpose: 	Retrieves mantissa normalization of a floating-point
-!		datatype.
+!****s* H5T/h5tget_norm_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		norm		- normalization types, valid values are:
-!					H5T_NORM_IMPLIED_F(0)
-!					H5T_NORM_MSBSET_F(1)
-!					H5T_NORM_NONE_F(2)
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tget_norm_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Retrieves mantissa normalization of a floating-point
+!  datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+! OUTPUTS
+!  norm 	 - normalization types, valid values are:
+!                    H5T_NORM_IMPLIED_F(0)
+!                    H5T_NORM_MSBSET_F(1)
+!                    H5T_NORM_NONE_F(2)
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_norm_f(type_id, norm, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tget_norm_f(type_id, norm, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(OUT) :: norm !mantissa normalization of a floating-point datatype
@@ -1310,10 +1242,8 @@ CONTAINS
                                          !mantissa is always 1, H5T_NORM_NONE_F(2)
                                          !Mantissa is not normalize
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5tget_norm_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tget_norm_c(type_id, norm)
               USE H5GLOBAL
@@ -1328,36 +1258,35 @@ CONTAINS
             hdferr = h5tget_norm_c(type_id, norm)
           END SUBROUTINE h5tget_norm_f
 
-!----------------------------------------------------------------------
-! Name:		h5tset_norm_f
 !
-! Purpose: 	Sets the mantissa normalization of a floating-point datatype.
+!****s* H5T/h5tset_norm_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-!		norm		- normalization types, valid values are:
-!					H5T_NORM_IMPLIED_F(0)
-!					H5T_NORM_MSBSET_F(1)
-!					H5T_NORM_NONE_F(2)
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tset_norm_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Sets the mantissa normalization of a floating-point datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+!  norm 	 - normalization types, valid values are:
+!                    H5T_NORM_IMPLIED_F(0)
+!                    H5T_NORM_MSBSET_F(1)
+!                    H5T_NORM_NONE_F(2)
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5tset_norm_f(type_id, norm, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+!
+! SOURCE
+  SUBROUTINE h5tset_norm_f(type_id, norm, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(IN) :: norm !mantissa normalization of a floating-point datatype
@@ -1367,10 +1296,7 @@ CONTAINS
                                          !mantissa is always 1, H5T_NORM_NONE_F(2)
                                          !Mantissa is not normalize
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tset_norm_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tset_norm_c(type_id, norm)
               USE H5GLOBAL
@@ -1385,37 +1311,36 @@ CONTAINS
             hdferr = h5tset_norm_c(type_id, norm)
           END SUBROUTINE h5tset_norm_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_inpad_f
-!
-! Purpose: 	Retrieves the internal padding type for unused bits
-!		in floating-point datatypes.
-!
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		padtype		- padding type for unused bits
-!				  Possible values of padding type are:
-!					 H5T_PAD_ZERO_F = 0
-!					 H5T_PAD_ONE_F = 1
-!					 H5T_PAD_BACKGROUND_F = 2
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_inpad_f(type_id, padtype, hdferr)
+!
+!****s* H5T/h5tget_inpad_f
+!
+! NAME
+!  h5tget_inpad_f
+!
+! PURPOSE
+!  Retrieves the internal padding type for unused bits
+!  in floating-point datatypes.
+!
+! INPUTS
+!  type_id 	 - datatype identifier
+! OUTPUTS
+!  padtype 	 - padding type for unused bits
+!                  Possible values of padding type are:
+!                    H5T_PAD_ZERO_F = 0
+!                    H5T_PAD_ONE_F = 1
+!                    H5T_PAD_BACKGROUND_F = 2
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tget_inpad_f(type_id, padtype, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(OUT) :: padtype ! padding type for unused bits
@@ -1426,10 +1351,7 @@ CONTAINS
                                             ! H5T__PAD_BACKGROUND_F = 2
 
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tget_inpad_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tget_inpad_c(type_id, padtype)
               USE H5GLOBAL
@@ -1444,36 +1366,35 @@ CONTAINS
             hdferr = h5tget_inpad_c(type_id, padtype)
           END SUBROUTINE h5tget_inpad_f
 
-!----------------------------------------------------------------------
-! Name:		h5tset_inpad_f
 !
-! Purpose: 	Fills unused internal floating point bits.
+!****s* H5T/h5tset_inpad_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-!		padtype		- padding type for unused bits
-!				  Possible values of padding type are:
-!					 H5T_PAD_ZERO_F = 0
-!					 H5T_PAD_ONE_F = 1
-!					 H5T_PAD_BACKGROUND_F = 2
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tset_inpad_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Fills unused internal floating point bits.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+!  padtype 	 - padding type for unused bits
+!                  Possible values of padding type are:
+!                    H5T_PAD_ZERO_F = 0
+!                    H5T_PAD_ONE_F = 1
+!                    H5T_PAD_BACKGROUND_F = 2
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tset_inpad_f(type_id, padtype, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tset_inpad_f(type_id, padtype, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(IN) :: padtype ! padding type for unused bits
@@ -1483,10 +1404,7 @@ CONTAINS
                                            ! H5T__PAD_ONE_F = 1
                                            ! H5T__PAD_BACKGROUND_F = 2
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tset_inpad_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tset_inpad_c(type_id, padtype)
               USE H5GLOBAL
@@ -1501,46 +1419,42 @@ CONTAINS
             hdferr = h5tset_inpad_c(type_id, padtype)
           END SUBROUTINE h5tset_inpad_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_cset_f
 !
-! Purpose: 	Retrieves the character set type of a string datatype.
+!****s* H5T/h5tget_cset_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		cset		- character set type of a string datatype
-!				  Possible values are:
-!				                  H5T_CSET_ASCII_F = 0
-!                                                 H5T_CSET_UTF8_F
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tget_cset_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Retrieves the character set type of a string datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id  - Datatype identifier
+! OUTPUTS
+!  cset     - Character set type of a string datatype
+!              Possible values are:
+!              H5T_CSET_ASCII_F = 0
+!              H5T_CSET_UTF8_F
+!  hdferr   - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_cset_f(type_id, cset, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tget_cset_f(type_id, cset, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
-            INTEGER, INTENT(OUT) :: cset ! character set type of a string datatype
-                                            ! Possible values are:
-                                            !    H5T_CSET_ASCII_F = 0
-                                            !    H5T_CSET_UTF8_F
-            INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tget_cset_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+            INTEGER, INTENT(OUT) :: cset   ! character set type of a string datatype
+                                           !  Possible values are:
+                                           !  H5T_CSET_ASCII_F = 0
+                                           !  H5T_CSET_UTF8_F
+            INTEGER, INTENT(OUT) :: hdferr ! Error code
+!*****
             INTERFACE
               INTEGER FUNCTION h5tget_cset_c(type_id, cset)
               USE H5GLOBAL
@@ -1555,47 +1469,42 @@ CONTAINS
             hdferr = h5tget_cset_c(type_id, cset)
           END SUBROUTINE h5tget_cset_f
 
-!----------------------------------------------------------------------
-! Name:		h5tset_cset_f
 !
-! Purpose: 	Sets character set to be used.
+!****s* H5T/h5tset_cset_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-!		cset		- character set type of a string datatype
-!				  Possible values are:
-!				                  H5T_CSET_ASCII_F = 0
-!                                                 H5T_CSET_UTF8_F
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tset_cset_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Sets character set to be used.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+!  cset 	 - character set type of a string datatype
+!                    Possible values are:
+!                     H5T_CSET_ASCII_F = 0
+!                     H5T_CSET_UTF8_F
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tset_cset_f(type_id, cset, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tset_cset_f(type_id, cset, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(IN) :: cset !character set type of a string datatype
-                                           !Possible values are:
-                                           !     H5T_CSET_ASCII_F = 0
-                                           !     H5T_CSET_UTF8_F
-
+                                           ! Possible values of padding type are:
+                                           ! H5T_CSET_ASCII_F = 0
+                                           ! H5T_CSET_UTF8_F
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tset_cset_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tset_cset_c(type_id, cset)
               USE H5GLOBAL
@@ -1610,45 +1519,41 @@ CONTAINS
             hdferr = h5tset_cset_c(type_id, cset)
           END SUBROUTINE h5tset_cset_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_strpad_f
-!
-! Purpose: 	Retrieves the storage mechanism for a string datatype.
-!
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		strpad		- storage method for a string datatype
-!				  Possible values are:
-!				  H5T_STR_NULLTERM_F,
-!				  H5T_STR_NULLPAD_F,
-!				  H5T_STR_SPACEPAD_F
-!				  H5T_STR_ERROR_F
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_strpad_f(type_id, strpad, hdferr)
+!
+!****s* H5T/h5tget_strpad_f
+!
+! NAME
+!  h5tget_strpad_f
+!
+! PURPOSE
+!  Retrieves the storage mechanism for a string datatype.
+!
+! INPUTS
+!  type_id 	 - datatype identifier
+! OUTPUTS
+!  strpad 	 - storage method for a string datatype
+!                  Possible values are:
+!                    H5T_STR_NULLTERM_F,
+!                    H5T_STR_NULLPAD_F,
+!                    H5T_STR_SPACEPAD_F
+!                    H5T_STR_ERROR_F
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tget_strpad_f(type_id, strpad, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(OUT) :: strpad
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tget_strpad_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tget_strpad_c(type_id, strpad)
               USE H5GLOBAL
@@ -1663,45 +1568,41 @@ CONTAINS
             hdferr = h5tget_strpad_c(type_id, strpad)
           END SUBROUTINE h5tget_strpad_f
 
-!----------------------------------------------------------------------
-! Name:		h5tset_strpad_f
-!
-! Purpose: 	Defines the storage mechanism for character strings.
-!
-! Inputs:
-!		type_id		- datatype identifier
-!		strpad		- storage method for a string datatype
-!				  Possible values are:
-!				  H5T_STR_NULLTERM_F,
-!				  H5T_STR_NULLPAD_F,
-!				  H5T_STR_SPACEPAD_F
-!				  H5T_STR_ERROR_F
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tset_strpad_f(type_id, strpad, hdferr)
+!
+!****s* H5T/h5tset_strpad_f
+!
+! NAME
+!  h5tset_strpad_f
+!
+! PURPOSE
+!  Defines the storage mechanism for character strings.
+!
+! INPUTS
+!  type_id 	 - datatype identifier
+!  strpad 	 - storage method for a string datatype
+!                  Possible values are:
+!                    H5T_STR_NULLTERM_F,
+!                    H5T_STR_NULLPAD_F,
+!                    H5T_STR_SPACEPAD_F
+!                    H5T_STR_ERROR_F
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tset_strpad_f(type_id, strpad, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(IN) :: strpad ! string padding method for a string datatype
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tset_strpad_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tset_strpad_c(type_id, strpad)
               USE H5GLOBAL
@@ -1716,41 +1617,38 @@ CONTAINS
             hdferr = h5tset_strpad_c(type_id, strpad)
           END SUBROUTINE h5tset_strpad_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_nmembers_f
 !
-! Purpose: 	Retrieves the number of fields in a compound datatype.
+!****s* H5T/h5tget_nmembers_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		num_members	- number of members
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tget_nmembers_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Retrieves the number of fields in a compound datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+! OUTPUTS
+!  num_members 	 - number of members
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5tget_nmembers_f(type_id, num_members, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+!
+! SOURCE
+  SUBROUTINE h5tget_nmembers_f(type_id, num_members, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(OUT) :: num_members !number of fields in a compound datatype
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5tget_nmembers_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tget_nmembers_c(type_id, num_members)
               USE H5GLOBAL
@@ -1765,34 +1663,33 @@ CONTAINS
             hdferr = h5tget_nmembers_c(type_id, num_members)
           END SUBROUTINE h5tget_nmembers_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_member_name_f
 !
-! Purpose: 	Retrieves the name of a field of a compound datatype.
+!****s* H5T/h5tget_member_name_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-!		index		- filed index (0-based)
-! Outputs:
-!		member_name	- buffer to hold member's name
-!		namelen		- name length
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tget_member_name_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Retrieves the name of a field of a compound datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+!  index 	 - filed index (0-based)
+! OUTPUTS
+!  member_name 	 - buffer to hold member's name
+!  namelen 	 - name length
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_member_name_f(type_id, index, member_name,  namelen, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tget_member_name_f(type_id, index, member_name,  namelen, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(IN) :: index !Field index (0-based) of the field name to retrieve
@@ -1800,10 +1697,7 @@ CONTAINS
                                                          !a compound datatype
             INTEGER, INTENT(OUT) :: namelen ! Length of the name
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tget_member_name_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tget_member_name_c(type_id, index, member_name, namelen)
               USE H5GLOBAL
@@ -1821,43 +1715,39 @@ CONTAINS
             hdferr = h5tget_member_name_c(type_id, index, member_name, namelen)
           END SUBROUTINE h5tget_member_name_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_member_offset_f
 !
-! Purpose: 	Retrieves the offset of a field of a compound datatype.
+!****s* H5T/h5tget_member_offset_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-!		member_no 	- number of the field
-! Outputs:
-!		offset		- byte offset of the requested field
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tget_member_offset_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Retrieves the offset of a field of a compound datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+!  member_no 	 - number of the field
+! OUTPUTS
+!  offset 	 - byte offset of the requested field
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_member_offset_f(type_id, member_no, offset, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tget_member_offset_f(type_id, member_no, offset, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(IN) :: member_no !Number of the field
                                                        !whose offset is requested
             INTEGER(SIZE_T), INTENT(OUT) :: offset !byte offset of the beginning of the field
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tget_member_offset_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tget_member_offset_c(type_id, member_no, offset )
               USE H5GLOBAL
@@ -1872,37 +1762,35 @@ CONTAINS
 
             hdferr = h5tget_member_offset_c(type_id, member_no, offset )
           END SUBROUTINE h5tget_member_offset_f
-!----------------------------------------------------------------------
-! Name:		h5tget_member_index_f
 !
-! Purpose: 	Retrieves the index of a compound or enumeration datatype member.
+!****s* H5T/h5tget_member_index_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-!		name		- name of the field or member whose index to
-!                                 to be retrieved from the datatype.
-! Outputs:
-!               index           - 0-based index of the filed or member (0 to N-1)
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tget_member_index_f
 !
-! Programmer:	Elena Pourmal
-!		September 26, 2002
+! PURPOSE
+!  Retrieves the index of a compound or enumeration datatype member.
 !
-! Modifications:
+! INPUTS
+!  type_id 	 - datatype identifier
+!  name 	 - name of the field or member whose index to
+!  to be retrieved from the datatype.
+! OUTPUTS
+!  index 	 - 0-based index of the filed or member (0 to N-1)
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_member_index_f(type_id, name, index, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  September 26, 2002
+!
+! SOURCE
+  SUBROUTINE h5tget_member_index_f(type_id, name, index, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier
             CHARACTER(LEN=*), INTENT(IN) :: name   ! Field or member name
             INTEGER, INTENT(OUT) :: index          ! Field or member index
             INTEGER, INTENT(OUT) :: hdferr          ! Error code
+!*****
             INTEGER :: namelen          ! Name length
 
             INTERFACE
@@ -1924,83 +1812,82 @@ CONTAINS
           END SUBROUTINE h5tget_member_index_f
 
 
-!----------------------------------------------------------------------
-! Name:		h5tget_member_dim_f
-!
-! Purpose: 	This function is not supported in hdf5-1.4.*
-!
-! Inputs:
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-!          SUBROUTINE h5tget_member_dims_f(type_id, field_idx,dims, field_dims, perm, hdferr)
-!
-!            IMPLICIT NONE
-!            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
-!            INTEGER, INTENT(IN) :: field_idx !Field index (0-based) of
-!                                             !field_dims, perm)
-!            INTEGER, INTENT(OUT) :: dims     !number of dimensions of the field
-!
-!            INTEGER(SIZE_T),DIMENSION(*), INTENT(OUT) ::  field_dims !buffer to store the
-!                                                                      !dimensions of the field
-!            INTEGER, DIMENSION(*), INTENT(OUT)  ::  perm  !buffer to store the
-!                                                                   !permutation vector of the field
-!            INTEGER, INTENT(OUT) :: hdferr        ! Error code
-!            INTEGER, EXTERNAL :: h5tget_member_dims_c
-!            hdferr = h5tget_member_dims_c(type_id, field_idx, dims, field_dims, perm)
-!
-!          END SUBROUTINE h5tget_member_dims_f
-
-!----------------------------------------------------------------------
-! Name:		h5tget_array_dims_f
-!
-! Purpose: 	Returns sizes of array dimensions.
-!
-! Inputs:
-!		type_id		- array datatype identifier
-! Outputs:
-!		dims		- buffer to store array datatype
-!				  dimensions
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_array_dims_f(type_id, dims, hdferr)
+!  !$!
+!  !$!****s* H5T/h5tget_member_dim_f
+!  !$!
+!  !$! NAME
+!  !$!		h5tget_member_dim_f
+!  !$!
+!  !$! PURPOSE
+!  !$! 	This function is not supported in hdf5-1.4.*
+!  !$!
+!  !$! INPUTS
+!  !$! OUTPUTS
+!  !$!		hdferr:		- error code
+!  !$!				 	Success:  0
+!  !$!				 	Failure: -1
+!  !$!
+!  !$! AUTHOR
+!  !$!	Elena Pourmal
+!  !$!		August 12, 1999
+!  !$!
+!  !$! HISTORY
+!  !$! 	Explicit Fortran interfaces were added for
+!  !$!			called C functions (it is needed for Windows
+!  !$!			port).  March 7, 2001
+!  !$!
+!  !$! SOURCE
+!  !$!  SUBROUTINE h5tget_member_dims_f(type_id, field_idx,dims, field_dims, perm, hdferr)
+!  !$!
+!  !$!            IMPLICIT NONE
+!  !$!            INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
+!  !$!            INTEGER, INTENT(IN) :: field_idx !Field index (0-based) of
+!  !$!                                             !field_dims, perm)
+!  !$!            INTEGER, INTENT(OUT) :: dims     !number of dimensions of the field
+!  !$!
+!  !$!            INTEGER(SIZE_T),DIMENSION(*), INTENT(OUT) ::  field_dims !buffer to store the
+!  !$!                                                                      !dimensions of the field
+!  !$!            INTEGER, DIMENSION(*), INTENT(OUT)  ::  perm  !buffer to store the
+!  !$!                                                                   !permutation vector of the field
+!  !$!            INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!  !$!*****!
+!  !$! INTEGER, EXTERNAL :: h5tget_member_dims_c
+!  !$!            hdferr = h5tget_member_dims_c(type_id, field_idx, dims, field_dims, perm)
+!  !$!
+!  !$!          END SUBROUTINE h5tget_member_dims_f
+
+
+!****s* H5T/h5tget_array_dims_f
+!
+! NAME
+!  h5tget_array_dims_f
+!
+! PURPOSE
+!  Returns sizes of array dimensions.
+!
+! INPUTS
+!  type_id 	 - array datatype identifier
+! OUTPUTS
+!  dims 	 - buffer to store array datatype dimensions
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tget_array_dims_f(type_id, dims, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Array datatype identifier
             INTEGER(HSIZE_T),DIMENSION(*), INTENT(OUT) ::  dims !buffer to store array datatype
                                                                 ! dimensions
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5tget_array_dims_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tget_array_dims_c(type_id, dims)
               USE H5GLOBAL
@@ -2016,40 +1903,36 @@ CONTAINS
 
           END SUBROUTINE h5tget_array_dims_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_array_ndims_f
 !
-! Purpose: 	Returns the rank of an array datatype.
+!****s* H5T/h5tget_array_ndims_f
 !
-! Inputs:
-!		type_id		- array datatype identifier
-! Outputs:
-!		ndims		- number of array dimensions
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tget_array_ndims_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Returns the rank of an array datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - array datatype identifier
+! OUTPUTS
+!  ndims 	 - number of array dimensions
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_array_ndims_f(type_id, ndims, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tget_array_ndims_f(type_id, ndims, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Array datatype identifier
             INTEGER, INTENT(OUT) ::  ndims ! number of array dimensions
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tget_array_ndims_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tget_array_ndims_c(type_id, ndims)
               USE H5GLOBAL
@@ -2065,41 +1948,37 @@ CONTAINS
 
           END SUBROUTINE h5tget_array_ndims_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_super_f
 !
-! Purpose: 	Returns the base datatype from which a datatype is derived.
+!****s* H5T/h5tget_super_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		base_type_id	- identifier of the base type
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tget_super_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Returns the base datatype from which a datatype is derived.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+! OUTPUTS
+!  base_type_id 	 - identifier of the base type
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_super_f(type_id, base_type_id, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tget_super_f(type_id, base_type_id, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! datatype identifier
             INTEGER(HID_T), INTENT(OUT) :: base_type_id ! identifier of the datatype
                                            ! from which datatype (type_id) was derived
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tget_super_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tget_super_c(type_id, base_type_id)
               USE H5GLOBAL
@@ -2115,44 +1994,40 @@ CONTAINS
 
           END SUBROUTINE h5tget_super_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_member_type_f
 !
-! Purpose: 	Returns the datatype of the specified member.
+!****s* H5T/h5tget_member_type_f
 !
-! Inputs:
-!		type_id		- compound datatype identifier
-!		field_idx	- field index (0-based)
+! NAME
+!  h5tget_member_type_f
 !
-! Outputs:
-!		datatype	- idnetifier of the member's datatype
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Returns the datatype of the specified member.
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! INPUTS
+!  type_id 	 - compound datatype identifier
+!  field_idx 	 - field index (0-based)
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! OUTPUTS
+!  datatype 	 - idnetifier of the member's datatype
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_member_type_f(type_id,  field_idx, datatype, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tget_member_type_f(type_id,  field_idx, datatype, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(IN) :: field_idx !Field index (0-based) of the field type to retrieve
             INTEGER(HID_T), INTENT(OUT) :: datatype !identifier of a copy of
                                                     !the datatype of the field
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tget_member_type_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tget_member_type_c(type_id, field_idx , datatype)
               USE H5GLOBAL
@@ -2168,37 +2043,35 @@ CONTAINS
             hdferr = h5tget_member_type_c(type_id, field_idx , datatype)
           END SUBROUTINE h5tget_member_type_f
 
-!----------------------------------------------------------------------
-! Name:		h5tcreate_f
 !
-! Purpose: 	Creates a new dataype
+!****s* H5T/h5tcreate_f
 !
-! Inputs:
-!		class		- datatype class, possible values are:
-!					 H5T_COMPOUND_F
-!					 H5T_ENUM_F
-!					 H5T_OPAQUE_F
-!		size		- datattype size
-! Outputs:
-!		type_id		- datatype identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tcreate_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Creates a new dataype
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  class 	 - datatype class, possible values are:
+!                    H5T_COMPOUND_F
+!                    H5T_ENUM_F
+!                    H5T_OPAQUE_F
+!  size 	 - datattype size
+! OUTPUTS
+!  type_id 	 - datatype identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-
-          SUBROUTINE h5tcreate_f(class, size, type_id, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tcreate_f(class, size, type_id, hdferr)
             IMPLICIT NONE
             INTEGER, INTENT(IN) :: class ! Datatype class can be one of
                                          ! H5T_COMPOUND_F
@@ -2207,10 +2080,7 @@ CONTAINS
             INTEGER(SIZE_T), INTENT(IN) :: size ! Size of the datatype
             INTEGER(HID_T), INTENT(OUT) :: type_id ! Datatype identifier
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tcreate_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tcreate_c(class, size, type_id)
               USE H5GLOBAL
@@ -2226,35 +2096,34 @@ CONTAINS
            hdferr = h5tcreate_c(class, size, type_id)
           END SUBROUTINE h5tcreate_f
 
-!----------------------------------------------------------------------
-! Name:		h5tinsert_f
 !
-! Purpose: 	Adds a new member to a compound datatype.
+!****s* H5T/h5tinsert_f
 !
-! Inputs:
-!		type_id		- compound dattype identifier
-!		name		- name of the field to insert
-!		offset		- start of the member in an instance of
-!				  the compound datatype
-!		field_id	- datatype identifier of the field to insert
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tinsert_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Adds a new member to a compound datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - compound dattype identifier
+!  name 	 - name of the field to insert
+!  offset 	 - start of the member in an instance of
+!                  the compound datatype
+!  field_id 	 - datatype identifier of the field to insert
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tinsert_f(type_id,  name, offset, field_id, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tinsert_f(type_id,  name, offset, field_id, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             CHARACTER(LEN=*), INTENT(IN) :: name !Name of the field to insert
@@ -2263,11 +2132,9 @@ CONTAINS
             INTEGER(HID_T), INTENT(IN) :: field_id !datatype identifier of the new member
 
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
             INTEGER :: namelen
 
-!            INTEGER, EXTERNAL :: h5tinsert_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tinsert_c(type_id, name, namelen, offset, field_id)
               USE H5GLOBAL
@@ -2287,38 +2154,35 @@ CONTAINS
             hdferr = h5tinsert_c(type_id, name, namelen, offset, field_id )
           END SUBROUTINE h5tinsert_f
 
-!----------------------------------------------------------------------
-! Name:		h5tpack_f
 !
-! Purpose: 	Recursively removes padding from within a compound datatype.
+!****s* H5T/h5tpack_f
 !
-! Inputs:
-!		type_id		- compound datatype identifier
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tpack_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Recursively removes padding from within a compound datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - compound datatype identifier
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tpack_f(type_id, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tpack_f(type_id, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5tpack_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tpack_c(type_id)
               USE H5GLOBAL
@@ -2332,95 +2196,91 @@ CONTAINS
             hdferr = h5tpack_c(type_id)
           END SUBROUTINE h5tpack_f
 
-!----------------------------------------------------------------------
-! Name:		h5tinsert_array_f
-!
-! Purpose: 	This function is not available on hdf5-1.4.*
-!
-! Inputs:
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-!          SUBROUTINE h5tinsert_array_f(parent_id,name,offset, ndims, dims, member_id, hdferr, perm)
-!            IMPLICIT NONE
-!            INTEGER(HID_T), INTENT(IN) :: parent_id ! identifier of the parent compound datatype
-!            CHARACTER(LEN=*), INTENT(IN) :: name !Name of the new member
-!            INTEGER(SIZE_T), INTENT(IN) :: offset !Offset to start of new member
-!                                                   !within compound datatype
-!            INTEGER, INTENT(IN) ::  ndims !Dimensionality of new member.
-!                                          !Valid values are 0 (zero) through 4 (four)
-!            INTEGER(SIZE_T), DIMENSION(*), INTENT(IN) :: dims !Size of new member array
-!            INTEGER(HID_T), INTENT(IN) :: member_id ! identifier of the datatype of the new member
-!            INTEGER, INTENT(OUT) :: hdferr        ! Error code
-!
-!            INTEGER, DIMENSION(*), OPTIONAL, INTENT(IN) :: perm
-!                                                               !Pointer to buffer to store
-!                                                               !the permutation vector of the field
-!            INTEGER :: namelen, sizeofperm
-!            INTEGER, EXTERNAL :: h5tinsert_array_c,  h5tinsert_array_c2
-!            namelen = LEN(name)
-!            if (present(perm)) then
-!              hdferr = h5tinsert_array_c(parent_id, name, namelen, offset, ndims,dims, member_id, perm)
-!            else
-!              hdferr = h5tinsert_array_c2(parent_id, name, namelen, offset, ndims,dims, member_id)
-!            end if
-!
-!         END SUBROUTINE h5tinsert_array_f
-
-!----------------------------------------------------------------------
-! Name:		h5tarray_create_f
-!
-! Purpose: 	Creates an array datatype object.
-!
-! Inputs:
-!		base_id		- datatype identifier for the array
-!				  base datatype
-!		rank		- rank of the array
-!		dims		- array dimension sizes
-! Outputs:
-!		type_id		- array datatype identifier
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		August 12, 1999
-!
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tarray_create_f(base_id, rank, dims, type_id, hdferr)
+!  !$!
+!  !$!****s* H5T/h5tinsert_array_f
+!  !$!
+!  !$! NAME
+!  !$!		h5tinsert_array_f
+!  !$!
+!  !$! PURPOSE
+!  !$! 	This function is not available on hdf5-1.4.*
+!  !$!
+!  !$! INPUTS
+!  !$! OUTPUTS
+!  !$!		hdferr:		- error code
+!  !$!				 	Success:  0
+!  !$!				 	Failure: -1
+!  !$!
+!  !$! AUTHOR
+!  !$!	Elena Pourmal
+!  !$!		August 12, 1999
+!  !$!
+!  !$! HISTORY
+!  !$! 	Explicit Fortran interfaces were added for
+!  !$!			called C functions (it is needed for Windows
+!  !$!			port).  March 7, 2001
+!  !$! SOURCE
+!  SUBROUTINE h5tinsert_array_f(parent_id,name,offset, ndims, dims, member_id, hdferr, perm)
+!  IMPLICIT NONE
+!  INTEGER(HID_T), INTENT(IN) :: parent_id ! identifier of the parent compound datatype
+!  CHARACTER(LEN=*), INTENT(IN) :: name !Name of the new member
+!  INTEGER(SIZE_T), INTENT(IN) :: offset !Offset to start of new member
+!  !within compound datatype
+!  INTEGER, INTENT(IN) ::  ndims !Dimensionality of new member.
+!  !Valid values are 0 (zero) through 4 (four)
+!  INTEGER(SIZE_T), DIMENSION(*), INTENT(IN) :: dims !Size of new member array
+!  INTEGER(HID_T), INTENT(IN) :: member_id ! identifier of the datatype of the new member
+!  INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!  !*****!
+!  INTEGER, DIMENSION(*), OPTIONAL, INTENT(IN) :: perm
+!  !Pointer to buffer to store
+!  !the permutation vector of the field
+!  INTEGER :: namelen, sizeofperm
+!  INTEGER, EXTERNAL :: h5tinsert_array_c,  h5tinsert_array_c2
+!  namelen = LEN(name)
+!  if (present(perm)) then
+!  hdferr = h5tinsert_array_c(parent_id, name, namelen, offset, ndims,dims, member_id, perm)
+!  else
+!  hdferr = h5tinsert_array_c2(parent_id, name, namelen, offset, ndims,dims, member_id)
+!  end if
+!
+!  END SUBROUTINE h5tinsert_array_f
+
+!
+!****s* H5T/h5tarray_create_f
+!
+! NAME
+!  h5tarray_create_f
+!
+! PURPOSE
+!  Creates an array datatype object.
+!
+! INPUTS
+!  base_id 	 - datatype identifier for the array
+!                  base datatype
+!  rank 	 - rank of the array
+!  dims 	 - array dimension sizes
+! OUTPUTS
+!  type_id 	 - array datatype identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tarray_create_f(base_id, rank, dims, type_id, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: base_id ! identifier of array base datatype
             INTEGER, INTENT(IN) ::  rank ! Rank of the array
             INTEGER(HSIZE_T), DIMENSION(*), INTENT(IN) :: dims !Sizes of each array dimension
             INTEGER(HID_T), INTENT(OUT) :: type_id ! identifier of the array datatype
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-
-!            INTEGER, EXTERNAL :: h5tarray_create_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tarray_create_c(base_id, rank, dims, type_id)
               USE H5GLOBAL
@@ -2438,33 +2298,31 @@ CONTAINS
 
          END SUBROUTINE h5tarray_create_f
 
-!----------------------------------------------------------------------
-! Name:		h5tenum_create_f
 !
-! Purpose: 	Creates a new enumeration datatype.
+!****s* H5T/h5tenum_create_f
 !
-! Inputs:
-!		parent_id	- datatype identifier for base datatype
-! Outputs:
-!		new_type_id	- datatype identifier for the enumeration
-!				  datatype
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tenum_create_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Creates a new enumeration datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  parent_id 	 - datatype identifier for base datatype
+! OUTPUTS
+!  new_type_id 	 - datatype identifier for the enumeration datatype
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tenum_create_f(parent_id, new_type_id, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tenum_create_f(parent_id, new_type_id, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: parent_id  ! Datatype identifier for
                                                      ! the  base datatype
@@ -2472,10 +2330,8 @@ CONTAINS
                                                      !datatype identifier for the
                                                      ! new enumeration datatype
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5tenum_create_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tenum_create_c(parent_id, new_type_id)
               USE H5GLOBAL
@@ -2490,41 +2346,38 @@ CONTAINS
             hdferr = h5tenum_create_c(parent_id, new_type_id)
           END SUBROUTINE h5tenum_create_f
 
-!----------------------------------------------------------------------
-! Name:		h5tenaum_insert_f
 !
-! Purpose: 	Inserts a new enumeration datatype member.
+!****s* H5T/h5tenaum_insert_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tenaum_insert_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Inserts a new enumeration datatype member.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tenum_insert_f(type_id,  name, value, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tenum_insert_f(type_id,  name, value, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             CHARACTER(LEN=*), INTENT(IN) :: name  !Name of  the new member
             INTEGER, INTENT(IN) :: value !value of the new member
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
             INTEGER :: namelen
 
-!            INTEGER, EXTERNAL :: h5tenum_insert_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tenum_insert_c(type_id, name, namelen, value)
               USE H5GLOBAL
@@ -2543,45 +2396,48 @@ CONTAINS
             hdferr = h5tenum_insert_c(type_id, name, namelen, value)
           END SUBROUTINE h5tenum_insert_f
 
-!----------------------------------------------------------------------
-! Name:		h5tenum_nameof_f
 !
-! Purpose: 	Returns the symbol name corresponding to a specified
-!    		member of an enumeration datatype.
+!****s* H5T/h5tenum_nameof_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-!		value		- value of the enumeration datatype
-!		namelen		- name buffer size
-! Outputs:
-!		name		- buffer to hold symbol name
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tenum_nameof_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Returns the symbol name corresponding to a specified
+!  member of an enumeration datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+!  value 	 - value of the enumeration datatype
+!  namelen 	 - name buffer size
+! OUTPUTS
+!  name 	 - buffer to hold symbol name
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tenum_nameof_f(type_id,  value, namelen, name, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+!
+! NOTE
+!   According to the standard: Because an INTENT(OUT) variable is considered undefined 
+!   on entry to the procedure, any default initialization specified for its type will 
+!   be applied. So we need to blank out the "name" to be portable and eliminate any 
+!   characters the "name' may contain upon entry, depending on compiler implementation.
+! SOURCE
+  SUBROUTINE h5tenum_nameof_f(type_id,  value, namelen, name, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             CHARACTER(LEN=*), INTENT(OUT) :: name  !Name of the  enumeration datatype.
             INTEGER(SIZE_T), INTENT(IN) :: namelen !length of the name
             INTEGER, INTENT(IN) :: value !value of the  enumeration datatype.
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5tenum_nameof_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tenum_nameof_c(type_id, value, name, namelen)
               USE H5GLOBAL
@@ -2596,47 +2452,47 @@ CONTAINS
               END FUNCTION h5tenum_nameof_c
             END INTERFACE
 
+            name(1:LEN(name)) = ' '
+
             hdferr = h5tenum_nameof_c(type_id, value, name, namelen)
           END SUBROUTINE h5tenum_nameof_f
 
-!----------------------------------------------------------------------
-! Name:		h5tenum_valuof_f
 !
-! Purpose: 	Returns the value corresponding to a specified
-!		member of an enumeration datatype.
+!****s* H5T/h5tenum_valuof_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-!		name		- symbol name
-! Outputs:
-!		value		- value of the enumeration datatype
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tenum_valuof_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Returns the value corresponding to a specified
+!  member of an enumeration datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+!  name 	 - symbol name
+! OUTPUTS
+!  value 	 - value of the enumeration datatype
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tenum_valueof_f(type_id,  name, value, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+!
+! SOURCE
+  SUBROUTINE h5tenum_valueof_f(type_id,  name, value, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             CHARACTER(LEN=*), INTENT(IN) :: name  !Name of the  enumeration datatype.
             INTEGER, INTENT(OUT) :: value !value of the  enumeration datatype.
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
             INTEGER :: namelen
 
-!            INTEGER, EXTERNAL :: h5tenum_valueof_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tenum_valueof_c(type_id, name, namelen,  value)
               USE H5GLOBAL
@@ -2655,42 +2511,39 @@ CONTAINS
             hdferr = h5tenum_valueof_c(type_id, name, namelen,  value)
           END SUBROUTINE h5tenum_valueof_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_member_value_f
 !
-! Purpose: 	Returns the value of an enumeration datatype member.
+!****s* H5T/h5tget_member_value_f
 !
-! Inputs:
-!		type_id		- datatype identifier
-!		member_no	- number of the enumeration datatype member
-! Outputs:
-!		value		- value of the enumeration datatype
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tget_member_value_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Returns the value of an enumeration datatype member.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - datatype identifier
+!  member_no 	 - number of the enumeration datatype member
+! OUTPUTS
+!  value 	 - value of the enumeration datatype
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_member_value_f(type_id,  member_no, value, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tget_member_value_f(type_id,  member_no, value, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             INTEGER, INTENT(IN) :: member_no !Number of the enumeration datatype member
             INTEGER, INTENT(OUT) :: value !value of the  enumeration datatype.
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
 
-!            INTEGER, EXTERNAL :: h5tget_member_value_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tget_member_value_c(type_id, member_no, value)
               USE H5GLOBAL
@@ -2706,43 +2559,40 @@ CONTAINS
             hdferr = h5tget_member_value_c(type_id, member_no, value)
           END SUBROUTINE h5tget_member_value_f
 
-!----------------------------------------------------------------------
-! Name:		h5tset_tag_f
 !
-! Purpose: 	Tags an opaque datatype.
+!****s* H5T/h5tset_tag_f
 !
-! Inputs:
-!		type_id		- identifier for opaque datatype
-!		tag		- unique ASCII string with which the opaque
-!				  datatype is to be tagged.
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tset_tag_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Tags an opaque datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - identifier for opaque datatype
+!  tag 	         - unique ASCII string with which the opaque
+!                  datatype is to be tagged.
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tset_tag_f(type_id, tag, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tset_tag_f(type_id, tag, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
             CHARACTER(LEN=*), INTENT(IN) :: tag !Unique ASCII string with which
                                                 !the opaque datatype is to be tagged
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
             INTEGER :: taglen
 
-!            INTEGER, EXTERNAL :: h5tset_tag_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tset_tag_c(type_id, tag, taglen)
               USE H5GLOBAL
@@ -2760,45 +2610,42 @@ CONTAINS
             hdferr = h5tset_tag_c(type_id, tag, taglen)
           END SUBROUTINE h5tset_tag_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_tag_f
 !
-! Purpose: 	Gets the tag associated with an opaque datatype.
+!****s* H5T/h5tget_tag_f
 !
-! Inputs:
-!		type_id		- identifier for opaque datatype
-! Outputs:
-!		tag		- unique ASCII string associated with opaque
-!				  datatype
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tget_tag_f
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! PURPOSE
+!  Gets the tag associated with an opaque datatype.
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  March 7, 2001
+! INPUTS
+!  type_id 	 - identifier for opaque datatype
+! OUTPUTS
+!  tag 	         - unique ASCII string associated with opaque
+!                  datatype
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_tag_f(type_id, tag,taglen, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
+!
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  March 7, 2001
+! SOURCE
+  SUBROUTINE h5tget_tag_f(type_id, tag,taglen, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier
-            CHARACTER(LEN=*), INTENT(OUT) :: tag !Unique ASCII string with which
-                                                !the opaque datatype is to be tagged
-            INTEGER, INTENT(OUT) :: taglen !length of tag
+            CHARACTER(LEN=*), INTENT(OUT) :: tag  ! Unique ASCII string with which
+                                                  !  the opaque datatype is to be tagged
+            INTEGER, INTENT(OUT) :: taglen        ! Length of tag
+            INTEGER(SIZE_T)      :: tag_size      ! Declared character length of tab 
             INTEGER, INTENT(OUT) :: hdferr        ! Error code
-
-!            INTEGER, EXTERNAL :: h5tget_tag_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
-              INTEGER FUNCTION h5tget_tag_c(type_id, tag, taglen)
+              INTEGER FUNCTION h5tget_tag_c(type_id, tag, tag_size, taglen)
               USE H5GLOBAL
               !DEC$IF DEFINED(HDF5F90_WINDOWS)
               !DEC$ATTRIBUTES C,reference,decorate,alias:'H5TGET_TAG_C'::h5tget_tag_c
@@ -2806,42 +2653,45 @@ CONTAINS
               !DEC$ATTRIBUTES reference :: tag
               INTEGER(HID_T), INTENT(IN) :: type_id
               CHARACTER(LEN=*), INTENT(OUT) :: tag
+              INTEGER(SIZE_T), INTENT(IN) :: tag_size
               INTEGER, INTENT(OUT) :: taglen
               END FUNCTION h5tget_tag_c
             END INTERFACE
 
-            hdferr = h5tget_tag_c(type_id, tag, taglen)
+            tag_size = LEN(tag)
+
+            hdferr = h5tget_tag_c(type_id, tag, tag_size, taglen )
           END SUBROUTINE h5tget_tag_f
 
-!----------------------------------------------------------------------
-! Name:		h5tvlen_create_f
 !
-! Purpose: 	Creates a new variable-length datatype.
+!****s* H5T/h5tvlen_create_f
 !
-! Inputs:
-!		type_id		- identifier iof base datatype
-! Outputs:
-!		vltype_id	- identifier for VL datatype
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tvlen_create_f
 !
-! Programmer:	Elena Pourmal
-!		Wednesday, October 23, 2002
+! PURPOSE
+!  Creates a new variable-length datatype.
 !
-! Modifications:
+! INPUTS
+!  type_id 	 - identifier iof base datatype
+! OUTPUTS
+!  vltype_id 	 - identifier for VL datatype
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment: Only basic Fortran base datatypes are supported
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tvlen_create_f(type_id, vltype_id, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  Wednesday, October 23, 2002
+!
+! NOTES
+!  Only basic Fortran base datatypes are supported
+!
+! SOURCE
+  SUBROUTINE h5tvlen_create_f(type_id, vltype_id, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN)  :: type_id    ! Datatype identifier
             INTEGER(HID_T), INTENT(OUT) :: vltype_id  ! VL datatype identifier
             INTEGER, INTENT(OUT) :: hdferr            ! Error code
-
+!*****
             INTERFACE
               INTEGER FUNCTION h5tvlen_create_c(type_id, vltype_id)
               USE H5GLOBAL
@@ -2856,42 +2706,37 @@ CONTAINS
             hdferr = h5tvlen_create_c(type_id, vltype_id)
           END SUBROUTINE h5tvlen_create_f
 
-!----------------------------------------------------------------------
-! Name:		h5tis_variable_str_f
 !
-! Purpose: 	Determines whether a dattype is a variable string.
+!****s* H5T/h5tis_variable_str_f
 !
-! Inputs:
-!		type_id	-  	- datartpe identifier
-! Outputs:
-!		status		- flag to indicate if datatype
-!				  is a variable string
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tis_variable_str_f
 !
-! Programmer:	Elena Pourmal
-!		March 12, 2003
+! PURPOSE
+!  Determines whether a dattype is a variable string.
 !
-! Modifications:
+! INPUTS
+!  type_id 	 - datartpe identifier
+! OUTPUTS
+!  status 	 - flag to indicate if datatype
+!                  is a variable string
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tis_variable_str_f(type_id, status, hdferr)
+! AUTHOR
+!  Elena Pourmal
+!  March 12, 2003
+!
+! SOURCE
+  SUBROUTINE h5tis_variable_str_f(type_id, status, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier
             LOGICAL, INTENT(OUT) :: status      ! Flag, idicates if datatype
                                                 ! is a variable string or not ( TRUE or
                                                 ! FALSE)
             INTEGER, INTENT(OUT) :: hdferr      ! Error code
+!*****
             INTEGER :: flag                     ! "TRUE/FALSE/ERROR from C"
 
-!            INTEGER, EXTERNAL :: h5tis_variable_str_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
             INTERFACE
               INTEGER FUNCTION h5tis_variable_str_c(type_id, flag)
               USE H5GLOBAL
@@ -2909,52 +2754,47 @@ CONTAINS
 
           END SUBROUTINE h5tis_variable_str_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_member_class_f
-!
-! Purpose:      Returns datatype class of compound datatype member.
-!
-! Inputs:
-!		type_id	-  	- datartpe identifier
-!               member_no       - index of compound datatype member
-! Outputs:
-!               class           - class type for compound dadtype member
-!                                 Can be one of the follwoing classes:
-!                                 H5T_NO_CLASS_F (error)
-!                                 H5T_INTEGER_F
-!                                 H5T_FLOAT_F
-!                                 H5T_TIME_F
-!                                 H5T_STRING_F
-!                                 H5T_BITFIELD_F
-!                                 H5T_OPAQUE_F
-!                                 H5T_COMPOUND_F
-!                                 H5T_REFERENCE_F
-!                                 H5T_ENUM_F
-!                                 H5T_VLEN_F
-!                                 H5T_ARRAY_F
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		April 6, 2005
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-
-          SUBROUTINE h5tget_member_class_f(type_id, member_no, class, hdferr)
+!
+!****s* H5T/h5tget_member_class_f
+!
+! NAME
+!  h5tget_member_class_f
+!
+! PURPOSE
+!  Returns datatype class of compound datatype member.
+!
+! INPUTS
+!  type_id 	 - datartpe identifier
+!  member_no 	 - index of compound datatype member
+! OUTPUTS
+!  class 	 - class type for compound dadtype member
+!                  Valid classes:
+!                    H5T_NO_CLASS_F (error)
+!                    H5T_INTEGER_F
+!                    H5T_FLOAT_F
+!                    H5T_TIME_F
+!                    H5T_STRING_F
+!                    H5T_BITFIELD_F
+!                    H5T_OPAQUE_F
+!                    H5T_COMPOUND_F
+!                    H5T_REFERENCE_F
+!                    H5T_ENUM_F
+!                    H5T_VLEN_F
+!                    H5T_ARRAY_F
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  April 6, 2005
+!
+! SOURCE
+  SUBROUTINE h5tget_member_class_f(type_id, member_no, class, hdferr)
             IMPLICIT NONE
             INTEGER(HID_T), INTENT(IN) :: type_id  ! Datatype identifier
             INTEGER, INTENT(IN)       :: member_no  ! Member number
             INTEGER, INTENT(OUT)     :: class      ! Member class
             INTEGER, INTENT(OUT) :: hdferr      ! Error code
-
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
             INTERFACE
               INTEGER FUNCTION h5tget_member_class_c(type_id, member_no, class)
               USE H5GLOBAL
@@ -2971,36 +2811,35 @@ CONTAINS
 
           END SUBROUTINE h5tget_member_class_f
 
-!----------------------------------------------------------------------
-! Name:		h5tcommit_anon_f
 !
-! Purpose: 	Commits a transient datatype to a file,
-!               creating a new named datatype,
-!               but does not link it into the file structure.
+!****s* H5T/h5tcommit_anon_f
 !
-! Inputs:
-!        loc_id - A file or group identifier specifying the file
-!                 in which the new named datatype is to be created.
-!      dtype_id - A datatype identifier.
+! NAME
+!  h5tcommit_anon_f
 !
-! Outputs:
-!	hdferr: - error code
-!			Success:  0
-!          		Failure: -1
-! Optional parameters:
-!       tcpl_id - A datatype creation property list identifier.
-!                 (H5P_DEFAULT_F for the default property list.)
-!       tapl_id - A datatype access property list identifier.
-!                 should always be passed as the value H5P_DEFAULT_F.
+! PURPOSE
+!  Commits a transient datatype to a file,
+!  creating a new named datatype,
+!  but does not link it into the file structure.
 !
-! Programmer:	M.S. Breitenfeld
-!		February 25, 2008
+! INPUTS
+!  loc_id 	 - A file or group identifier specifying the file
+!                  in which the new named datatype is to be created.
+!  dtype_id 	 - A datatype identifier.
 !
-! Modifications:
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! OPTIONAL PARAMETERS
+!  tcpl_id 	 - A datatype creation property list identifier.
+!                  (H5P_DEFAULT_F for the default property list.)
+!  tapl_id 	 - A datatype access property list identifier.
+!                  should always be passed as the value H5P_DEFAULT_F.
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 25, 2008
+!
+! SOURCE
   SUBROUTINE h5tcommit_anon_f(loc_id, dtype_id, hdferr, tcpl_id, tapl_id)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: loc_id  ! A file or group identifier specifying
@@ -3013,11 +2852,10 @@ CONTAINS
                                                     ! (H5P_DEFAULT_F for the default property list.)
     INTEGER(HID_T), OPTIONAL, INTENT(IN) :: tapl_id ! A datatype access property list identifier.
                                                     ! should always be passed as the value H5P_DEFAULT_F.
+!*****
     INTEGER(HID_T) :: tcpl_id_default
     INTEGER(HID_T) :: tapl_id_default
 
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
     INTERFACE
        INTEGER FUNCTION h5tcommit_anon_c(loc_id, dtype_id, &
             tcpl_id_default, tapl_id_default)
@@ -3043,41 +2881,36 @@ CONTAINS
 
   END SUBROUTINE h5tcommit_anon_f
 
-!----------------------------------------------------------------------
-! Name:      h5tcommitted_f
 !
-! Purpose:   Determines whether a datatype is a named type or a transient type.
+!****s* H5T/h5tcommitted_f
 !
-! Inputs:
-!      dtype_id - A datatype identifier.
+! NAME
+!  h5tcommitted_f
 !
-! Outputs:
-!     committed - .TRUE., if the datatype has been committed
-!                .FALSE., if the datatype has not been committed.
-!	hdferr: - error code
-!			Success:  0
-!          		Failure: -1
-! Optional parameters: None
+! PURPOSE
+!  Determines whether a datatype is a named type or a transient type.
 !
-! Programmer:	M.S. Breitenfeld
-!		February 25, 2008
+! INPUTS
+!  dtype_id 	 - A datatype identifier.
 !
-! Modifications:
+! OUTPUTS
+!  committed 	 - .TRUE., if the datatype has been committed
+!                  .FALSE., if the datatype has not been committed.
+!  hdferr 	 - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  M. Scot Breitenfeld
+!  February 25, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! SOURCE
   SUBROUTINE h5tcommitted_f(dtype_id, committed, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: dtype_id  ! A datatype identifier
     LOGICAL, INTENT(OUT) :: committed ! .TRUE., if the datatype has been committed
                                       !.FALSE., if the datatype has not been committed.
     INTEGER, INTENT(OUT) :: hdferr     ! Error code:
-!			                   Success:  0
-!          		                   Failure: -1
-
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!  Success:  0
+!  Failure: -1
+!*****
     INTERFACE
        INTEGER FUNCTION h5tcommitted_c(dtype_id)
          USE H5GLOBAL
@@ -3103,34 +2936,31 @@ CONTAINS
 
   END SUBROUTINE h5tcommitted_f
 
-!----------------------------------------------------------------------
-! Name:		H5Tdecode_f
 !
-! Purpose:	Decode a binary object description of data type and return a new object handle.
-! Inputs:
-!		buf -  Buffer for the data space object to be decoded.
-!            obj_id - Object ID
-! Outputs:
-!           hdferr: - error code
-!			Success:  0
-!			Failure: -1
+!****s* H5T/H5Tdecode_f
 !
-! Optional parameters:		- NONE
+! NAME
+!  H5Tdecode_f
 !
-! Programmer:	M.S. Breitenfeld
-!		April 9, 2008
+! PURPOSE
+!  Decode a binary object description of data type and return a new object handle.
+! INPUTS
+!  buf 	         -  Buffer for the data space object to be decoded.
+!  obj_id 	 - Object ID
+! OUTPUTS
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-! Modifications:
+! AUTHOR
+!  M. Scot Breitenfeld
+!  April 9, 2008
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! SOURCE
   SUBROUTINE h5tdecode_f(buf, obj_id, hdferr)
     IMPLICIT NONE
     CHARACTER(LEN=*), INTENT(IN) :: buf ! Buffer for the data space object to be decoded.
     INTEGER(HID_T), INTENT(OUT) :: obj_id  ! Object ID
     INTEGER, INTENT(OUT) :: hdferr     ! Error code
-
+!*****
     INTERFACE
        INTEGER FUNCTION h5tdecode_c(buf, obj_id)
          USE H5GLOBAL
@@ -3147,38 +2977,34 @@ CONTAINS
 
   END SUBROUTINE h5tdecode_f
 
-!----------------------------------------------------------------------
-! Name:		H5Tencode_f
-!
-! Purpose:	Encode a data type object description into a binary buffer.
 !
-! Inputs:
-!            obj_id - Identifier of the object to be encoded.
-!		buf - Buffer for the object to be encoded into.
-!            nalloc - The size of the allocated buffer.
-! Outputs:
-!            nalloc - The size of the buffer needed.
-!           hdferr: - error code
-!	                Success:  0
-!		        Failure: -1
+!****s* H5T/H5Tencode_f
 !
-! Optional parameters:		- NONE
+! NAME
+!  H5Tencode_f
 !
-! Programmer:	M.S. Breitenfeld
-!		April 9, 2008
+! PURPOSE
+!  Encode a data type object description into a binary buffer.
 !
-! Modifications:
+! INPUTS
+!  obj_id 	 - Identifier of the object to be encoded.
+!  buf 	         - Buffer for the object to be encoded into.
+!  nalloc 	 - The size of the allocated buffer.
+! OUTPUTS
+!  nalloc 	 - The size of the buffer needed.
+!  hdferr 	 - Returns 0 if successful and -1 if fails.
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  M. Scot Breitenfeld
+!  April 9, 2008
+! SOURCE
   SUBROUTINE h5tencode_f(obj_id, buf, nalloc, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: obj_id ! Identifier of the object to be encoded.
     CHARACTER(LEN=*), INTENT(OUT) :: buf ! Buffer for the object to be encoded into.
     INTEGER(SIZE_T), INTENT(INOUT) :: nalloc ! The size of the allocated buffer.
     INTEGER, INTENT(OUT) :: hdferr     ! Error code
-
+!*****
 
     INTERFACE
        INTEGER FUNCTION h5tencode_c(buf, obj_id, nalloc)
@@ -3197,37 +3023,33 @@ CONTAINS
 
   END SUBROUTINE h5tencode_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_create_plist_f
 !
-! Purpose:  	Returns a copy of a datatype creation property list.
+!****s* H5T/h5tget_create_plist_f
 !
-! Inputs:
-!		dtype_id   - Datatype identifier
-! Outputs:
-!               dtpl_id    - Datatype property list identifier
-!		hdferr:    - Error code
-!				 Success:  0
-!				 Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tget_create_plist_f
 !
-! Programmer:	M.S. Breitenfeld
-!		April 9, 2008
+! PURPOSE
+!  Returns a copy of a datatype creation property list.
 !
-! Modifications:  N/A
+! INPUTS
+!  dtype_id 	 - Datatype identifier
+! OUTPUTS
+!  dtpl_id 	 - Datatype property list identifier
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  M. Scot Breitenfeld
+!  April 9, 2008
+!
+! SOURCE
   SUBROUTINE h5tget_create_plist_f(dtype_id, dtpl_id, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: dtype_id  ! Datatype identifier
     INTEGER(HID_T), INTENT(OUT) :: dtpl_id  ! Datatype property list identifier.
     INTEGER, INTENT(OUT) :: hdferr       ! Error code:
                                          ! 0 on success and -1 on failure
-
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
+!*****
     INTERFACE
        INTEGER FUNCTION h5tget_create_plist_c(dtype_id, dtpl_id)
          USE H5GLOBAL
@@ -3242,29 +3064,26 @@ CONTAINS
     hdferr = h5tget_create_plist_c(dtype_id, dtpl_id)
   END SUBROUTINE h5tget_create_plist_f
 
-!----------------------------------------------------------------------
-! Name:		h5tcompiler_conv_f
 !
-! Purpose:  	Check whether the library’s default conversion is hard conversion.R
+!****s* H5T/h5tcompiler_conv_f
 !
-! Inputs:
-!           src_id - Identifier for the source datatype.
-!           dst_id - Identifier for the destination datatype.
-! Outputs:
-!           flag - TRUE for compiler conversion, FALSE for library conversion
-!          hdferr: - Error code
-!			Success:  0
-!			Failure: -1
-! Optional parameters:
-!				NONE
+! NAME
+!  h5tcompiler_conv_f
 !
-! Programmer:	M.S. Breitenfeld
-!		April 9, 2008
+! PURPOSE
+!  Check whether the library’s default conversion is hard conversion.R
 !
-! Modifications:  N/A
+! INPUTS
+!  src_id 	 - Identifier for the source datatype.
+!  dst_id 	 - Identifier for the destination datatype.
+! OUTPUTS
+!  flag 	 - TRUE for compiler conversion, FALSE for library conversion
+!  hdferr 	 - Returns 0 if successful and -1 if fails
 !
-!----------------------------------------------------------------------
-
+! AUTHOR
+!  M. Scot Breitenfeld
+!  April 9, 2008
+! SOURCE
   SUBROUTINE h5tcompiler_conv_f( src_id, dst_id, flag, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: src_id ! Identifier for the source datatype.
@@ -3272,6 +3091,7 @@ CONTAINS
     LOGICAL, INTENT(OUT) :: flag  ! .TRUE. for compiler conversion, .FALSE. for library conversion
     INTEGER, INTENT(OUT) :: hdferr  ! Error code:
                                     ! 0 on success and -1 on failure
+!*****
     INTEGER :: c_flag
 
     INTERFACE
@@ -3293,35 +3113,31 @@ CONTAINS
 
   END SUBROUTINE h5tcompiler_conv_f
 
-!----------------------------------------------------------------------
-! Name:		h5tget_native_type_f
 !
-! Purpose:  	Returns the native datatype of a specified datatype.
+!****s* H5T/h5tget_native_type_f
 !
-! Inputs:
-!		dtype_id   - Datatype identifier for the dataset datatype.
-!                        *
-!               direction  - Direction of search:
-!                    H5T_DIR_DEFAULT     = 0,    /*default direction is inscendent */
-!                    H5T_DIR_ASCEND      = 1,    /*in inscendent order             */
-!                    H5T_DIR_DESCEND     = 2     /*in descendent order             */
-!               * NOTE: In C it is defined as a structure: H5T_direction_t
+! NAME
+!  h5tget_native_type_f
 !
-! Outputs:
-!               native_dtype_id  - The native datatype identifier for the specified dataset datatype
-!		hdferr:          - Error code
-!				     Success:  0
-!				     Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Returns the native datatype of a specified datatype.
 !
-! Programmer:	M.S. Breitenfeld
-!		June 18, 2008
+! INPUTS
+!  dtype_id 	 - Datatype identifier for the dataset datatype.
+!  
+!  direction 	 - Direction of search:
+!                  H5T_DIR_DEFAULT     = 0,    /*default direction is inscendent */
+!                  H5T_DIR_ASCEND      = 1,    /*in inscendent order             */
+!                  H5T_DIR_DESCEND     = 2     /*in descendent order             */
+!  * NOTE: In C it is defined as a structure: H5T_direction_t
 !
-! Modifications:  N/A
-!
-!----------------------------------------------------------------------
-
+! OUTPUTS
+!  native_dtype_id - The native datatype identifier for the specified dataset datatype
+!  hdferr 	   - Returns 0 if successful and -1 if fails
+! AUTHOR
+!  M. Scot Breitenfeld
+!  June 18, 2008
+! SOURCE
   SUBROUTINE h5tget_native_type_f(dtype_id, direction, native_dtype_id, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: dtype_id  ! Datatype identifier
@@ -3331,6 +3147,7 @@ CONTAINS
     INTEGER(HID_T), INTENT(OUT) :: native_dtype_id  ! The native datatype identifier
     INTEGER, INTENT(OUT) :: hdferr    ! Error code:
                                       ! 0 on success and -1 on failure
+!*****
     INTERFACE
        INTEGER FUNCTION h5tget_native_type_c(dtype_id, direction, native_dtype_id)
          USE H5GLOBAL
diff --git a/fortran/src/H5Tff_F03.f90 b/fortran/src/H5Tff_F03.f90
new file mode 100644
index 0000000..902e2ac
--- /dev/null
+++ b/fortran/src/H5Tff_F03.f90
@@ -0,0 +1,118 @@
+!****h* ROBODoc/H5T (F03)
+!
+! NAME
+!  H5T_PROVISIONAL
+!
+! PURPOSE
+!  This file contains Fortran 90 and Fortran 2003 interfaces for H5T functions.
+!  It contains the same functions as H5Tff_F90.f90 but includes the
+!  Fortran 2003 functions and the interface listings. This file will be compiled
+!  instead of H5Tff_F90.f90 if Fortran 2003 functions are enabled.
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5T function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!
+!*****
+
+MODULE H5T_PROVISIONAL
+
+  USE H5GLOBAL
+  USE, INTRINSIC :: ISO_C_BINDING
+
+!****t* H5T (F03)/hvl_t
+! Fortran2003 Derived Type:
+  TYPE hvl_t
+     INTEGER(size_t) :: len ! Length of VL data (in base type units)
+     TYPE(C_PTR) :: p       ! Pointer to VL data
+  END TYPE hvl_t
+
+!*****
+
+CONTAINS
+
+!****s* H5T (F03)/H5Tconvert_f_F03
+!
+! NAME
+!  H5Tconvert_f
+!
+! PURPOSE
+!  Converts data from between specified datatypes.
+!
+! Inputs:
+!  src_id     - Identifier for the source datatype.
+!  dst_id     - Identifier for the destination datatype.
+!  nelmts     - Size of array buf.
+!  buf 	      - Array containing pre-conversion values.
+!  background - Optional background buffer.
+!  plist_id   -	Dataset transfer property list identifier.
+!
+! Outputs:
+!  buf 	      - Array containing post-conversion values.
+!  hdferr     - error code:
+!                 0 on success and -1 on failure
+! AUTHOR
+!  M. Scot Breitenfeld
+!  Decemember 8, 2008
+!
+! Fortran2003 Interface:
+  SUBROUTINE h5tconvert_f(src_id, dst_id, nelmts, buf, hdferr, background, plist_id)
+    USE, INTRINSIC :: ISO_C_BINDING
+    IMPLICIT NONE
+    INTEGER(HID_T) , INTENT(IN)               :: src_id
+    INTEGER(HID_T) , INTENT(IN)               :: dst_id
+    INTEGER(SIZE_T), INTENT(IN)               :: nelmts
+    TYPE(C_PTR)    , INTENT(INOUT)            :: buf
+    INTEGER        , INTENT(OUT)              :: hdferr
+    TYPE(C_PTR)    , INTENT(INOUT), OPTIONAL  :: background
+    INTEGER(HID_T) , INTENT(IN)   , OPTIONAL  :: plist_id
+!*****
+    INTEGER(HID_T) :: plist_id_default
+    TYPE(C_PTR) :: background_default
+
+    INTERFACE
+       INTEGER FUNCTION h5tconvert_c(src_id, dst_id, nelmts, buf, background, plist_id)
+         USE, INTRINSIC :: ISO_C_BINDING
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5TCONVERT_C'::H5Tconvert_c
+         !DEC$ENDIF
+         INTEGER(HID_T) , INTENT(IN)           :: src_id
+         INTEGER(HID_T) , INTENT(IN)           :: dst_id
+         INTEGER(SIZE_T), INTENT(IN)           :: nelmts
+         TYPE(C_PTR)                , VALUE    :: buf
+         TYPE(C_PTR)                , VALUE    :: background
+         INTEGER(HID_T) , INTENT(IN)           :: plist_id
+       END FUNCTION h5tconvert_c
+    END INTERFACE
+
+    plist_id_default = H5P_DEFAULT_F
+    IF(PRESENT(plist_id)) plist_id_default = plist_id
+
+    background_default = C_NULL_PTR
+    IF(PRESENT(background)) background_default = background
+
+    hdferr = H5Tconvert_c(src_id, dst_id, nelmts, buf, background_default, plist_id_default)
+
+  END SUBROUTINE h5tconvert_f
+
+END MODULE H5T_PROVISIONAL
+
diff --git a/fortran/src/H5Tff_F90.f90 b/fortran/src/H5Tff_F90.f90
new file mode 100644
index 0000000..021773d
--- /dev/null
+++ b/fortran/src/H5Tff_F90.f90
@@ -0,0 +1,39 @@
+!****h* ROBODoc/H5T (F90)
+!
+! NAME
+!  MODULE H5T_PROVISIONAL
+!
+! PURPOSE
+!  This file contains Fortran 90 interfaces for H5T functions. It contains
+!  the same functions as H5Tff_F03.f90 but excludes the Fortran 2003 functions
+!  and the interface listings. This file will be compiled instead of H5Tff_F03.f90
+!  if Fortran 2003 functions are not enabled.
+!
+! NOTE
+!  Currently contains no functions.
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+!                         *** IMPORTANT ***
+!  If you add a new H5D function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!*****
+
+MODULE H5T_PROVISIONAL
+
+END MODULE H5T_PROVISIONAL
diff --git a/fortran/src/H5Zf.c b/fortran/src/H5Zf.c
index 8ad53c2..0427c23 100644
--- a/fortran/src/H5Zf.c
+++ b/fortran/src/H5Zf.c
@@ -1,4 +1,9 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* H5Zf/H5Zf
+ * PURPOSE
+ *   This file contains C stubs for H5Z Fortran APIs
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,23 +16,32 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This files contains C stubs for H5Z Fortran APIs */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include "H5f90.h"
 
-/*----------------------------------------------------------------------------
- * Name:        h5zunregister_c
- * Purpose:     Call H5Zunregister to unregister filter
- * Inputs:      filter identifier
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Zf/h5zunregister_c
+ * NAME
+ *        h5zunregister_c
+ * PURPOSE
+ *     Call H5Zunregister to unregister filter
+ * INPUTS
+ *      filter identifier
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, March 12, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 int_f
 nh5zunregister_c (int_f *filter)
+/******/
 {
      int ret_value = -1;
      herr_t status;
@@ -44,19 +58,28 @@ nh5zunregister_c (int_f *filter)
      ret_value = 0;
      return ret_value;
 }
-/*----------------------------------------------------------------------------
- * Name:        h5zfiletr_avail_c
- * Purpose:     Call H5Zfilter_avail to find if filter is available
- * Inputs:      filter - filter identifier
- * Outputs:     flag - status flag
- * Returns:     0 on success, -1 on failure
- * Programmer:  Elena Pourmal
+/****if* H5Zf/h5zfiletr_avail_c
+ * NAME
+ *        h5zfiletr_avail_c
+ * PURPOSE
+ *     Call H5Zfilter_avail to find if filter is available
+ * INPUTS
+ *      filter - filter identifier
+ * OUTPUTS
+ *     flag - status flag
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
  *              Wednesday, March 12, 2003
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5zfilter_avail_c ( int_f *filter , int_f *flag )
+/******/
 {
   int ret_value = 0;
   H5Z_filter_t c_filter;
@@ -69,20 +92,29 @@ nh5zfilter_avail_c ( int_f *filter , int_f *flag )
   return ret_value;
 }
 
-/*----------------------------------------------------------------------------
- * Name:        h5zget_filter_info_c
- * Purpose:     Call H5Zget_filter_info to find if filter has its encoder
+/****if* H5Zf/h5zget_filter_info_c
+ * NAME
+ *        h5zget_filter_info_c
+ * PURPOSE
+ *     Call H5Zget_filter_info to find if filter has its encoder
  *              and/or its decoder available
- * Inputs:      filter - filter identifier
- * Outputs:     flag - status flag
- * Returns:     0 on success, -1 on failure
- * Programmer:  Nat Furrer and James Laird
+ * INPUTS
+ *      filter - filter identifier
+ * OUTPUTS
+ *     flag - status flag
+ * RETURNS
+ *     0 on success, -1 on failure
+ * AUTHOR
+ *  Nat Furrer and James Laird
  *              Wednesday, June 16, 2004
- * Modifications:
- *---------------------------------------------------------------------------*/
+ * HISTORY
+ *
+ * SOURCE
+*/
 
 int_f
 nh5zget_filter_info_c ( int_f *filter , int_f *flag )
+/******/
 {
   int ret_value = 0;
   H5Z_filter_t c_filter;
diff --git a/fortran/src/H5Zff.f90 b/fortran/src/H5Zff.f90
index 750a7a5..ec68286 100644
--- a/fortran/src/H5Zff.f90
+++ b/fortran/src/H5Zff.f90
@@ -1,179 +1,196 @@
-! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-!   Copyright by The HDF Group.                                               *
-!   Copyright by the Board of Trustees of the University of Illinois.         *
-!   All rights reserved.                                                      *
-!                                                                             *
-!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
-!   terms governing use, modification, and redistribution, is contained in    *
-!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
-!   of the source code distribution tree; Copyright.html can be found at the  *
-!   root level of an installed copy of the electronic HDF5 document set and   *
-!   is linked from the top-level documents page.  It can also be found at     *
-!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
-!   access to either file, you may request a copy from help at hdfgroup.org.     *
-! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-!
-!
-! This file contains FORTRAN90 interfaces for H5I functions
-!
-      MODULE H5Z
-
-        USE H5GLOBAL
-
-      CONTAINS
-
-!----------------------------------------------------------------------
-! Name:		h5zunregister_f
-!
-! Purpose:	Unregisters specified filetr
-!
-! Inputs: 	filter	        - filter; may have one of the following values:
-!                                 H5Z_FILTER_DEFLATE_F
-!                                 H5Z_FILTER_SHUFFLE_F
-!                                 H5Z_FILTER_FLETCHER32_F
-! Outputs:
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		March 12, 2003
-!
-! Modifications:
-!
-! Comment:
-!----------------------------------------------------------------------
-          SUBROUTINE h5zunregister_f(filter, hdferr)
-            IMPLICIT NONE
-            INTEGER, INTENT(IN)  :: filter
-            INTEGER, INTENT(OUT) :: hdferr  ! Error code
-
-!            INTEGER, EXTERNAL :: h5zunregister_c
-!  Interface is needed for MS FORTRAN
-!
-            INTERFACE
-              INTEGER FUNCTION h5zunregister_c (filter)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5ZUNREGISTER_C':: h5zunregister_c
-              !DEC$ENDIF
-              INTEGER, INTENT(IN) :: filter
-              END FUNCTION h5zunregister_c
-            END INTERFACE
-            hdferr = h5zunregister_c (filter)
-          END SUBROUTINE h5zunregister_f
-!----------------------------------------------------------------------
-! Name:		h5zfilter_avail_f
-!
-! Purpose:      Queries if filter is available
-!
-! Inputs:
-!		filter		- filter
-! Outputs:
-!		status		- status; .TRUE. if filter is available,
-!                                 .FALSE. otherwise
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		March 12, 2003
-!
-! Modifications:
-!
-!----------------------------------------------------------------------
-          SUBROUTINE h5zfilter_avail_f(filter, status, hdferr)
-            IMPLICIT NONE
-            INTEGER, INTENT(IN)  :: filter      ! Filter; may be one of the following:
-                                                ! H5Z_FILTER_DEFLATE_F
-                                                ! H5Z_FILTER_SHUFFLE_F
-                                                ! H5Z_FILTER_FLETCHER32_F
-            LOGICAL, INTENT(OUT) :: status      ! Flag, idicates if filter
-                                                ! is availble  not ( TRUE or
-                                                ! FALSE)
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-            INTEGER :: flag                     ! "TRUE/FALSE/ERROR from C"
-
-!            INTEGER, EXTERNAL :: h5zfilter_avail_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5zfilter_avail_c(filter, flag)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5ZFILTER_AVAIL_C'::h5zfilter_avail_c
-              !DEC$ENDIF
-              INTEGER, INTENT(IN) :: filter
-              INTEGER :: flag
-              END FUNCTION h5zfilter_avail_c
-            END INTERFACE
-
-            hdferr = h5zfilter_avail_c(filter, flag)
-            status = .TRUE.
-            if (flag .EQ. 0) status = .FALSE.
-
-          END SUBROUTINE h5zfilter_avail_f
-
-!----------------------------------------------------------------------
-! Name:		h5zget_filter_info_f
-!
-! Purpose:      Queries if filter has its encoder and/or decoder
-!               available
-!
-! Inputs:
-!		filter		- filter
-! Outputs:
-!		config_flags	- Bit vector possibly containing the
-!                         following values:
-!                            H5Z_FILTER_ENCODE_ENABLED_F
-!                            H5Z_FILTER_DECODE_ENABLED_F
-!		hdferr:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Nat Furrer and James Laird
-!		June 16, 2004
-!
-! Modifications:
-!
-!----------------------------------------------------------------------
-          SUBROUTINE h5zget_filter_info_f(filter, config_flags, hdferr)
-            IMPLICIT NONE
-            INTEGER, INTENT(IN)  :: filter      ! Filter; may be one of the following:
-                                                ! H5Z_FILTER_DEFLATE_F
-                                                ! H5Z_FILTER_SHUFFLE_F
-                                                ! H5Z_FILTER_FLETCHER32_F
-                                                ! H5Z_FILTER_SZIP_F
-            INTEGER, INTENT(OUT) :: config_flags! Flag, indicates if filter
-                                                ! has its encoder and/or decoder
-                                                ! available
-            INTEGER, INTENT(OUT) :: hdferr      ! Error code
-
-!            INTEGER, EXTERNAL :: h5zget_filter_info_c
-!  MS FORTRAN needs explicit interface for C functions called here.
-!
-            INTERFACE
-              INTEGER FUNCTION h5zget_filter_info_c(filter, config_flags)
-              USE H5GLOBAL
-              !DEC$IF DEFINED(HDF5F90_WINDOWS)
-              !DEC$ATTRIBUTES C,reference,decorate,alias:'H5ZGET_FILTER_INFO_C'::h5zget_filter_info_c
-              !DEC$ENDIF
-              INTEGER, INTENT(IN) :: filter
-              INTEGER, INTENT(OUT) :: config_flags
-              END FUNCTION h5zget_filter_info_c
-            END INTERFACE
-
-            hdferr = h5zget_filter_info_c(filter, config_flags)
-
-          END SUBROUTINE h5zget_filter_info_f
-
-      END MODULE H5Z
+!****h* ROBODoc/H5Z
+!
+! NAME
+!  MODULE H5Z
+!
+! PURPOSE
+!  This file contains Fortran interfaces for H5Z functions. It includes
+!  all the functions that are independent on whether the Fortran 2003 functions
+!  are enabled or disabled.
+!
+!
+! COPYRIGHT
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!  Copyright by The HDF Group.                                               *
+!  Copyright by the Board of Trustees of the University of Illinois.         *
+!  All rights reserved.                                                      *
+!  *
+!  This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!  terms governing use, modification, and redistribution, is contained in    *
+!  the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!  of the source code distribution tree; Copyright.html can be found at the  *
+!  root level of an installed copy of the electronic HDF5 document set and   *
+!  is linked from the top-level documents page.  It can also be found at     *
+!  http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!  access to either file, you may request a copy from help at hdfgroup.org.     *
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new H5Z function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!
+!*****
+
+MODULE H5Z
+
+  USE H5GLOBAL
+
+CONTAINS
+
+!****s* H5Z/h5zunregister_f
+!
+! NAME
+!  h5zunregister_f
+!
+! PURPOSE
+!  Unregisters specified filetr
+!
+! INPUTS
+!  filter - filter; may have one of the following values:
+!            H5Z_FILTER_DEFLATE_F
+!            H5Z_FILTER_SZIP_F
+!            H5Z_FILTER_NBIT_F
+!            H5Z_FILTER_SCALEOFFSET_F
+!            H5Z_FILTER_SHUFFLE_F
+!            H5Z_FILTER_FLETCHER32_F
+!            
+! OUTPUTS
+!  hdferr - error code
+!            Success:  0
+!            Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  March 12, 2003
+!
+! SOURCE
+  SUBROUTINE h5zunregister_f(filter, hdferr)
+    IMPLICIT NONE
+    INTEGER, INTENT(IN)  :: filter
+    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+!*****
+    INTERFACE
+       INTEGER FUNCTION h5zunregister_c (filter)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5ZUNREGISTER_C':: h5zunregister_c
+         !DEC$ENDIF
+         INTEGER, INTENT(IN) :: filter
+       END FUNCTION h5zunregister_c
+    END INTERFACE
+    hdferr = h5zunregister_c (filter)
+  END SUBROUTINE h5zunregister_f
+
+!****s* H5Z/h5zfilter_avail_f
+! NAME
+!  h5zfilter_avail_f
+!
+! PURPOSE
+!  Queries if filter is available
+!
+! INPUTS
+!  filter 	 - filter
+! OUTPUTS
+!  status 	 - status; .TRUE. if filter is available,
+!                  .FALSE. otherwise
+!  hdferr:	 - error code
+!                   Success:  0
+!                   Failure: -1
+!
+! AUTHOR
+!  Elena Pourmal
+!  March 12, 2003
+!
+! SOURCE
+  SUBROUTINE h5zfilter_avail_f(filter, status, hdferr)
+    IMPLICIT NONE
+    INTEGER, INTENT(IN)  :: filter      ! Filter; may be one of the following:
+                                        !   H5Z_FILTER_DEFLATE_F
+                                        !   H5Z_FILTER_SZIP_F
+                                        !   H5Z_FILTER_NBIT_F
+                                        !   H5Z_FILTER_SCALEOFFSET_F
+                                        !   H5Z_FILTER_SHUFFLE_F
+                                        !   H5Z_FILTER_FLETCHER32_F
+    LOGICAL, INTENT(OUT) :: status      ! Flag, idicates if filter
+                                        ! is availble  not ( TRUE or
+                                        ! FALSE)
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+!*****
+    INTEGER :: flag                     ! "TRUE/FALSE/ERROR from C"
+
+    INTERFACE
+       INTEGER FUNCTION h5zfilter_avail_c(filter, flag)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5ZFILTER_AVAIL_C'::h5zfilter_avail_c
+         !DEC$ENDIF
+         INTEGER, INTENT(IN) :: filter
+         INTEGER :: flag
+       END FUNCTION h5zfilter_avail_c
+    END INTERFACE
+
+    hdferr = h5zfilter_avail_c(filter, flag)
+    status = .TRUE.
+    IF (flag .EQ. 0) status = .FALSE.
+
+  END SUBROUTINE h5zfilter_avail_f
+!****s* H5Z/h5zget_filter_info_f
+!
+! NAME
+!  h5zget_filter_info_f
+!
+! PURPOSE
+!  Queries if filter has its encoder and/or decoder
+!  available
+!
+! INPUTS
+!  filter 	 - filter
+! OUTPUTS
+!  config_flags  - Bit vector possibly containing the
+!                  following values:
+!                     H5Z_FILTER_ENCODE_ENABLED_F
+!                     H5Z_FILTER_DECODE_ENABLED_F
+!  hdferr:	 - error code
+!                   Success:  0
+!                   Failure: -1
+!
+! AUTHOR
+!  Nat Furrer and James Laird
+!  June 16, 2004
+! SOURCE
+  SUBROUTINE h5zget_filter_info_f(filter, config_flags, hdferr)
+    IMPLICIT NONE
+    INTEGER, INTENT(IN)  :: filter      ! Filter; may be one of the following:
+                                        !   H5Z_FILTER_DEFLATE_F
+                                        !   H5Z_FILTER_SZIP_F
+                                        !   H5Z_FILTER_NBIT_F
+                                        !   H5Z_FILTER_SCALEOFFSET_F
+                                        !   H5Z_FILTER_SHUFFLE_F
+                                        !   H5Z_FILTER_FLETCHER32_F
+    INTEGER, INTENT(OUT) :: config_flags! Flag, indicates if filter
+                                        ! has its encoder and/or decoder
+                                        ! available
+    INTEGER, INTENT(OUT) :: hdferr      ! Error code
+!*****
+
+    INTERFACE
+       INTEGER FUNCTION h5zget_filter_info_c(filter, config_flags)
+         USE H5GLOBAL
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5ZGET_FILTER_INFO_C'::h5zget_filter_info_c
+         !DEC$ENDIF
+         INTEGER, INTENT(IN) :: filter
+         INTEGER, INTENT(OUT) :: config_flags
+       END FUNCTION h5zget_filter_info_c
+    END INTERFACE
+
+    hdferr = h5zget_filter_info_c(filter, config_flags)
+
+  END SUBROUTINE h5zget_filter_info_f
+
+END MODULE H5Z
 
 
 
diff --git a/fortran/src/H5_DBLE_InterfaceExclude.f90 b/fortran/src/H5_DBLE_InterfaceExclude.f90
index b3bafa1..2a3e26f 100644
--- a/fortran/src/H5_DBLE_InterfaceExclude.f90
+++ b/fortran/src/H5_DBLE_InterfaceExclude.f90
@@ -29,7 +29,7 @@
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
 ! AUTHOR
-!  M.S. Breitenfeld
+!  M. Scot Breitenfeld
 !
 !*****
 
diff --git a/fortran/src/H5_DBLE_InterfaceInclude.f90 b/fortran/src/H5_DBLE_InterfaceInclude.f90
index 4e7dbfb..11e0a85 100644
--- a/fortran/src/H5_DBLE_InterfaceInclude.f90
+++ b/fortran/src/H5_DBLE_InterfaceInclude.f90
@@ -30,7 +30,7 @@
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
 ! AUTHOR
-!  M.S. Breitenfeld
+!  M. Scot Breitenfeld
 !
 !*****
 
@@ -1609,14 +1609,11 @@ CONTAINS
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
     INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
-    ! of fillvalue datatype
-    ! (in memory)
+                                          ! of fillvalue datatype
+                                          ! (in memory)
     DOUBLE PRECISION, INTENT(IN) :: fillvalue   ! Fillvalue
     INTEGER, INTENT(OUT) :: hdferr  ! Error code
 
-    !            INTEGER, EXTERNAL :: h5pset_fill_value_double_c
-    !  MS FORTRAN needs explicit interface for C functions called here.
-    !
     INTERFACE
        INTEGER FUNCTION h5pset_fill_value_double_c(prp_id, type_id, fillvalue)
          USE H5GLOBAL
@@ -1632,20 +1629,16 @@ CONTAINS
     hdferr = h5pset_fill_value_double_c(prp_id, type_id, fillvalue)
   END SUBROUTINE h5pset_fill_value_double
 
-
   SUBROUTINE h5pget_fill_value_double(prp_id, type_id, fillvalue, &
        hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: prp_id ! Property list identifier
     INTEGER(HID_T), INTENT(IN) :: type_id ! Datatype identifier of
-    ! of fillvalue datatype
-    ! (in memory)
+                                          ! of fillvalue datatype
+                                          ! (in memory)
     DOUBLE PRECISION, INTENT(IN) :: fillvalue   ! Fillvalue
     INTEGER, INTENT(OUT) :: hdferr  ! Error code
 
-    !            INTEGER, EXTERNAL :: h5pget_fill_value_double_c
-    !  MS FORTRAN needs explicit interface for C functions called here.
-    !
     INTERFACE
        INTEGER FUNCTION h5pget_fill_value_double_c(prp_id, type_id, fillvalue)
          USE H5GLOBAL
@@ -1661,37 +1654,34 @@ CONTAINS
     hdferr = h5pget_fill_value_double_c(prp_id, type_id, fillvalue)
   END SUBROUTINE h5pget_fill_value_double
 
-
-  !----------------------------------------------------------------------
-  ! Name:		h5pset_double
-  !
-  ! Purpose: 	Sets a property list value
-  !
-  ! Inputs:
-  !		prp_id		- iproperty list identifier to modify
-  !		name 		- name of property to modify
-  !		value		- value to set property to
-  ! Outputs:
-  !		hdferr:		- error code
-  !				 	Success:  0
-  !				 	Failure: -1
-  ! Optional parameters:
-  !				NONE
-  !
-  ! Programmer:	Elena Pourmal
-  !	        October 9, 2002
-  !
-  ! Modifications:
-  !
-  ! Comment:
-  !----------------------------------------------------------------------
-
+!
+!****s* H5P (F90)/h5pset_double
+!
+! NAME
+!  h5pset_double
+!
+! PURPOSE
+!  Sets a property list value
+!
+! INPUTS
+!  prp_id 	 - iproperty list identifier to modify
+!  name 	 - name of property to modify
+!  value 	 - value to set property to
+! OUTPUTS
+!  hdferr:	 - error code
+!                   Success:  0
+!                   Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002
+! SOURCE
   SUBROUTINE h5pset_double(prp_id, name, value, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
-    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+    INTEGER(HID_T), INTENT(IN) :: prp_id    ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name    ! Name of property to modify
     DOUBLE PRECISION,   INTENT(IN) :: value ! Property value
-    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+!*****
     INTEGER :: name_len
 
     INTERFACE
@@ -1712,37 +1702,34 @@ CONTAINS
     hdferr = h5pset_double_c(prp_id, name , name_len, value)
   END SUBROUTINE h5pset_double
 
-
-  !----------------------------------------------------------------------
-  ! Name:		h5pget_double
-  !
-  ! Purpose: 	Gets a property list value
-  !
-  ! Inputs:
-  !		prp_id		- iproperty list identifier to modify
-  !		name 		- name of property to modify
-  ! Outputs:
-  !		value		- value of property
-  !		hdferr:		- error code
-  !				 	Success:  0
-  !				 	Failure: -1
-  ! Optional parameters:
-  !				NONE
-  !
-  ! Programmer:	Elena Pourmal
-  !	        October 9, 2002
-  !
-  ! Modifications:
-  !
-  ! Comment:
-  !----------------------------------------------------------------------
-
+!****s* H5P (F90)/h5pget_double
+!
+! NAME
+!  h5pget_double
+!
+! PURPOSE
+!  Gets a property list value
+!
+! INPUTS
+!  prp_id 	 - iproperty list identifier to modify
+!  name 	 - name of property to modify
+! OUTPUTS
+!  value 	 - value of property
+!  hdferr	 - error code
+!                   Success:  0
+!                   Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  October 9, 2002
+!
+! SOURCE
   SUBROUTINE h5pget_double(prp_id, name, value, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: prp_id  ! Property list identifier
-    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to modify
+    INTEGER(HID_T), INTENT(IN) :: prp_id     ! Property list identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name     ! Name of property to modify
     DOUBLE PRECISION,   INTENT(OUT) :: value ! Property value
-    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTEGER, INTENT(OUT) :: hdferr           ! Error code
+!*****
     INTEGER :: name_len
 
     INTERFACE
@@ -1763,41 +1750,39 @@ CONTAINS
     hdferr = h5pget_double_c(prp_id, name , name_len, value)
   END SUBROUTINE h5pget_double
 
-
-  !----------------------------------------------------------------------
-  ! Name:		h5pregister_double
-  !
-  ! Purpose: 	Registers a permanent property with a property list class.
-  !
-  ! Inputs:
-  !		class		- property list class to register
-  !                                 permanent property within
-  !		name 		- name of property to register
-  !               size            - size of property in bytes
-  !		value		- default value for property in newly
-  !                                 created property lists
-  ! Outputs:
-  !		hdferr:		- error code
-  !				 	Success:  0
-  !				 	Failure: -1
-  ! Optional parameters:
-  !				NONE
-  !
-  ! Programmer:	Elena Pourmal
-  !	        October 10, 2002
-  !
-  ! Modifications:
-  !
-  ! Comment:
-  !----------------------------------------------------------------------
-
+!
+!****s* H5P (F90)/h5pregister_double
+!
+! NAME
+!  h5pregister_double
+!
+! PURPOSE
+!  Registers a permanent property with a property list class.
+!
+! INPUTS
+!  class 	 - property list class to register
+!                  permanent property within
+!  name 	 - name of property to register
+!  size 	 - size of property in bytes
+!  value 	 - default value for property in newly
+!                  created property lists
+! OUTPUTS
+!  hdferr	 - error code
+!                   Success:  0
+!                   Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  October 10, 2002
+!
+! SOURCE
   SUBROUTINE h5pregister_double(class, name, size, value, hdferr)
     IMPLICIT NONE
-    INTEGER(HID_T), INTENT(IN) :: class   ! Property list class identifier
-    CHARACTER(LEN=*), INTENT(IN) :: name  ! Name of property to register
-    INTEGER(SIZE_T), INTENT(IN) :: size  ! size of the property value
-    DOUBLE PRECISION,   INTENT(IN) :: value        ! Property value
-    INTEGER, INTENT(OUT) :: hdferr  ! Error code
+    INTEGER(HID_T), INTENT(IN) :: class     ! Property list class identifier
+    CHARACTER(LEN=*), INTENT(IN) :: name    ! Name of property to register
+    INTEGER(SIZE_T), INTENT(IN) :: size     ! Size of the property value
+    DOUBLE PRECISION,   INTENT(IN) :: value ! Property value
+    INTEGER, INTENT(OUT) :: hdferr          ! Error code
+!*****
     INTEGER :: name_len
 
     INTERFACE
@@ -1819,32 +1804,29 @@ CONTAINS
     hdferr = h5pregister_double_c(class, name , name_len, size, value)
   END SUBROUTINE h5pregister_double
 
-  !----------------------------------------------------------------------
-  ! Name:		h5pinsert_double
-  !
-  ! Purpose: 	Registers a temporary property with a property list class.
-  !
-  ! Inputs:
-  !		plist		- property list identifier
-  !                                 permanent property within
-  !		name 		- name of property to insert
-  !               size            - size of property in bytes
-  !		value		- initial value for the property
-  ! Outputs:
-  !		hdferr:		- error code
-  !				 	Success:  0
-  !				 	Failure: -1
-  ! Optional parameters:
-  !				NONE
-  !
-  ! Programmer:	Elena Pourmal
-  !	        October 10, 2002
-  !
-  ! Modifications:
-  !
-  ! Comment:
-  !----------------------------------------------------------------------
-
+!****s* H5P (F90)/h5pinsert_double
+!
+! NAME
+!
+!  h5pinsert_double
+!
+! PURPOSE
+!  Registers a temporary property with a property list class.
+!
+! INPUTS
+!  plist 	 - property list identifier
+!                  permanent property within
+!  name 	 - name of property to insert
+!  size 	 - size of property in bytes
+!  value 	 - initial value for the property
+! OUTPUTS
+!  hdferr	 - error code
+!                   Success:  0
+!                   Failure: -1
+! AUTHOR
+!  Elena Pourmal
+!  October 10, 2002
+! SOURCE
   SUBROUTINE h5pinsert_double(plist, name, size, value, hdferr)
     IMPLICIT NONE
     INTEGER(HID_T), INTENT(IN) :: plist   ! Property list identifier
@@ -1852,6 +1834,7 @@ CONTAINS
     INTEGER(SIZE_T), INTENT(IN) :: size   ! Size of the property value
     DOUBLE PRECISION, INTENT(IN) :: value ! Property value
     INTEGER, INTENT(OUT) :: hdferr        ! Error code
+!*****
     INTEGER :: name_len
 
     INTERFACE
diff --git a/fortran/src/H5_f.c b/fortran/src/H5_f.c
index 12c55af..05b7da0 100644
--- a/fortran/src/H5_f.c
+++ b/fortran/src/H5_f.c
@@ -1,4 +1,9 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****ih* H5_f/H5_f
+ * PURPOSE
+ *   This file contains C stubs for H5 Fortran APIs
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,36 +16,42 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This files contains C stubs for H5 Fortran APIs */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include "H5f90.h"
 
-/*---------------------------------------------------------------------------
- * Name:              h5init_types_c
- * Purpose:           Initialize predefined datatypes in Fortran
- * Inputs:            types - array with the predefined Native Fortran
- *                            type, its element and length must be the
- *                            same as the types array defined in the
- *                            H5f90global.f90
- *                    floatingtypes - array with the predefined Floating Fortran
- *                                    type, its element and length must be the
- *                                    same as the floatingtypes array defined in the
- *                                    H5f90global.f90
- *                    integertypes - array with the predefined Integer Fortran
- *                                   type, its element and length must be the
- *                                   same as the integertypes array defined in the
- *                                   H5f90global.f90
- * Outputs:           None
- * Returns:           0 on success, -1 on failure
- * Programmer:        Elena Pourmal
- *                    Tuesday, August 3, 1999
- *---------------------------------------------------------------------------*/
+/****if* H5_f/h5init_types_c
+ * NAME
+ *  h5init_types_c
+ * PURPOSE
+ *  Initialize predefined datatypes in Fortran
+ * INPUTS
+ *  types - array with the predefined Native Fortran
+ *          type, its element and length must be the
+ *          same as the types array defined in the
+ *          H5f90global.f90
+ *  floatingtypes - array with the predefined Floating Fortran
+ *                   type, its element and length must be the
+ *                   same as the floatingtypes array defined in the
+ *                   H5f90global.f90
+ *  integertypes - array with the predefined Integer Fortran
+ *                 type, its element and length must be the
+ *                 same as the integertypes array defined in the
+ *                 H5f90global.f90
+ * RETURNS
+ *  0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  Tuesday, August 3, 1999
+ * SOURCE
+*/
 int_f
 nh5init_types_c( hid_t_f * types, hid_t_f * floatingtypes, hid_t_f * integertypes )
+/******/
 {
-
     int ret_value = -1;
     hid_t c_type_id;
     size_t tmp_val;
@@ -91,8 +102,6 @@ nh5init_types_c( hid_t_f * types, hid_t_f * floatingtypes, hid_t_f * integertype
     if(H5Tset_strpad(c_type_id, H5T_STR_SPACEPAD) < 0) return ret_value;
     types[3] = (hid_t_f)c_type_id;
 
-
-
 /*
     if ((types[3] = H5Tcopy(H5T_C_S1)) < 0) return ret_value;
     if(H5Tset_strpad(types[3],H5T_STR_NULLTERM) < 0) return ret_value;
@@ -104,7 +113,9 @@ nh5init_types_c( hid_t_f * types, hid_t_f * floatingtypes, hid_t_f * integertype
 */
     if ((types[4] = (hid_t_f)H5Tcopy(H5T_STD_REF_OBJ)) < 0) return ret_value;
     if ((types[5] = (hid_t_f)H5Tcopy(H5T_STD_REF_DSETREG)) < 0) return ret_value;
-
+    /*
+     * FIND H5T_NATIVE_INTEGER_1
+     */
     if (sizeof(int_1_f) == sizeof(char)) {
       if ((types[6] = (hid_t_f)H5Tcopy(H5T_NATIVE_CHAR)) < 0) return ret_value;
     } /*end if */
@@ -117,7 +128,9 @@ nh5init_types_c( hid_t_f * types, hid_t_f * floatingtypes, hid_t_f * integertype
     else if (sizeof(int_1_f) == sizeof(long long)) {
 	if ((types[6] = (hid_t_f)H5Tcopy(H5T_NATIVE_LLONG)) < 0) return ret_value;
     } /*end else */
-
+    /*
+     * FIND H5T_NATIVE_INTEGER_2
+     */
     if (sizeof(int_2_f) == sizeof(char)) {
       if ((types[7] = (hid_t_f)H5Tcopy(H5T_NATIVE_CHAR)) < 0) return ret_value;
     } /*end if */
@@ -130,7 +143,9 @@ nh5init_types_c( hid_t_f * types, hid_t_f * floatingtypes, hid_t_f * integertype
     else if (sizeof(int_2_f) == sizeof(long long)) {
 	if ((types[7] = (hid_t_f)H5Tcopy(H5T_NATIVE_LLONG)) < 0) return ret_value;
     } /*end else */
-
+    /*
+     * FIND H5T_NATIVE_INTEGER_4
+     */
     if (sizeof(int_4_f) == sizeof(char)) {
       if ((types[8] = (hid_t_f)H5Tcopy(H5T_NATIVE_CHAR)) < 0) return ret_value;
     } /*end if */
@@ -143,7 +158,9 @@ nh5init_types_c( hid_t_f * types, hid_t_f * floatingtypes, hid_t_f * integertype
     else if (sizeof(int_4_f) == sizeof(long long)) {
 	if ((types[8] = (hid_t_f)H5Tcopy(H5T_NATIVE_LLONG)) < 0) return ret_value;
     } /*end else */
-
+    /*
+     * FIND H5T_NATIVE_INTEGER_8
+     */
     if (sizeof(int_8_f) == sizeof(char)) {
       if ((types[9] = (hid_t_f)H5Tcopy(H5T_NATIVE_CHAR)) < 0) return ret_value;
     } /*end if */
@@ -156,7 +173,9 @@ nh5init_types_c( hid_t_f * types, hid_t_f * floatingtypes, hid_t_f * integertype
     else if (sizeof(int_8_f) == sizeof(long long)) {
 	if ((types[9] = (hid_t_f)H5Tcopy(H5T_NATIVE_LLONG)) < 0) return ret_value;
     } /*end else */
-
+    /*
+     * FIND H5T_NATIVE_REAL_4
+     */
     if (sizeof(real_4_f) == sizeof(float)) {
       if ((types[10] = (hid_t_f)H5Tcopy(H5T_NATIVE_FLOAT)) < 0) return ret_value;
     } /*end if */
@@ -168,7 +187,9 @@ nh5init_types_c( hid_t_f * types, hid_t_f * floatingtypes, hid_t_f * integertype
 	if ((types[10] = (hid_t_f)H5Tcopy(H5T_NATIVE_LDOUBLE)) < 0) return ret_value;
     } /*end else */
 #endif
-
+    /*
+     * FIND H5T_NATIVE_REAL_8
+     */
     if (sizeof(real_8_f) == sizeof(float)) {
       if ((types[11] = (hid_t_f)H5Tcopy(H5T_NATIVE_FLOAT)) < 0) return ret_value;
     } /*end if */
@@ -180,7 +201,9 @@ nh5init_types_c( hid_t_f * types, hid_t_f * floatingtypes, hid_t_f * integertype
 	if ((types[11] = (hid_t_f)H5Tcopy(H5T_NATIVE_LDOUBLE)) < 0) return ret_value;
     } /*end else */
 #endif
-
+    /*
+     * FIND H5T_NATIVE_REAL_16
+     */
     if (sizeof(real_16_f) == sizeof(float)) {
       if ((types[12] = (hid_t_f)H5Tcopy(H5T_NATIVE_FLOAT)) < 0) return ret_value;
     } /*end if */
@@ -192,6 +215,13 @@ nh5init_types_c( hid_t_f * types, hid_t_f * floatingtypes, hid_t_f * integertype
 	if ((types[12] = (hid_t_f)H5Tcopy(H5T_NATIVE_LDOUBLE)) < 0) return ret_value;
     } /*end else */
 #endif
+    /*
+     * FIND H5T_NATIVE_B_8
+     */
+    if ((types[13] = (hid_t_f)H5Tcopy(H5T_NATIVE_B8))  < 0) return ret_value;
+    if ((types[14] = (hid_t_f)H5Tcopy(H5T_NATIVE_B16)) < 0) return ret_value;
+    if ((types[15] = (hid_t_f)H5Tcopy(H5T_NATIVE_B32)) < 0) return ret_value;
+    if ((types[16] = (hid_t_f)H5Tcopy(H5T_NATIVE_B64)) < 0) return ret_value;  
 
     if ((floatingtypes[0] = (hid_t_f)H5Tcopy(H5T_IEEE_F32BE)) < 0) return ret_value;
     if ((floatingtypes[1] = (hid_t_f)H5Tcopy(H5T_IEEE_F32LE)) < 0) return ret_value;
@@ -213,7 +243,18 @@ nh5init_types_c( hid_t_f * types, hid_t_f * floatingtypes, hid_t_f * integertype
     if ((integertypes[12] = (hid_t_f)H5Tcopy(H5T_STD_U32BE)) < 0) return ret_value;
     if ((integertypes[13] = (hid_t_f)H5Tcopy(H5T_STD_U32LE)) < 0) return ret_value;
     if ((integertypes[14] = (hid_t_f)H5Tcopy(H5T_STD_U64BE)) < 0) return ret_value;
-    if ((integertypes[15] = (hid_t_f)H5Tcopy(H5T_STD_U64LE)) < 0) return ret_value;
+    if ((integertypes[15] = (hid_t_f)H5Tcopy(H5T_STD_U64LE)) < 0) return ret_value;	
+    if ((integertypes[17] = (hid_t_f)H5Tcopy(H5T_STD_B8BE)) < 0) return ret_value;
+    if ((integertypes[18] = (hid_t_f)H5Tcopy(H5T_STD_B8LE)) < 0) return ret_value;
+    if ((integertypes[19] = (hid_t_f)H5Tcopy(H5T_STD_B16BE)) < 0) return ret_value;
+    if ((integertypes[20] = (hid_t_f)H5Tcopy(H5T_STD_B16LE)) < 0) return ret_value;
+    if ((integertypes[21] = (hid_t_f)H5Tcopy(H5T_STD_B32BE)) < 0) return ret_value;
+    if ((integertypes[22] = (hid_t_f)H5Tcopy(H5T_STD_B32LE)) < 0) return ret_value;
+    if ((integertypes[23] = (hid_t_f)H5Tcopy(H5T_STD_B64BE)) < 0) return ret_value;
+    if ((integertypes[24] = (hid_t_f)H5Tcopy(H5T_STD_B64LE)) < 0) return ret_value;
+    if ((integertypes[25] = (hid_t_f)H5Tcopy(H5T_FORTRAN_S1)) < 0) return ret_value;
+    if ((integertypes[26] = (hid_t_f)H5Tcopy(H5T_C_S1)) < 0) return ret_value;
+
 /*
  *  Define Fortran H5T_STRING type to store non-fixed size strings
  */
@@ -224,42 +265,46 @@ nh5init_types_c( hid_t_f * types, hid_t_f * floatingtypes, hid_t_f * integertype
     ret_value = 0;
     return ret_value;
 }
-
-/*---------------------------------------------------------------------------
- * Name:              h5close_types_c
- * Purpose:           Closes predefined datatype in Fortran
- * Inputs:            types - array with the predefined Native Fortran
- *                            type, its element and length must be the
- *                            same as the types array defined in the
- *                            H5f90global.f90
- *                    lentypes - length of the types array, which must be the
- *                               same as the length of types array defined
- *                               in the H5f90global.f90
- *                    floatingtypes - array with the predefined Floating Fortran
- *                                    type, its element and length must be the
- *                                    same as the floatingtypes array defined in the
- *                                    H5f90global.f90
- *                    floatinglen - length of the floatingtypes array, which must be the
- *                                  same as the length of floatingtypes array defined
- *                                  in the H5f90global.f90
- *                    integertypes - array with the predefined Integer Fortran
- *                                   type, its element and length must be the
- *                                   same as the integertypes array defined in the
- *                                   H5f90global.f90
- *                    integerlen - length of the floatingtypes array, which must be the
- *                                 same as the length of floatingtypes array defined
- *                                 in the H5f90global.f90
- * Outputs:           None
- * Returns:           0 on success, -1 on failure
- * Programmer:        Elena Pourmal
- *                    Tuesday, August 3, 1999
- *---------------------------------------------------------------------------*/
+/****if* H5_f/h5close_types_c
+ * NAME
+ *  h5close_types_c
+ * PURPOSE
+ *  Closes predefined datatype in Fortran
+ * INPUTS
+ *  types         - array with the predefined Native Fortran
+ *                  type, its element and length must be the
+ *                  same as the types array defined in the
+ *                  H5f90global.f90
+ *  lentypes      - length of the types array, which must be the
+ *                  same as the length of types array defined
+ *                  in the H5f90global.f90
+ *  floatingtypes - array with the predefined Floating Fortran
+ *                  type, its element and length must be the
+ *                  same as the floatingtypes array defined in the
+ *                  H5f90global.f90
+ *  floatinglen   - length of the floatingtypes array, which must be the
+ *                  same as the length of floatingtypes array defined
+ *                  in the H5f90global.f90
+ *  integertypes  - array with the predefined Integer Fortran
+ *                  type, its element and length must be the
+ *                  same as the integertypes array defined in the
+ *                  H5f90global.f90
+ *  integerlen    - length of the floatingtypes array, which must be the
+ *                  same as the length of floatingtypes array defined
+ *                  in the H5f90global.f90
+ * RETURNS
+ *   0 on success, -1 on failure
+ * AUTHOR
+ *   Elena Pourmal
+ *   Tuesday, August 3, 1999
+ * SOURCE
+ */
 int_f
 nh5close_types_c( hid_t_f * types, int_f *lentypes,
                   hid_t_f * floatingtypes, int_f* floatinglen,
                   hid_t_f * integertypes,  int_f * integerlen )
+/******/
 {
-
     int ret_value = -1;
     hid_t c_type_id;
     int i;
@@ -279,32 +324,52 @@ nh5close_types_c( hid_t_f * types, int_f *lentypes,
     ret_value = 0;
     return ret_value;
 }
-/*---------------------------------------------------------------------------
- * Name:              h5init_flags_c
- * Purpose:           Initialize Fortran flags
- * Inputs:            h5d_flags    - H5D inteface flags
- *                    h5f_flags    - H5F interface flags
- *                    h5fd_flags    - H5FD interface flags
- *                    h5fd_hid_flags- H5FD interface flags of type hid_t
- *                    h5g_flags    - H5G interface flags
- *                    h5i_flags    - H5I interface flags
- *                    h5p_flags    - H5P interface flags
- *                    h5p_flags_int    - H5P intger interface flags
- *                    h5r_flags    - H5R interface flags
- *                    h5s_flags    - H5S interface flags
- *                    h5t_flags    - H5T interface flags
- *                    h5z_flags    - H5Z interface flags
- * Outputs:           None
- * Returns:           0 on success, -1 on failure
- * Programmer:        Elena Pourmal
- *                    Tuesday, August 3, 1999
- *---------------------------------------------------------------------------*/
+/****if* H5_f/h5init_flags_c
+ * NAME
+ *  h5init_flags_c
+ * PURPOSE
+ *  Initialize Fortran flags
+ * INPUTS
+ *  h5d_flags      - H5D inteface flags
+ *  h5e_flags      - H5E inteface flags
+ *  h5e_hid_flags  - H5E inteface flags of type hid_t
+ *  h5f_flags      - H5F interface flags
+ *  h5fd_flags     - H5FD interface flags
+ *  h5fd_hid_flags - H5FD interface flags of type hid_t
+ *  h5g_flags      - H5G interface flags
+ *  h5i_flags      - H5I interface flags
+ *  h5p_flags      - H5P interface flags
+ *  h5p_flags_int  - H5P interface flags of type integer
+ *  h5r_flags      - H5R interface flags
+ *  h5s_flags      - H5S interface flags
+ *  h5t_flags      - H5T interface flags
+ *  h5z_flags      - H5Z interface flags
+ * OUTPUTS
+ *  None
+ * RETURNS
+ *  0 on success, -1 on failure
+ * AUTHOR
+ *  Elena Pourmal
+ *  Tuesday, August 3, 1999
+ * HISTORY
+ *  Added Z flags. EIP,  March 12, 2003
+ *  Added more FD flags and new H5LIB flags
+ *  Added more FD flags for HDF5 file driver
+ *           EIP, April 9, 2005
+ *  Added Generic flags introduced in version 1.8
+ *           MSB, January, 2008
+ *  Added types in lines h5*_flags = ( )variable to match input
+ *  Added E flags. 
+ *           MSB, July 9, 2009
+ * SOURCE
+ */
 int_f
-nh5init_flags_c( int_f *h5d_flags, int_f *h5f_flags,
+nh5init_flags_c( int_f *h5d_flags, int_f *h5e_flags, hid_t_f *h5e_hid_flags, int_f *h5f_flags,
                  int_f *h5fd_flags, hid_t_f *h5fd_hid_flags,
                  int_f *h5g_flags, int_f *h5i_flags, int_f *h5l_flags, int_f *h5o_flags,
                  hid_t_f *h5p_flags, int_f *h5p_flags_int, int_f *h5r_flags, int_f *h5s_flags,
                  int_f *h5t_flags, int_f *h5z_flags, int_f *h5_generic_flags)
+/******/
 {
     int ret_value = -1;
 /*
@@ -334,6 +399,15 @@ nh5init_flags_c( int_f *h5d_flags, int_f *h5f_flags,
     h5d_flags[21] = (int_f)H5D_CHUNK_CACHE_W0_DEFAULT;
 
 /*
+ *  H5E flags
+ */
+    h5e_hid_flags[0] = (hid_t_f)H5E_DEFAULT;
+    h5e_flags[0] = (int_f)H5E_MAJOR;
+    h5e_flags[1] = (int_f)H5E_MINOR;
+    h5e_flags[2] = (int_f)H5E_WALK_UPWARD;
+    h5e_flags[3] = (int_f)H5E_WALK_DOWNWARD;
+
+/*
  *  H5F flags
  */
     h5f_flags[0] = (int_f)H5F_ACC_RDWR;
@@ -354,6 +428,7 @@ nh5init_flags_c( int_f *h5d_flags, int_f *h5f_flags,
     h5f_flags[15] = (int_f)H5F_OBJ_ALL;
     h5f_flags[16] = (int_f)H5F_LIBVER_EARLIEST;
     h5f_flags[17] = (int_f)H5F_LIBVER_LATEST;
+    h5f_flags[18] = (int_f)H5F_UNLIMITED;
 
 /*
  *  H5FD flags
@@ -533,8 +608,6 @@ nh5init_flags_c( int_f *h5d_flags, int_f *h5f_flags,
 /*
  *  H5T flags
  */
-
-
       h5t_flags[0] = (int_f)H5T_NO_CLASS;
       h5t_flags[1] = (int_f)H5T_INTEGER;
       h5t_flags[2] = (int_f)H5T_FLOAT;
@@ -547,33 +620,33 @@ nh5init_flags_c( int_f *h5d_flags, int_f *h5f_flags,
       h5t_flags[9] = (int_f)H5T_ENUM;
       h5t_flags[10] = (int_f)H5T_ORDER_LE;
       h5t_flags[11] = (int_f)H5T_ORDER_BE;
-      h5t_flags[12] = (int_f)H5T_ORDER_VAX;
-      h5t_flags[13] = (int_f)H5T_ORDER_NONE;
-      h5t_flags[14] = (int_f)H5T_PAD_ZERO;
-      h5t_flags[15] = (int_f)H5T_PAD_ONE;
-      h5t_flags[16] = (int_f)H5T_PAD_BACKGROUND;
-      h5t_flags[17] = (int_f)H5T_PAD_ERROR;
-      h5t_flags[18] = (int_f)H5T_SGN_NONE;
-      h5t_flags[19] = (int_f)H5T_SGN_2;
-      h5t_flags[20] = (int_f)H5T_SGN_ERROR;
-      h5t_flags[21] = (int_f)H5T_NORM_IMPLIED;
-      h5t_flags[22] = (int_f)H5T_NORM_MSBSET;
-      h5t_flags[23] = (int_f)H5T_NORM_NONE;
-      h5t_flags[24] = (int_f)H5T_CSET_ASCII;
-      h5t_flags[25] = (int_f)H5T_CSET_UTF8;
-      h5t_flags[26] = (int_f)H5T_STR_NULLTERM;
-      h5t_flags[27] = (int_f)H5T_STR_NULLPAD;
-      h5t_flags[28] = (int_f)H5T_STR_SPACEPAD;
-      h5t_flags[29] = (int_f)H5T_STR_ERROR;
-      h5t_flags[30] = (int_f)H5T_VLEN;
-      h5t_flags[31] = (int_f)H5T_ARRAY;
-      h5t_flags[32] = (int_f)H5T_DIR_ASCEND;
-      h5t_flags[33] = (int_f)H5T_DIR_DESCEND;
+      h5t_flags[12] = (int_f)H5T_ORDER_MIXED;
+      h5t_flags[13] = (int_f)H5T_ORDER_VAX;
+      h5t_flags[14] = (int_f)H5T_ORDER_NONE;
+      h5t_flags[15] = (int_f)H5T_PAD_ZERO;
+      h5t_flags[16] = (int_f)H5T_PAD_ONE;
+      h5t_flags[17] = (int_f)H5T_PAD_BACKGROUND;
+      h5t_flags[18] = (int_f)H5T_PAD_ERROR;
+      h5t_flags[19] = (int_f)H5T_SGN_NONE;
+      h5t_flags[20] = (int_f)H5T_SGN_2;
+      h5t_flags[21] = (int_f)H5T_SGN_ERROR;
+      h5t_flags[22] = (int_f)H5T_NORM_IMPLIED;
+      h5t_flags[23] = (int_f)H5T_NORM_MSBSET;
+      h5t_flags[24] = (int_f)H5T_NORM_NONE;
+      h5t_flags[25] = (int_f)H5T_CSET_ASCII;
+      h5t_flags[26] = (int_f)H5T_CSET_UTF8;
+      h5t_flags[27] = (int_f)H5T_STR_NULLTERM;
+      h5t_flags[28] = (int_f)H5T_STR_NULLPAD;
+      h5t_flags[29] = (int_f)H5T_STR_SPACEPAD;
+      h5t_flags[30] = (int_f)H5T_STR_ERROR;
+      h5t_flags[31] = (int_f)H5T_VLEN;
+      h5t_flags[32] = (int_f)H5T_ARRAY;
+      h5t_flags[33] = (int_f)H5T_DIR_ASCEND;
+      h5t_flags[34] = (int_f)H5T_DIR_DESCEND;
 
 /*
  *  H5Z flags
  */
-
       h5z_flags[0] = (int_f)H5Z_FILTER_ERROR;
       h5z_flags[1] = (int_f)H5Z_FILTER_NONE;
       h5z_flags[2] = (int_f)H5Z_FILTER_DEFLATE;
@@ -588,6 +661,12 @@ nh5init_flags_c( int_f *h5d_flags, int_f *h5f_flags,
       h5z_flags[11] = (int_f)H5Z_FILTER_CONFIG_ENCODE_ENABLED;
       h5z_flags[12] = (int_f)H5Z_FILTER_CONFIG_DECODE_ENABLED;
       h5z_flags[13] = (int_f)H5Z_FILTER_ALL;
+      h5z_flags[14] = (int_f)H5Z_FILTER_NBIT;
+      h5z_flags[15] = (int_f)H5Z_FILTER_SCALEOFFSET;
+      h5z_flags[16] = (int_f)H5Z_SO_FLOAT_DSCALE;
+      h5z_flags[17] = (int_f)H5Z_SO_FLOAT_ESCALE;
+      h5z_flags[18] = (int_f)H5Z_SO_INT;
+      h5z_flags[19] = (int_f)H5Z_SO_INT_MINBITS_DEFAULT;
 /*
  *  H5A flags
  */
@@ -619,6 +698,7 @@ nh5init_flags_c( int_f *h5d_flags, int_f *h5f_flags,
 
 int_f
 nh5init1_flags_c(int_f *h5lib_flags)
+/******/
 {
     int ret_value = -1;
     unsigned prm_1 = H5_SZIP_EC_OPTION_MASK;
@@ -629,15 +709,22 @@ nh5init1_flags_c(int_f *h5lib_flags)
     return ret_value;
 }
 
-/*---------------------------------------------------------------------------
- * Name:              h5open_c
- * Purpose:           Calls H5open call to initialize C HDF5 library
- * Returns:           0 on success, -1 on failure
- * Programmer:        Elena Pourmal
- *                    Friday, November 17, 2000
- *---------------------------------------------------------------------------*/
+/****if* H5_f/h5open_c
+ * NAME
+ *              h5open_c
+ * PURPOSE
+ *           Calls H5open call to initialize C HDF5 library
+ * RETURNS
+ *           0 on success, -1 on failure
+ * AUTHOR
+ *        Elena Pourmal
+ *        Friday, November 17, 2000
+ *
+ * SOURCE
+ */
 int_f
 nh5open_c(void)
+/******/
 {
     int ret_value = -1;
 
@@ -645,16 +732,20 @@ nh5open_c(void)
     ret_value = 0;
     return ret_value;
 }
-
-/*---------------------------------------------------------------------------
- * Name:              h5close_c
- * Purpose:           Calls H5close call to close C HDF5 library
- * Returns:           0 on success, -1 on failure
- * Programmer:        Elena Pourmal
- *                    Friday, November 17, 2000
- *---------------------------------------------------------------------------*/
+/****if* H5_f/h5close_c
+ * NAME
+ *              h5close_c
+ * PURPOSE
+ *           Calls H5close call to close C HDF5 library
+ * RETURNS
+ *           0 on success, -1 on failure
+ * AUTHOR
+ *        Elena Pourmal
+ * SOURCE
+ */
 int_f
 nh5close_c(void)
+/******/
 {
     int ret_value = -1;
 
@@ -663,22 +754,31 @@ nh5close_c(void)
     return ret_value;
 }
 
-/*---------------------------------------------------------------------------
- * Name:              h5get_libversion_c
- * Purpose:           Calls H5get_libversion function
+/****if* H5_f/h5get_libversion_c
+ * NAME
+ *              h5get_libversion_c
+ * PURPOSE
+ *           Calls H5get_libversion function
  *		      to retrieve library version info.
- * Inputs:
+ * INPUTS
+ *
  *                    None
- * Outputs:
+ * OUTPUTS
+ *
  *                    majnum - the major version of the library
  *                    minnum - the minor version of the library
  *                    relnum - the release version of the library
- * Returns:           0 on success, -1 on failure
- * Programmer:        Elena Pourmal
+ * RETURNS
+ *           0 on success, -1 on failure
+ * AUTHOR
+ *        Elena Pourmal
  *                    Tuesday, September 24, 2002
- *---------------------------------------------------------------------------*/
+ * SOURCE
+ *
+ */
 int_f
 nh5get_libversion_c(int_f *majnum, int_f *minnum, int_f *relnum)
+/******/
 {
 
     int ret_value = -1;
@@ -693,22 +793,30 @@ nh5get_libversion_c(int_f *majnum, int_f *minnum, int_f *relnum)
     return ret_value;
 }
 
-/*---------------------------------------------------------------------------
- * Name:              h5check_version_c
- * Purpose:           Calls H5check_version function
+/****if* H5_f/h5check_version_c
+ * NAME
+ *              h5check_version_c
+ * PURPOSE
+ *           Calls H5check_version function
  *		      to verify library version info.
- * Inputs:
+ * INPUTS
+ *
  *                    majnum - the major version of the library
  *                    minnum - the minor version of the library
  *                    relnum - the release version of the library
- * Outputs:
+ * OUTPUTS
+ *
  *                    None
- * Returns:           0 on success, aborts on failure
- * Programmer:        Elena Pourmal
+ * RETURNS
+ *           0 on success, aborts on failure
+ * AUTHOR
+ *        Elena Pourmal
  *                    Tuesday, September 24, 2002
- *---------------------------------------------------------------------------*/
+ * SOURCE
+ */
 int_f
 nh5check_version_c(int_f *majnum, int_f *minnum, int_f *relnum)
+/******/
 {
     int ret_value = -1;
     unsigned c_majnum, c_minnum, c_relnum;
@@ -723,15 +831,21 @@ nh5check_version_c(int_f *majnum, int_f *minnum, int_f *relnum)
     return ret_value;
 }
 
-/*---------------------------------------------------------------------------
- * Name:              h5garbage_collect_c
- * Purpose:           Calls H5garbage_collect to collect on all free-lists of all types
- * Returns:           0 on success, -1 on failure
- * Programmer:        Elena Pourmal
+/****if* H5_f/h5garbage_collect_c
+ * NAME
+ *              h5garbage_collect_c
+ * PURPOSE
+ *           Calls H5garbage_collect to collect on all free-lists of all types
+ * RETURNS
+ *           0 on success, -1 on failure
+ * AUTHOR
+ *        Elena Pourmal
  *                    Tuesday, September 24, 2002
- *---------------------------------------------------------------------------*/
+ * SOURCE
+ */
 int_f
 nh5garbage_collect_c(void)
+/******/
 {
     int ret_value = -1;
 
@@ -740,15 +854,21 @@ nh5garbage_collect_c(void)
     return ret_value;
 }
 
-/*---------------------------------------------------------------------------
- * Name:              h5dont_atexit_c
- * Purpose:           Calls H5dont_atexit not to install atexit cleanup routine
- * Returns:           0 on success, -1 on failure
- * Programmer:        Elena Pourmal
+/****if* H5_f/h5dont_atexit_c
+ * NAME
+ *              h5dont_atexit_c
+ * PURPOSE
+ *           Calls H5dont_atexit not to install atexit cleanup routine
+ * RETURNS
+ *           0 on success, -1 on failure
+ * AUTHOR
+ *        Elena Pourmal
  *                    Tuesday, September 24, 2002
- *---------------------------------------------------------------------------*/
+ * SOURCE
+ */
 int_f
 nh5dont_atexit_c(void)
+/******/
 {
     int ret_value = -1;
 
diff --git a/fortran/src/H5_ff.f90 b/fortran/src/H5_ff.f90
index 7dffd0a..57c1afd 100644
--- a/fortran/src/H5_ff.f90
+++ b/fortran/src/H5_ff.f90
@@ -1,3 +1,17 @@
+!****h* ROBODoc/H5LIB
+!
+! NAME
+!  MODULE H5LIB
+!
+! PURPOSE
+!  This module provides fortran specific helper functions for the HDF library
+!
+! USES
+!  H5LIB_PROVISIONAL - This module provides helper functions for Fortran 2003
+!                      only features. If Fortran 2003 functions are enabled then
+!                      H5_ff_F03.f90 is compiled, else H5_ff_F90.f90,
+!                      which is just a place holder blank module, is compiled.
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,52 +27,53 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!
+!*****
+
 MODULE H5LIB
 
+  USE H5LIB_PROVISIONAL  ! helper functions for Fortran 2003 features:
+                         !       pre-Fortran 2003 - empty module
+                         !       Forttran 2003    - contains functions
+  USE H5GLOBAL
+
 CONTAINS
-!----------------------------------------------------------------------
-! Name:		h5open_f
+!****s* H5LIB/h5open_f
 !
-! Purpose:	Initializes the HDF5 library and Fortran90 interface.
+! NAME
+!  h5open_f
+!
+! PURPOSE
+!  Initializes HDF5 Fortran interface.
 !
-! Inputs:
 ! Outputs:
-!		error:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+!  error - Returns 0 if successful and -1 if fails
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
 !
-! Comment:
-!----------------------------------------------------------------------
+! Removed call to h5open_c since this may cause a problem for an
+! application that uses HDF5 library outside HDF5 Fortran APIs.
+!          October 13, 2011
+! Fortran90 Interface:
   SUBROUTINE h5open_f(error)
     USE H5GLOBAL
-
     IMPLICIT NONE
     INTEGER, INTENT(OUT) :: error
-    INTEGER :: error_0, error_1, error_2, error_3
-!        INTEGER, EXTERNAL :: h5init_types_c
-!        INTEGER, EXTERNAL :: h5init_flags_c
-!        INTEGER, EXTERNAL :: h5init1_flags_c
-!        INTEGER, EXTERNAL :: h5open_c
+!*****
+    INTEGER :: error_1, error_2, error_3
 
-!
-! MS FORTRAN needs explicit interfaces for C functions called here.
-!
-    INTERFACE
-       INTEGER FUNCTION h5open_c()
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5OPEN_C'::h5open_c
-         !DEC$ENDIF
-       END FUNCTION h5open_c
-    END INTERFACE
     INTERFACE
        INTEGER FUNCTION h5init_types_c(p_types, f_types, i_types)
          USE H5GLOBAL
@@ -72,6 +87,8 @@ CONTAINS
     END INTERFACE
     INTERFACE
        INTEGER FUNCTION h5init_flags_c(i_H5D_flags, &
+            i_H5E_flags, &
+            i_H5E_hid_flags, &
             i_H5F_flags, &
             i_H5FD_flags, &
             i_H5FD_hid_flags, &
@@ -87,9 +104,11 @@ CONTAINS
             i_H5Z_flags, &
             i_H5generic_flags)
          USE H5GLOBAL
+         INTEGER i_H5D_flags(H5D_FLAGS_LEN)
+         INTEGER i_H5E_flags(H5E_FLAGS_LEN)
+         INTEGER(HID_T) i_H5E_hid_flags(H5E_HID_FLAGS_LEN)
          INTEGER i_H5F_flags(H5F_FLAGS_LEN)
          INTEGER i_H5G_flags(H5G_FLAGS_LEN)
-         INTEGER i_H5D_flags(H5D_FLAGS_LEN)
          INTEGER i_H5FD_flags(H5FD_FLAGS_LEN)
          INTEGER(HID_T) i_H5FD_hid_flags(H5FD_HID_FLAGS_LEN)
          INTEGER i_H5I_flags(H5I_FLAGS_LEN)
@@ -102,9 +121,9 @@ CONTAINS
          INTEGER i_H5T_flags(H5T_FLAGS_LEN)
          INTEGER i_H5Z_flags(H5Z_FLAGS_LEN)
          INTEGER i_H5generic_flags(H5generic_FLAGS_LEN)
-          !DEC$IF DEFINED(HDF5F90_WINDOWS)
-          !DEC$ATTRIBUTES C,reference,decorate,alias:'H5INIT_FLAGS_C'::h5init_flags_c
-          !DEC$ENDIF
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5INIT_FLAGS_C'::h5init_flags_c
+         !DEC$ENDIF
        END FUNCTION h5init_flags_c
     END INTERFACE
     INTERFACE
@@ -116,9 +135,10 @@ CONTAINS
          !DEC$ENDIF
        END FUNCTION h5init1_flags_c
     END INTERFACE
-    error_0 = h5open_c()
     error_1 = h5init_types_c(predef_types, floating_types, integer_types)
     error_2 = h5init_flags_c(H5D_flags, &
+         H5E_flags, &
+         H5E_hid_flags, &
          H5F_flags, &
          H5FD_flags, &
          H5FD_hid_flags, &
@@ -134,46 +154,39 @@ CONTAINS
          H5Z_flags, &
          H5generic_flags)
     error_3 = h5init1_flags_c(H5LIB_flags )
-    error = error_0 + error_1 + error_2 + error_3
+    error = error_1 + error_2 + error_3
   END SUBROUTINE h5open_f
 
-!----------------------------------------------------------------------
-! Name:		h5close_f
+!****s* H5LIB/h5close_f
 !
-! Purpose:	Closes the HDF5 library and Fortran90 interface.
+! NAME
+!  h5close_f
+!
+! PURPOSE
+!  Closes HDF5 Fortran interface.
 !
-! Inputs:
 ! Outputs:
-!		error:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+!  error - Returns 0 if successful and -1 if fails
 !
-! Programmer:	Elena Pourmal
-!		August 12, 1999
+! AUTHOR
+!  Elena Pourmal
+!  August 12, 1999
 !
-! Modifications: 	Explicit Fortran interfaces were added for
-!			called C functions (it is needed for Windows
-!			port).  February 28, 2001
+! HISTORY
+!  Explicit Fortran interfaces were added for
+!  called C functions (it is needed for Windows
+!  port).  February 28, 2001
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! Removed call to h5close_c since this may cause a problem for an
+! application that uses HDF5 library outside HDF5 Fortran APIs.
+!          October 13, 2011
+! Fortran90 Interface:
   SUBROUTINE h5close_f(error)
     USE H5GLOBAL
-
     IMPLICIT NONE
-    INTEGER :: error_1, error_2
     INTEGER, INTENT(OUT) :: error
-    !        INTEGER, EXTERNAL :: h5close_types_c, h5close_c
-    INTERFACE
-       INTEGER FUNCTION h5close_c()
-         !DEC$IF DEFINED(HDF5F90_WINDOWS)
-         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5CLOSE_C'::h5close_c
-         !DEC$ENDIF
-       END FUNCTION h5close_c
-    END INTERFACE
+!*****
+    INTEGER :: error_1
     INTERFACE
        INTEGER FUNCTION h5close_types_c(p_types, P_TYPES_LEN, &
             f_types, F_TYPES_LEN, &
@@ -193,38 +206,34 @@ CONTAINS
     error_1 = h5close_types_c(predef_types, PREDEF_TYPES_LEN, &
          floating_types, FLOATING_TYPES_LEN, &
          integer_types, INTEGER_TYPES_LEN )
-    error_2 = h5close_c()
-    error = error_1 + error_2
+    error = error_1
 
   END SUBROUTINE h5close_f
 
-!----------------------------------------------------------------------
-! Name:		h5get_libversion_f
+!****s* H5LIB/h5get_libversion_f
 !
-! Purpose:	Returns the HDF5 LIbrary release number
+! NAME
+!  h5get_libversion_f
+!
+! PURPOSE
+!  Returns the HDF5 LIbrary release number
 !
-! Inputs:
 ! Outputs:
-!		majnum:		- major version of the library
-!		minum:		- minor version of the library
-!		relnum:		- release version of the library
-!		error:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
-!
-! Programmer:	Elena Pourmal
-!		September 24, 2002
-!
-! Comment:
-!----------------------------------------------------------------------
-
+!  majnum - major version of the library
+!  minum  - minor version of the library
+!  relnum - release version of the library
+!  error  - Returns 0 if successful and -1 if fails
+!
+! AUTHOR
+!  Elena Pourmal
+!  September 24, 2002
+!
+! Fortran90 Interface:
   SUBROUTINE h5get_libversion_f(majnum, minnum, relnum, error)
     USE H5GLOBAL
-
     IMPLICIT NONE
     INTEGER, INTENT(OUT) :: majnum, minnum, relnum, error
+!*****
     INTERFACE
        INTEGER FUNCTION h5get_libversion_c(majnum, minnum, relnum)
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
@@ -238,34 +247,33 @@ CONTAINS
 
   END SUBROUTINE h5get_libversion_f
 
-!----------------------------------------------------------------------
-! Name:		h5check_version_f
+!****s* H5LIB/h5check_version_f
 !
-! Purpose:	Verifies that library versions are consistent.
+! NAME
+!  h5check_version_f
+!
+! PURPOSE
+!  Verifies that library versions are consistent.
 !
 ! Inputs:
-!		majnum:		- major version of the library
-!		minum:		- minor version of the library
-!		relnum:		- release version of the library
+!  majnum - major version of the library
+!  minum  - minor version of the library
+!  relnum - release version of the library
+!
 ! Outputs:
-!		error:		- error code
-!				 	Success:  0
-!				 	Failure:  application aborts
-! Optional parameters:
-!				NONE
+!  error - Returns 0 if successful and -1 if fails
 !
-! Programmer:	Elena Pourmal
-!		September 24, 2002
+! AUTHOR
+!  Elena Pourmal
+!  September 24, 2002
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! Fortran90 Interface:
   SUBROUTINE h5check_version_f(majnum, minnum, relnum, error)
     USE H5GLOBAL
-
     IMPLICIT NONE
-    INTEGER, INTENT(IN) :: majnum, minnum, relnum
+    INTEGER, INTENT(IN)  :: majnum, minnum, relnum
     INTEGER, INTENT(OUT) :: error
+!*****
     INTERFACE
        INTEGER FUNCTION h5check_version_c(majnum, minnum, relnum)
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
@@ -278,32 +286,27 @@ CONTAINS
     error = h5check_version_c(majnum, minnum, relnum)
 
   END SUBROUTINE h5check_version_f
-
-!----------------------------------------------------------------------
-! Name:		h5garbage_collect_f
+!****s* H5LIB/h5garbage_collect_f
 !
-! Purpose:	Garbage collects on all free-lists of all types.
+! NAME
+!  h5garbage_collect_f
 !
-! Inputs:
-! Outputs:
-!		error:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Garbage collects on all free-lists of all types.
 !
-! Programmer:	Elena Pourmal
-!		September 24, 2002
+! Outputs:
+!  error - Returns 0 if successful and -1 if fails
 !
+! AUTHOR
+!  Elena Pourmal
+!  September 24, 2002
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! Fortran90 Interface:
   SUBROUTINE h5garbage_collect_f(error)
     USE H5GLOBAL
-
     IMPLICIT NONE
     INTEGER, INTENT(OUT) :: error
+!*****
     INTERFACE
        INTEGER FUNCTION h5garbage_collect_c()
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
@@ -315,32 +318,27 @@ CONTAINS
     error = h5garbage_collect_c()
 
   END SUBROUTINE h5garbage_collect_f
-
-!----------------------------------------------------------------------
-! Name:		h5dont_atexit_f
+!****s* H5LIB/h5dont_atexit_f
 !
-! Purpose:	Instructs library not to install atexit cleanup routine.
+! NAME
+!  h5dont_atexit_f
 !
-! Inputs:
-! Outputs:
-!		error:		- error code
-!				 	Success:  0
-!				 	Failure: -1
-! Optional parameters:
-!				NONE
+! PURPOSE
+!  Instructs library not to install atexit cleanup routine.
 !
-! Programmer:	Elena Pourmal
-!		September 24, 2002
+! Outputs:
+!  error - Returns 0 if successful and -1 if fails
 !
+! AUTHOR
+!  Elena Pourmal
+!  September 24, 2002
 !
-! Comment:
-!----------------------------------------------------------------------
-
+! Fortran90 Interface:
   SUBROUTINE h5dont_atexit_f(error)
     USE H5GLOBAL
-
     IMPLICIT NONE
     INTEGER, INTENT(OUT) :: error
+!*****
     INTERFACE
        INTEGER FUNCTION h5dont_atexit_c()
          !DEC$IF DEFINED(HDF5F90_WINDOWS)
@@ -352,4 +350,54 @@ CONTAINS
     error = h5dont_atexit_c()
 
   END SUBROUTINE h5dont_atexit_f
+
+!****f* H5LIB/h5kind_to_type
+!
+! NAME
+!  h5kind_to_type
+!
+! PURPOSE
+!  Converts the KIND to the correct HDF type
+!
+! Inputs:
+!  kind    - Fortran KIND parameter
+!  flag    - whether KIND is of type INTEGER or REAL:
+!              H5_INTEGER_KIND - integer
+!              H5_REAL_KIND    - real
+! Outputs:
+!  h5_type - returns the type
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  August 25, 2008
+!
+! Fortran90 Interface:
+  INTEGER(HID_T) FUNCTION h5kind_to_type(kind, flag) RESULT(h5_type)
+    USE H5GLOBAL
+    IMPLICIT NONE
+    INTEGER, INTENT(IN) :: kind
+    INTEGER, INTENT(IN) :: flag
+!*****
+    IF(flag.EQ.H5_INTEGER_KIND)THEN
+       IF(kind.EQ.Fortran_INTEGER_1)THEN
+          h5_type = H5T_NATIVE_INTEGER_1
+       ELSE IF(kind.EQ.Fortran_INTEGER_2)THEN
+          h5_type = H5T_NATIVE_INTEGER_2
+       ELSE IF(kind.EQ.Fortran_INTEGER_4)THEN
+          h5_type = H5T_NATIVE_INTEGER_4
+       ELSE IF(kind.EQ.Fortran_INTEGER_8)THEN
+          h5_type = H5T_NATIVE_INTEGER_8
+       ENDIF
+    ELSE IF(flag.EQ.H5_REAL_KIND)THEN
+       IF(kind.EQ.Fortran_REAL_4)THEN
+          h5_type = H5T_NATIVE_REAL_4
+       ELSE IF(kind.EQ.Fortran_REAL_8)THEN
+          h5_type = H5T_NATIVE_REAL_8
+       ELSE IF(kind.EQ.Fortran_REAL_16)THEN
+          h5_type = H5T_NATIVE_REAL_16
+       ENDIF
+    ENDIF
+
+  END FUNCTION h5kind_to_type
+
 END MODULE H5LIB
diff --git a/fortran/src/H5_ff_F03.f90 b/fortran/src/H5_ff_F03.f90
new file mode 100644
index 0000000..f3e7098
--- /dev/null
+++ b/fortran/src/H5_ff_F03.f90
@@ -0,0 +1,75 @@
+!****h* ROBODoc/H5LIB_PROVISIONAL
+!
+! NAME
+!  MODULE H5LIB_PROVISIONAL
+!
+! PURPOSE
+!  This file contains helper functions for Fortran 2003 features and is
+!  only compiled when Fortran 2003 features are enabled, otherwise
+!  the file H5_ff_F90.f90 is compiled.
+!
+! COPYRIGHT
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!  Copyright by The HDF Group.                                               *
+!  Copyright by the Board of Trustees of the University of Illinois.         *
+!  All rights reserved.                                                      *
+!  *
+!  This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!  terms governing use, modification, and redistribution, is contained in    *
+!  the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!  of the source code distribution tree; Copyright.html can be found at the  *
+!  root level of an installed copy of the electronic HDF5 document set and   *
+!  is linked from the top-level documents page.  It can also be found at     *
+!  http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!  access to either file, you may request a copy from help at hdfgroup.org.     *
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! NOTES
+!                         *** IMPORTANT ***
+!  If you add a new function you must add the function name to the
+!  Windows dll file 'hdf5_fortrandll.def' in the fortran/src directory.
+!  This is needed for Windows based operating systems.
+!*****
+
+MODULE H5LIB_PROVISIONAL
+
+CONTAINS
+!****f* H5LIB_PROVISIONAL/h5offsetof
+!
+! NAME
+!  h5offsetof
+!
+! PURPOSE
+!  Computes the offset in memory
+!
+! Inputs:
+!  start - starting pointer address
+!  end 	 - ending pointer address
+!
+! Outputs:
+!  offset - offset of a member within the derived type
+!
+! AUTHOR
+!  M. Scot Breitenfeld
+!  Augest 25, 2008
+!
+! ACKNOWLEDGEMENTS
+!  Joe Krahn
+!
+! Fortran2003 Interface:
+  FUNCTION h5offsetof(start,end) RESULT(offset)
+    USE, INTRINSIC :: ISO_C_BINDING
+    USE H5GLOBAL
+    IMPLICIT NONE
+    INTEGER(SIZE_T) :: offset
+    TYPE(C_PTR), VALUE, INTENT(IN) :: start, end
+!*****
+    INTEGER(C_INTPTR_T) :: int_address_start, int_address_end
+    int_address_start = TRANSFER(start, int_address_start)
+    int_address_end   = TRANSFER(end  , int_address_end  )
+
+    offset = int_address_end - int_address_start
+
+  END FUNCTION h5offsetof
+
+END MODULE H5LIB_PROVISIONAL
diff --git a/fortran/src/H5_ff_F90.f90 b/fortran/src/H5_ff_F90.f90
new file mode 100644
index 0000000..a5d303a
--- /dev/null
+++ b/fortran/src/H5_ff_F90.f90
@@ -0,0 +1,34 @@
+!****h* ROBODoc/H5LIB_PROVISIONAL (F90)
+!
+! NAME
+!  MODULE H5LIB_PROVISIONAL
+!
+! FILE
+!  fortran/src/H5_ff_F90.f90
+!
+! PURPOSE
+!  This file is a dummy module for when Fortran 2003 features are not enabled.
+!  It is compiled in place of H5_ff_F03.f90 and is empty.
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+!*****
+
+MODULE H5LIB_PROVISIONAL
+
+
+END MODULE H5LIB_PROVISIONAL
diff --git a/fortran/src/H5f90global.f90 b/fortran/src/H5f90global.f90
index 05ec366..da7a736 100644
--- a/fortran/src/H5f90global.f90
+++ b/fortran/src/H5f90global.f90
@@ -1,22 +1,25 @@
-!****h* fortran/src/H5f90global.f90
+!****h* ROBODoc/H5GLOBAL
 !
 ! NAME
-!   H5GLOBAL
+!  MODULE H5GLOBAL
 !
-! FUNCTION
-!   This module is used to pass C stubs for H5 Fortran APIs. The C stubs are
-!   packed into arrays in H5_f.c and these arrays are then passed to Fortran.
-!   This module then uses EQUIVALENCE to assign elements of the arrays to
-!   Fortran equivalent C stubs.
+! FILE
+!  src/fortran/H5f90global.f90
+!
+! PURPOSE
+!  This module is used to pass C stubs for H5 Fortran APIs. The C stubs are
+!  packed into arrays in H5_f.c and these arrays are then passed to Fortran.
+!  This module then uses EQUIVALENCE to assign elements of the arrays to
+!  Fortran equivalent C stubs.
 !
 ! NOTES
-!   The size of the C arrays in H5_f.c have to match the values of the variables
-!   declared as PARAMETER, hence if the size of an array in H5_f.c is changed
-!   then the PARAMETER of that corresponding array in Fortran must also be changed.
+!  The size of the C arrays in H5_f.c has to match the values of the variables
+!  declared as PARAMETER, hence if the size of an array in H5_f.c is changed
+!  then the PARAMETER of that corresponding array in Fortran must also be changed.
 !
 ! USES
-!   H5FORTRAN_TYPES - This module is generated at run time. See
-!                     H5fortran_types.f90 for further informaton.
+!  H5FORTRAN_TYPES 	 - This module is generated at run time. See
+!
 ! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
@@ -61,7 +64,7 @@ MODULE H5GLOBAL
      INTEGER, DIMENSION(1:REF_REG_BUF_LEN) :: ref
   END TYPE hdset_reg_ref_t_f
 
-  INTEGER, PARAMETER :: PREDEF_TYPES_LEN = 13 ! Do not forget to change this
+  INTEGER, PARAMETER :: PREDEF_TYPES_LEN = 17 ! Do not forget to change this
                                               ! value when new predefined
                                               ! datatypes are added
 
@@ -71,7 +74,7 @@ MODULE H5GLOBAL
 
   ! Do not forget to change the following line when new predefined
   ! integer data types are added
-  INTEGER, PARAMETER :: INTEGER_TYPES_LEN = 17
+  INTEGER, PARAMETER :: INTEGER_TYPES_LEN = 27
 
   INTEGER(HID_T) H5T_NATIVE_INTEGER_1, &
        H5T_NATIVE_INTEGER_2, &
@@ -106,7 +109,21 @@ MODULE H5GLOBAL
        H5T_STD_U32LE,   &
        H5T_STD_U64BE,   &
        H5T_STD_U64LE,   &
-       H5T_STRING
+       H5T_STRING,      &
+       H5T_STD_B8BE,    &
+       H5T_STD_B8LE,    &
+       H5T_STD_B16BE,   &
+       H5T_STD_B16LE,   &
+       H5T_STD_B32BE,   &
+       H5T_STD_B32LE,   &
+       H5T_STD_B64BE,   &
+       H5T_STD_B64LE,   &
+       H5T_NATIVE_B8,   &
+       H5T_NATIVE_B16,  &
+       H5T_NATIVE_B32,  &
+       H5T_NATIVE_B64,  &
+       H5T_FORTRAN_S1,  &
+       H5T_C_S1
 
 
   INTEGER(HID_T), DIMENSION(PREDEF_TYPES_LEN) :: predef_types
@@ -123,7 +140,10 @@ MODULE H5GLOBAL
   EQUIVALENCE (predef_types(11), H5T_NATIVE_REAL_4)
   EQUIVALENCE (predef_types(12), H5T_NATIVE_REAL_8)
   EQUIVALENCE (predef_types(13), H5T_NATIVE_REAL_16)
-
+  EQUIVALENCE (predef_types(14), H5T_NATIVE_B8 )
+  EQUIVALENCE (predef_types(15), H5T_NATIVE_B16)
+  EQUIVALENCE (predef_types(16), H5T_NATIVE_B32)
+  EQUIVALENCE (predef_types(17), H5T_NATIVE_B64)  
 
   INTEGER(HID_T), DIMENSION(FLOATING_TYPES_LEN) :: floating_types
   EQUIVALENCE (floating_types(1), H5T_IEEE_F32BE )
@@ -149,6 +169,16 @@ MODULE H5GLOBAL
   EQUIVALENCE (integer_types(15), H5T_STD_U64BE)
   EQUIVALENCE (integer_types(16), H5T_STD_U64LE)
   EQUIVALENCE (integer_types(17), H5T_STRING)
+  EQUIVALENCE (integer_types(18), H5T_STD_B8BE)
+  EQUIVALENCE (integer_types(19), H5T_STD_B8LE)
+  EQUIVALENCE (integer_types(20), H5T_STD_B16BE)
+  EQUIVALENCE (integer_types(21), H5T_STD_B16LE)
+  EQUIVALENCE (integer_types(22), H5T_STD_B32BE)
+  EQUIVALENCE (integer_types(23), H5T_STD_B32LE)
+  EQUIVALENCE (integer_types(24), H5T_STD_B64BE)
+  EQUIVALENCE (integer_types(25), H5T_STD_B64LE)
+  EQUIVALENCE (integer_types(26), H5T_FORTRAN_S1)
+  EQUIVALENCE (integer_types(27), H5T_C_S1)
 
 
   !      COMMON /PREDEFINED_TYPES/ H5T_NATIVE_INTEGER, &
@@ -195,7 +225,7 @@ MODULE H5GLOBAL
   ! Fortran flags
   !
   !
-  ! H5F flags (DO NOT FORGET TO UPDATE WHEN NEW FLAGS ARE ADDEDD !)
+  ! H5F flags (DO NOT FORGET TO UPDATE WHEN NEW FLAGS ARE ADDED !)
   !
   ! H5F flags declaration
   !
@@ -224,6 +254,7 @@ MODULE H5GLOBAL
   INTEGER :: H5F_OBJ_ALL_F
   INTEGER :: H5F_LIBVER_EARLIEST_F
   INTEGER :: H5F_LIBVER_LATEST_F
+  INTEGER :: H5F_UNLIMITED_F
 
   EQUIVALENCE(H5F_flags(1), H5F_ACC_RDWR_F)
   EQUIVALENCE(H5F_flags(2), H5F_ACC_RDONLY_F)
@@ -243,6 +274,7 @@ MODULE H5GLOBAL
   EQUIVALENCE(H5F_flags(16), H5F_OBJ_ALL_F)
   EQUIVALENCE(H5F_flags(17), H5F_LIBVER_EARLIEST_F)
   EQUIVALENCE(H5F_flags(18), H5F_LIBVER_LATEST_F)
+  EQUIVALENCE(H5F_flags(19), H5F_UNLIMITED_F)
   !
   ! H5generic flags declaration
   !
@@ -384,6 +416,32 @@ MODULE H5GLOBAL
   EQUIVALENCE(H5D_flags(22), H5D_CHUNK_CACHE_W0_DFLT_F)
 
   !
+  ! H5E flags declaration
+  !
+  INTEGER, PARAMETER :: H5E_FLAGS_LEN = 4
+  INTEGER H5E_flags(H5E_FLAGS_LEN)
+  INTEGER, PARAMETER :: H5E_HID_FLAGS_LEN = 1
+  INTEGER(HID_T) H5E_hid_flags(H5E_HID_FLAGS_LEN)
+  !DEC$if defined(BUILD_HDF5_DLL)
+  !DEC$ATTRIBUTES DLLEXPORT :: /H5E_FLAGS/
+  !DEC$ATTRIBUTES DLLEXPORT :: /H5E_HID_FLAGS/
+  !DEC$endif
+  COMMON /H5E_FLAGS/ H5E_flags
+  COMMON /H5E_HID_FLAGS/ H5E_hid_flags
+
+  INTEGER(HID_T) :: H5E_DEFAULT_F
+  INTEGER :: H5E_MAJOR_F
+  INTEGER :: H5E_MINOR_F
+  INTEGER :: H5E_WALK_UPWARD_F
+  INTEGER :: H5E_WALK_DOWNWARD_F
+
+  EQUIVALENCE(H5E_hid_flags(1), H5E_DEFAULT_F)
+  EQUIVALENCE(H5E_flags(1)    , H5E_MAJOR_F)
+  EQUIVALENCE(H5E_flags(2)    , H5E_MINOR_F)
+  EQUIVALENCE(H5E_flags(3)    , H5E_WALK_UPWARD_F)
+  EQUIVALENCE(H5E_flags(4)    , H5E_WALK_DOWNWARD_F)
+
+  !
   ! H5FD flags declaration
   !
   INTEGER, PARAMETER :: H5FD_FLAGS_LEN = 11
@@ -501,10 +559,10 @@ MODULE H5GLOBAL
   !DEC$endif
   COMMON /H5O_FLAGS/ H5O_flags
 
-  INTEGER :: H5O_COPY_SHALLOW_HIERARCHY_F ! * THESE VARIABLES DO
-  INTEGER :: H5O_COPY_EXPAND_SOFT_LINK_F ! NOT MATCH THE C VARIABLE
-  INTEGER :: H5O_COPY_EXPAND_EXT_LINK_F !  IN ORDER
-  INTEGER :: H5O_COPY_EXPAND_REFERENCE_F ! TO STAY UNDER THE
+  INTEGER :: H5O_COPY_SHALLOW_HIERARCHY_F ! *** THESE VARIABLES DO
+  INTEGER :: H5O_COPY_EXPAND_SOFT_LINK_F  ! NOT MATCH THE C VARIABLE
+  INTEGER :: H5O_COPY_EXPAND_EXT_LINK_F   ! IN ORDER
+  INTEGER :: H5O_COPY_EXPAND_REFERENCE_F  ! TO STAY UNDER THE
   INTEGER :: H5O_COPY_WITHOUT_ATTR_FLAG_F
   INTEGER :: H5O_COPY_PRESERVE_NULL_FLAG_F
   INTEGER :: H5O_COPY_ALL_F
@@ -518,7 +576,7 @@ MODULE H5GLOBAL
   INTEGER :: H5O_HDR_CHUNK0_SIZE_F
   INTEGER :: H5O_HDR_ATTR_CRT_ORDER_TRACK_F ! 32 CHARACTER
   INTEGER :: H5O_HDR_ATTR_CRT_ORDER_INDEX_F ! VARIABLE
-  INTEGER :: H5O_HDR_ATTR_STORE_PHASE_CHA_F !  LENGTH *
+  INTEGER :: H5O_HDR_ATTR_STORE_PHASE_CHA_F ! LENGTH ***
   INTEGER :: H5O_HDR_STORE_TIMES_F
   INTEGER :: H5O_HDR_ALL_FLAGS_F
   INTEGER :: H5O_SHMESG_MAX_NINDEXES_F
@@ -682,52 +740,51 @@ MODULE H5GLOBAL
   EQUIVALENCE(H5S_flags(18), H5S_SEL_POINTS_F)
   EQUIVALENCE(H5S_flags(19), H5S_SEL_HYPERSLABS_F)
   EQUIVALENCE(H5S_flags(20), H5S_SEL_ALL_F)
-
-
   !
   ! H5T flags declaration
   !
-  INTEGER, PARAMETER :: H5T_FLAGS_LEN = 34
+  INTEGER, PARAMETER :: H5T_FLAGS_LEN = 35
   INTEGER H5T_flags(H5T_FLAGS_LEN)
   !DEC$if defined(BUILD_HDF5_DLL)
   !DEC$ATTRIBUTES DLLEXPORT :: /H5T_FLAGS/
   !DEC$endif
   COMMON /H5T_FLAGS/ H5T_flags
 
-  INTEGER ::  H5T_NO_CLASS_F
-  INTEGER ::  H5T_INTEGER_F
-  INTEGER ::  H5T_FLOAT_F
-  INTEGER ::  H5T_TIME_F
-  INTEGER ::  H5T_STRING_F
-  INTEGER ::  H5T_BITFIELD_F
-  INTEGER ::  H5T_OPAQUE_F
-  INTEGER ::  H5T_COMPOUND_F
-  INTEGER ::  H5T_REFERENCE_F
-  INTEGER ::  H5T_ENUM_F
-  INTEGER ::  H5T_VLEN_F
-  INTEGER ::  H5T_ARRAY_F
-  INTEGER ::  H5T_ORDER_LE_F
-  INTEGER ::  H5T_ORDER_BE_F
-  INTEGER ::  H5T_ORDER_VAX_F
-  INTEGER ::  H5T_ORDER_NONE_F
-  INTEGER ::  H5T_PAD_ZERO_F
-  INTEGER ::  H5T_PAD_ONE_F
-  INTEGER ::  H5T_PAD_BACKGROUND_F
-  INTEGER ::  H5T_PAD_ERROR_F
-  INTEGER ::  H5T_SGN_NONE_F
-  INTEGER ::  H5T_SGN_2_F
-  INTEGER ::  H5T_SGN_ERROR_F
-  INTEGER ::  H5T_NORM_IMPLIED_F
-  INTEGER ::  H5T_NORM_MSBSET_F
-  INTEGER ::  H5T_NORM_NONE_F
-  INTEGER ::  H5T_CSET_ASCII_F
-  INTEGER ::  H5T_CSET_UTF8_F
-  INTEGER ::  H5T_STR_NULLTERM_F
-  INTEGER ::  H5T_STR_NULLPAD_F
-  INTEGER ::  H5T_STR_SPACEPAD_F
-  INTEGER ::  H5T_STR_ERROR_F
-  INTEGER ::  H5T_DIR_ASCEND_F
-  INTEGER ::  H5T_DIR_DESCEND_F
+  INTEGER :: H5T_NO_CLASS_F
+  INTEGER :: H5T_INTEGER_F
+  INTEGER :: H5T_FLOAT_F
+  INTEGER :: H5T_TIME_F
+  INTEGER :: H5T_STRING_F
+  INTEGER :: H5T_BITFIELD_F
+  INTEGER :: H5T_OPAQUE_F
+  INTEGER :: H5T_COMPOUND_F
+  INTEGER :: H5T_REFERENCE_F
+  INTEGER :: H5T_ENUM_F
+  INTEGER :: H5T_VLEN_F
+  INTEGER :: H5T_ARRAY_F
+  INTEGER :: H5T_ORDER_LE_F
+  INTEGER :: H5T_ORDER_BE_F
+  INTEGER :: H5T_ORDER_VAX_F
+  INTEGER :: H5T_ORDER_NONE_F
+  INTEGER :: H5T_ORDER_MIXED_F
+  INTEGER :: H5T_PAD_ZERO_F
+  INTEGER :: H5T_PAD_ONE_F
+  INTEGER :: H5T_PAD_BACKGROUND_F
+  INTEGER :: H5T_PAD_ERROR_F
+  INTEGER :: H5T_SGN_NONE_F
+  INTEGER :: H5T_SGN_2_F
+  INTEGER :: H5T_SGN_ERROR_F
+  INTEGER :: H5T_NORM_IMPLIED_F
+  INTEGER :: H5T_NORM_MSBSET_F
+  INTEGER :: H5T_NORM_NONE_F
+  INTEGER :: H5T_CSET_ASCII_F
+  INTEGER :: H5T_CSET_UTF8_F
+  INTEGER :: H5T_STR_NULLTERM_F
+  INTEGER :: H5T_STR_NULLPAD_F
+  INTEGER :: H5T_STR_SPACEPAD_F
+  INTEGER :: H5T_STR_ERROR_F
+  INTEGER :: H5T_DIR_ASCEND_F
+  INTEGER :: H5T_DIR_DESCEND_F
 
   EQUIVALENCE(H5T_flags(1), H5T_NO_CLASS_F)
   EQUIVALENCE(H5T_flags(2), H5T_INTEGER_F)
@@ -741,33 +798,33 @@ MODULE H5GLOBAL
   EQUIVALENCE(H5T_flags(10), H5T_ENUM_F)
   EQUIVALENCE(H5T_flags(11), H5T_ORDER_LE_F)
   EQUIVALENCE(H5T_flags(12), H5T_ORDER_BE_F)
-  EQUIVALENCE(H5T_flags(13), H5T_ORDER_VAX_F)
-  EQUIVALENCE(H5T_flags(14), H5T_ORDER_NONE_F)
-  EQUIVALENCE(H5T_flags(15), H5T_PAD_ZERO_F)
-  EQUIVALENCE(H5T_flags(16), H5T_PAD_ONE_F)
-  EQUIVALENCE(H5T_flags(17), H5T_PAD_BACKGROUND_F)
-  EQUIVALENCE(H5T_flags(18), H5T_PAD_ERROR_F)
-  EQUIVALENCE(H5T_flags(19), H5T_SGN_NONE_F)
-  EQUIVALENCE(H5T_flags(20), H5T_SGN_2_F)
-  EQUIVALENCE(H5T_flags(21), H5T_SGN_ERROR_F)
-  EQUIVALENCE(H5T_flags(22), H5T_NORM_IMPLIED_F)
-  EQUIVALENCE(H5T_flags(23), H5T_NORM_MSBSET_F)
-  EQUIVALENCE(H5T_flags(24), H5T_NORM_NONE_F)
-  EQUIVALENCE(H5T_flags(25), H5T_CSET_ASCII_F)
-  EQUIVALENCE(H5T_flags(26), H5T_CSET_UTF8_F)
-  EQUIVALENCE(H5T_flags(27), H5T_STR_NULLTERM_F)
-  EQUIVALENCE(H5T_flags(28), H5T_STR_NULLPAD_F)
-  EQUIVALENCE(H5T_flags(29), H5T_STR_SPACEPAD_F)
-  EQUIVALENCE(H5T_flags(30), H5T_STR_ERROR_F)
-  EQUIVALENCE(H5T_flags(31), H5T_VLEN_F)
-  EQUIVALENCE(H5T_flags(32), H5T_ARRAY_F)
-  EQUIVALENCE(H5T_flags(33), H5T_DIR_ASCEND_F)
-  EQUIVALENCE(H5T_flags(34), H5T_DIR_DESCEND_F)
-
+  EQUIVALENCE(H5T_flags(13), H5T_ORDER_MIXED_F)
+  EQUIVALENCE(H5T_flags(14), H5T_ORDER_VAX_F)
+  EQUIVALENCE(H5T_flags(15), H5T_ORDER_NONE_F)
+  EQUIVALENCE(H5T_flags(16), H5T_PAD_ZERO_F)
+  EQUIVALENCE(H5T_flags(17), H5T_PAD_ONE_F)
+  EQUIVALENCE(H5T_flags(18), H5T_PAD_BACKGROUND_F)
+  EQUIVALENCE(H5T_flags(19), H5T_PAD_ERROR_F)
+  EQUIVALENCE(H5T_flags(20), H5T_SGN_NONE_F)
+  EQUIVALENCE(H5T_flags(21), H5T_SGN_2_F)
+  EQUIVALENCE(H5T_flags(22), H5T_SGN_ERROR_F)
+  EQUIVALENCE(H5T_flags(23), H5T_NORM_IMPLIED_F)
+  EQUIVALENCE(H5T_flags(24), H5T_NORM_MSBSET_F)
+  EQUIVALENCE(H5T_flags(25), H5T_NORM_NONE_F)
+  EQUIVALENCE(H5T_flags(26), H5T_CSET_ASCII_F)
+  EQUIVALENCE(H5T_flags(27), H5T_CSET_UTF8_F)
+  EQUIVALENCE(H5T_flags(28), H5T_STR_NULLTERM_F)
+  EQUIVALENCE(H5T_flags(29), H5T_STR_NULLPAD_F)
+  EQUIVALENCE(H5T_flags(30), H5T_STR_SPACEPAD_F)
+  EQUIVALENCE(H5T_flags(31), H5T_STR_ERROR_F)
+  EQUIVALENCE(H5T_flags(32), H5T_VLEN_F)
+  EQUIVALENCE(H5T_flags(33), H5T_ARRAY_F)
+  EQUIVALENCE(H5T_flags(34), H5T_DIR_ASCEND_F)
+  EQUIVALENCE(H5T_flags(35), H5T_DIR_DESCEND_F)
   !
   ! H5Z flags declaration
   !
-  INTEGER, PARAMETER :: H5Z_FLAGS_LEN = 14
+  INTEGER, PARAMETER :: H5Z_FLAGS_LEN = 20
   INTEGER H5Z_flags(H5Z_FLAGS_LEN)
   !DEC$if defined(BUILD_HDF5_DLL)
   !DEC$ATTRIBUTES DLLEXPORT :: /H5Z_FLAGS/
@@ -788,6 +845,12 @@ MODULE H5GLOBAL
   INTEGER :: H5Z_FLAG_OPTIONAL_F
   INTEGER :: H5Z_FILTER_ENCODE_ENABLED_F
   INTEGER :: H5Z_FILTER_DECODE_ENABLED_F
+  INTEGER :: H5Z_FILTER_NBIT_F
+  INTEGER :: H5Z_FILTER_SCALEOFFSET_F
+  INTEGER :: H5Z_SO_FLOAT_DSCALE_F
+  INTEGER :: H5Z_SO_FLOAT_ESCALE_F
+  INTEGER :: H5Z_SO_INT_F
+  INTEGER :: H5Z_SO_INT_MINBITS_DEFAULT_F
 
   EQUIVALENCE(H5Z_flags(1), H5Z_FILTER_ERROR_F)
   EQUIVALENCE(H5Z_flags(2), H5Z_FILTER_NONE_F)
@@ -803,7 +866,12 @@ MODULE H5GLOBAL
   EQUIVALENCE(H5Z_flags(12), H5Z_FILTER_ENCODE_ENABLED_F)
   EQUIVALENCE(H5Z_flags(13), H5Z_FILTER_DECODE_ENABLED_F)
   EQUIVALENCE(H5Z_flags(14), H5Z_FILTER_ALL_F)
-
+  EQUIVALENCE(H5Z_flags(15), H5Z_FILTER_NBIT_F)
+  EQUIVALENCE(H5Z_flags(16), H5Z_FILTER_SCALEOFFSET_F)
+  EQUIVALENCE(H5Z_flags(17), H5Z_SO_FLOAT_DSCALE_F)
+  EQUIVALENCE(H5Z_flags(18), H5Z_SO_FLOAT_ESCALE_F)
+  EQUIVALENCE(H5Z_flags(19), H5Z_SO_INT_F)
+  EQUIVALENCE(H5Z_flags(20), H5Z_SO_INT_MINBITS_DEFAULT_F)
 
   !
   ! H5 Library flags declaration
diff --git a/fortran/src/H5f90kit.c b/fortran/src/H5f90kit.c
index a809229..059685e 100644
--- a/fortran/src/H5f90kit.c
+++ b/fortran/src/H5f90kit.c
@@ -1,4 +1,12 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* H5f90kit/H5f90kit
+ * PURPOSE
+ *   Routines from HDF4 to deal with C-FORTRAN issues:
+ *
+ *   HD5f2cstring   -- convert a Fortran string to a C string
+ *   HD5packFstring -- convert a C string into a Fortran string
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,39 +19,33 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include <ctype.h>
 #include <stddef.h>
 #include "H5f90.h"
 
-
-/*
- * Routines from HDF4 to deal with C-FORTRAN issues.
- *
- * HD5f2cstring   -- convert a Fortran string to a C string
- * HD5packFstring -- convert a C string into a Fortran string
+/****if* H5f90kit/HDf2cstring
+ * NAME
+ *   HD5f2cstring -- convert a Fortran string to a C string
+ *   char * HDf2cstring(fdesc, len)
+ * INPUTS
+ *   _fcd  fdesc;    IN: Fortran string descriptor
+ *   int  len;       IN: length of Fortran string
+ * RETURNS
+ *   Pointer to the C string if success, else NULL
+ * PURPOSE
+ *   Chop off trailing blanks off of a Fortran string and
+ *   move it into a newly allocated C string.  It is up
+ *   to the user to free this string.
+ * SOURCE
  */
-
-/* ----------------------------- HDf2cstring ------------------------------ */
-/*
-NAME
-   HD5f2cstring -- convert a Fortran string to a C string
-USAGE
-   char * HDf2cstring(fdesc, len)
-   _fcd  fdesc;     IN: Fortran string descriptor
-   int  len;       IN: length of Fortran string
-RETURNS
-   Pointer to the C string if success, else NULL
-DESCRIPTION
-   Chop off trailing blanks off of a Fortran string and
-   move it into a newly allocated C string.  It is up
-   to the user to free this string.
-
----------------------------------------------------------------------------*/
 char *
 HD5f2cstring(_fcd fdesc, size_t len)
+/******/
 {
     char       *cstr;   /* C string to return */
     char       *str;    /* Pointer to FORTRAN string */
@@ -67,28 +69,29 @@ HD5f2cstring(_fcd fdesc, size_t len)
     return cstr;
 }   /* HD5f2cstring */
 
-/* ---------------------------- HD5packFstring ----------------------------- */
-/*
-NAME
-   HD5packFstring -- convert a C string into a Fortran string
-USAGE
-   int HD5packFstring(src, dest, len)
-   char * src;          IN:  source string
-   char * dest;         OUT: destination
-   int   len;          IN:  length of string
-RETURNS
-   SUCCEED / FAIL
-DESCRIPTION
-   given a NULL terminated C string 'src' convert it to
-   a space padded Fortran string 'dest' of length 'len'
-
-   This is very similar to HDc2fstr except that function does
-   it in place and this one copies.  We should probably only
-   support one of these.
-
----------------------------------------------------------------------------*/
+/****if* H5f90kit/HD5packFstring
+ * NAME
+ *   HD5packFstring -- convert a C string into a Fortran string
+ *   int HD5packFstring(src, dest, len)
+ * INPUTS
+ *   char * src;         IN:  source string
+ *   int   len;          IN:  length of string
+ * OUTPUTS
+ *   char * dest;       OUT: destination
+ * RETURNS
+ *   SUCCEED / FAIL
+ * PURPOSE
+ *   given a NULL terminated C string 'src' convert it to
+ *   a space padded Fortran string 'dest' of length 'len'
+ *
+ *   This is very similar to HDc2fstr except that function does
+ *   it in place and this one copies.  We should probably only
+ *   support one of these.
+ * SOURCE
+ */
 void
 HD5packFstring(char *src, char *dest, size_t dst_len)
+/******/
 {
     size_t src_len=HDstrlen(src);
 
@@ -99,5 +102,6 @@ HD5packFstring(char *src, char *dest, size_t dst_len)
     /* Pad out any remaining space in the FORTRAN string with ' 's */
     if(src_len<dst_len)
         HDmemset(&dest[src_len],' ',dst_len-src_len);
+
 }   /* HD5packFstring */
 
diff --git a/fortran/src/H5f90proto.h b/fortran/src/H5f90proto.h
index 3958e61..89957a4 100644
--- a/fortran/src/H5f90proto.h
+++ b/fortran/src/H5f90proto.h
@@ -27,23 +27,74 @@ H5_FCDLL void HD5packFstring(char *src, char *dest, size_t len);
 #endif /*H5_VMS*/
 
 /*
+ * Storage info struct used by H5O_info_t and H5F_info_t 
+ * interoperable with Fortran.
+ */
+typedef struct H5_ih_info_t_f {
+    hsize_t     index_size;     /* btree and/or list */
+    hsize_t     heap_size;
+} H5_ih_info_t_f;
+
+/* Information struct for object header metadata (for H5Oget_info/H5Oget_info_by_name/H5Oget_info_by_idx) 
+ *  interoperable with Fortran.
+ */
+typedef struct H5O_hdr_info_t_f {
+    int_f version;		/* Version number of header format in file */
+    int_f nmesgs;		/* Number of object header messages */
+    int_f nchunks;		/* Number of object header chunks */
+    int_f flags;                /* Object header status flags */
+    struct {
+        hsize_t total;		/* Total space for storing object header in file */
+        hsize_t meta;		/* Space within header for object header metadata information */
+        hsize_t mesg;		/* Space within header for actual message information */
+        hsize_t free;		/* Free space within object header */
+    } space;
+    struct {
+        uint64_t present;	/* Flags to indicate presence of message type in header */
+        uint64_t shared;	/* Flags to indicate message type is shared in header */
+    } mesg;
+} H5O_hdr_info_t_f;
+
+/* Information struct for object (for H5Oget_info/H5Oget_info_by_name/H5Oget_info_by_idx) 
+ *  interoperable with Fortran.
+ */
+typedef struct H5O_info_t_f {
+    unsigned long 	fileno;		/* File number that object is located in */
+    haddr_t_f 		addr;		/* Object address in file	*/
+    int_f 		type;		/* Basic object type (group, dataset, etc.) */
+    int_f 		rc;		/* Reference count of object    */
+    int_f	        atime[8];	/* Access time			*/
+    int_f		mtime[8];	/* Modification time		*/
+    int_f		ctime[8];	/* Change time			*/
+    int_f		btime[8];	/* Birth time			*/
+    hsize_t 		num_attrs;	/* # of attributes attached to object */
+    H5O_hdr_info_t_f    hdr;            /* Object header information */
+    /* Extra metadata storage for obj & attributes */
+    struct {
+        H5_ih_info_t_f   obj;             /* v1/v2 B-tree & local/fractal heap for groups, B-tree for chunked datasets */
+        H5_ih_info_t_f   attr;            /* v2 B-tree & heap for attributes */
+    } meta_size;
+} H5O_info_t_f;
+
+
+/*
  *  Functions from H5Ff.c
  */
-#   define nh5fcreate_c              H5_FC_FUNC_(h5fcreate_c, H5FCREATE_C)
-#   define nh5fflush_c               H5_FC_FUNC_(h5fflush_c, H5FFLUSH_C)
-#   define nh5fclose_c               H5_FC_FUNC_(h5fclose_c, H5FCLOSE_C)
-#   define nh5fopen_c                H5_FC_FUNC_(h5fopen_c, H5FOPEN_C)
-#   define nh5fis_hdf5_c             H5_FC_FUNC_(h5fis_hdf5_c, H5FIS_HDF5_C)
-#   define nh5fmount_c               H5_FC_FUNC_(h5fmount_c, H5FMOUNT_C)
-#   define nh5funmount_c             H5_FC_FUNC_(h5funmount_c, H5FUNMOUNT_C)
-#   define nh5freopen_c              H5_FC_FUNC_(h5freopen_c, H5FREOPEN_C)
-#   define nh5fget_create_plist_c    H5_FC_FUNC_(h5fget_create_plist_c, H5FGET_CREATE_PLIST_C)
-#   define nh5fget_access_plist_c    H5_FC_FUNC_(h5fget_access_plist_c, H5FGET_ACCESS_PLIST_C)
-#   define nh5fget_obj_count_c       H5_FC_FUNC_(h5fget_obj_count_c, H5FGET_OBJ_COUNT_C)
-#   define nh5fget_obj_ids_c         H5_FC_FUNC_(h5fget_obj_ids_c, H5FGET_OBJ_IDS_C)
-#   define nh5fget_freespace_c       H5_FC_FUNC_(h5fget_freespace_c, H5FGET_FREESPACE_C)
-#   define nh5fget_name_c            H5_FC_FUNC_(h5fget_name_c, H5FGET_NAME_C)
-#   define nh5fget_filesize_c        H5_FC_FUNC_(h5fget_filesize_c, H5FGET_FILESIZE_C)
+#define nh5fcreate_c              H5_FC_FUNC_(h5fcreate_c, H5FCREATE_C)
+#define nh5fflush_c               H5_FC_FUNC_(h5fflush_c, H5FFLUSH_C)
+#define nh5fclose_c               H5_FC_FUNC_(h5fclose_c, H5FCLOSE_C)
+#define nh5fopen_c                H5_FC_FUNC_(h5fopen_c, H5FOPEN_C)
+#define nh5fis_hdf5_c             H5_FC_FUNC_(h5fis_hdf5_c, H5FIS_HDF5_C)
+#define nh5fmount_c               H5_FC_FUNC_(h5fmount_c, H5FMOUNT_C)
+#define nh5funmount_c             H5_FC_FUNC_(h5funmount_c, H5FUNMOUNT_C)
+#define nh5freopen_c              H5_FC_FUNC_(h5freopen_c, H5FREOPEN_C)
+#define nh5fget_create_plist_c    H5_FC_FUNC_(h5fget_create_plist_c, H5FGET_CREATE_PLIST_C)
+#define nh5fget_access_plist_c    H5_FC_FUNC_(h5fget_access_plist_c, H5FGET_ACCESS_PLIST_C)
+#define nh5fget_obj_count_c       H5_FC_FUNC_(h5fget_obj_count_c, H5FGET_OBJ_COUNT_C)
+#define nh5fget_obj_ids_c         H5_FC_FUNC_(h5fget_obj_ids_c, H5FGET_OBJ_IDS_C)
+#define nh5fget_freespace_c       H5_FC_FUNC_(h5fget_freespace_c, H5FGET_FREESPACE_C)
+#define nh5fget_name_c            H5_FC_FUNC_(h5fget_name_c, H5FGET_NAME_C)
+#define nh5fget_filesize_c        H5_FC_FUNC_(h5fget_filesize_c, H5FGET_FILESIZE_C)
 
 H5_FCDLL int_f nh5fcreate_c (_fcd name, int_f *namelen, int_f *access_flags, hid_t_f *crt_prp, hid_t_f *acc_prp, hid_t_f *file_id);
 H5_FCDLL int_f nh5fopen_c (_fcd name, int_f *namelen, int_f *access_flags, hid_t_f *acc_prp, hid_t_f *file_id);
@@ -64,38 +115,38 @@ H5_FCDLL int_f nh5fget_filesize_c(hid_t_f *file_id, hsize_t_f *size);
 /*
  * Functions from H5Sf.c
  */
-#   define nh5screate_simple_c      H5_FC_FUNC_(h5screate_simple_c, H5SCREATE_SIMPLE_C)
-#   define nh5sclose_c              H5_FC_FUNC_(h5sclose_c, H5SCLOSE_C)
-#   define nh5screate_c             H5_FC_FUNC_(h5screate_c, H5SCREATE_C)
-#   define nh5scopy_c               H5_FC_FUNC_(h5scopy_c, H5SCOPY_C)
-#   define nh5sget_select_hyper_nblocks_c H5_FC_FUNC_(h5sget_select_hyper_nblocks_c, H5SGET_SELECT_HYPER_NBLOCKS_C)
-#   define nh5sget_select_hyper_blocklist_c H5_FC_FUNC_(h5sget_select_hyper_blocklist_c, H5SGET_SELECT_HYPER_BLOCKLIST_C)
-#   define nh5sget_select_elem_npoints_c H5_FC_FUNC_(h5sget_select_elem_npoints_c, H5SGET_SELECT_ELEM_NPOINTS_C)
-#   define nh5sget_select_elem_pointlist_c H5_FC_FUNC_(h5sget_select_elem_pointlist_c, H5SGET_SELECT_ELEM_POINTLIST_C)
-#   define nh5sget_select_bounds_c  H5_FC_FUNC_(h5sget_select_bounds_c, H5SGET_SELECT_BOUNDS_C)
-#   define nh5sselect_all_c         H5_FC_FUNC_(h5sselect_all_c, H5SSELECT_ALL_C)
-#   define nh5sselect_none_c        H5_FC_FUNC_(h5sselect_none_c, H5SSELECT_NONE_C)
-#   define nh5sselect_valid_c       H5_FC_FUNC_(h5sselect_valid_c, H5SSELECT_VALID_C)
-#   define nh5sget_simple_extent_npoints_c H5_FC_FUNC_(h5sget_simple_extent_npoints_c, H5SGET_SIMPLE_EXTENT_NPOINTS_C)
-#   define nh5sget_select_npoints_c H5_FC_FUNC_(h5sget_select_npoints_c, H5SGET_SELECT_NPOINTS_C)
-#   define nh5sget_simple_extent_ndims_c H5_FC_FUNC_(h5sget_simple_extent_ndims_c, H5SGET_SIMPLE_EXTENT_NDIMS_C)
-#   define nh5sget_simple_extent_type_c  H5_FC_FUNC_(h5sget_simple_extent_type_c, H5SGET_SIMPLE_EXTENT_TYPE_C)
-#   define nh5soffset_simple_c      H5_FC_FUNC_(h5soffset_simple_c, H5SOFFSET_SIMPLE_C)
-#   define nh5sset_extent_simple_c  H5_FC_FUNC_(h5sset_extent_simple_c, H5SSET_EXTENT_SIMPLE_C)
-#   define nh5sis_simple_c          H5_FC_FUNC_(h5sis_simple_c, H5SIS_SIMPLE_C)
-#   define nh5sextent_class_c       H5_FC_FUNC_(h5sextent_class_c, H5SEXTENT_CLASS_C)
-#   define nh5sget_simple_extent_dims_c H5_FC_FUNC_(h5sget_simple_extent_dims_c, H5SGET_SIMPLE_EXTENT_DIMS_C)
-#   define nh5sextent_copy_c        H5_FC_FUNC_(h5sextent_copy_c, H5SEXTENT_COPY_C)
-#   define nh5sset_extent_none_c    H5_FC_FUNC_(h5sset_extent_none_c, H5SSET_EXTENT_NONE_C)
-#   define nh5sselect_hyperslab_c   H5_FC_FUNC_(h5sselect_hyperslab_c, H5SSELECT_HYPERSLAB_C)
-#   define nh5scombine_hyperslab_c   H5_FC_FUNC_(h5scombine_hyperslab_c, H5SCOMBINE_HYPERSLAB_C)
-#   define nh5scombine_select_c   H5_FC_FUNC_(h5scombine_select_c, H5SCOMBINE_SELECT_C)
-#   define nh5sselect_select_c   H5_FC_FUNC_(h5sselect_select_c, H5SSELECT_SELECT_C)
-#   define nh5sget_select_type_c   H5_FC_FUNC_(h5sget_select_type_c, H5SGET_SELECT_TYPE_C)
-#   define nh5sselect_elements_c    H5_FC_FUNC_(h5sselect_elements_c, H5SSELECT_ELEMENTS_C)
-#   define nh5sdecode_c    H5_FC_FUNC_(h5sdecode_c, H5SDECODE_C)
-#   define nh5sencode_c    H5_FC_FUNC_(h5sencode_c, H5SENCODE_C)
-#   define nh5sextent_equal_c    H5_FC_FUNC_(h5sextent_equal_c, H5SEXTENT_EQUAL_C)
+#define nh5screate_simple_c      H5_FC_FUNC_(h5screate_simple_c, H5SCREATE_SIMPLE_C)
+#define nh5sclose_c              H5_FC_FUNC_(h5sclose_c, H5SCLOSE_C)
+#define nh5screate_c             H5_FC_FUNC_(h5screate_c, H5SCREATE_C)
+#define nh5scopy_c               H5_FC_FUNC_(h5scopy_c, H5SCOPY_C)
+#define nh5sget_select_hyper_nblocks_c H5_FC_FUNC_(h5sget_select_hyper_nblocks_c, H5SGET_SELECT_HYPER_NBLOCKS_C)
+#define nh5sget_select_hyper_blocklist_c H5_FC_FUNC_(h5sget_select_hyper_blocklist_c, H5SGET_SELECT_HYPER_BLOCKLIST_C)
+#define nh5sget_select_elem_npoints_c H5_FC_FUNC_(h5sget_select_elem_npoints_c, H5SGET_SELECT_ELEM_NPOINTS_C)
+#define nh5sget_select_elem_pointlist_c H5_FC_FUNC_(h5sget_select_elem_pointlist_c, H5SGET_SELECT_ELEM_POINTLIST_C)
+#define nh5sget_select_bounds_c  H5_FC_FUNC_(h5sget_select_bounds_c, H5SGET_SELECT_BOUNDS_C)
+#define nh5sselect_all_c         H5_FC_FUNC_(h5sselect_all_c, H5SSELECT_ALL_C)
+#define nh5sselect_none_c        H5_FC_FUNC_(h5sselect_none_c, H5SSELECT_NONE_C)
+#define nh5sselect_valid_c       H5_FC_FUNC_(h5sselect_valid_c, H5SSELECT_VALID_C)
+#define nh5sget_simple_extent_npoints_c H5_FC_FUNC_(h5sget_simple_extent_npoints_c, H5SGET_SIMPLE_EXTENT_NPOINTS_C)
+#define nh5sget_select_npoints_c H5_FC_FUNC_(h5sget_select_npoints_c, H5SGET_SELECT_NPOINTS_C)
+#define nh5sget_simple_extent_ndims_c H5_FC_FUNC_(h5sget_simple_extent_ndims_c, H5SGET_SIMPLE_EXTENT_NDIMS_C)
+#define nh5sget_simple_extent_type_c  H5_FC_FUNC_(h5sget_simple_extent_type_c, H5SGET_SIMPLE_EXTENT_TYPE_C)
+#define nh5soffset_simple_c      H5_FC_FUNC_(h5soffset_simple_c, H5SOFFSET_SIMPLE_C)
+#define nh5sset_extent_simple_c  H5_FC_FUNC_(h5sset_extent_simple_c, H5SSET_EXTENT_SIMPLE_C)
+#define nh5sis_simple_c          H5_FC_FUNC_(h5sis_simple_c, H5SIS_SIMPLE_C)
+#define nh5sextent_class_c       H5_FC_FUNC_(h5sextent_class_c, H5SEXTENT_CLASS_C)
+#define nh5sget_simple_extent_dims_c H5_FC_FUNC_(h5sget_simple_extent_dims_c, H5SGET_SIMPLE_EXTENT_DIMS_C)
+#define nh5sextent_copy_c        H5_FC_FUNC_(h5sextent_copy_c, H5SEXTENT_COPY_C)
+#define nh5sset_extent_none_c    H5_FC_FUNC_(h5sset_extent_none_c, H5SSET_EXTENT_NONE_C)
+#define nh5sselect_hyperslab_c   H5_FC_FUNC_(h5sselect_hyperslab_c, H5SSELECT_HYPERSLAB_C)
+#define nh5scombine_hyperslab_c   H5_FC_FUNC_(h5scombine_hyperslab_c, H5SCOMBINE_HYPERSLAB_C)
+#define nh5scombine_select_c   H5_FC_FUNC_(h5scombine_select_c, H5SCOMBINE_SELECT_C)
+#define nh5sselect_select_c   H5_FC_FUNC_(h5sselect_select_c, H5SSELECT_SELECT_C)
+#define nh5sget_select_type_c   H5_FC_FUNC_(h5sget_select_type_c, H5SGET_SELECT_TYPE_C)
+#define nh5sselect_elements_c    H5_FC_FUNC_(h5sselect_elements_c, H5SSELECT_ELEMENTS_C)
+#define nh5sdecode_c    H5_FC_FUNC_(h5sdecode_c, H5SDECODE_C)
+#define nh5sencode_c    H5_FC_FUNC_(h5sencode_c, H5SENCODE_C)
+#define nh5sextent_equal_c    H5_FC_FUNC_(h5sextent_equal_c, H5SEXTENT_EQUAL_C)
 
 H5_FCDLL int_f nh5screate_simple_c ( int_f *rank, hsize_t_f *dims, hsize_t_f *maxdims, hid_t_f *space_id );
 H5_FCDLL int_f nh5sclose_c ( hid_t_f *space_id );
@@ -133,103 +184,106 @@ H5_FCDLL int_f nh5sextent_equal_c ( hid_t_f * space1_id, hid_t_f *space2_id, hid
 /*
  * Functions from H5Df.c
  */
-#   define nh5dcreate_c                H5_FC_FUNC_(h5dcreate_c, H5DCREATE_C)
-#   define nh5dclose_c                 H5_FC_FUNC_(h5dclose_c, H5DCLOSE_C)
-#   define nh5dopen_c                  H5_FC_FUNC_(h5dopen_c, H5DOPEN_C)
-#   define nh5dwrite_c                 H5_FC_FUNC_(h5dwrite_c, H5DWRITE_C)
-#   define nh5dwrite_integer_s_c                 H5_FC_FUNC_(h5dwrite_integer_s_c, H5DWRITE_INTEGER_S_C)
-#   define nh5dwrite_integer_1_c                 H5_FC_FUNC_(h5dwrite_integer_1_c, H5DWRITE_INTEGER_1_C)
-#   define nh5dwrite_integer_2_c                 H5_FC_FUNC_(h5dwrite_integer_2_c, H5DWRITE_INTEGER_2_C)
-#   define nh5dwrite_integer_3_c                 H5_FC_FUNC_(h5dwrite_integer_3_c, H5DWRITE_INTEGER_3_C)
-#   define nh5dwrite_integer_4_c                 H5_FC_FUNC_(h5dwrite_integer_4_c, H5DWRITE_INTEGER_4_C)
-#   define nh5dwrite_integer_5_c                 H5_FC_FUNC_(h5dwrite_integer_5_c, H5DWRITE_INTEGER_5_C)
-#   define nh5dwrite_integer_6_c                 H5_FC_FUNC_(h5dwrite_integer_6_c, H5DWRITE_INTEGER_6_C)
-#   define nh5dwrite_integer_7_c                 H5_FC_FUNC_(h5dwrite_integer_7_c, H5DWRITE_INTEGER_7_C)
-#   define nh5dwrite_real_s_c                 H5_FC_FUNC_(h5dwrite_real_s_c, H5DWRITE_REAL_S_C)
-#   define nh5dwrite_real_1_c                 H5_FC_FUNC_(h5dwrite_real_1_c, H5DWRITE_REAL_1_C)
-#   define nh5dwrite_real_2_c                 H5_FC_FUNC_(h5dwrite_real_2_c, H5DWRITE_REAL_2_C)
-#   define nh5dwrite_real_3_c                 H5_FC_FUNC_(h5dwrite_real_3_c, H5DWRITE_REAL_3_C)
-#   define nh5dwrite_real_4_c                 H5_FC_FUNC_(h5dwrite_real_4_c, H5DWRITE_REAL_4_C)
-#   define nh5dwrite_real_5_c                 H5_FC_FUNC_(h5dwrite_real_5_c, H5DWRITE_REAL_5_C)
-#   define nh5dwrite_real_6_c                 H5_FC_FUNC_(h5dwrite_real_6_c, H5DWRITE_REAL_6_C)
-#   define nh5dwrite_real_7_c                 H5_FC_FUNC_(h5dwrite_real_7_c, H5DWRITE_REAL_7_C)
-#   define nh5dwrite_double_s_c                 H5_FC_FUNC_(h5dwrite_double_s_c, H5DWRITE_DOUBLE_S_C)
-#   define nh5dwrite_double_1_c                 H5_FC_FUNC_(h5dwrite_double_1_c, H5DWRITE_DOUBLE_1_C)
-#   define nh5dwrite_double_2_c                 H5_FC_FUNC_(h5dwrite_double_2_c, H5DWRITE_DOUBLE_2_C)
-#   define nh5dwrite_double_3_c                 H5_FC_FUNC_(h5dwrite_double_3_c, H5DWRITE_DOUBLE_3_C)
-#   define nh5dwrite_double_4_c                 H5_FC_FUNC_(h5dwrite_double_4_c, H5DWRITE_DOUBLE_4_C)
-#   define nh5dwrite_double_5_c                 H5_FC_FUNC_(h5dwrite_double_5_c, H5DWRITE_DOUBLE_5_C)
-#   define nh5dwrite_double_6_c                 H5_FC_FUNC_(h5dwrite_double_6_c, H5DWRITE_DOUBLE_6_C)
-#   define nh5dwrite_double_7_c                 H5_FC_FUNC_(h5dwrite_double_7_c, H5DWRITE_DOUBLE_7_C)
-#   define nh5dwrite_ref_obj_c         H5_FC_FUNC_(h5dwrite_ref_obj_c, H5DWRITE_REF_OBJ_C)
-#   define nh5dwrite_ref_reg_c         H5_FC_FUNC_(h5dwrite_ref_reg_c, H5DWRITE_REF_REG_C)
-#   define nh5dwritec_c                H5_FC_FUNC_(h5dwritec_c, H5DWRITEC_C)
-#   define nh5dwritec_s_c                H5_FC_FUNC_(h5dwritec_s_c, H5DWRITEC_S_C)
-#   define nh5dwritec_1_c                H5_FC_FUNC_(h5dwritec_1_c, H5DWRITEC_1_C)
-#   define nh5dwritec_2_c                H5_FC_FUNC_(h5dwritec_2_c, H5DWRITEC_2_C)
-#   define nh5dwritec_3_c                H5_FC_FUNC_(h5dwritec_3_c, H5DWRITEC_3_C)
-#   define nh5dwritec_4_c                H5_FC_FUNC_(h5dwritec_4_c, H5DWRITEC_4_C)
-#   define nh5dwritec_5_c                H5_FC_FUNC_(h5dwritec_5_c, H5DWRITEC_5_C)
-#   define nh5dwritec_6_c                H5_FC_FUNC_(h5dwritec_6_c, H5DWRITEC_6_C)
-#   define nh5dwritec_7_c                H5_FC_FUNC_(h5dwritec_7_c, H5DWRITEC_7_C)
-#   define nh5dread_c                  H5_FC_FUNC_(h5dread_c, H5DREAD_C)
-#   define nh5dread_integer_s_c                 H5_FC_FUNC_(h5dread_integer_s_c, H5DREAD_INTEGER_S_C)
-#   define nh5dread_integer_1_c                 H5_FC_FUNC_(h5dread_integer_1_c, H5DREAD_INTEGER_1_C)
-#   define nh5dread_integer_2_c                 H5_FC_FUNC_(h5dread_integer_2_c, H5DREAD_INTEGER_2_C)
-#   define nh5dread_integer_3_c                 H5_FC_FUNC_(h5dread_integer_3_c, H5DREAD_INTEGER_3_C)
-#   define nh5dread_integer_4_c                 H5_FC_FUNC_(h5dread_integer_4_c, H5DREAD_INTEGER_4_C)
-#   define nh5dread_integer_5_c                 H5_FC_FUNC_(h5dread_integer_5_c, H5DREAD_INTEGER_5_C)
-#   define nh5dread_integer_6_c                 H5_FC_FUNC_(h5dread_integer_6_c, H5DREAD_INTEGER_6_C)
-#   define nh5dread_integer_7_c                 H5_FC_FUNC_(h5dread_integer_7_c, H5DREAD_INTEGER_7_C)
-#   define nh5dread_real_s_c                 H5_FC_FUNC_(h5dread_real_s_c, H5DREAD_REAL_S_C)
-#   define nh5dread_real_1_c                 H5_FC_FUNC_(h5dread_real_1_c, H5DREAD_REAL_1_C)
-#   define nh5dread_real_2_c                 H5_FC_FUNC_(h5dread_real_2_c, H5DREAD_REAL_2_C)
-#   define nh5dread_real_3_c                 H5_FC_FUNC_(h5dread_real_3_c, H5DREAD_REAL_3_C)
-#   define nh5dread_real_4_c                 H5_FC_FUNC_(h5dread_real_4_c, H5DREAD_REAL_4_C)
-#   define nh5dread_real_5_c                 H5_FC_FUNC_(h5dread_real_5_c, H5DREAD_REAL_5_C)
-#   define nh5dread_real_6_c                 H5_FC_FUNC_(h5dread_real_6_c, H5DREAD_REAL_6_C)
-#   define nh5dread_real_7_c                 H5_FC_FUNC_(h5dread_real_7_c, H5DREAD_REAL_7_C)
-#   define nh5dread_double_s_c                 H5_FC_FUNC_(h5dread_double_s_c, H5DREAD_DOUBLE_S_C)
-#   define nh5dread_double_1_c                 H5_FC_FUNC_(h5dread_double_1_c, H5DREAD_DOUBLE_1_C)
-#   define nh5dread_double_2_c                 H5_FC_FUNC_(h5dread_double_2_c, H5DREAD_DOUBLE_2_C)
-#   define nh5dread_double_3_c                 H5_FC_FUNC_(h5dread_double_3_c, H5DREAD_DOUBLE_3_C)
-#   define nh5dread_double_4_c                 H5_FC_FUNC_(h5dread_double_4_c, H5DREAD_DOUBLE_4_C)
-#   define nh5dread_double_5_c                 H5_FC_FUNC_(h5dread_double_5_c, H5DREAD_DOUBLE_5_C)
-#   define nh5dread_double_6_c                 H5_FC_FUNC_(h5dread_double_6_c, H5DREAD_DOUBLE_6_C)
-#   define nh5dread_double_7_c                 H5_FC_FUNC_(h5dread_double_7_c, H5DREAD_DOUBLE_7_C)
-#   define nh5dread_c_b                H5_FC_FUNC_(h5dread_c_b, H5DREAD_C_B)
-#   define nh5dread_ref_reg_c          H5_FC_FUNC_(h5dread_ref_reg_c, H5DREAD_REF_REG_C)
-#   define nh5dread_ref_obj_c          H5_FC_FUNC_(h5dread_ref_obj_c, H5DREAD_REF_OBJ_C)
-#   define nh5dreadc_c                 H5_FC_FUNC_(h5dreadc_c, H5DREADC_C)
-#   define nh5dreadc_s_c                 H5_FC_FUNC_(h5dreadc_s_c, H5DREADC_S_C)
-#   define nh5dreadc_1_c                 H5_FC_FUNC_(h5dreadc_1_c, H5DREADC_1_C)
-#   define nh5dreadc_2_c                 H5_FC_FUNC_(h5dreadc_2_c, H5DREADC_2_C)
-#   define nh5dreadc_3_c                 H5_FC_FUNC_(h5dreadc_3_c, H5DREADC_3_C)
-#   define nh5dreadc_4_c                 H5_FC_FUNC_(h5dreadc_4_c, H5DREADC_4_C)
-#   define nh5dreadc_5_c                 H5_FC_FUNC_(h5dreadc_5_c, H5DREADC_5_C)
-#   define nh5dreadc_6_c                 H5_FC_FUNC_(h5dreadc_6_c, H5DREADC_6_C)
-#   define nh5dreadc_7_c                 H5_FC_FUNC_(h5dreadc_7_c, H5DREADC_7_C)
-#   define nh5dreadc_c_b               H5_FC_FUNC_(h5dreadc_c_b, H5DREADC_C_B)
-#   define nh5dget_space_c             H5_FC_FUNC_(h5dget_space_c, H5DGET_SPACE_C)
-#   define nh5dget_type_c              H5_FC_FUNC_(h5dget_type_c, H5DGET_TYPE_C)
-#   define nh5dget_create_plist_c      H5_FC_FUNC_(h5dget_create_plist_c, H5DGET_CREATE_PLIST_C)
-#   define nh5dset_extent_c            H5_FC_FUNC_(h5dset_extent_c, H5DSET_EXTENT_C)
-#   define nh5dget_storage_size_c      H5_FC_FUNC_(h5dget_storage_size_c, H5DGET_STORAGE_SIZE_C)
-#   define nh5dvlen_get_max_len_c      H5_FC_FUNC_(h5dvlen_get_max_len_c, H5DVLEN_GET_MAX_LEN_C)
-#   define nh5dwrite_vl_integer_c      H5_FC_FUNC_(h5dwrite_vl_integer_c, H5DWRITE_VL_INTEGER_C)
-#   define nh5dread_vl_integer_c       H5_FC_FUNC_(h5dread_vl_integer_c, H5DREAD_VL_INTEGER_C)
-#   define nh5dwrite_vl_real_c         H5_FC_FUNC_(h5dwrite_vl_real_c, H5DWRITE_VL_REAL_C)
-#   define nh5dread_vl_real_c          H5_FC_FUNC_(h5dread_vl_real_c, H5DREAD_VL_REAL_C)
-#   define nh5dwrite_vl_string_c       H5_FC_FUNC_(h5dwrite_vl_string_c, H5DWRITE_VL_STRING_C)
-#   define nh5dread_vl_string_c        H5_FC_FUNC_(h5dread_vl_string_c, H5DREAD_VL_STRING_C)
-#   define nh5dfillc_c                 H5_FC_FUNC_(h5dfillc_c, H5DFILLC_C)
-#   define nh5dfill_c                  H5_FC_FUNC_(h5dfill_c, H5DFILL_C)
-#   define nh5dfill_integer_c                  H5_FC_FUNC_(h5dfill_integer_c, H5DFILL_INTEGER_C)
-#   define nh5dfill_real_c                  H5_FC_FUNC_(h5dfill_real_c, H5DFILL_REAL_C)
-#   define nh5dfill_double_c                  H5_FC_FUNC_(h5dfill_double_c, H5DFILL_DOUBLE_C)
-#   define nh5dget_space_status_c      H5_FC_FUNC_(h5dget_space_status_c, H5DGET_SPACE_STATUS_C)
-#   define nh5dcreate_anon_c      H5_FC_FUNC_(h5dcreate_anon_c, H5DCREATE_ANON_C)
-#   define nh5dget_access_plist_c      H5_FC_FUNC_(h5dget_access_plist_c, H5DGET_ACCESS_PLIST_C)
+#define nh5dcreate_c                H5_FC_FUNC_(h5dcreate_c, H5DCREATE_C)
+#define nh5dclose_c                 H5_FC_FUNC_(h5dclose_c, H5DCLOSE_C)
+#define nh5dopen_c                  H5_FC_FUNC_(h5dopen_c, H5DOPEN_C)
+#define nh5dwrite_c                 H5_FC_FUNC_(h5dwrite_c, H5DWRITE_C)
+#define nh5dwrite_integer_s_c       H5_FC_FUNC_(h5dwrite_integer_s_c, H5DWRITE_INTEGER_S_C)
+#define nh5dwrite_integer_1_c       H5_FC_FUNC_(h5dwrite_integer_1_c, H5DWRITE_INTEGER_1_C)
+#define nh5dwrite_integer_2_c       H5_FC_FUNC_(h5dwrite_integer_2_c, H5DWRITE_INTEGER_2_C)
+#define nh5dwrite_integer_3_c       H5_FC_FUNC_(h5dwrite_integer_3_c, H5DWRITE_INTEGER_3_C)
+#define nh5dwrite_integer_4_c       H5_FC_FUNC_(h5dwrite_integer_4_c, H5DWRITE_INTEGER_4_C)
+#define nh5dwrite_integer_5_c       H5_FC_FUNC_(h5dwrite_integer_5_c, H5DWRITE_INTEGER_5_C)
+#define nh5dwrite_integer_6_c       H5_FC_FUNC_(h5dwrite_integer_6_c, H5DWRITE_INTEGER_6_C)
+#define nh5dwrite_integer_7_c       H5_FC_FUNC_(h5dwrite_integer_7_c, H5DWRITE_INTEGER_7_C)
+#define nh5dwrite_real_s_c          H5_FC_FUNC_(h5dwrite_real_s_c, H5DWRITE_REAL_S_C)
+#define nh5dwrite_real_1_c          H5_FC_FUNC_(h5dwrite_real_1_c, H5DWRITE_REAL_1_C)
+#define nh5dwrite_real_2_c          H5_FC_FUNC_(h5dwrite_real_2_c, H5DWRITE_REAL_2_C)
+#define nh5dwrite_real_3_c          H5_FC_FUNC_(h5dwrite_real_3_c, H5DWRITE_REAL_3_C)
+#define nh5dwrite_real_4_c          H5_FC_FUNC_(h5dwrite_real_4_c, H5DWRITE_REAL_4_C)
+#define nh5dwrite_real_5_c          H5_FC_FUNC_(h5dwrite_real_5_c, H5DWRITE_REAL_5_C)
+#define nh5dwrite_real_6_c          H5_FC_FUNC_(h5dwrite_real_6_c, H5DWRITE_REAL_6_C)
+#define nh5dwrite_real_7_c          H5_FC_FUNC_(h5dwrite_real_7_c, H5DWRITE_REAL_7_C)
+#define nh5dwrite_double_s_c        H5_FC_FUNC_(h5dwrite_double_s_c, H5DWRITE_DOUBLE_S_C)
+#define nh5dwrite_double_1_c        H5_FC_FUNC_(h5dwrite_double_1_c, H5DWRITE_DOUBLE_1_C)
+#define nh5dwrite_double_2_c        H5_FC_FUNC_(h5dwrite_double_2_c, H5DWRITE_DOUBLE_2_C)
+#define nh5dwrite_double_3_c        H5_FC_FUNC_(h5dwrite_double_3_c, H5DWRITE_DOUBLE_3_C)
+#define nh5dwrite_double_4_c        H5_FC_FUNC_(h5dwrite_double_4_c, H5DWRITE_DOUBLE_4_C)
+#define nh5dwrite_double_5_c        H5_FC_FUNC_(h5dwrite_double_5_c, H5DWRITE_DOUBLE_5_C)
+#define nh5dwrite_double_6_c        H5_FC_FUNC_(h5dwrite_double_6_c, H5DWRITE_DOUBLE_6_C)
+#define nh5dwrite_double_7_c        H5_FC_FUNC_(h5dwrite_double_7_c, H5DWRITE_DOUBLE_7_C)
+#define nh5dwrite_ref_obj_c         H5_FC_FUNC_(h5dwrite_ref_obj_c, H5DWRITE_REF_OBJ_C)
+#define nh5dwrite_ref_reg_c         H5_FC_FUNC_(h5dwrite_ref_reg_c, H5DWRITE_REF_REG_C)
+#define nh5dwritec_c                H5_FC_FUNC_(h5dwritec_c, H5DWRITEC_C)
+#define nh5dwritec_s_c                H5_FC_FUNC_(h5dwritec_s_c, H5DWRITEC_S_C)
+#define nh5dwritec_1_c                H5_FC_FUNC_(h5dwritec_1_c, H5DWRITEC_1_C)
+#define nh5dwritec_2_c                H5_FC_FUNC_(h5dwritec_2_c, H5DWRITEC_2_C)
+#define nh5dwritec_3_c                H5_FC_FUNC_(h5dwritec_3_c, H5DWRITEC_3_C)
+#define nh5dwritec_4_c                H5_FC_FUNC_(h5dwritec_4_c, H5DWRITEC_4_C)
+#define nh5dwritec_5_c                H5_FC_FUNC_(h5dwritec_5_c, H5DWRITEC_5_C)
+#define nh5dwritec_6_c                H5_FC_FUNC_(h5dwritec_6_c, H5DWRITEC_6_C)
+#define nh5dwritec_7_c                H5_FC_FUNC_(h5dwritec_7_c, H5DWRITEC_7_C)
+#define nh5dread_c                  H5_FC_FUNC_(h5dread_c, H5DREAD_C)
+#define nh5dread_integer_s_c                 H5_FC_FUNC_(h5dread_integer_s_c, H5DREAD_INTEGER_S_C)
+#define nh5dread_integer_1_c                 H5_FC_FUNC_(h5dread_integer_1_c, H5DREAD_INTEGER_1_C)
+#define nh5dread_integer_2_c                 H5_FC_FUNC_(h5dread_integer_2_c, H5DREAD_INTEGER_2_C)
+#define nh5dread_integer_3_c                 H5_FC_FUNC_(h5dread_integer_3_c, H5DREAD_INTEGER_3_C)
+#define nh5dread_integer_4_c                 H5_FC_FUNC_(h5dread_integer_4_c, H5DREAD_INTEGER_4_C)
+#define nh5dread_integer_5_c                 H5_FC_FUNC_(h5dread_integer_5_c, H5DREAD_INTEGER_5_C)
+#define nh5dread_integer_6_c                 H5_FC_FUNC_(h5dread_integer_6_c, H5DREAD_INTEGER_6_C)
+#define nh5dread_integer_7_c                 H5_FC_FUNC_(h5dread_integer_7_c, H5DREAD_INTEGER_7_C)
+#define nh5dread_real_s_c                 H5_FC_FUNC_(h5dread_real_s_c, H5DREAD_REAL_S_C)
+#define nh5dread_real_1_c                 H5_FC_FUNC_(h5dread_real_1_c, H5DREAD_REAL_1_C)
+#define nh5dread_real_2_c                 H5_FC_FUNC_(h5dread_real_2_c, H5DREAD_REAL_2_C)
+#define nh5dread_real_3_c                 H5_FC_FUNC_(h5dread_real_3_c, H5DREAD_REAL_3_C)
+#define nh5dread_real_4_c                 H5_FC_FUNC_(h5dread_real_4_c, H5DREAD_REAL_4_C)
+#define nh5dread_real_5_c                 H5_FC_FUNC_(h5dread_real_5_c, H5DREAD_REAL_5_C)
+#define nh5dread_real_6_c                 H5_FC_FUNC_(h5dread_real_6_c, H5DREAD_REAL_6_C)
+#define nh5dread_real_7_c                 H5_FC_FUNC_(h5dread_real_7_c, H5DREAD_REAL_7_C)
+#define nh5dread_double_s_c                 H5_FC_FUNC_(h5dread_double_s_c, H5DREAD_DOUBLE_S_C)
+#define nh5dread_double_1_c                 H5_FC_FUNC_(h5dread_double_1_c, H5DREAD_DOUBLE_1_C)
+#define nh5dread_double_2_c                 H5_FC_FUNC_(h5dread_double_2_c, H5DREAD_DOUBLE_2_C)
+#define nh5dread_double_3_c                 H5_FC_FUNC_(h5dread_double_3_c, H5DREAD_DOUBLE_3_C)
+#define nh5dread_double_4_c                 H5_FC_FUNC_(h5dread_double_4_c, H5DREAD_DOUBLE_4_C)
+#define nh5dread_double_5_c                 H5_FC_FUNC_(h5dread_double_5_c, H5DREAD_DOUBLE_5_C)
+#define nh5dread_double_6_c                 H5_FC_FUNC_(h5dread_double_6_c, H5DREAD_DOUBLE_6_C)
+#define nh5dread_double_7_c                 H5_FC_FUNC_(h5dread_double_7_c, H5DREAD_DOUBLE_7_C)
+#define nh5dread_c_b                H5_FC_FUNC_(h5dread_c_b, H5DREAD_C_B)
+#define nh5dread_ref_reg_c          H5_FC_FUNC_(h5dread_ref_reg_c, H5DREAD_REF_REG_C)
+#define nh5dread_ref_obj_c          H5_FC_FUNC_(h5dread_ref_obj_c, H5DREAD_REF_OBJ_C)
+#define nh5dreadc_c                 H5_FC_FUNC_(h5dreadc_c, H5DREADC_C)
+#define nh5dreadc_s_c                 H5_FC_FUNC_(h5dreadc_s_c, H5DREADC_S_C)
+#define nh5dreadc_1_c                 H5_FC_FUNC_(h5dreadc_1_c, H5DREADC_1_C)
+#define nh5dreadc_2_c                 H5_FC_FUNC_(h5dreadc_2_c, H5DREADC_2_C)
+#define nh5dreadc_3_c                 H5_FC_FUNC_(h5dreadc_3_c, H5DREADC_3_C)
+#define nh5dreadc_4_c                 H5_FC_FUNC_(h5dreadc_4_c, H5DREADC_4_C)
+#define nh5dreadc_5_c                 H5_FC_FUNC_(h5dreadc_5_c, H5DREADC_5_C)
+#define nh5dreadc_6_c                 H5_FC_FUNC_(h5dreadc_6_c, H5DREADC_6_C)
+#define nh5dreadc_7_c                 H5_FC_FUNC_(h5dreadc_7_c, H5DREADC_7_C)
+#define nh5dreadc_c_b               H5_FC_FUNC_(h5dreadc_c_b, H5DREADC_C_B)
+#define nh5dget_space_c             H5_FC_FUNC_(h5dget_space_c, H5DGET_SPACE_C)
+#define nh5dget_type_c              H5_FC_FUNC_(h5dget_type_c, H5DGET_TYPE_C)
+#define nh5dget_create_plist_c      H5_FC_FUNC_(h5dget_create_plist_c, H5DGET_CREATE_PLIST_C)
+#define nh5dset_extent_c            H5_FC_FUNC_(h5dset_extent_c, H5DSET_EXTENT_C)
+#define nh5dget_storage_size_c      H5_FC_FUNC_(h5dget_storage_size_c, H5DGET_STORAGE_SIZE_C)
+#define nh5dvlen_get_max_len_c      H5_FC_FUNC_(h5dvlen_get_max_len_c, H5DVLEN_GET_MAX_LEN_C)
+#define nh5dwrite_vl_integer_c      H5_FC_FUNC_(h5dwrite_vl_integer_c, H5DWRITE_VL_INTEGER_C)
+#define nh5dread_vl_integer_c       H5_FC_FUNC_(h5dread_vl_integer_c, H5DREAD_VL_INTEGER_C)
+#define nh5dwrite_vl_real_c         H5_FC_FUNC_(h5dwrite_vl_real_c, H5DWRITE_VL_REAL_C)
+#define nh5dread_vl_real_c          H5_FC_FUNC_(h5dread_vl_real_c, H5DREAD_VL_REAL_C)
+#define nh5dwrite_vl_string_c       H5_FC_FUNC_(h5dwrite_vl_string_c, H5DWRITE_VL_STRING_C)
+#define nh5dread_vl_string_c        H5_FC_FUNC_(h5dread_vl_string_c, H5DREAD_VL_STRING_C)
+#define nh5dfillc_c                 H5_FC_FUNC_(h5dfillc_c, H5DFILLC_C)
+#define nh5dfill_c                  H5_FC_FUNC_(h5dfill_c, H5DFILL_C)
+#define nh5dfill_integer_c                  H5_FC_FUNC_(h5dfill_integer_c, H5DFILL_INTEGER_C)
+#define nh5dfill_real_c                  H5_FC_FUNC_(h5dfill_real_c, H5DFILL_REAL_C)
+#define nh5dfill_double_c                  H5_FC_FUNC_(h5dfill_double_c, H5DFILL_DOUBLE_C)
+#define nh5dget_space_status_c    H5_FC_FUNC_(h5dget_space_status_c, H5DGET_SPACE_STATUS_C)
+#define nh5dcreate_anon_c         H5_FC_FUNC_(h5dcreate_anon_c, H5DCREATE_ANON_C)
+#define nh5dwrite_f_c             H5_FC_FUNC_(h5dwrite_f_c, H5DWRITE_F_C)
+#define nh5dread_f_c              H5_FC_FUNC_(h5dread_f_c, H5DREAD_F_C)
+#define nh5dget_access_plist_c    H5_FC_FUNC_(h5dget_access_plist_c, H5DGET_ACCESS_PLIST_C)
+#define nh5dvlen_reclaim_c        H5_FC_FUNC_(h5dvlen_reclaim_c, H5DVLEN_RECLAIM_C)
 
 
 H5_FCDLL int_f nh5dcreate_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id, hid_t_f *space_id,
@@ -343,28 +397,32 @@ H5_FCDLL int_f nh5dfill_double_c(void * fill_value, hid_t_f *fill_type_id, hid_t
 H5_FCDLL int_f nh5dget_space_status_c ( hid_t_f *dset_id, int_f *flag);
 H5_FCDLL int_f nh5dcreate_anon_c (hid_t_f *loc_id, hid_t_f *type_id, hid_t_f *space_id,
 				  hid_t_f *dcpl_id, hid_t_f *dapl_id, hid_t_f *dset_id);
-
+H5_FCDLL int_f nh5dwrite_f_c (hid_t_f *dset_id, hid_t_f *mem_type_id, hid_t_f *mem_space_id, 
+				   hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf);
+H5_FCDLL int_f nh5dread_f_c ( hid_t_f *dset_id ,  hid_t_f *mem_type_id, hid_t_f *mem_space_id, 
+				   hid_t_f *file_space_id, hid_t_f *xfer_prp, void *buf);
+H5_FCDLL int_f nh5dvlen_reclaim_c (hid_t_f *type_id ,  hid_t_f *space_id, hid_t_f *plist_id, void *buf);
 /*
  * Functions from H5Gf.c
  */
-#   define nh5gcreate_c      H5_FC_FUNC_(h5gcreate_c, H5GCREATE_C)
-#   define nh5gclose_c       H5_FC_FUNC_(h5gclose_c, H5GCLOSE_C)
-#   define nh5gopen_c        H5_FC_FUNC_(h5gopen_c, H5GOPEN_C)
-#   define nh5gget_obj_info_idx_c H5_FC_FUNC_(h5gget_obj_info_idx_c, H5GGET_OBJ_INFO_IDX_C)
-#   define nh5gn_members_c   H5_FC_FUNC_(h5gn_members_c, H5GN_MEMBERS_C)
-#   define nh5glink_c        H5_FC_FUNC_(h5glink_c, H5GLINK_C)
-#   define nh5glink2_c        H5_FC_FUNC_(h5glink2_c, H5GLINK2_C)
-#   define nh5gunlink_c      H5_FC_FUNC_(h5gunlink_c, H5GUNLINK_C)
-#   define nh5gmove_c        H5_FC_FUNC_(h5gmove_c, H5GMOVE_C)
-#   define nh5gmove2_c        H5_FC_FUNC_(h5gmove2_c, H5GMOVE2_C)
-#   define nh5gget_linkval_c   H5_FC_FUNC_(h5gget_linkval_c, H5GGET_LINKVAL_C)
-#   define nh5gset_comment_c   H5_FC_FUNC_(h5gset_comment_c, H5GSET_COMMENT_C)
-#   define nh5gget_comment_c   H5_FC_FUNC_(h5gget_comment_c, H5GGET_COMMENT_C)
-#   define nh5gcreate_anon_c      H5_FC_FUNC_(h5gcreate_anon_c, H5GCREATE_ANON_C)
-#   define nh5gget_create_plist_c H5_FC_FUNC_(h5gget_create_plist_c, H5GGET_CREATE_PLIST_C)
-#   define nh5gget_info_c  H5_FC_FUNC_(h5gget_info_c, H5GGET_INFO_C)
-#   define nh5gget_info_by_idx_c  H5_FC_FUNC_(h5gget_info_by_idx_c, H5GGET_INFO_BY_IDX_C)
-#   define nh5gget_info_by_name_c  H5_FC_FUNC_(h5gget_info_by_name_c, H5GGET_INFO_BY_NAME_C)
+#define nh5gcreate_c      H5_FC_FUNC_(h5gcreate_c, H5GCREATE_C)
+#define nh5gclose_c       H5_FC_FUNC_(h5gclose_c, H5GCLOSE_C)
+#define nh5gopen_c        H5_FC_FUNC_(h5gopen_c, H5GOPEN_C)
+#define nh5gget_obj_info_idx_c H5_FC_FUNC_(h5gget_obj_info_idx_c, H5GGET_OBJ_INFO_IDX_C)
+#define nh5gn_members_c   H5_FC_FUNC_(h5gn_members_c, H5GN_MEMBERS_C)
+#define nh5glink_c        H5_FC_FUNC_(h5glink_c, H5GLINK_C)
+#define nh5glink2_c        H5_FC_FUNC_(h5glink2_c, H5GLINK2_C)
+#define nh5gunlink_c      H5_FC_FUNC_(h5gunlink_c, H5GUNLINK_C)
+#define nh5gmove_c        H5_FC_FUNC_(h5gmove_c, H5GMOVE_C)
+#define nh5gmove2_c        H5_FC_FUNC_(h5gmove2_c, H5GMOVE2_C)
+#define nh5gget_linkval_c   H5_FC_FUNC_(h5gget_linkval_c, H5GGET_LINKVAL_C)
+#define nh5gset_comment_c   H5_FC_FUNC_(h5gset_comment_c, H5GSET_COMMENT_C)
+#define nh5gget_comment_c   H5_FC_FUNC_(h5gget_comment_c, H5GGET_COMMENT_C)
+#define nh5gcreate_anon_c      H5_FC_FUNC_(h5gcreate_anon_c, H5GCREATE_ANON_C)
+#define nh5gget_create_plist_c H5_FC_FUNC_(h5gget_create_plist_c, H5GGET_CREATE_PLIST_C)
+#define nh5gget_info_c  H5_FC_FUNC_(h5gget_info_c, H5GGET_INFO_C)
+#define nh5gget_info_by_idx_c  H5_FC_FUNC_(h5gget_info_by_idx_c, H5GGET_INFO_BY_IDX_C)
+#define nh5gget_info_by_name_c  H5_FC_FUNC_(h5gget_info_by_name_c, H5GGET_INFO_BY_NAME_C)
 
 
 H5_FCDLL int_f nh5gcreate_c (hid_t_f *loc_id, _fcd name, int_f *namelen, size_t_f *size_hint,  hid_t_f *grp_id,
@@ -393,100 +451,102 @@ H5_FCDLL int_f nh5gget_info_by_name_c(hid_t_f *loc_id, _fcd group_name, size_t_f
 /*
  * Functions from H5Af.c
  */
-#   define nh5acreate_c      H5_FC_FUNC_(h5acreate_c, H5ACREATE_C)
-#   define nh5aclose_c       H5_FC_FUNC_(h5aclose_c, H5ACLOSE_C)
-#   define nh5aopen_name_c   H5_FC_FUNC_(h5aopen_name_c, H5AOPEN_NAME_C)
-#   define nh5awrite_c       H5_FC_FUNC_(h5awrite_c, H5AWRITE_C)
-#   define nh5awrite_integer_s_c       H5_FC_FUNC_(h5awrite_integer_s_c, H5AWRITE_INTEGER_S_C)
-#   define nh5awrite_integer_1_c       H5_FC_FUNC_(h5awrite_integer_1_c, H5AWRITE_INTEGER_1_C)
-#   define nh5awrite_integer_2_c       H5_FC_FUNC_(h5awrite_integer_2_c, H5AWRITE_INTEGER_2_C)
-#   define nh5awrite_integer_3_c       H5_FC_FUNC_(h5awrite_integer_3_c, H5AWRITE_INTEGER_3_C)
-#   define nh5awrite_integer_4_c       H5_FC_FUNC_(h5awrite_integer_4_c, H5AWRITE_INTEGER_4_C)
-#   define nh5awrite_integer_5_c       H5_FC_FUNC_(h5awrite_integer_5_c, H5AWRITE_INTEGER_5_C)
-#   define nh5awrite_integer_6_c       H5_FC_FUNC_(h5awrite_integer_6_c, H5AWRITE_INTEGER_6_C)
-#   define nh5awrite_integer_7_c       H5_FC_FUNC_(h5awrite_integer_7_c, H5AWRITE_INTEGER_7_C)
-#   define nh5awrite_real_s_c       H5_FC_FUNC_(h5awrite_real_s_c, H5AWRITE_REAL_S_C)
-#   define nh5awrite_real_1_c       H5_FC_FUNC_(h5awrite_real_1_c, H5AWRITE_REAL_1_C)
-#   define nh5awrite_real_2_c       H5_FC_FUNC_(h5awrite_real_2_c, H5AWRITE_REAL_2_C)
-#   define nh5awrite_real_3_c       H5_FC_FUNC_(h5awrite_real_3_c, H5AWRITE_REAL_3_C)
-#   define nh5awrite_real_4_c       H5_FC_FUNC_(h5awrite_real_4_c, H5AWRITE_REAL_4_C)
-#   define nh5awrite_real_5_c       H5_FC_FUNC_(h5awrite_real_5_c, H5AWRITE_REAL_5_C)
-#   define nh5awrite_real_6_c       H5_FC_FUNC_(h5awrite_real_6_c, H5AWRITE_REAL_6_C)
-#   define nh5awrite_real_7_c       H5_FC_FUNC_(h5awrite_real_7_c, H5AWRITE_REAL_7_C)
-#   define nh5awrite_double_s_c       H5_FC_FUNC_(h5awrite_double_s_c, H5AWRITE_DOUBLE_S_C)
-#   define nh5awrite_double_1_c       H5_FC_FUNC_(h5awrite_double_1_c, H5AWRITE_DOUBLE_1_C)
-#   define nh5awrite_double_2_c       H5_FC_FUNC_(h5awrite_double_2_c, H5AWRITE_DOUBLE_2_C)
-#   define nh5awrite_double_3_c       H5_FC_FUNC_(h5awrite_double_3_c, H5AWRITE_DOUBLE_3_C)
-#   define nh5awrite_double_4_c       H5_FC_FUNC_(h5awrite_double_4_c, H5AWRITE_DOUBLE_4_C)
-#   define nh5awrite_double_5_c       H5_FC_FUNC_(h5awrite_double_5_c, H5AWRITE_DOUBLE_5_C)
-#   define nh5awrite_double_6_c       H5_FC_FUNC_(h5awrite_double_6_c, H5AWRITE_DOUBLE_6_C)
-#   define nh5awrite_double_7_c       H5_FC_FUNC_(h5awrite_double_7_c, H5AWRITE_DOUBLE_7_C)
-#   define nh5awritec_c        H5_FC_FUNC_(h5awritec_c, H5AWRITEC_C)
-#   define nh5awritec_s_c      H5_FC_FUNC_(h5awritec_s_c, H5AWRITEC_S_C)
-#   define nh5awritec_1_c      H5_FC_FUNC_(h5awritec_1_c, H5AWRITEC_1_C)
-#   define nh5awritec_2_c      H5_FC_FUNC_(h5awritec_2_c, H5AWRITEC_2_C)
-#   define nh5awritec_3_c      H5_FC_FUNC_(h5awritec_3_c, H5AWRITEC_3_C)
-#   define nh5awritec_4_c      H5_FC_FUNC_(h5awritec_4_c, H5AWRITEC_4_C)
-#   define nh5awritec_5_c      H5_FC_FUNC_(h5awritec_5_c, H5AWRITEC_5_C)
-#   define nh5awritec_6_c      H5_FC_FUNC_(h5awritec_6_c, H5AWRITEC_6_C)
-#   define nh5awritec_7_c      H5_FC_FUNC_(h5awritec_7_c, H5AWRITEC_7_C)
-#   define nh5aread_c        H5_FC_FUNC_(h5aread_c, H5AREAD_C)
-#   define nh5aread_integer_s_c        H5_FC_FUNC_(h5aread_integer_s_c, H5AREAD_INTEGER_S_C)
-#   define nh5aread_integer_1_c        H5_FC_FUNC_(h5aread_integer_1_c, H5AREAD_INTEGER_1_C)
-#   define nh5aread_integer_2_c        H5_FC_FUNC_(h5aread_integer_2_c, H5AREAD_INTEGER_2_C)
-#   define nh5aread_integer_3_c        H5_FC_FUNC_(h5aread_integer_3_c, H5AREAD_INTEGER_3_C)
-#   define nh5aread_integer_4_c        H5_FC_FUNC_(h5aread_integer_4_c, H5AREAD_INTEGER_4_C)
-#   define nh5aread_integer_5_c        H5_FC_FUNC_(h5aread_integer_5_c, H5AREAD_INTEGER_5_C)
-#   define nh5aread_integer_6_c        H5_FC_FUNC_(h5aread_integer_6_c, H5AREAD_INTEGER_6_C)
-#   define nh5aread_integer_7_c        H5_FC_FUNC_(h5aread_integer_7_c, H5AREAD_INTEGER_7_C)
-#   define nh5aread_real_s_c        H5_FC_FUNC_(h5aread_real_s_c, H5AREAD_REAL_S_C)
-#   define nh5aread_real_1_c        H5_FC_FUNC_(h5aread_real_1_c, H5AREAD_REAL_1_C)
-#   define nh5aread_real_2_c        H5_FC_FUNC_(h5aread_real_2_c, H5AREAD_REAL_2_C)
-#   define nh5aread_real_3_c        H5_FC_FUNC_(h5aread_real_3_c, H5AREAD_REAL_3_C)
-#   define nh5aread_real_4_c        H5_FC_FUNC_(h5aread_real_4_c, H5AREAD_REAL_4_C)
-#   define nh5aread_real_5_c        H5_FC_FUNC_(h5aread_real_5_c, H5AREAD_REAL_5_C)
-#   define nh5aread_real_6_c        H5_FC_FUNC_(h5aread_real_6_c, H5AREAD_REAL_6_C)
-#   define nh5aread_real_7_c        H5_FC_FUNC_(h5aread_real_7_c, H5AREAD_REAL_7_C)
-#   define nh5aread_double_s_c        H5_FC_FUNC_(h5aread_double_s_c, H5AREAD_DOUBLE_S_C)
-#   define nh5aread_double_1_c        H5_FC_FUNC_(h5aread_double_1_c, H5AREAD_DOUBLE_1_C)
-#   define nh5aread_double_2_c        H5_FC_FUNC_(h5aread_double_2_c, H5AREAD_DOUBLE_2_C)
-#   define nh5aread_double_3_c        H5_FC_FUNC_(h5aread_double_3_c, H5AREAD_DOUBLE_3_C)
-#   define nh5aread_double_4_c        H5_FC_FUNC_(h5aread_double_4_c, H5AREAD_DOUBLE_4_C)
-#   define nh5aread_double_5_c        H5_FC_FUNC_(h5aread_double_5_c, H5AREAD_DOUBLE_5_C)
-#   define nh5aread_double_6_c        H5_FC_FUNC_(h5aread_double_6_c, H5AREAD_DOUBLE_6_C)
-#   define nh5aread_double_7_c        H5_FC_FUNC_(h5aread_double_7_c, H5AREAD_DOUBLE_7_C)
-#   define nh5areadc_c       H5_FC_FUNC_(h5areadc_c, H5AREADC_C)
-#   define nh5areadc_s_c       H5_FC_FUNC_(h5areadc_s_c, H5AREADC_S_C)
-#   define nh5areadc_1_c       H5_FC_FUNC_(h5areadc_1_c, H5AREADC_1_C)
-#   define nh5areadc_2_c       H5_FC_FUNC_(h5areadc_2_c, H5AREADC_2_C)
-#   define nh5areadc_3_c       H5_FC_FUNC_(h5areadc_3_c, H5AREADC_3_C)
-#   define nh5areadc_4_c       H5_FC_FUNC_(h5areadc_4_c, H5AREADC_4_C)
-#   define nh5areadc_5_c       H5_FC_FUNC_(h5areadc_5_c, H5AREADC_5_C)
-#   define nh5areadc_6_c       H5_FC_FUNC_(h5areadc_6_c, H5AREADC_6_C)
-#   define nh5areadc_7_c       H5_FC_FUNC_(h5areadc_7_c, H5AREADC_7_C)
-#   define nh5aget_name_c    H5_FC_FUNC_(h5aget_name_c, H5AGET_NAME_C)
-#   define nh5aopen_idx_c    H5_FC_FUNC_(h5aopen_idx_c, H5AOPEN_IDX_C)
-#   define nh5aget_space_c   H5_FC_FUNC_(h5aget_space_c, H5AGET_SPACE_C)
-#   define nh5aget_type_c    H5_FC_FUNC_(h5aget_type_c, H5AGET_TYPE_C)
-#   define nh5aget_num_attrs_c H5_FC_FUNC_(h5aget_num_attrs_c, H5AGET_NUM_ATTRS_C)
-#   define nh5adelete_c      H5_FC_FUNC_(h5adelete_c, H5ADELETE_C)
-#   define nh5aget_storage_size_c H5_FC_FUNC_(h5aget_storage_size_c, H5AGET_STORAGE_SIZE_C)
-#   define nh5arename_by_name_c H5_FC_FUNC_(h5arename_by_name_c, H5ARENAME_BY_NAME_C)
-#   define nh5aopen_c H5_FC_FUNC_(h5aopen_c, H5AOPEN_C)
-#   define nh5adelete_by_name_c H5_FC_FUNC_(h5adelete_by_name_c,H5ADELETE_BY_NAME_C)
-#   define nh5adelete_by_idx_c H5_FC_FUNC_(h5adelete_by_idx_c,H5ADELETE_BY_IDX_C)
-#   define nh5aget_name_by_idx_c H5_FC_FUNC_(h5aget_name_by_idx_c,H5AGET_NAME_BY_IDX_C)
-#   define nh5aget_create_plist_c H5_FC_FUNC_(h5aget_create_plist_c,H5AGET_CREATE_PLIST_C)
-#   define nh5aopen_by_idx_c H5_FC_FUNC_(h5aopen_by_idx_c,H5AOPEN_BY_IDX_C)
-#   define nh5aget_info_c H5_FC_FUNC_(h5aget_info_c,H5AGET_INFO_C)
-#   define nh5aget_info_by_idx_c H5_FC_FUNC_(h5aget_info_by_idx_c,H5AGET_INFO_BY_IDX_C)
-#   define nh5aget_info_by_name_c H5_FC_FUNC_(h5aget_info_by_name_c,H5AGET_INFO_BY_NAME_C)
-#   define nh5aget_info_by_name_c H5_FC_FUNC_(h5aget_info_by_name_c,H5AGET_INFO_BY_NAME_C)
-#   define nh5acreate_by_name_c H5_FC_FUNC_(h5acreate_by_name_c,H5ACREATE_BY_NAME_C)
-#   define nh5aexists_c H5_FC_FUNC_(h5aexists_c,H5AEXISTS_C)
-#   define nh5aexists_by_name_c H5_FC_FUNC_(h5aexists_by_name_c,H5AEXISTS_BY_NAME_C)
-#   define nh5aopen_by_name_c H5_FC_FUNC_(h5aopen_by_name_c,H5AOPEN_BY_NAME_C)
-#   define nh5arename_c H5_FC_FUNC_(h5arename_c,H5ARENAME_C)
+#define nh5acreate_c      H5_FC_FUNC_(h5acreate_c, H5ACREATE_C)
+#define nh5aclose_c       H5_FC_FUNC_(h5aclose_c, H5ACLOSE_C)
+#define nh5aopen_name_c   H5_FC_FUNC_(h5aopen_name_c, H5AOPEN_NAME_C)
+#define nh5awrite_c       H5_FC_FUNC_(h5awrite_c, H5AWRITE_C)
+#define nh5awrite_integer_s_c       H5_FC_FUNC_(h5awrite_integer_s_c, H5AWRITE_INTEGER_S_C)
+#define nh5awrite_integer_1_c       H5_FC_FUNC_(h5awrite_integer_1_c, H5AWRITE_INTEGER_1_C)
+#define nh5awrite_integer_2_c       H5_FC_FUNC_(h5awrite_integer_2_c, H5AWRITE_INTEGER_2_C)
+#define nh5awrite_integer_3_c       H5_FC_FUNC_(h5awrite_integer_3_c, H5AWRITE_INTEGER_3_C)
+#define nh5awrite_integer_4_c       H5_FC_FUNC_(h5awrite_integer_4_c, H5AWRITE_INTEGER_4_C)
+#define nh5awrite_integer_5_c       H5_FC_FUNC_(h5awrite_integer_5_c, H5AWRITE_INTEGER_5_C)
+#define nh5awrite_integer_6_c       H5_FC_FUNC_(h5awrite_integer_6_c, H5AWRITE_INTEGER_6_C)
+#define nh5awrite_integer_7_c       H5_FC_FUNC_(h5awrite_integer_7_c, H5AWRITE_INTEGER_7_C)
+#define nh5awrite_real_s_c       H5_FC_FUNC_(h5awrite_real_s_c, H5AWRITE_REAL_S_C)
+#define nh5awrite_real_1_c       H5_FC_FUNC_(h5awrite_real_1_c, H5AWRITE_REAL_1_C)
+#define nh5awrite_real_2_c       H5_FC_FUNC_(h5awrite_real_2_c, H5AWRITE_REAL_2_C)
+#define nh5awrite_real_3_c       H5_FC_FUNC_(h5awrite_real_3_c, H5AWRITE_REAL_3_C)
+#define nh5awrite_real_4_c       H5_FC_FUNC_(h5awrite_real_4_c, H5AWRITE_REAL_4_C)
+#define nh5awrite_real_5_c       H5_FC_FUNC_(h5awrite_real_5_c, H5AWRITE_REAL_5_C)
+#define nh5awrite_real_6_c       H5_FC_FUNC_(h5awrite_real_6_c, H5AWRITE_REAL_6_C)
+#define nh5awrite_real_7_c       H5_FC_FUNC_(h5awrite_real_7_c, H5AWRITE_REAL_7_C)
+#define nh5awrite_double_s_c       H5_FC_FUNC_(h5awrite_double_s_c, H5AWRITE_DOUBLE_S_C)
+#define nh5awrite_double_1_c       H5_FC_FUNC_(h5awrite_double_1_c, H5AWRITE_DOUBLE_1_C)
+#define nh5awrite_double_2_c       H5_FC_FUNC_(h5awrite_double_2_c, H5AWRITE_DOUBLE_2_C)
+#define nh5awrite_double_3_c       H5_FC_FUNC_(h5awrite_double_3_c, H5AWRITE_DOUBLE_3_C)
+#define nh5awrite_double_4_c       H5_FC_FUNC_(h5awrite_double_4_c, H5AWRITE_DOUBLE_4_C)
+#define nh5awrite_double_5_c       H5_FC_FUNC_(h5awrite_double_5_c, H5AWRITE_DOUBLE_5_C)
+#define nh5awrite_double_6_c       H5_FC_FUNC_(h5awrite_double_6_c, H5AWRITE_DOUBLE_6_C)
+#define nh5awrite_double_7_c       H5_FC_FUNC_(h5awrite_double_7_c, H5AWRITE_DOUBLE_7_C)
+#define nh5awritec_c        H5_FC_FUNC_(h5awritec_c, H5AWRITEC_C)
+#define nh5awritec_s_c      H5_FC_FUNC_(h5awritec_s_c, H5AWRITEC_S_C)
+#define nh5awritec_1_c      H5_FC_FUNC_(h5awritec_1_c, H5AWRITEC_1_C)
+#define nh5awritec_2_c      H5_FC_FUNC_(h5awritec_2_c, H5AWRITEC_2_C)
+#define nh5awritec_3_c      H5_FC_FUNC_(h5awritec_3_c, H5AWRITEC_3_C)
+#define nh5awritec_4_c      H5_FC_FUNC_(h5awritec_4_c, H5AWRITEC_4_C)
+#define nh5awritec_5_c      H5_FC_FUNC_(h5awritec_5_c, H5AWRITEC_5_C)
+#define nh5awritec_6_c      H5_FC_FUNC_(h5awritec_6_c, H5AWRITEC_6_C)
+#define nh5awritec_7_c      H5_FC_FUNC_(h5awritec_7_c, H5AWRITEC_7_C)
+#define nh5awrite_f_c       H5_FC_FUNC_(h5awrite_f_c, H5AWRITE_F_C)
+#define nh5aread_c                 H5_FC_FUNC_(h5aread_c, H5AREAD_C)
+#define nh5aread_integer_s_c        H5_FC_FUNC_(h5aread_integer_s_c, H5AREAD_INTEGER_S_C)
+#define nh5aread_integer_1_c        H5_FC_FUNC_(h5aread_integer_1_c, H5AREAD_INTEGER_1_C)
+#define nh5aread_integer_2_c        H5_FC_FUNC_(h5aread_integer_2_c, H5AREAD_INTEGER_2_C)
+#define nh5aread_integer_3_c        H5_FC_FUNC_(h5aread_integer_3_c, H5AREAD_INTEGER_3_C)
+#define nh5aread_integer_4_c        H5_FC_FUNC_(h5aread_integer_4_c, H5AREAD_INTEGER_4_C)
+#define nh5aread_integer_5_c        H5_FC_FUNC_(h5aread_integer_5_c, H5AREAD_INTEGER_5_C)
+#define nh5aread_integer_6_c        H5_FC_FUNC_(h5aread_integer_6_c, H5AREAD_INTEGER_6_C)
+#define nh5aread_integer_7_c        H5_FC_FUNC_(h5aread_integer_7_c, H5AREAD_INTEGER_7_C)
+#define nh5aread_real_s_c        H5_FC_FUNC_(h5aread_real_s_c, H5AREAD_REAL_S_C)
+#define nh5aread_real_1_c        H5_FC_FUNC_(h5aread_real_1_c, H5AREAD_REAL_1_C)
+#define nh5aread_real_2_c        H5_FC_FUNC_(h5aread_real_2_c, H5AREAD_REAL_2_C)
+#define nh5aread_real_3_c        H5_FC_FUNC_(h5aread_real_3_c, H5AREAD_REAL_3_C)
+#define nh5aread_real_4_c        H5_FC_FUNC_(h5aread_real_4_c, H5AREAD_REAL_4_C)
+#define nh5aread_real_5_c        H5_FC_FUNC_(h5aread_real_5_c, H5AREAD_REAL_5_C)
+#define nh5aread_real_6_c        H5_FC_FUNC_(h5aread_real_6_c, H5AREAD_REAL_6_C)
+#define nh5aread_real_7_c        H5_FC_FUNC_(h5aread_real_7_c, H5AREAD_REAL_7_C)
+#define nh5aread_double_s_c        H5_FC_FUNC_(h5aread_double_s_c, H5AREAD_DOUBLE_S_C)
+#define nh5aread_double_1_c        H5_FC_FUNC_(h5aread_double_1_c, H5AREAD_DOUBLE_1_C)
+#define nh5aread_double_2_c        H5_FC_FUNC_(h5aread_double_2_c, H5AREAD_DOUBLE_2_C)
+#define nh5aread_double_3_c        H5_FC_FUNC_(h5aread_double_3_c, H5AREAD_DOUBLE_3_C)
+#define nh5aread_double_4_c        H5_FC_FUNC_(h5aread_double_4_c, H5AREAD_DOUBLE_4_C)
+#define nh5aread_double_5_c        H5_FC_FUNC_(h5aread_double_5_c, H5AREAD_DOUBLE_5_C)
+#define nh5aread_double_6_c        H5_FC_FUNC_(h5aread_double_6_c, H5AREAD_DOUBLE_6_C)
+#define nh5aread_double_7_c        H5_FC_FUNC_(h5aread_double_7_c, H5AREAD_DOUBLE_7_C)
+#define nh5areadc_c       H5_FC_FUNC_(h5areadc_c, H5AREADC_C)
+#define nh5areadc_s_c       H5_FC_FUNC_(h5areadc_s_c, H5AREADC_S_C)
+#define nh5areadc_1_c       H5_FC_FUNC_(h5areadc_1_c, H5AREADC_1_C)
+#define nh5areadc_2_c       H5_FC_FUNC_(h5areadc_2_c, H5AREADC_2_C)
+#define nh5areadc_3_c       H5_FC_FUNC_(h5areadc_3_c, H5AREADC_3_C)
+#define nh5areadc_4_c       H5_FC_FUNC_(h5areadc_4_c, H5AREADC_4_C)
+#define nh5areadc_5_c       H5_FC_FUNC_(h5areadc_5_c, H5AREADC_5_C)
+#define nh5areadc_6_c       H5_FC_FUNC_(h5areadc_6_c, H5AREADC_6_C)
+#define nh5areadc_7_c       H5_FC_FUNC_(h5areadc_7_c, H5AREADC_7_C)
+#define nh5aread_f_c        H5_FC_FUNC_(h5aread_f_c, H5AREAD_F_C)
+#define nh5aget_name_c    H5_FC_FUNC_(h5aget_name_c, H5AGET_NAME_C)
+#define nh5aopen_idx_c    H5_FC_FUNC_(h5aopen_idx_c, H5AOPEN_IDX_C)
+#define nh5aget_space_c   H5_FC_FUNC_(h5aget_space_c, H5AGET_SPACE_C)
+#define nh5aget_type_c    H5_FC_FUNC_(h5aget_type_c, H5AGET_TYPE_C)
+#define nh5aget_num_attrs_c H5_FC_FUNC_(h5aget_num_attrs_c, H5AGET_NUM_ATTRS_C)
+#define nh5adelete_c      H5_FC_FUNC_(h5adelete_c, H5ADELETE_C)
+#define nh5aget_storage_size_c H5_FC_FUNC_(h5aget_storage_size_c, H5AGET_STORAGE_SIZE_C)
+#define nh5arename_by_name_c H5_FC_FUNC_(h5arename_by_name_c, H5ARENAME_BY_NAME_C)
+#define nh5aopen_c H5_FC_FUNC_(h5aopen_c, H5AOPEN_C)
+#define nh5adelete_by_name_c H5_FC_FUNC_(h5adelete_by_name_c,H5ADELETE_BY_NAME_C)
+#define nh5adelete_by_idx_c H5_FC_FUNC_(h5adelete_by_idx_c,H5ADELETE_BY_IDX_C)
+#define nh5aget_name_by_idx_c H5_FC_FUNC_(h5aget_name_by_idx_c,H5AGET_NAME_BY_IDX_C)
+#define nh5aget_create_plist_c H5_FC_FUNC_(h5aget_create_plist_c,H5AGET_CREATE_PLIST_C)
+#define nh5aopen_by_idx_c H5_FC_FUNC_(h5aopen_by_idx_c,H5AOPEN_BY_IDX_C)
+#define nh5aget_info_c H5_FC_FUNC_(h5aget_info_c,H5AGET_INFO_C)
+#define nh5aget_info_by_idx_c H5_FC_FUNC_(h5aget_info_by_idx_c,H5AGET_INFO_BY_IDX_C)
+#define nh5aget_info_by_name_c H5_FC_FUNC_(h5aget_info_by_name_c,H5AGET_INFO_BY_NAME_C)
+#define nh5aget_info_by_name_c H5_FC_FUNC_(h5aget_info_by_name_c,H5AGET_INFO_BY_NAME_C)
+#define nh5acreate_by_name_c H5_FC_FUNC_(h5acreate_by_name_c,H5ACREATE_BY_NAME_C)
+#define nh5aexists_c H5_FC_FUNC_(h5aexists_c,H5AEXISTS_C)
+#define nh5aexists_by_name_c H5_FC_FUNC_(h5aexists_by_name_c,H5AEXISTS_BY_NAME_C)
+#define nh5aopen_by_name_c H5_FC_FUNC_(h5aopen_by_name_c,H5AOPEN_BY_NAME_C)
+#define nh5arename_c H5_FC_FUNC_(h5arename_c,H5ARENAME_C)
 
 H5_FCDLL int_f nh5acreate_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *type_id, hid_t_f *space_id, hid_t_f *crt_prp, hid_t_f *aapl,  hid_t_f *attr_id);
 H5_FCDLL int_f nh5aopen_name_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen, hid_t_f *attr_id);
@@ -524,6 +584,7 @@ H5_FCDLL int_f nh5awrite_double_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, voi
 H5_FCDLL int_f nh5awrite_double_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
 H5_FCDLL int_f nh5awrite_double_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
 H5_FCDLL int_f nh5awrite_double_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5awrite_f_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf);
 H5_FCDLL int_f nh5areadc_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
 H5_FCDLL int_f nh5areadc_s_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
 H5_FCDLL int_f nh5areadc_1_c (hid_t_f *attr_id, hid_t_f *mem_type_id, _fcd buf, void *dims);
@@ -558,6 +619,7 @@ H5_FCDLL int_f nh5aread_double_4_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void
 H5_FCDLL int_f nh5aread_double_5_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
 H5_FCDLL int_f nh5aread_double_6_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
 H5_FCDLL int_f nh5aread_double_7_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf, void *dims);
+H5_FCDLL int_f nh5aread_f_c (hid_t_f *attr_id, hid_t_f *mem_type_id, void *buf);
 H5_FCDLL int_f nh5aclose_c ( hid_t_f *attr_id );
 H5_FCDLL int_f nh5adelete_c (hid_t_f *obj_id, _fcd name, size_t_f *namelen);
 H5_FCDLL int_f nh5aopen_idx_c (hid_t_f *obj_id, int_f *idx, hid_t_f *attr_id);
@@ -608,68 +670,69 @@ H5_FCDLL int_f nh5arename_c( hid_t_f *loc_id,
 /*
  * Functions form H5Tf.c file
  */
-#   define nh5topen_c         H5_FC_FUNC_(h5topen_c, H5TOPEN_C)
-#   define nh5tcommit_c       H5_FC_FUNC_(h5tcommit_c, H5TCOMMIT_C)
-#   define nh5tcommitted_c    H5_FC_FUNC_(h5tcommitted_c, H5TCOMMITTED_C)
-#   define nh5tclose_c        H5_FC_FUNC_(h5tclose_c, H5TCLOSE_C)
-#   define nh5tcopy_c         H5_FC_FUNC_(h5tcopy_c, H5TCOPY_C)
-#   define nh5tequal_c        H5_FC_FUNC_(h5tequal_c, H5TEQUAL_C)
-#   define nh5tget_class_c    H5_FC_FUNC_(h5tget_class_c, H5TGET_CLASS_C)
-#   define nh5tget_order_c    H5_FC_FUNC_(h5tget_order_c, H5TGET_ORDER_C)
-#   define nh5tset_order_c    H5_FC_FUNC_(h5tset_order_c, H5TSET_ORDER_C)
-#   define nh5tget_size_c     H5_FC_FUNC_(h5tget_size_c, H5TGET_SIZE_C)
-#   define nh5tset_size_c     H5_FC_FUNC_(h5tset_size_c, H5TSET_SIZE_C)
-#   define nh5tget_precision_c     H5_FC_FUNC_(h5tget_precision_c, H5TGET_PRECISION_C)
-#   define nh5tset_precision_c     H5_FC_FUNC_(h5tset_precision_c, H5TSET_PRECISION_C)
-#   define nh5tget_offset_c        H5_FC_FUNC_(h5tget_offset_c, H5TGET_OFFSET_C)
-#   define nh5tset_offset_c        H5_FC_FUNC_(h5tset_offset_c, H5TSET_OFFSET_C)
-#   define nh5tget_pad_c        H5_FC_FUNC_(h5tget_pad_c, H5TGET_PAD_C)
-#   define nh5tset_pad_c        H5_FC_FUNC_(h5tset_pad_c, H5TSET_PAD_C)
-#   define nh5tget_sign_c       H5_FC_FUNC_(h5tget_sign_c, H5TGET_SIGN_C)
-#   define nh5tset_sign_c       H5_FC_FUNC_(h5tset_sign_c, H5TSET_SIGN_C)
-#   define nh5tget_fields_c       H5_FC_FUNC_(h5tget_fields_c, H5TGET_FIELDS_C)
-#   define nh5tset_fields_c       H5_FC_FUNC_(h5tset_fields_c, H5TSET_FIELDS_C)
-#   define nh5tget_ebias_c     H5_FC_FUNC_(h5tget_ebias_c, H5TGET_EBIAS_C)
-#   define nh5tset_ebias_c     H5_FC_FUNC_(h5tset_ebias_c, H5TSET_EBIAS_C)
-#   define nh5tget_norm_c     H5_FC_FUNC_(h5tget_norm_c, H5TGET_NORM_C)
-#   define nh5tset_norm_c     H5_FC_FUNC_(h5tset_norm_c, H5TSET_NORM_C)
-#   define nh5tget_inpad_c        H5_FC_FUNC_(h5tget_inpad_c, H5TGET_INPAD_C)
-#   define nh5tset_inpad_c        H5_FC_FUNC_(h5tset_inpad_c, H5TSET_INPAD_C)
-#   define nh5tget_cset_c        H5_FC_FUNC_(h5tget_cset_c, H5TGET_CSET_C)
-#   define nh5tset_cset_c        H5_FC_FUNC_(h5tset_cset_c, H5TSET_CSET_C)
-#   define nh5tget_strpad_c        H5_FC_FUNC_(h5tget_strpad_c, H5TGET_STRPAD_C)
-#   define nh5tset_strpad_c        H5_FC_FUNC_(h5tset_strpad_c, H5TSET_STRPAD_C)
-#   define nh5tget_nmembers_c        H5_FC_FUNC_(h5tget_nmembers_c, H5TGET_NMEMBERS_C)
-#   define nh5tget_member_name_c        H5_FC_FUNC_(h5tget_member_name_c, H5TGET_MEMBER_NAME_C)
-#   define nh5tget_member_offset_c        H5_FC_FUNC_(h5tget_member_offset_c, H5TGET_MEMBER_OFFSET_C)
-#   define nh5tget_member_dims_c        H5_FC_FUNC_(h5tget_member_dims_c, H5TGET_MEMBER_DIMS_C)
-#   define nh5tget_member_type_c        H5_FC_FUNC_(h5tget_member_type_c, H5TGET_MEMBER_TYPE_C)
-#   define nh5tget_member_index_c        H5_FC_FUNC_(h5tget_member_index_c, H5TGET_MEMBER_INDEX_C)
-#   define nh5tinsert_c        H5_FC_FUNC_(h5tinsert_c, H5TINSERT_C)
-#   define nh5tcreate_c        H5_FC_FUNC_(h5tcreate_c, H5TCREATE_C)
-#   define nh5tpack_c                   H5_FC_FUNC_(h5tpack_c, H5TPACK_C)
-#   define nh5tinsert_array_c           H5_FC_FUNC_(h5tinsert_array_c, H5TINSERT_ARRAY_C)
-#   define nh5tinsert_array_c2           H5_FC_FUNC_(h5tinsert_array_c2, H5TINSERT_ARRAY_C2)
-#   define nh5tenum_create_c             H5_FC_FUNC_(h5tenum_create_c, H5TENUM_CREATE_C)
-#   define nh5tenum_insert_c             H5_FC_FUNC_(h5tenum_insert_c, H5TENUM_INSERT_C)
-#   define nh5tenum_nameof_c             H5_FC_FUNC_(h5tenum_nameof_c, H5TENUM_NAMEOF_C)
-#   define nh5tenum_valueof_c             H5_FC_FUNC_(h5tenum_valueof_c, H5TENUM_VALUEOF_C)
-#   define nh5tget_member_value_c         H5_FC_FUNC_(h5tget_member_value_c, H5TGET_MEMBER_VALUE_C)
-#   define nh5tset_tag_c                  H5_FC_FUNC_(h5tset_tag_c, H5TSET_TAG_C)
-#   define nh5tget_tag_c                  H5_FC_FUNC_(h5tget_tag_c, H5TGET_TAG_C)
-#   define nh5tarray_create_c             H5_FC_FUNC_(h5tarray_create_c, H5TARRAY_CREATE_C)
-#   define nh5tget_array_ndims_c          H5_FC_FUNC_(h5tget_array_ndims_c, H5TGET_ARRAY_NDIMS_C)
-#   define nh5tget_array_dims_c          H5_FC_FUNC_(h5tget_array_dims_c, H5TGET_ARRAY_DIMS_C)
-#   define nh5tget_super_c               H5_FC_FUNC_(h5tget_super_c, H5TGET_SUPER_C)
-#   define nh5tvlen_create_c               H5_FC_FUNC_(h5tvlen_create_c, H5TVLEN_CREATE_C)
-#   define nh5tis_variable_str_c         H5_FC_FUNC_(h5tis_variable_str_c, H5TIS_VARIABLE_STR_C)
-#   define nh5tget_member_class_c         H5_FC_FUNC_(h5tget_member_class_c, H5TGET_MEMBER_CLASS_C)
-#   define nh5tcommit_anon_c       H5_FC_FUNC_(h5tcommit_anon_c, H5TCOMMIT_ANON_C)
-#   define nh5tdecode_c    H5_FC_FUNC_(h5tdecode_c, H5TDECODE_C)
-#   define nh5tencode_c    H5_FC_FUNC_(h5tencode_c, H5TENCODE_C)
-#   define nh5tget_create_plist_c H5_FC_FUNC_(h5tget_create_plist_c, H5TGET_CREATE_PLIST_C)
-#   define nh5tcompiler_conv_c H5_FC_FUNC_(h5tcompiler_conv_c, H5TCOMPILER_CONV_C)
-#   define nh5tget_native_type_c H5_FC_FUNC_(h5tget_native_type_c, H5TGET_NATIVE_TYPE_C)
+#define nh5topen_c         H5_FC_FUNC_(h5topen_c, H5TOPEN_C)
+#define nh5tcommit_c       H5_FC_FUNC_(h5tcommit_c, H5TCOMMIT_C)
+#define nh5tcommitted_c    H5_FC_FUNC_(h5tcommitted_c, H5TCOMMITTED_C)
+#define nh5tconvert_c      H5_FC_FUNC_(h5tconvert_c, H5TCONVERT_C)
+#define nh5tclose_c        H5_FC_FUNC_(h5tclose_c, H5TCLOSE_C)
+#define nh5tcopy_c         H5_FC_FUNC_(h5tcopy_c, H5TCOPY_C)
+#define nh5tequal_c        H5_FC_FUNC_(h5tequal_c, H5TEQUAL_C)
+#define nh5tget_class_c    H5_FC_FUNC_(h5tget_class_c, H5TGET_CLASS_C)
+#define nh5tget_order_c    H5_FC_FUNC_(h5tget_order_c, H5TGET_ORDER_C)
+#define nh5tset_order_c    H5_FC_FUNC_(h5tset_order_c, H5TSET_ORDER_C)
+#define nh5tget_size_c     H5_FC_FUNC_(h5tget_size_c, H5TGET_SIZE_C)
+#define nh5tset_size_c     H5_FC_FUNC_(h5tset_size_c, H5TSET_SIZE_C)
+#define nh5tget_precision_c     H5_FC_FUNC_(h5tget_precision_c, H5TGET_PRECISION_C)
+#define nh5tset_precision_c     H5_FC_FUNC_(h5tset_precision_c, H5TSET_PRECISION_C)
+#define nh5tget_offset_c        H5_FC_FUNC_(h5tget_offset_c, H5TGET_OFFSET_C)
+#define nh5tset_offset_c        H5_FC_FUNC_(h5tset_offset_c, H5TSET_OFFSET_C)
+#define nh5tget_pad_c        H5_FC_FUNC_(h5tget_pad_c, H5TGET_PAD_C)
+#define nh5tset_pad_c        H5_FC_FUNC_(h5tset_pad_c, H5TSET_PAD_C)
+#define nh5tget_sign_c       H5_FC_FUNC_(h5tget_sign_c, H5TGET_SIGN_C)
+#define nh5tset_sign_c       H5_FC_FUNC_(h5tset_sign_c, H5TSET_SIGN_C)
+#define nh5tget_fields_c       H5_FC_FUNC_(h5tget_fields_c, H5TGET_FIELDS_C)
+#define nh5tset_fields_c       H5_FC_FUNC_(h5tset_fields_c, H5TSET_FIELDS_C)
+#define nh5tget_ebias_c     H5_FC_FUNC_(h5tget_ebias_c, H5TGET_EBIAS_C)
+#define nh5tset_ebias_c     H5_FC_FUNC_(h5tset_ebias_c, H5TSET_EBIAS_C)
+#define nh5tget_norm_c     H5_FC_FUNC_(h5tget_norm_c, H5TGET_NORM_C)
+#define nh5tset_norm_c     H5_FC_FUNC_(h5tset_norm_c, H5TSET_NORM_C)
+#define nh5tget_inpad_c        H5_FC_FUNC_(h5tget_inpad_c, H5TGET_INPAD_C)
+#define nh5tset_inpad_c        H5_FC_FUNC_(h5tset_inpad_c, H5TSET_INPAD_C)
+#define nh5tget_cset_c        H5_FC_FUNC_(h5tget_cset_c, H5TGET_CSET_C)
+#define nh5tset_cset_c        H5_FC_FUNC_(h5tset_cset_c, H5TSET_CSET_C)
+#define nh5tget_strpad_c        H5_FC_FUNC_(h5tget_strpad_c, H5TGET_STRPAD_C)
+#define nh5tset_strpad_c        H5_FC_FUNC_(h5tset_strpad_c, H5TSET_STRPAD_C)
+#define nh5tget_nmembers_c        H5_FC_FUNC_(h5tget_nmembers_c, H5TGET_NMEMBERS_C)
+#define nh5tget_member_name_c        H5_FC_FUNC_(h5tget_member_name_c, H5TGET_MEMBER_NAME_C)
+#define nh5tget_member_offset_c        H5_FC_FUNC_(h5tget_member_offset_c, H5TGET_MEMBER_OFFSET_C)
+#define nh5tget_member_dims_c        H5_FC_FUNC_(h5tget_member_dims_c, H5TGET_MEMBER_DIMS_C)
+#define nh5tget_member_type_c        H5_FC_FUNC_(h5tget_member_type_c, H5TGET_MEMBER_TYPE_C)
+#define nh5tget_member_index_c        H5_FC_FUNC_(h5tget_member_index_c, H5TGET_MEMBER_INDEX_C)
+#define nh5tinsert_c        H5_FC_FUNC_(h5tinsert_c, H5TINSERT_C)
+#define nh5tcreate_c        H5_FC_FUNC_(h5tcreate_c, H5TCREATE_C)
+#define nh5tpack_c                   H5_FC_FUNC_(h5tpack_c, H5TPACK_C)
+#define nh5tinsert_array_c           H5_FC_FUNC_(h5tinsert_array_c, H5TINSERT_ARRAY_C)
+#define nh5tinsert_array_c2           H5_FC_FUNC_(h5tinsert_array_c2, H5TINSERT_ARRAY_C2)
+#define nh5tenum_create_c             H5_FC_FUNC_(h5tenum_create_c, H5TENUM_CREATE_C)
+#define nh5tenum_insert_c             H5_FC_FUNC_(h5tenum_insert_c, H5TENUM_INSERT_C)
+#define nh5tenum_nameof_c             H5_FC_FUNC_(h5tenum_nameof_c, H5TENUM_NAMEOF_C)
+#define nh5tenum_valueof_c             H5_FC_FUNC_(h5tenum_valueof_c, H5TENUM_VALUEOF_C)
+#define nh5tget_member_value_c         H5_FC_FUNC_(h5tget_member_value_c, H5TGET_MEMBER_VALUE_C)
+#define nh5tset_tag_c                  H5_FC_FUNC_(h5tset_tag_c, H5TSET_TAG_C)
+#define nh5tget_tag_c                  H5_FC_FUNC_(h5tget_tag_c, H5TGET_TAG_C)
+#define nh5tarray_create_c             H5_FC_FUNC_(h5tarray_create_c, H5TARRAY_CREATE_C)
+#define nh5tget_array_ndims_c          H5_FC_FUNC_(h5tget_array_ndims_c, H5TGET_ARRAY_NDIMS_C)
+#define nh5tget_array_dims_c          H5_FC_FUNC_(h5tget_array_dims_c, H5TGET_ARRAY_DIMS_C)
+#define nh5tget_super_c               H5_FC_FUNC_(h5tget_super_c, H5TGET_SUPER_C)
+#define nh5tvlen_create_c               H5_FC_FUNC_(h5tvlen_create_c, H5TVLEN_CREATE_C)
+#define nh5tis_variable_str_c         H5_FC_FUNC_(h5tis_variable_str_c, H5TIS_VARIABLE_STR_C)
+#define nh5tget_member_class_c         H5_FC_FUNC_(h5tget_member_class_c, H5TGET_MEMBER_CLASS_C)
+#define nh5tcommit_anon_c       H5_FC_FUNC_(h5tcommit_anon_c, H5TCOMMIT_ANON_C)
+#define nh5tdecode_c    H5_FC_FUNC_(h5tdecode_c, H5TDECODE_C)
+#define nh5tencode_c    H5_FC_FUNC_(h5tencode_c, H5TENCODE_C)
+#define nh5tget_create_plist_c H5_FC_FUNC_(h5tget_create_plist_c, H5TGET_CREATE_PLIST_C)
+#define nh5tcompiler_conv_c H5_FC_FUNC_(h5tcompiler_conv_c, H5TCOMPILER_CONV_C)
+#define nh5tget_native_type_c H5_FC_FUNC_(h5tget_native_type_c, H5TGET_NATIVE_TYPE_C )
 
 H5_FCDLL int_f nh5tcreate_c(int_f *cls, size_t_f *size, hid_t_f *type_id);
 H5_FCDLL int_f nh5topen_c (hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *type_id, hid_t_f *tapl_id );
@@ -719,7 +782,7 @@ H5_FCDLL int_f nh5tenum_nameof_c(hid_t_f *type_id, int_f* value, _fcd name, size
 H5_FCDLL int_f nh5tenum_valueof_c(hid_t_f *type_id, _fcd name, int_f* namelen, int_f* value);
 H5_FCDLL int_f nh5tget_member_value_c(hid_t_f *type_id, int_f* member_no, int_f* value);
 H5_FCDLL int_f nh5tset_tag_c(hid_t_f* type_id, _fcd tag, int_f* namelen);
-H5_FCDLL int_f nh5tget_tag_c(hid_t_f* type_id, _fcd tag, int_f* namelen);
+H5_FCDLL int_f nh5tget_tag_c(hid_t_f* type_id, _fcd tag, size_t_f* tag_size, int_f* namelen);
 H5_FCDLL int_f nh5tarray_create_c(hid_t_f * base_id, int_f *rank, hsize_t_f* dims, hid_t_f* type_id);
 H5_FCDLL int_f nh5tget_array_dims_c ( hid_t_f *type_id , hsize_t_f * dims);
 H5_FCDLL int_f nh5tget_array_ndims_c ( hid_t_f *type_id , int_f * ndims);
@@ -733,180 +796,187 @@ H5_FCDLL int_f nh5tencode_c (_fcd buf, hid_t_f *obj_id, size_t_f *nalloc );
 H5_FCDLL int_f nh5tget_create_plist_c ( hid_t_f *dtype_id,  hid_t_f *dtpl_id);
 H5_FCDLL int_f nh5tcompiler_conv_c ( hid_t_f *src_id, hid_t_f *dst_id, int_f *c_flag);
 H5_FCDLL int_f nh5tget_native_type_c(hid_t_f *dtype_id, int_f *direction, hid_t_f *native_dtype_id);
+H5_FCDLL int_f nh5tconvert_c(hid_t_f *src_id, hid_t_f *dst_id, size_t_f *nelmts, void *buf, void *background, hid_t_f *plist_id);
 
 
 /*
  * Functions from H5Of.c
  */
 
-#   define nh5olink_c         H5_FC_FUNC_(h5olink_c, H5OLINK_C)
-#   define nh5oopen_c         H5_FC_FUNC_(h5oopen_c, H5OOPEN_C)
-#   define nh5oopen_by_addr_c H5_FC_FUNC_(h5oopen_by_addr_c, H5OOPEN_BY_ADDR_C)
-
+#define nh5olink_c       H5_FC_FUNC_(h5olink_c, H5OLINK_C)
+#define nh5oopen_c       H5_FC_FUNC_(h5oopen_c, H5OOPEN_C)
+#define nh5oclose_c       H5_FC_FUNC_(h5oclose_c, H5OCLOSE_C)
+#define nh5ovisit_c      H5_FC_FUNC_(h5ovisit_c,H5OVISIT_C)
+#define nh5oget_info_by_name_c H5_FC_FUNC_(h5oget_info_by_name_c ,H5OGET_INFO_BY_NAME_C)
+#define nh5oopen_by_addr_c H5_FC_FUNC_(h5oopen_by_addr_c, H5OOPEN_BY_ADDR_C)
 
 H5_FCDLL int_f nh5oopen_c (hid_t_f *loc_id, _fcd name, size_t_f *namelen, hid_t_f *lapl_id, hid_t_f *obj_id);
+H5_FCDLL int_f nh5oclose_c (hid_t_f *object_id );
 H5_FCDLL int_f nh5oopen_by_addr_c (hid_t_f *loc_id, haddr_t_f *addr, hid_t_f *obj_id);
 H5_FCDLL int_f nh5olink_c (hid_t_f *object_id, hid_t_f *new_loc_id, _fcd name, size_t_f *namelen,
 			   hid_t_f *lcpl_id, hid_t_f *lapl_id);
+H5_FCDLL int_f nh5ovisit_c (hid_t_f *group_id, int_f *index_type, int_f *order, H5O_iterate_t op, void *op_data);
+H5_FCDLL int_f nh5oget_info_by_name_c (hid_t_f *loc_id, _fcd name, size_t_f *namelen,hid_t_f *lapl_id,
+				       H5O_info_t_f *object_info);
 /*
  * Functions from H5Pf.c
  */
-#   define nh5pcreate_c       H5_FC_FUNC_(h5pcreate_c, H5PCREATE_C)
-#   define nh5pclose_c        H5_FC_FUNC_(h5pclose_c, H5PCLOSE_C)
-#   define nh5pcopy_c         H5_FC_FUNC_(h5pcopy_c, H5PCOPY_C)
-#   define nh5pequal_c         H5_FC_FUNC_(h5pequal_c, H5PEQUAL_C)
-#   define nh5pget_class_c    H5_FC_FUNC_(h5pget_class_c, H5PGET_CLASS_C)
-#   define nh5pset_deflate_c  H5_FC_FUNC_(h5pset_deflate_c, H5PSET_DEFLATE_C)
-#   define nh5pset_preserve_c  H5_FC_FUNC_(h5pset_preserve_c, H5PSET_PRESERVE_C)
-#   define nh5pget_preserve_c  H5_FC_FUNC_(h5pget_preserve_c, H5PGET_PRESERVE_C)
-#   define nh5pset_chunk_c    H5_FC_FUNC_(h5pset_chunk_c, H5PSET_CHUNK_C)
-#   define nh5pget_chunk_c    H5_FC_FUNC_(h5pget_chunk_c, H5PGET_CHUNK_C)
-#   define nh5pset_fill_valuec_c        H5_FC_FUNC_(h5pset_fill_valuec_c, H5PSET_FILL_VALUEC_C)
-#   define nh5pset_fill_value_c         H5_FC_FUNC_(h5pset_fill_value_c, H5PSET_FILL_VALUE_C)
-#   define nh5pset_fill_value_integer_c H5_FC_FUNC_(h5pset_fill_value_integer_c, H5PSET_FILL_VALUE_INTEGER_C)
-#   define nh5pset_fill_value_real_c    H5_FC_FUNC_(h5pset_fill_value_real_c, H5PSET_FILL_VALUE_REAL_C)
-#   define nh5pset_fill_value_double_c  H5_FC_FUNC_(h5pset_fill_value_double_c, H5PSET_FILL_VALUE_DOUBLE_C)
-#   define nh5pget_fill_valuec_c        H5_FC_FUNC_(h5pget_fill_valuec_c, H5PGET_FILL_VALUEC_C)
-#   define nh5pget_fill_value_c         H5_FC_FUNC_(h5pget_fill_value_c, H5PGET_FILL_VALUE_C)
-#   define nh5pget_fill_value_integer_c H5_FC_FUNC_(h5pget_fill_value_integer_c, H5PGET_FILL_VALUE_INTEGER_C)
-#   define nh5pget_fill_value_real_c    H5_FC_FUNC_(h5pget_fill_value_real_c, H5PGET_FILL_VALUE_REAL_C)
-#   define nh5pget_fill_value_double_c  H5_FC_FUNC_(h5pget_fill_value_double_c, H5PGET_FILL_VALUE_DOUBLE_C)
-#   define nh5pget_version_c    H5_FC_FUNC_(h5pget_version_c, H5PGET_VERSION_C)
-#   define nh5pget_userblock_c    H5_FC_FUNC_(h5pget_userblock_c, H5PGET_USERBLOCK_C)
-#   define nh5pset_userblock_c    H5_FC_FUNC_(h5pset_userblock_c, H5PSET_USERBLOCK_C)
-#   define nh5pset_sizes_c        H5_FC_FUNC_(h5pset_sizes_c, H5PSET_SIZES_C)
-#   define nh5pget_sizes_c         H5_FC_FUNC_(h5pget_sizes_c, H5PGET_SIZES_C)
-#   define nh5pget_sym_k_c         H5_FC_FUNC_(h5pget_sym_k_c, H5PGET_SYM_K_C)
-#   define nh5pset_sym_k_c         H5_FC_FUNC_(h5pset_sym_k_c, H5PSET_SYM_K_C)
-#   define nh5pget_istore_k_c         H5_FC_FUNC_(h5pget_istore_k_c, H5PGET_ISTORE_K_C)
-#   define nh5pset_istore_k_c         H5_FC_FUNC_(h5pset_istore_k_c, H5PSET_ISTORE_K_C)
-#   define nh5pget_driver_c         H5_FC_FUNC_(h5pget_driver_c, H5PGET_DRIVER_C)
-#   define nh5pset_fapl_stdio_c         H5_FC_FUNC_(h5pset_fapl_stdio_c, H5PSET_FAPL_STDIO_C)
-#   define nh5pget_fapl_stdio_c         H5_FC_FUNC_(h5pget_fapl_stdio_c, H5PGET_FAPL_STDIO_C)
-#   define nh5pset_fapl_sec2_c         H5_FC_FUNC_(h5pset_fapl_sec2_c, H5PSET_FAPL_SEC2_C)
-#   define nh5pget_fapl_sec2_c         H5_FC_FUNC_(h5pget_fapl_sec2_c, H5PGET_FAPL_SEC2_C)
-#   define nh5pset_alignment_c         H5_FC_FUNC_(h5pset_alignment_c, H5PSET_ALIGNMENT_C)
-#   define nh5pget_alignment_c         H5_FC_FUNC_(h5pget_alignment_c, H5PGET_ALIGNMENT_C)
-#   define nh5pset_fapl_core_c         H5_FC_FUNC_(h5pset_fapl_core_c, H5PSET_FAPL_CORE_C)
-#   define nh5pget_fapl_core_c         H5_FC_FUNC_(h5pget_fapl_core_c, H5PGET_FAPL_CORE_C)
-#   define nh5pset_fapl_family_c         H5_FC_FUNC_(h5pset_fapl_family_c, H5PSET_FAPL_FAMILY_C)
-#   define nh5pget_fapl_family_c         H5_FC_FUNC_(h5pget_fapl_family_c, H5PGET_FAPL_FAMILY_C)
-#   define nh5pset_cache_c         H5_FC_FUNC_(h5pset_cache_c, H5PSET_CACHE_C)
-#   define nh5pget_cache_c         H5_FC_FUNC_(h5pget_cache_c, H5PGET_CACHE_C)
-#   define nh5pset_fapl_split_c         H5_FC_FUNC_(h5pset_fapl_split_c, H5PSET_FAPL_SPLIT_C)
-#   define nh5pget_fapl_split_c         H5_FC_FUNC_(h5pget_fapl_split_c, H5PGET_FAPL_SPLIT_C)
-#   define nh5pset_gc_references_c         H5_FC_FUNC_(h5pset_gc_references_c, H5PSET_GC_REFERENCES_C)
-#   define nh5pget_gc_references_c         H5_FC_FUNC_(h5pget_gc_references_c, H5PGET_GC_REFERENCES_C)
-#   define nh5pset_layout_c         H5_FC_FUNC_(h5pset_layout_c, H5PSET_LAYOUT_C)
-#   define nh5pget_layout_c         H5_FC_FUNC_(h5pget_layout_c, H5PGET_LAYOUT_C)
-#   define nh5pset_filter_c         H5_FC_FUNC_(h5pset_filter_c, H5PSET_FILTER_C)
-#   define nh5premove_filter_c         H5_FC_FUNC_(h5premove_filter_c, H5PREMOVE_FILTER_C)
-#   define nh5pmodify_filter_c         H5_FC_FUNC_(h5pmodify_filter_c, H5PMODIFY_FILTER_C)
-#   define nh5pget_nfilters_c         H5_FC_FUNC_(h5pget_nfilters_c, H5PGET_NFILTERS_C)
-#   define nh5pget_filter_c         H5_FC_FUNC_(h5pget_filter_c, H5PGET_FILTER_C)
-#   define nh5pget_filter_by_id_c         H5_FC_FUNC_(h5pget_filter_by_id_c, H5PGET_FILTER_BY_ID_C)
-#   define nh5pset_external_c         H5_FC_FUNC_(h5pset_external_c, H5PSET_EXTERNAL_C)
-#   define nh5pget_external_count_c         H5_FC_FUNC_(h5pget_external_count_c, H5PGET_EXTERNAL_COUNT_C)
-#   define nh5pget_external_c         H5_FC_FUNC_(h5pget_external_c, H5PGET_EXTERNAL_C)
-#   define nh5pget_btree_ratios_c         H5_FC_FUNC_(h5pget_btree_ratios_c, H5PGET_BTREE_RATIOS_C)
-#   define nh5pset_btree_ratios_c         H5_FC_FUNC_(h5pset_btree_ratios_c, H5PSET_BTREE_RATIOS_C)
-#   define nh5pset_fapl_mpio_c         H5_FC_FUNC_(h5pset_fapl_mpio_c, H5PSET_FAPL_MPIO_C)
-#   define nh5pget_fapl_mpio_c         H5_FC_FUNC_(h5pget_fapl_mpio_c, H5PGET_FAPL_MPIO_C)
-#   define nh5pset_fapl_mpiposix_c     H5_FC_FUNC_(h5pset_fapl_mpiposix_c, H5PSET_FAPL_MPIPOSIX_C)
-#   define nh5pget_fapl_mpiposix_c     H5_FC_FUNC_(h5pget_fapl_mpiposix_c, H5PGET_FAPL_MPIPOSIX_C)
-#   define nh5pset_dxpl_mpio_c        H5_FC_FUNC_(h5pset_dxpl_mpio_c, H5PSET_DXPL_MPIO_C)
-#   define nh5pget_dxpl_mpio_c        H5_FC_FUNC_(h5pget_dxpl_mpio_c, H5PGET_DXPL_MPIO_C)
-#   define nh5pget_fclose_degree_c    H5_FC_FUNC_(h5pget_fclose_degree_c, H5PGET_FCLOSE_DEGREE_C)
-#   define nh5pset_fclose_degree_c    H5_FC_FUNC_(h5pset_fclose_degree_c, H5PSET_FCLOSE_DEGREE_C)
-#   define nh5pset_buffer_c    H5_FC_FUNC_(h5pset_buffer_c, H5PSET_BUFFER_C)
-#   define nh5pget_buffer_c    H5_FC_FUNC_(h5pget_buffer_c, H5PGET_BUFFER_C)
-#   define nh5pfill_value_defined_c    H5_FC_FUNC_(h5pfill_value_defined_c, H5PFILL_VALUE_DEFINED_C)
-#   define nh5pset_alloc_time_c    H5_FC_FUNC_(h5pset_alloc_time_c, H5PSET_ALLOC_TIME_C)
-#   define nh5pget_alloc_time_c    H5_FC_FUNC_(h5pget_alloc_time_c, H5PGET_ALLOC_TIME_C)
-#   define nh5pset_fill_time_c    H5_FC_FUNC_(h5pset_fill_time_c, H5PSET_FILL_TIME_C)
-#   define nh5pget_fill_time_c    H5_FC_FUNC_(h5pget_fill_time_c, H5PGET_FILL_TIME_C)
-#   define nh5pset_meta_block_size_c    H5_FC_FUNC_(h5pset_meta_block_size_c, H5PSET_META_BLOCK_SIZE_C)
-#   define nh5pget_meta_block_size_c    H5_FC_FUNC_(h5pget_meta_block_size_c, H5PGET_META_BLOCK_SIZE_C)
-#   define nh5pset_sieve_buf_size_c    H5_FC_FUNC_(h5pset_sieve_buf_size_c, H5PSET_SIEVE_BUF_SIZE_C)
-#   define nh5pget_sieve_buf_size_c    H5_FC_FUNC_(h5pget_sieve_buf_size_c, H5PGET_SIEVE_BUF_SIZE_C)
-#   define nh5pset_hyper_vector_size_c    H5_FC_FUNC_(h5pset_hyper_vector_size_c, H5PSET_HYPER_VECTOR_SIZE_C)
-#   define nh5pget_hyper_vector_size_c    H5_FC_FUNC_(h5pget_hyper_vector_size_c, H5PGET_HYPER_VECTOR_SIZE_C)
-#   define nh5pset_small_data_block_size_c    H5_FC_FUNC_(h5pset_small_data_block_size_c, H5PSET_SMALL_DATA_BLOCK_SIZE_C)
-#   define nh5pget_small_data_block_size_c    H5_FC_FUNC_(h5pget_small_data_block_size_c, H5PGET_SMALL_DATA_BLOCK_SIZE_C)
-#   define nh5pcreate_class_c             H5_FC_FUNC_(h5pcreate_class_c, H5PCREATE_CLASS_C)
-#   define nh5pregister_c                 H5_FC_FUNC_(h5pregister_c, H5PREGISTER_C)
-#   define nh5pregister_integer_c                 H5_FC_FUNC_(h5pregister_integer_c, H5PREGISTER_INTEGER_C)
-#   define nh5pregister_real_c                    H5_FC_FUNC_(h5pregister_real_c, H5PREGISTER_REAL_C)
-#   define nh5pregister_double_c                  H5_FC_FUNC_(h5pregister_double_c, H5PREGISTER_DOUBLE_C)
-#   define nh5pregisterc_c                H5_FC_FUNC_(h5pregisterc_c, H5PREGISTERC_C)
-#   define nh5pinsert_c                   H5_FC_FUNC_(h5pinsert_c, H5PINSERT_C)
-#   define nh5pinsert_integer_c                   H5_FC_FUNC_(h5pinsert_integer_c, H5PINSERT_INTEGER_C)
-#   define nh5pinsert_real_c                   H5_FC_FUNC_(h5pinsert_real_c, H5PINSERT_REAL_C)
-#   define nh5pinsert_double_c                   H5_FC_FUNC_(h5pinsert_double_c, H5PINSERT_DOUBLE_C)
-#   define nh5pinsertc_c                  H5_FC_FUNC_(h5pinsertc_c, H5PINSERTC_C)
-#   define nh5pset_c                      H5_FC_FUNC_(h5pset_c, H5PSET_C)
-#   define nh5pset_integer_c                      H5_FC_FUNC_(h5pset_integer_c, H5PSET_INTEGER_C)
-#   define nh5pset_real_c                         H5_FC_FUNC_(h5pset_real_c, H5PSET_REAL_C)
-#   define nh5pset_double_c                       H5_FC_FUNC_(h5pset_double_c, H5PSET_DOUBLE_C)
-#   define nh5psetc_c                     H5_FC_FUNC_(h5psetc_c, H5PSETC_C)
-#   define nh5pget_c                      H5_FC_FUNC_(h5pget_c, H5PGET_C)
-#   define nh5pget_integer_c                      H5_FC_FUNC_(h5pget_integer_c, H5PGET_INTEGER_C)
-#   define nh5pget_real_c                         H5_FC_FUNC_(h5pget_real_c, H5PGET_REAL_C)
-#   define nh5pget_double_c                       H5_FC_FUNC_(h5pget_double_c, H5PGET_DOUBLE_C)
-#   define nh5pgetc_c                     H5_FC_FUNC_(h5pgetc_c, H5PGETC_C)
-#   define nh5pexist_c                    H5_FC_FUNC_(h5pexist_c, H5PEXIST_C)
-#   define nh5pget_size_c                 H5_FC_FUNC_(h5pget_size_c, H5PGET_SIZE_C)
-#   define nh5pget_nprops_c               H5_FC_FUNC_(h5pget_nprops_c, H5PGET_NPROPS_C)
-#   define nh5pget_class_parent_c         H5_FC_FUNC_(h5pget_class_parent_c, H5PGET_CLASS_PARENT_C)
-#   define nh5pisa_class_c                H5_FC_FUNC_(h5pisa_class_c, H5PISA_CLASS_C)
-#   define nh5pcopy_prop_c                H5_FC_FUNC_(h5pcopy_prop_c, H5PCOPY_PROP_C)
-#   define nh5premove_c                   H5_FC_FUNC_(h5premove_c, H5PREMOVE_C)
-#   define nh5punregister_c               H5_FC_FUNC_(h5punregister_c, H5PUNREGISTER_C)
-#   define nh5pclose_class_c              H5_FC_FUNC_(h5pclose_class_c, H5PCLOSE_CLASS_C)
-#   define nh5pget_class_name_c           H5_FC_FUNC_(h5pget_class_name_c, H5PGET_CLASS_NAME_C)
-#   define nh5pset_shuffle_c               H5_FC_FUNC_(h5pset_shuffle_c, H5PSET_SHUFFLE_C)
-#   define nh5pset_fletcher32_c           H5_FC_FUNC_(h5pset_fletcher32_c, H5PSET_FLETCHER32_C)
-#   define nh5pset_edc_check_c            H5_FC_FUNC_(h5pset_edc_check_c, H5PSET_EDC_CHECK_C)
-#   define nh5pget_edc_check_c            H5_FC_FUNC_(h5pget_edc_check_c, H5PGET_EDC_CHECK_C)
-#   define nh5pset_family_offset_c       H5_FC_FUNC_(h5pset_family_offset_c, H5PSET_FAMILY_OFFSET_C)
-#   define nh5pget_fapl_multi_c          H5_FC_FUNC_(h5pget_fapl_multi_c, H5PGET_FAPL_MULTI_C)
-#   define nh5pset_fapl_multi_c          H5_FC_FUNC_(h5pset_fapl_multi_c, H5PSET_FAPL_MULTI_C)
-#   define nh5pset_fapl_multi_sc          H5_FC_FUNC_(h5pset_fapl_multi_sc, H5PSET_FAPL_MULTI_SC)
-#   define nh5pset_szip_c                 H5_FC_FUNC_(h5pset_szip_c, H5PSET_SZIP_C)
-#   define nh5pall_filters_avail_c        H5_FC_FUNC_(h5pall_filters_avail_c, H5PALL_FILTERS_AVAIL_C)
-#   define nh5pget_attr_phase_change_c    H5_FC_FUNC_(h5pget_attr_phase_change_c, H5PGET_ATTR_PHASE_CHANGE_C)
-#   define nh5pset_attr_creation_order_c  H5_FC_FUNC_(h5pset_attr_creation_order_c, H5PSET_ATTR_CREATION_ORDER_C)
-#   define nh5pset_shared_mesg_nindexes_c  H5_FC_FUNC_(h5pset_shared_mesg_nindexes_c, H5PSET_SHARED_MESG_NINDEXES_C)
-#   define nh5pset_shared_mesg_index_c  H5_FC_FUNC_(h5pset_shared_mesg_index_c,H5PSET_SHARED_MESG_INDEX_C)
-#   define nh5pget_attr_creation_order_c  H5_FC_FUNC_(h5pget_attr_creation_order_c,H5PGET_ATTR_CREATION_ORDER_C)
-#   define nh5pset_libver_bounds_c H5_FC_FUNC_(h5pset_libver_bounds_c,H5PSET_LIBVER_BOUNDS_C)
-#   define nh5pset_link_creation_order_c H5_FC_FUNC_(h5pset_link_creation_order_c, H5PSET_LINK_CREATION_ORDER_C)
-#   define nh5pget_link_phase_change_c H5_FC_FUNC_(h5pget_link_phase_change_c, H5PGET_LINK_PHASE_CHANGE_C)
-#   define nh5pget_obj_track_times_c H5_FC_FUNC_(h5pget_obj_track_times_c, H5PGET_OBJ_TRACK_TIMES_C)
-#   define nh5pset_obj_track_times_c H5_FC_FUNC_(h5pset_obj_track_times_c, H5PSET_OBJ_TRACK_TIMES_C)
-#   define nh5pset_create_inter_group_c H5_FC_FUNC_(h5pset_create_inter_group_c,H5PSET_CREATE_INTER_GROUP_C)
-#   define nh5pget_create_inter_group_c H5_FC_FUNC_(h5pget_create_inter_group_c,H5PGET_CREATE_INTER_GROUP_C)
-#   define nh5pget_link_creation_order_c H5_FC_FUNC_(h5pget_link_creation_order_c,H5PGET_LINK_CREATION_ORDER_C)
-#   define nh5pset_char_encoding_c H5_FC_FUNC_(h5pset_char_encoding_c, H5PSET_CHAR_ENCODING_C)
-#   define nh5pget_char_encoding_c H5_FC_FUNC_(h5pget_char_encoding_c, H5PGET_CHAR_ENCODING_C)
-#   define nh5pset_copy_object_c H5_FC_FUNC_(h5pset_copy_object_c, H5PSET_COPY_OBJECT_C)
-#   define nh5pget_copy_object_c H5_FC_FUNC_(h5pget_copy_object_c, H5PGET_COPY_OBJECT_C)
-#   define nh5pget_data_transform_c H5_FC_FUNC_(h5pget_data_transform_c, H5PGET_DATA_TRANSFORM_C)
-#   define nh5pset_data_transform_c H5_FC_FUNC_(h5pset_data_transform_c, H5PSET_DATA_TRANSFORM_C)
-#   define nh5pget_local_heap_size_hint_c H5_FC_FUNC_(h5pget_local_heap_size_hint_c, H5PGET_LOCAL_HEAP_SIZE_HINT_C)
-#   define nh5pget_est_link_info_c H5_FC_FUNC_(h5pget_est_link_info_c,H5PGET_EST_LINK_INFO_C)
-#   define nh5pset_est_link_info_c H5_FC_FUNC_(h5pset_est_link_info_c,H5PSET_EST_LINK_INFO_C)
-#   define nh5pset_local_heap_size_hint_c H5_FC_FUNC_(h5pset_local_heap_size_hint_c, H5PSET_LOCAL_HEAP_SIZE_HINT_C)
-#   define nh5pset_link_phase_change_c H5_FC_FUNC_(h5pset_link_phase_change_c, H5PSET_LINK_PHASE_CHANGE_C)
-#   define nh5pset_fapl_direct_c H5_FC_FUNC_(h5pset_fapl_direct_c, H5PSET_FAPL_DIRECT_C)
-#   define nh5pget_fapl_direct_c H5_FC_FUNC_(h5pget_fapl_direct_c, H5PGET_FAPL_DIRECT_C)
-#   define nh5pset_attr_phase_change_c H5_FC_FUNC_(h5pset_attr_phase_change_c, H5PSET_ATTR_PHASE_CHANGE_C)
-#   define nh5pset_nbit_c H5_FC_FUNC_(h5pset_nbit_c, H5PSET_NBIT_C)
-#   define nh5pset_scaleoffset_c H5_FC_FUNC_(h5pset_scaleoffset_c, H5PSET_SCALEOFFSET_C)
-#   define nh5pset_nlinks_c H5_FC_FUNC_(h5pset_nlinks_c, H5PSET_NLINKS_C)
-#   define nh5pget_nlinks_c H5_FC_FUNC_(h5pget_nlinks_c, H5PGET_NLINKS_C)
-#   define nh5pset_chunk_cache_c H5_FC_FUNC_(h5pset_chunk_cache_c, H5PSET_CHUNK_CACHE_C)
-#   define nh5pget_chunk_cache_c H5_FC_FUNC_(h5pget_chunk_cache_c, H5PGET_CHUNK_CACHE_C)
+#define nh5pcreate_c       H5_FC_FUNC_(h5pcreate_c, H5PCREATE_C)
+#define nh5pclose_c        H5_FC_FUNC_(h5pclose_c, H5PCLOSE_C)
+#define nh5pcopy_c         H5_FC_FUNC_(h5pcopy_c, H5PCOPY_C)
+#define nh5pequal_c         H5_FC_FUNC_(h5pequal_c, H5PEQUAL_C)
+#define nh5pget_class_c    H5_FC_FUNC_(h5pget_class_c, H5PGET_CLASS_C)
+#define nh5pset_deflate_c  H5_FC_FUNC_(h5pset_deflate_c, H5PSET_DEFLATE_C)
+#define nh5pset_preserve_c  H5_FC_FUNC_(h5pset_preserve_c, H5PSET_PRESERVE_C)
+#define nh5pget_preserve_c  H5_FC_FUNC_(h5pget_preserve_c, H5PGET_PRESERVE_C)
+#define nh5pset_chunk_c    H5_FC_FUNC_(h5pset_chunk_c, H5PSET_CHUNK_C)
+#define nh5pget_chunk_c    H5_FC_FUNC_(h5pget_chunk_c, H5PGET_CHUNK_C)
+#define nh5pset_fill_valuec_c        H5_FC_FUNC_(h5pset_fill_valuec_c, H5PSET_FILL_VALUEC_C)
+#define nh5pset_fill_value_c         H5_FC_FUNC_(h5pset_fill_value_c, H5PSET_FILL_VALUE_C)
+#define nh5pset_fill_value_integer_c H5_FC_FUNC_(h5pset_fill_value_integer_c, H5PSET_FILL_VALUE_INTEGER_C)
+#define nh5pset_fill_value_real_c    H5_FC_FUNC_(h5pset_fill_value_real_c, H5PSET_FILL_VALUE_REAL_C)
+#define nh5pset_fill_value_double_c  H5_FC_FUNC_(h5pset_fill_value_double_c, H5PSET_FILL_VALUE_DOUBLE_C)
+#define nh5pget_fill_valuec_c        H5_FC_FUNC_(h5pget_fill_valuec_c, H5PGET_FILL_VALUEC_C)
+#define nh5pget_fill_value_c         H5_FC_FUNC_(h5pget_fill_value_c, H5PGET_FILL_VALUE_C)
+#define nh5pget_fill_value_integer_c H5_FC_FUNC_(h5pget_fill_value_integer_c, H5PGET_FILL_VALUE_INTEGER_C)
+#define nh5pget_fill_value_real_c    H5_FC_FUNC_(h5pget_fill_value_real_c, H5PGET_FILL_VALUE_REAL_C)
+#define nh5pget_fill_value_double_c  H5_FC_FUNC_(h5pget_fill_value_double_c, H5PGET_FILL_VALUE_DOUBLE_C)
+#define nh5pget_version_c    H5_FC_FUNC_(h5pget_version_c, H5PGET_VERSION_C)
+#define nh5pget_userblock_c    H5_FC_FUNC_(h5pget_userblock_c, H5PGET_USERBLOCK_C)
+#define nh5pset_userblock_c    H5_FC_FUNC_(h5pset_userblock_c, H5PSET_USERBLOCK_C)
+#define nh5pset_sizes_c        H5_FC_FUNC_(h5pset_sizes_c, H5PSET_SIZES_C)
+#define nh5pget_sizes_c         H5_FC_FUNC_(h5pget_sizes_c, H5PGET_SIZES_C)
+#define nh5pget_sym_k_c         H5_FC_FUNC_(h5pget_sym_k_c, H5PGET_SYM_K_C)
+#define nh5pset_sym_k_c         H5_FC_FUNC_(h5pset_sym_k_c, H5PSET_SYM_K_C)
+#define nh5pget_istore_k_c         H5_FC_FUNC_(h5pget_istore_k_c, H5PGET_ISTORE_K_C)
+#define nh5pset_istore_k_c         H5_FC_FUNC_(h5pset_istore_k_c, H5PSET_ISTORE_K_C)
+#define nh5pget_driver_c         H5_FC_FUNC_(h5pget_driver_c, H5PGET_DRIVER_C)
+#define nh5pset_fapl_stdio_c         H5_FC_FUNC_(h5pset_fapl_stdio_c, H5PSET_FAPL_STDIO_C)
+#define nh5pget_fapl_stdio_c         H5_FC_FUNC_(h5pget_fapl_stdio_c, H5PGET_FAPL_STDIO_C)
+#define nh5pset_fapl_sec2_c         H5_FC_FUNC_(h5pset_fapl_sec2_c, H5PSET_FAPL_SEC2_C)
+#define nh5pget_fapl_sec2_c         H5_FC_FUNC_(h5pget_fapl_sec2_c, H5PGET_FAPL_SEC2_C)
+#define nh5pset_alignment_c         H5_FC_FUNC_(h5pset_alignment_c, H5PSET_ALIGNMENT_C)
+#define nh5pget_alignment_c         H5_FC_FUNC_(h5pget_alignment_c, H5PGET_ALIGNMENT_C)
+#define nh5pset_fapl_core_c         H5_FC_FUNC_(h5pset_fapl_core_c, H5PSET_FAPL_CORE_C)
+#define nh5pget_fapl_core_c         H5_FC_FUNC_(h5pget_fapl_core_c, H5PGET_FAPL_CORE_C)
+#define nh5pset_fapl_family_c         H5_FC_FUNC_(h5pset_fapl_family_c, H5PSET_FAPL_FAMILY_C)
+#define nh5pget_fapl_family_c         H5_FC_FUNC_(h5pget_fapl_family_c, H5PGET_FAPL_FAMILY_C)
+#define nh5pset_cache_c         H5_FC_FUNC_(h5pset_cache_c, H5PSET_CACHE_C)
+#define nh5pget_cache_c         H5_FC_FUNC_(h5pget_cache_c, H5PGET_CACHE_C)
+#define nh5pset_fapl_split_c         H5_FC_FUNC_(h5pset_fapl_split_c, H5PSET_FAPL_SPLIT_C)
+#define nh5pget_fapl_split_c         H5_FC_FUNC_(h5pget_fapl_split_c, H5PGET_FAPL_SPLIT_C)
+#define nh5pset_gc_references_c         H5_FC_FUNC_(h5pset_gc_references_c, H5PSET_GC_REFERENCES_C)
+#define nh5pget_gc_references_c         H5_FC_FUNC_(h5pget_gc_references_c, H5PGET_GC_REFERENCES_C)
+#define nh5pset_layout_c         H5_FC_FUNC_(h5pset_layout_c, H5PSET_LAYOUT_C)
+#define nh5pget_layout_c         H5_FC_FUNC_(h5pget_layout_c, H5PGET_LAYOUT_C)
+#define nh5pset_filter_c         H5_FC_FUNC_(h5pset_filter_c, H5PSET_FILTER_C)
+#define nh5premove_filter_c         H5_FC_FUNC_(h5premove_filter_c, H5PREMOVE_FILTER_C)
+#define nh5pmodify_filter_c         H5_FC_FUNC_(h5pmodify_filter_c, H5PMODIFY_FILTER_C)
+#define nh5pget_nfilters_c         H5_FC_FUNC_(h5pget_nfilters_c, H5PGET_NFILTERS_C)
+#define nh5pget_filter_c         H5_FC_FUNC_(h5pget_filter_c, H5PGET_FILTER_C)
+#define nh5pget_filter_by_id_c         H5_FC_FUNC_(h5pget_filter_by_id_c, H5PGET_FILTER_BY_ID_C)
+#define nh5pset_external_c         H5_FC_FUNC_(h5pset_external_c, H5PSET_EXTERNAL_C)
+#define nh5pget_external_count_c         H5_FC_FUNC_(h5pget_external_count_c, H5PGET_EXTERNAL_COUNT_C)
+#define nh5pget_external_c         H5_FC_FUNC_(h5pget_external_c, H5PGET_EXTERNAL_C)
+#define nh5pget_btree_ratios_c         H5_FC_FUNC_(h5pget_btree_ratios_c, H5PGET_BTREE_RATIOS_C)
+#define nh5pset_btree_ratios_c         H5_FC_FUNC_(h5pset_btree_ratios_c, H5PSET_BTREE_RATIOS_C)
+#define nh5pset_fapl_mpio_c         H5_FC_FUNC_(h5pset_fapl_mpio_c, H5PSET_FAPL_MPIO_C)
+#define nh5pget_fapl_mpio_c         H5_FC_FUNC_(h5pget_fapl_mpio_c, H5PGET_FAPL_MPIO_C)
+#define nh5pset_fapl_mpiposix_c     H5_FC_FUNC_(h5pset_fapl_mpiposix_c, H5PSET_FAPL_MPIPOSIX_C)
+#define nh5pget_fapl_mpiposix_c     H5_FC_FUNC_(h5pget_fapl_mpiposix_c, H5PGET_FAPL_MPIPOSIX_C)
+#define nh5pset_dxpl_mpio_c        H5_FC_FUNC_(h5pset_dxpl_mpio_c, H5PSET_DXPL_MPIO_C)
+#define nh5pget_dxpl_mpio_c        H5_FC_FUNC_(h5pget_dxpl_mpio_c, H5PGET_DXPL_MPIO_C)
+#define nh5pget_fclose_degree_c    H5_FC_FUNC_(h5pget_fclose_degree_c, H5PGET_FCLOSE_DEGREE_C)
+#define nh5pset_fclose_degree_c    H5_FC_FUNC_(h5pset_fclose_degree_c, H5PSET_FCLOSE_DEGREE_C)
+#define nh5pset_buffer_c    H5_FC_FUNC_(h5pset_buffer_c, H5PSET_BUFFER_C)
+#define nh5pget_buffer_c    H5_FC_FUNC_(h5pget_buffer_c, H5PGET_BUFFER_C)
+#define nh5pfill_value_defined_c    H5_FC_FUNC_(h5pfill_value_defined_c, H5PFILL_VALUE_DEFINED_C)
+#define nh5pset_alloc_time_c    H5_FC_FUNC_(h5pset_alloc_time_c, H5PSET_ALLOC_TIME_C)
+#define nh5pget_alloc_time_c    H5_FC_FUNC_(h5pget_alloc_time_c, H5PGET_ALLOC_TIME_C)
+#define nh5pset_fill_time_c    H5_FC_FUNC_(h5pset_fill_time_c, H5PSET_FILL_TIME_C)
+#define nh5pget_fill_time_c    H5_FC_FUNC_(h5pget_fill_time_c, H5PGET_FILL_TIME_C)
+#define nh5pset_meta_block_size_c    H5_FC_FUNC_(h5pset_meta_block_size_c, H5PSET_META_BLOCK_SIZE_C)
+#define nh5pget_meta_block_size_c    H5_FC_FUNC_(h5pget_meta_block_size_c, H5PGET_META_BLOCK_SIZE_C)
+#define nh5pset_sieve_buf_size_c    H5_FC_FUNC_(h5pset_sieve_buf_size_c, H5PSET_SIEVE_BUF_SIZE_C)
+#define nh5pget_sieve_buf_size_c    H5_FC_FUNC_(h5pget_sieve_buf_size_c, H5PGET_SIEVE_BUF_SIZE_C)
+#define nh5pset_hyper_vector_size_c    H5_FC_FUNC_(h5pset_hyper_vector_size_c, H5PSET_HYPER_VECTOR_SIZE_C)
+#define nh5pget_hyper_vector_size_c    H5_FC_FUNC_(h5pget_hyper_vector_size_c, H5PGET_HYPER_VECTOR_SIZE_C)
+#define nh5pset_small_data_block_size_c    H5_FC_FUNC_(h5pset_small_data_block_size_c, H5PSET_SMALL_DATA_BLOCK_SIZE_C)
+#define nh5pget_small_data_block_size_c    H5_FC_FUNC_(h5pget_small_data_block_size_c, H5PGET_SMALL_DATA_BLOCK_SIZE_C)
+#define nh5pcreate_class_c             H5_FC_FUNC_(h5pcreate_class_c, H5PCREATE_CLASS_C)
+#define nh5pregister_c                 H5_FC_FUNC_(h5pregister_c, H5PREGISTER_C)
+#define nh5pregister_integer_c                 H5_FC_FUNC_(h5pregister_integer_c, H5PREGISTER_INTEGER_C)
+#define nh5pregister_real_c                    H5_FC_FUNC_(h5pregister_real_c, H5PREGISTER_REAL_C)
+#define nh5pregister_double_c                  H5_FC_FUNC_(h5pregister_double_c, H5PREGISTER_DOUBLE_C)
+#define nh5pregisterc_c                H5_FC_FUNC_(h5pregisterc_c, H5PREGISTERC_C)
+#define nh5pinsert_c                   H5_FC_FUNC_(h5pinsert_c, H5PINSERT_C)
+#define nh5pinsert_integer_c                   H5_FC_FUNC_(h5pinsert_integer_c, H5PINSERT_INTEGER_C)
+#define nh5pinsert_real_c                   H5_FC_FUNC_(h5pinsert_real_c, H5PINSERT_REAL_C)
+#define nh5pinsert_double_c                   H5_FC_FUNC_(h5pinsert_double_c, H5PINSERT_DOUBLE_C)
+#define nh5pinsertc_c                  H5_FC_FUNC_(h5pinsertc_c, H5PINSERTC_C)
+#define nh5pset_c                      H5_FC_FUNC_(h5pset_c, H5PSET_C)
+#define nh5pset_integer_c                      H5_FC_FUNC_(h5pset_integer_c, H5PSET_INTEGER_C)
+#define nh5pset_real_c                         H5_FC_FUNC_(h5pset_real_c, H5PSET_REAL_C)
+#define nh5pset_double_c                       H5_FC_FUNC_(h5pset_double_c, H5PSET_DOUBLE_C)
+#define nh5psetc_c                     H5_FC_FUNC_(h5psetc_c, H5PSETC_C)
+#define nh5pget_c                      H5_FC_FUNC_(h5pget_c, H5PGET_C)
+#define nh5pget_integer_c                      H5_FC_FUNC_(h5pget_integer_c, H5PGET_INTEGER_C)
+#define nh5pget_real_c                         H5_FC_FUNC_(h5pget_real_c, H5PGET_REAL_C)
+#define nh5pget_double_c                       H5_FC_FUNC_(h5pget_double_c, H5PGET_DOUBLE_C)
+#define nh5pgetc_c                     H5_FC_FUNC_(h5pgetc_c, H5PGETC_C)
+#define nh5pexist_c                    H5_FC_FUNC_(h5pexist_c, H5PEXIST_C)
+#define nh5pget_size_c                 H5_FC_FUNC_(h5pget_size_c, H5PGET_SIZE_C)
+#define nh5pget_nprops_c               H5_FC_FUNC_(h5pget_nprops_c, H5PGET_NPROPS_C)
+#define nh5pget_class_parent_c         H5_FC_FUNC_(h5pget_class_parent_c, H5PGET_CLASS_PARENT_C)
+#define nh5pisa_class_c                H5_FC_FUNC_(h5pisa_class_c, H5PISA_CLASS_C)
+#define nh5pcopy_prop_c                H5_FC_FUNC_(h5pcopy_prop_c, H5PCOPY_PROP_C)
+#define nh5premove_c                   H5_FC_FUNC_(h5premove_c, H5PREMOVE_C)
+#define nh5punregister_c               H5_FC_FUNC_(h5punregister_c, H5PUNREGISTER_C)
+#define nh5pclose_class_c              H5_FC_FUNC_(h5pclose_class_c, H5PCLOSE_CLASS_C)
+#define nh5pget_class_name_c           H5_FC_FUNC_(h5pget_class_name_c, H5PGET_CLASS_NAME_C)
+#define nh5pset_shuffle_c               H5_FC_FUNC_(h5pset_shuffle_c, H5PSET_SHUFFLE_C)
+#define nh5pset_fletcher32_c           H5_FC_FUNC_(h5pset_fletcher32_c, H5PSET_FLETCHER32_C)
+#define nh5pset_edc_check_c            H5_FC_FUNC_(h5pset_edc_check_c, H5PSET_EDC_CHECK_C)
+#define nh5pget_edc_check_c            H5_FC_FUNC_(h5pget_edc_check_c, H5PGET_EDC_CHECK_C)
+#define nh5pset_family_offset_c       H5_FC_FUNC_(h5pset_family_offset_c, H5PSET_FAMILY_OFFSET_C)
+#define nh5pget_fapl_multi_c          H5_FC_FUNC_(h5pget_fapl_multi_c, H5PGET_FAPL_MULTI_C)
+#define nh5pset_fapl_multi_c          H5_FC_FUNC_(h5pset_fapl_multi_c, H5PSET_FAPL_MULTI_C)
+#define nh5pset_fapl_multi_sc          H5_FC_FUNC_(h5pset_fapl_multi_sc, H5PSET_FAPL_MULTI_SC)
+#define nh5pset_szip_c                 H5_FC_FUNC_(h5pset_szip_c, H5PSET_SZIP_C)
+#define nh5pall_filters_avail_c        H5_FC_FUNC_(h5pall_filters_avail_c, H5PALL_FILTERS_AVAIL_C)
+#define nh5pget_attr_phase_change_c    H5_FC_FUNC_(h5pget_attr_phase_change_c, H5PGET_ATTR_PHASE_CHANGE_C)
+#define nh5pset_attr_creation_order_c  H5_FC_FUNC_(h5pset_attr_creation_order_c, H5PSET_ATTR_CREATION_ORDER_C)
+#define nh5pset_shared_mesg_nindexes_c  H5_FC_FUNC_(h5pset_shared_mesg_nindexes_c, H5PSET_SHARED_MESG_NINDEXES_C)
+#define nh5pset_shared_mesg_index_c  H5_FC_FUNC_(h5pset_shared_mesg_index_c,H5PSET_SHARED_MESG_INDEX_C)
+#define nh5pget_attr_creation_order_c  H5_FC_FUNC_(h5pget_attr_creation_order_c,H5PGET_ATTR_CREATION_ORDER_C)
+#define nh5pset_libver_bounds_c H5_FC_FUNC_(h5pset_libver_bounds_c,H5PSET_LIBVER_BOUNDS_C)
+#define nh5pset_link_creation_order_c H5_FC_FUNC_(h5pset_link_creation_order_c, H5PSET_LINK_CREATION_ORDER_C)
+#define nh5pget_link_phase_change_c H5_FC_FUNC_(h5pget_link_phase_change_c, H5PGET_LINK_PHASE_CHANGE_C)
+#define nh5pget_obj_track_times_c H5_FC_FUNC_(h5pget_obj_track_times_c, H5PGET_OBJ_TRACK_TIMES_C)
+#define nh5pset_obj_track_times_c H5_FC_FUNC_(h5pset_obj_track_times_c, H5PSET_OBJ_TRACK_TIMES_C)
+#define nh5pset_create_inter_group_c H5_FC_FUNC_(h5pset_create_inter_group_c,H5PSET_CREATE_INTER_GROUP_C)
+#define nh5pget_create_inter_group_c H5_FC_FUNC_(h5pget_create_inter_group_c,H5PGET_CREATE_INTER_GROUP_C)
+#define nh5pget_link_creation_order_c H5_FC_FUNC_(h5pget_link_creation_order_c,H5PGET_LINK_CREATION_ORDER_C)
+#define nh5pset_char_encoding_c H5_FC_FUNC_(h5pset_char_encoding_c, H5PSET_CHAR_ENCODING_C)
+#define nh5pget_char_encoding_c H5_FC_FUNC_(h5pget_char_encoding_c, H5PGET_CHAR_ENCODING_C)
+#define nh5pset_copy_object_c H5_FC_FUNC_(h5pset_copy_object_c, H5PSET_COPY_OBJECT_C)
+#define nh5pget_copy_object_c H5_FC_FUNC_(h5pget_copy_object_c, H5PGET_COPY_OBJECT_C)
+#define nh5pget_data_transform_c H5_FC_FUNC_(h5pget_data_transform_c, H5PGET_DATA_TRANSFORM_C)
+#define nh5pset_data_transform_c H5_FC_FUNC_(h5pset_data_transform_c, H5PSET_DATA_TRANSFORM_C)
+#define nh5pget_local_heap_size_hint_c H5_FC_FUNC_(h5pget_local_heap_size_hint_c, H5PGET_LOCAL_HEAP_SIZE_HINT_C)
+#define nh5pget_est_link_info_c H5_FC_FUNC_(h5pget_est_link_info_c,H5PGET_EST_LINK_INFO_C)
+#define nh5pset_est_link_info_c H5_FC_FUNC_(h5pset_est_link_info_c,H5PSET_EST_LINK_INFO_C)
+#define nh5pset_local_heap_size_hint_c H5_FC_FUNC_(h5pset_local_heap_size_hint_c, H5PSET_LOCAL_HEAP_SIZE_HINT_C)
+#define nh5pset_link_phase_change_c H5_FC_FUNC_(h5pset_link_phase_change_c, H5PSET_LINK_PHASE_CHANGE_C)
+#define nh5pset_fapl_direct_c H5_FC_FUNC_(h5pset_fapl_direct_c, H5PSET_FAPL_DIRECT_C)
+#define nh5pget_fapl_direct_c H5_FC_FUNC_(h5pget_fapl_direct_c, H5PGET_FAPL_DIRECT_C)
+#define nh5pset_attr_phase_change_c H5_FC_FUNC_(h5pset_attr_phase_change_c, H5PSET_ATTR_PHASE_CHANGE_C)
+#define nh5pset_nbit_c H5_FC_FUNC_(h5pset_nbit_c, H5PSET_NBIT_C)
+#define nh5pset_scaleoffset_c H5_FC_FUNC_(h5pset_scaleoffset_c, H5PSET_SCALEOFFSET_C)
+#define nh5pset_nlinks_c H5_FC_FUNC_(h5pset_nlinks_c, H5PSET_NLINKS_C)
+#define nh5pget_nlinks_c H5_FC_FUNC_(h5pget_nlinks_c, H5PGET_NLINKS_C)
+#define nh5pset_chunk_cache_c H5_FC_FUNC_(h5pset_chunk_cache_c, H5PSET_CHUNK_CACHE_C)
+#define nh5pget_chunk_cache_c H5_FC_FUNC_(h5pget_chunk_cache_c, H5PGET_CHUNK_CACHE_C)
 
 H5_FCDLL int_f nh5pcreate_c ( hid_t_f *cls, hid_t_f *prp_id );
 H5_FCDLL int_f nh5pclose_c ( hid_t_f *prp_id );
@@ -971,13 +1041,12 @@ H5_FCDLL int_f nh5pget_fapl_mpio_c(hid_t_f *prp_id, int_f* comm, int_f* info);
 H5_FCDLL int_f nh5pset_fapl_mpio_c(hid_t_f *prp_id, int_f* comm, int_f* info);
 H5_FCDLL int_f nh5pget_fapl_mpiposix_c(hid_t_f *prp_id, int_f* comm, int_f* flag);
 H5_FCDLL int_f nh5pset_fapl_mpiposix_c(hid_t_f *prp_id, int_f* comm, int_f* flag);
-H5_FCDLL int_f nh5pget_dxpl_mpio_rc(hid_t_f *prp_id, int_f* data_xfer_mode);
+H5_FCDLL int_f nh5pget_dxpl_mpio_c(hid_t_f *prp_id, int_f* data_xfer_mode);
 H5_FCDLL int_f nh5pset_dxpl_mpio_c(hid_t_f *prp_id, int_f* data_xfer_mode);
 H5_FCDLL int_f nh5pset_fclose_degree_c(hid_t_f *fapl, int_f *degree);
 H5_FCDLL int_f nh5pget_fclose_degree_c(hid_t_f *fapl, int_f *degree);
 H5_FCDLL int_f nh5pget_buffer_c(hid_t_f *plist, hsize_t_f *size);
 H5_FCDLL int_f nh5pset_buffer_c(hid_t_f *plist, hsize_t_f *size);
-H5_FCDLL int_f nh5pfill_value_define_c(hid_t_f *plist, int_f *flag);
 H5_FCDLL int_f nh5pset_alloc_time_c(hid_t_f *plist, int_f *flag);
 H5_FCDLL int_f nh5pget_alloc_time_c(hid_t_f *plist, int_f *flag);
 H5_FCDLL int_f nh5pset_fill_time_c(hid_t_f *plist, int_f *flag);
@@ -990,7 +1059,10 @@ H5_FCDLL int_f nh5pset_small_data_block_size_c(hid_t_f *plist, hsize_t_f *size);
 H5_FCDLL int_f nh5pget_small_data_block_size_c(hid_t_f *plist, hsize_t_f *size);
 H5_FCDLL int_f nh5pset_hyper_vector_size_c(hid_t_f *plist, size_t_f *size);
 H5_FCDLL int_f nh5pget_hyper_vector_size_c(hid_t_f *plist, size_t_f *size);
-H5_FCDLL int_f nh5pcreate_class_c(hid_t_f *parent, _fcd name, int_f *name_len, hid_t_f *cls);
+H5_FCDLL int_f nh5pcreate_class_c(hid_t_f *parent, _fcd name, int_f *name_len, hid_t_f *cls,
+				  H5P_cls_create_func_t create, void *create_data,
+				  H5P_cls_copy_func_t copy, void *copy_data,
+				  H5P_cls_close_func_t close, void *close_data);
 H5_FCDLL int_f nh5pregister_c(hid_t_f *cls, _fcd name, int_f * name_len, size_t_f *size, void *value);
 H5_FCDLL int_f nh5pregister_integer_c(hid_t_f *cls, _fcd name, int_f * name_len, size_t_f *size, void *value);
 H5_FCDLL int_f nh5pregister_real_c(hid_t_f *cls, _fcd name, int_f * name_len, size_t_f *size, void *value);
@@ -1068,34 +1140,42 @@ H5_FCDLL int_f nh5pget_chunk_cache_c(hid_t_f *dapl_id, size_t_f *rdcc_nslots, si
 /*
  * Functions frome H5Rf.c
  */
-#   define nh5rcreate_object_c     H5_FC_FUNC_(h5rcreate_object_c, H5RCREATE_OBJECT_C)
-#   define nh5rcreate_region_c     H5_FC_FUNC_(h5rcreate_region_c, H5RCREATE_REGION_C)
-#   define nh5rdereference_region_c H5_FC_FUNC_(h5rdereference_region_c, H5RDEREFERENCE_REGION_C)
-#   define nh5rdereference_object_c H5_FC_FUNC_(h5rdereference_object_c, H5RDEREFERENCE_OBJECT_C)
-#   define nh5rget_region_region_c H5_FC_FUNC_(h5rget_region_region_c, H5RGET_REGION_REGION_C)
-#   define nh5rget_object_type_obj_c H5_FC_FUNC_(h5rget_object_type_obj_c, H5RGET_OBJECT_TYPE_OBJ_C)
-#   define nh5rget_name_object_c H5_FC_FUNC_(h5rget_name_object_c, H5RGET_NAME_OBJECT_C)
-#   define nh5rget_name_region_c H5_FC_FUNC_(h5rget_name_region_c, H5RGET_NAME_REGION_C)
+#define nh5rcreate_object_c     H5_FC_FUNC_(h5rcreate_object_c, H5RCREATE_OBJECT_C)
+#define nh5rcreate_region_c     H5_FC_FUNC_(h5rcreate_region_c, H5RCREATE_REGION_C)
+#define nh5rcreate_ptr_c     H5_FC_FUNC_(h5rcreate_ptr_c, H5RCREATE_PTR_C)
+#define nh5rdereference_region_c H5_FC_FUNC_(h5rdereference_region_c, H5RDEREFERENCE_REGION_C)
+#define nh5rdereference_object_c H5_FC_FUNC_(h5rdereference_object_c, H5RDEREFERENCE_OBJECT_C)
+#define nh5rdereference_ptr_c H5_FC_FUNC_(h5rdereference_ptr_c, H5RDEREFERENCE_PTR_C)
+#define nh5rget_region_region_c H5_FC_FUNC_(h5rget_region_region_c, H5RGET_REGION_REGION_C)
+#define nh5rget_object_type_obj_c H5_FC_FUNC_(h5rget_object_type_obj_c, H5RGET_OBJECT_TYPE_OBJ_C)
+#define nh5rget_name_object_c H5_FC_FUNC_(h5rget_name_object_c, H5RGET_NAME_OBJECT_C)
+#define nh5rget_name_region_c H5_FC_FUNC_(h5rget_name_region_c, H5RGET_NAME_REGION_C)
+#define nh5rget_name_ptr_c H5_FC_FUNC_(h5rget_name_ptr_c, H5RGET_NAME_PTR_C)
+#define nh5rget_obj_type_c H5_FC_FUNC_(h5rget_obj_type_c, H5RGET_OBJ_TYPE_C)
 
 
 H5_FCDLL int_f nh5rcreate_object_c (haddr_t_f *ref, hid_t_f *loc_id, _fcd name, int_f *namelen);
 H5_FCDLL int_f nh5rcreate_region_c (int_f *ref, hid_t_f *loc_id, _fcd name, int_f *namelen, hid_t_f *space_id);
+H5_FCDLL int_f nh5rcreate_ptr_c (void *ref, hid_t_f *loc_id, _fcd name, int_f *namelen, int_f *ref_type, hid_t_f *space_id);
 H5_FCDLL int_f nh5rdereference_region_c (hid_t_f *dset_id, int_f *ref, hid_t_f *obj_id);
 H5_FCDLL int_f nh5rdereference_object_c (hid_t_f *dset_id, haddr_t_f *ref, hid_t_f *obj_id);
+H5_FCDLL int_f nh5rdereference_ptr_c (hid_t_f *obj_id, int_f *ref_type, void *ref, hid_t_f *ref_obj_id);
 H5_FCDLL int_f nh5rget_region_region_c (hid_t_f *dset_id, int_f *ref, hid_t_f *space_id);
 H5_FCDLL int_f nh5rget_object_type_obj_c (hid_t_f *dset_id, haddr_t_f *ref, int_f *obj_type);
 H5_FCDLL int_f nh5rget_name_object_c (hid_t_f *loc_id, haddr_t_f *ref, _fcd name, size_t_f *name_len, size_t_f *size_default);
 H5_FCDLL int_f nh5rget_name_region_c (hid_t_f *loc_id, int_f *ref, _fcd name, size_t_f *name_len, size_t_f *size_default);
+H5_FCDLL int_f nh5rget_name_ptr_c (hid_t_f *loc_id, int_f *ref_type, void *ref, _fcd name, size_t_f *name_len, size_t_f *size_default);
+H5_FCDLL int_f nh5rget_obj_type_c (hid_t_f *loc_id, int_f *ref_type, void *ref, int_f *obj_type);
 /*
  * Functions from H5If.c
  */
-#  define nh5iget_type_c    H5_FC_FUNC_(h5iget_type_c, H5IGET_TYPE_C)
-#  define nh5iget_name_c    H5_FC_FUNC_(h5iget_name_c, H5IGET_NAME_C)
-#  define nh5iinc_ref_c     H5_FC_FUNC_(h5iinc_ref_c, H5IINC_REF_C)
-#  define nh5idec_ref_c     H5_FC_FUNC_(h5idec_ref_c, H5IDEC_REF_C)
-#  define nh5iget_ref_c     H5_FC_FUNC_(h5iget_ref_c, H5IGET_REF_C)
-#  define nh5iget_file_id_c H5_FC_FUNC_(h5iget_file_id_c, H5IGET_FILE_ID_C)
-#  define nh5iis_valid_c    H5_FC_FUNC_(h5iis_valid_c, H5IIS_VALID_C)
+#define nh5iget_type_c    H5_FC_FUNC_(h5iget_type_c, H5IGET_TYPE_C)
+#define nh5iget_name_c    H5_FC_FUNC_(h5iget_name_c, H5IGET_NAME_C)
+#define nh5iinc_ref_c     H5_FC_FUNC_(h5iinc_ref_c, H5IINC_REF_C)
+#define nh5idec_ref_c     H5_FC_FUNC_(h5idec_ref_c, H5IDEC_REF_C)
+#define nh5iget_ref_c     H5_FC_FUNC_(h5iget_ref_c, H5IGET_REF_C)
+#define nh5iget_file_id_c H5_FC_FUNC_(h5iget_file_id_c, H5IGET_FILE_ID_C)
+#define nh5iis_valid_c    H5_FC_FUNC_(h5iis_valid_c, H5IIS_VALID_C)
 
 H5_FCDLL int_f nh5iget_type_c(hid_t_f *obj_id, int_f *type);
 H5_FCDLL int_f nh5iget_name_c(hid_t_f *obj_id, _fcd buf, size_t_f *buf_size, size_t_f *name_size);
@@ -1108,45 +1188,49 @@ H5_FCDLL int_f nh5iis_valid_c(hid_t_f *obj_id, int_f *c_valid);
 /*
  * Functions from H5Ef.c
  */
-#  define nh5eclear_c     H5_FC_FUNC_(h5eclear_c, H5ECLEAR_C)
-#  define nh5eprint_c1    H5_FC_FUNC_(h5eprint_c1, H5EPRINT_C1)
-#  define nh5eprint_c2    H5_FC_FUNC_(h5eprint_c2, H5EPRINT_C2)
-#  define nh5eget_major_c H5_FC_FUNC_(h5eget_major_c, H5EGET_MAJOR_C)
-#  define nh5eget_minor_c H5_FC_FUNC_(h5eget_minor_c, H5EGET_MINOR_C)
-#  define nh5eset_auto_c  H5_FC_FUNC_(h5eset_auto_c, H5ESET_AUTO_C)
+#define nh5eclear_c     H5_FC_FUNC_(h5eclear_c, H5ECLEAR_C)
+#define nh5eprint_c1    H5_FC_FUNC_(h5eprint_c1, H5EPRINT_C1)
+#define nh5eprint_c2    H5_FC_FUNC_(h5eprint_c2, H5EPRINT_C2)
+#define nh5eget_major_c H5_FC_FUNC_(h5eget_major_c, H5EGET_MAJOR_C)
+#define nh5eget_minor_c H5_FC_FUNC_(h5eget_minor_c, H5EGET_MINOR_C)
+#define nh5eset_auto_c  H5_FC_FUNC_(h5eset_auto_c, H5ESET_AUTO_C)
+#define nh5eset_auto2_c  H5_FC_FUNC_(h5eset_auto2_c, H5ESET_AUTO2_C)
+#define nprocess_buffer  H5_FC_FUNC_(process_buffer, PROCESS_BUFFER)
 
 
-H5_FCDLL int_f nh5eclear_c(void);
+H5_FCDLL int_f nh5eclear_c(hid_t_f *estack_id);
 H5_FCDLL int_f nh5eprint_c1(_fcd name, int_f* namelen);
 H5_FCDLL int_f nh5eprint_c2(void);
 H5_FCDLL int_f nh5eget_major_c(int_f* error_no, _fcd name, size_t_f* namelen);
 H5_FCDLL int_f nh5eget_minor_c(int_f* error_no, _fcd name, size_t_f* namelen);
 H5_FCDLL int_f nh5eset_auto_c(int_f* printflag);
+H5_FCDLL int_f nh5eset_auto2_c(int_f* printflag, hid_t_f *estack_id, H5E_auto2_t func, void *client_data);
+H5_FCDLL int_f nprocess_buffer(hid_t_f *estack_id,void **buffer);
 
 /*
  * Functions from H5f.c
  */
-#   define nh5open_c            H5_FC_FUNC_(h5open_c, H5OPEN_C)
-#   define nh5close_c           H5_FC_FUNC_(h5close_c, H5CLOSE_C)
-#   define nh5init_types_c      H5_FC_FUNC_(h5init_types_c, H5INIT_TYPES_C)
-#   define nh5close_types_c     H5_FC_FUNC_(h5close_types_c, H5CLOSE_TYPES_C)
-#   define nh5init_flags_c      H5_FC_FUNC_(h5init_flags_c, H5INIT_FLAGS_C)
-#   define nh5init1_flags_c     H5_FC_FUNC_(h5init1_flags_c, H5INIT1_FLAGS_C)
-#   define nh5get_libversion_c  H5_FC_FUNC_(h5get_libversion_c, H5GET_LIBVERSION_C)
-#   define nh5check_version_c   H5_FC_FUNC_(h5check_version_c, H5CHECK_VERSION_C)
-#   define nh5garbage_collect_c H5_FC_FUNC_(h5garbage_collect_c, H5GARBAGE_COLLECT_C)
-#   define nh5dont_atexit_c     H5_FC_FUNC_(h5dont_atexit_c, H5DONT_ATEXIT_C)
+#define nh5open_c            H5_FC_FUNC_(h5open_c, H5OPEN_C)
+#define nh5close_c           H5_FC_FUNC_(h5close_c, H5CLOSE_C)
+#define nh5init_types_c      H5_FC_FUNC_(h5init_types_c, H5INIT_TYPES_C)
+#define nh5close_types_c     H5_FC_FUNC_(h5close_types_c, H5CLOSE_TYPES_C)
+#define nh5init_flags_c      H5_FC_FUNC_(h5init_flags_c, H5INIT_FLAGS_C)
+#define nh5init1_flags_c     H5_FC_FUNC_(h5init1_flags_c, H5INIT1_FLAGS_C)
+#define nh5get_libversion_c  H5_FC_FUNC_(h5get_libversion_c, H5GET_LIBVERSION_C)
+#define nh5check_version_c   H5_FC_FUNC_(h5check_version_c, H5CHECK_VERSION_C)
+#define nh5garbage_collect_c H5_FC_FUNC_(h5garbage_collect_c, H5GARBAGE_COLLECT_C)
+#define nh5dont_atexit_c     H5_FC_FUNC_(h5dont_atexit_c, H5DONT_ATEXIT_C)
 
 
 H5_FCDLL int_f nh5open_c(void);
 H5_FCDLL int_f nh5close_c(void);
 H5_FCDLL int_f nh5init_types_c(hid_t_f *types, hid_t_f * floatingtypes, hid_t_f * integertypes);
 H5_FCDLL int_f nh5close_types_c(hid_t_f *types, int_f *lentypes, hid_t_f * floatingtypes, int_f * floatinglen, hid_t_f * integertypes,  int_f * integerlen);
-H5_FCDLL int_f nh5init_flags_c( int_f *h5d_flags, int_f *h5f_flags,
-				int_f *h5fd_flags, hid_t_f *h5fd_hid_flags,
-				int_f *h5g_flags, int_f *h5i_flags, int_f *h5l_flags, int_f *h5o_flags,
-				hid_t_f *h5p_flags, int_f *h5p_flags_int, int_f *h5r_flags, int_f *h5s_flags,
-				int_f *h5t_flags, int_f *h5z_flags, int_f *h5_generic_flags);
+H5_FCDLL int_f nh5init_flags_c(int_f *h5d_flags, int_f *h5e_flags, hid_t_f *h5e_hid_flags, int_f *h5f_flags,
+			       int_f *h5fd_flags, hid_t_f *h5fd_hid_flags,
+			       int_f *h5g_flags, int_f *h5i_flags, int_f *h5l_flags, int_f *h5o_flags,
+			       hid_t_f *h5p_flags, int_f *h5p_flags_int, int_f *h5r_flags, int_f *h5s_flags,
+			       int_f *h5t_flags, int_f *h5z_flags, int_f *h5_generic_flags);
 H5_FCDLL int_f nh5init1_flags_c(int_f *h5lib_flags);
 H5_FCDLL int_f nh5get_libversion_c(int_f *majnum, int_f *minnum, int_f *relnum);
 H5_FCDLL int_f nh5check_version_c(int_f *majnum, int_f *minnum, int_f *relnum);
@@ -1156,9 +1240,9 @@ H5_FCDLL int_f nh5dont_atexit_c(void);
 /*
  * Functions from H5Zf.c
  */
-#  define nh5zunregister_c    H5_FC_FUNC_(h5zunregister_c, H5ZUNREGISTER_C)
-#  define nh5zfilter_avail_c  H5_FC_FUNC_(h5zfilter_avail_c, H5ZFILTER_AVAIL_C)
-#  define nh5zget_filter_info_c H5_FC_FUNC_(h5zget_filter_info_c, H5ZGET_FILTER_INFO_C)
+#define nh5zunregister_c    H5_FC_FUNC_(h5zunregister_c, H5ZUNREGISTER_C)
+#define nh5zfilter_avail_c  H5_FC_FUNC_(h5zfilter_avail_c, H5ZFILTER_AVAIL_C)
+#define nh5zget_filter_info_c H5_FC_FUNC_(h5zget_filter_info_c, H5ZGET_FILTER_INFO_C)
 
 
 H5_FCDLL int_f nh5zunregister_c (int_f *filter);
@@ -1169,19 +1253,21 @@ H5_FCDLL int_f nh5zget_filter_info_c (int_f *filter, int_f *flag);
 /*
  * Functions from H5Lf.c
  */
-# define nh5lcopy_c H5_FC_FUNC_(h5lcopy_c, H5LCOPY_C)
-# define nh5lcreate_external_c H5_FC_FUNC_(h5lcreate_external_c, H5LCREATE_EXTERNAL_C)
-# define nh5lcreate_hard_c H5_FC_FUNC_(h5lcreate_hard_c, H5LCREATE_HARD_C)
-# define nh5lcreate_soft_c H5_FC_FUNC_(h5lcreate_soft_c, H5LCREATE_SOFT_C)
-# define nh5ldelete_c H5_FC_FUNC_(h5ldelete_c, H5LDELETE_C)
-# define nh5ldelete_by_idx_c H5_FC_FUNC_(h5ldelete_by_idx_c, H5LDELETE_BY_IDX_C)
-# define nh5lexists_c H5_FC_FUNC_(h5lexists_c, H5LEXISTS_C)
-# define nh5lget_info_c H5_FC_FUNC_(h5lget_info_c, H5LGET_INFO_C)
-# define nh5lget_info_by_idx_c H5_FC_FUNC_(h5lget_info_by_idx_c, H5LGET_INFO_BY_IDX_C)
-# define nh5lis_registered_c H5_FC_FUNC_(h5lis_registered_c, H5LIS_REGISTERED_C)
-# define nh5lmove_c H5_FC_FUNC_(h5lmove_c, H5LMOVE_C)
-# define nh5lget_name_by_idx_c H5_FC_FUNC_(h5lget_name_by_idx_c, H5LGET_NAME_BY_IDX_C)
-# define nh5lget_val_c H5_FC_FUNC_(h5lget_val_c, H5LGET_VAL_C)
+#define nh5lcopy_c H5_FC_FUNC_(h5lcopy_c, H5LCOPY_C)
+#define nh5lcreate_external_c H5_FC_FUNC_(h5lcreate_external_c, H5LCREATE_EXTERNAL_C)
+#define nh5lcreate_hard_c H5_FC_FUNC_(h5lcreate_hard_c, H5LCREATE_HARD_C)
+#define nh5lcreate_soft_c H5_FC_FUNC_(h5lcreate_soft_c, H5LCREATE_SOFT_C)
+#define nh5ldelete_c H5_FC_FUNC_(h5ldelete_c, H5LDELETE_C)
+#define nh5ldelete_by_idx_c H5_FC_FUNC_(h5ldelete_by_idx_c, H5LDELETE_BY_IDX_C)
+#define nh5lexists_c H5_FC_FUNC_(h5lexists_c, H5LEXISTS_C)
+#define nh5lget_info_c H5_FC_FUNC_(h5lget_info_c, H5LGET_INFO_C)
+#define nh5lget_info_by_idx_c H5_FC_FUNC_(h5lget_info_by_idx_c, H5LGET_INFO_BY_IDX_C)
+#define nh5lis_registered_c H5_FC_FUNC_(h5lis_registered_c, H5LIS_REGISTERED_C)
+#define nh5lmove_c H5_FC_FUNC_(h5lmove_c, H5LMOVE_C)
+#define nh5lget_name_by_idx_c H5_FC_FUNC_(h5lget_name_by_idx_c, H5LGET_NAME_BY_IDX_C)
+#define nh5lget_val_c H5_FC_FUNC_(h5lget_val_c, H5LGET_VAL_C) 
+#define nh5literate_c H5_FC_FUNC_(h5literate_c, H5LITERATE_C) 
+#define nh5literate_by_name_c H5_FC_FUNC_(h5literate_by_name_c, H5LITERATE_BY_NAME_C)
 
 H5_FCDLL int_f nh5lcopy_c(hid_t_f *src_loc_id, _fcd src_name, size_t_f *src_namelen, hid_t_f *dest_loc_id,
 			  _fcd dest_name, size_t_f *dest_namelen,
@@ -1217,4 +1303,8 @@ H5_FCDLL int_f nh5lget_name_by_idx_c(hid_t_f *loc_id, _fcd group_name, size_t_f
 H5_FCDLL int_f nh5lget_val_c(hid_t_f *link_loc_id, _fcd link_name, size_t_f *link_namelen, size_t_f *size,
 			     void *linkval_buff, hid_t_f *lapl_id) ;
 
+H5_FCDLL int_f nh5literate_c(hid_t_f *group_id, int_f *index_type, int_f *order, hsize_t_f *idx, H5L_iterate_t op, void *op_data );
+H5_FCDLL int_f nh5literate_by_name_c(hid_t_f *loc_id, _fcd name, size_t_f *namelen, int_f *index_type, int_f *order, hsize_t_f *idx, H5L_iterate_t op, void *op_data, hid_t_f *lapl_id);
+
+
 #endif /* _H5f90proto_H */
diff --git a/fortran/src/H5match_types.c b/fortran/src/H5match_types.c
index 78fb9e9..61504ec 100644
--- a/fortran/src/H5match_types.c
+++ b/fortran/src/H5match_types.c
@@ -1,4 +1,18 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****p* Program/H5match_types
+ *
+ * NAME
+ *  Executable: H5match_types
+ *
+ * FILE
+ *  fortran/src/H5match_types.c
+ *
+ * PURPOSE
+ *  C Program to match C types to Fortran types.
+ *  Creates the files H5f90i_gen.h for the C code and
+ *  H5fortran_types.f90 for the Fortran code.
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,12 +25,10 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* C Program to match C types to Fortran types
- * Creates the files H5f90i_gen.h for the C code and H5fortran_types.f90
- * for the Fortran.
- */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include <stdio.h>
 #include <assert.h>
@@ -35,11 +47,19 @@ FILE * fort_header;
 #define CFILE "H5f90i_gen.h"
 #define FFILE "H5fortran_types.f90"
 
+/* Prototypes for the write routines */
+void writeTypedef(const char* c_type, unsigned int size);
+void writeFloatTypedef(const char* c_type, unsigned int size);
+void writeTypedefDefault(unsigned int size);
+void writeToFiles(const char* fortran_type, const char* c_type, unsigned int size, unsigned int kind);
+void writeFloatToFiles(const char* fortran_type, const char* c_type, unsigned int size, unsigned int kind);
+
 static void
 initCfile(void)
 {
   fprintf(c_header,
-    "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\
+ "/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\
+ * Copyright by The HDF Group.                                               *\n\
  * Copyright by the Board of Trustees of the University of Illinois.         *\n\
  * All rights reserved.                                                      *\n\
  *                                                                           *\n\
@@ -49,8 +69,8 @@ initCfile(void)
  * of the source code distribution tree; Copyright.html can be found at the  *\n\
  * root level of an installed copy of the electronic HDF5 document set and   *\n\
  * is linked from the top-level documents page.  It can also be found at     *\n\
- * http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *\n\
- * access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *\n\
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *\n\
+ * access to either file, you may request a copy from help at hdfgroup.org.     *\n\
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\
 \n\n\
 #ifndef _H5f90i_gen_H\n\
@@ -66,6 +86,7 @@ initFfile(void)
 {
   fprintf(fort_header,
     "! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n\
+!   Copyright by The HDF Group.                                               *\n\
 !   Copyright by the Board of Trustees of the University of Illinois.         *\n\
 !   All rights reserved.                                                      *\n\
 !                                                                             *\n\
@@ -75,8 +96,8 @@ initFfile(void)
 !   of the source code distribution tree; Copyright.html can be found at the  *\n\
 !   root level of an installed copy of the electronic HDF5 document set and   *\n\
 !   is linked from the top-level documents page.  It can also be found at     *\n\
-!   http://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html.  If you do not have     *\n\
-!   access to either file, you may request a copy from hdfhelp at ncsa.uiuc.edu. *\n\
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *\n\
+!   access to either file, you may request a copy from help at hdfgroup.org.     *\n\
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\
 !\n!\n\
 ! This file is automatically generated and contains HDF5 Fortran90 type definitions.\n!\n\
@@ -120,38 +141,36 @@ void writeTypedefDefault(unsigned int size)
 }
 
 /* Create matching Fortran and C types by writing to both files */
-void writeToFiles(const char* fortran_type, const char* c_type, unsigned int size)
+void writeToFiles(const char* fortran_type, const char* c_type, unsigned int size, unsigned int kind)
 {
-  fprintf(fort_header, "        INTEGER, PARAMETER :: %s = %u\n", fortran_type, size);
+  fprintf(fort_header, "        INTEGER, PARAMETER :: %s = %u\n", fortran_type, kind);
   fprintf(c_header, "typedef c_int_%u %s;\n", size, c_type);
 }
 
 /* Create matching Fortran and C floating types by writing to both files */
-void writeFloatToFiles(const char* fortran_type, const char* c_type, unsigned int size)
+void writeFloatToFiles(const char* fortran_type, const char* c_type, unsigned int size, unsigned int kind)
 {
-  fprintf(fort_header, "        INTEGER, PARAMETER :: %s = %u\n", fortran_type, size);
+  fprintf(fort_header, "        INTEGER, PARAMETER :: %s = %u\n", fortran_type, kind);
 
   fprintf(c_header, "typedef c_float_%u %s;\n", size, c_type);
 }
 
-int main()
+int main(void)
 {
   int FoundIntSize[4];
-  int FoundRealSize[4];
+  int FoundIntSizeKind[4];
+  int FoundRealSize[3];
+  int FoundRealSizeKind[3];
   int i,j,flag;
   char chrA[20],chrB[20];
   int H5_C_HAS_REAL_NATIVE_16;
-  int H5_C_HAS_REAL_NATIVE_12;
 
   /* Open target files */
   c_header = fopen(CFILE, "w");
   fort_header = fopen(FFILE, "w");
 
-
-/* Default is C has 16 byte float */
+  /* Default is C has 16 byte float */
   H5_C_HAS_REAL_NATIVE_16 = 1;
-/* Default is C has 12 byte float */
-  H5_C_HAS_REAL_NATIVE_12 = 1;
 
   /* Write copyright, boilerplate to both files */
   initCfile();
@@ -159,7 +178,7 @@ int main()
 
   /* First, define c_int_x */
 
-#if defined H5_FORTRAN_HAS_INTEGER_1
+#if defined H5_FORTRAN_HAS_INTEGER_1_KIND
   if(sizeof(long long) == 1)
     writeTypedef("long long", 1);
   else if(sizeof(long) == 1)
@@ -173,9 +192,9 @@ int main()
   /* Actually, char is not necessarily one byte.
    * But if char isn't, then nothing is, so this
    * is as close as we can get. */
-#endif /*H5_FORTRAN_HAS_INTEGER_1 */
+#endif /*H5_FORTRAN_HAS_INTEGER_1_KIND*/
 
-#if defined H5_FORTRAN_HAS_INTEGER_2
+#if defined H5_FORTRAN_HAS_INTEGER_2_KIND
   if(sizeof(long long) == 2)
     writeTypedef("long long", 2);
   else if(sizeof(long) == 2)
@@ -186,9 +205,9 @@ int main()
     writeTypedef("short", 2);
   else
     writeTypedefDefault(2);
-#endif /*H5_FORTRAN_HAS_INTEGER_2 */
+#endif /*H5_FORTRAN_HAS_INTEGER_2_KIND*/
 
-#if defined H5_FORTRAN_HAS_INTEGER_4
+#if defined H5_FORTRAN_HAS_INTEGER_4_KIND
   if(sizeof(long long) == 4)
     writeTypedef("long long", 4);
   else if(sizeof(long) == 4)
@@ -199,9 +218,9 @@ int main()
     writeTypedef("short", 4);
   else
     writeTypedefDefault(4);
-#endif /*H5_FORTRAN_HAS_INTEGER_4 */
+#endif /*H5_FORTRAN_HAS_INTEGER_4_KIND*/
 
-#if defined H5_FORTRAN_HAS_INTEGER_8
+#if defined H5_FORTRAN_HAS_INTEGER_8_KIND
   if(sizeof(long long) == 8)
     writeTypedef("long long", 8);
   else if(sizeof(long) == 8)
@@ -212,11 +231,11 @@ int main()
     writeTypedef("short", 8);
   else
     writeTypedefDefault(8);
-#endif /*H5_FORTRAN_HAS_INTEGER_8 */
+#endif /*H5_FORTRAN_HAS_INTEGER_8_KIND*/
 
   /* Define c_float_x */
 
-#if defined H5_FORTRAN_HAS_REAL_NATIVE_4 || defined H5_FORTRAN_HAS_REAL_4
+#if defined H5_FORTRAN_HAS_REAL_NATIVE_4_KIND || defined H5_FORTRAN_HAS_REAL_4_KIND
   if(sizeof(long double) == 4)
     writeFloatTypedef("long double", 4);
   else if(sizeof(double) == 4)
@@ -228,9 +247,9 @@ int main()
      printf("Quitting....\n");
      return -1;
    }
-#endif /*H5_FORTRAN_HAS_REAL_NATIVE_4*/
+#endif /*H5_FORTRAN_HAS_REAL_NATIVE_4_KIND*/
 
-#if defined H5_FORTRAN_HAS_REAL_NATIVE_8 || defined H5_FORTRAN_HAS_REAL_8
+#if defined H5_FORTRAN_HAS_REAL_NATIVE_8_KIND || defined H5_FORTRAN_HAS_REAL_8_KIND
   if(sizeof(long double) == 8)
     writeFloatTypedef("long double", 8);
   else if(sizeof(double) == 8)
@@ -242,23 +261,9 @@ int main()
      printf("Quitting....\n");
      return -1;
    }
-#endif /*H5_FORTRAN_HAS_REAL_NATIVE_8*/
-
-#if defined H5_FORTRAN_HAS_REAL_NATIVE_12 || defined H5_FORTRAN_HAS_REAL_12
-  if(sizeof(long double) == 12)
-    writeFloatTypedef("long double", 12);
-  else if(sizeof(double) == 12)
-   writeFloatTypedef("double", 12);
-  else if(sizeof(float) == 12)
-   writeFloatTypedef("float", 12);
-  else /*C has no 12 byte float so disable it in Fortran*/
-   { printf("warning: Fortran REAL is 12 bytes, no corresponding C floating type\n");
-     printf("         Disabling Fortran 12 byte REALs\n");
-     H5_C_HAS_REAL_NATIVE_12 = 0;
-   }
-#endif /*H5_FORTRAN_HAS_REAL_NATIVE_8*/
+#endif /*H5_FORTRAN_HAS_REAL_NATIVE_8_KIND*/
 
-#if defined H5_FORTRAN_HAS_REAL_NATIVE_16 || defined H5_FORTRAN_HAS_REAL_16
+#if defined H5_FORTRAN_HAS_REAL_NATIVE_16_KIND || defined H5_FORTRAN_HAS_REAL_16_KIND
   if(sizeof(long double) == 16)
     writeFloatTypedef("long double", 16);
   else if(sizeof(double) == 16)
@@ -270,47 +275,47 @@ int main()
      printf("         Disabling Fortran 16 byte REALs\n");
      H5_C_HAS_REAL_NATIVE_16 = 0;
    }
-#endif /*H5_FORTRAN_HAS_REAL_NATIVE_16*/
+#endif /*H5_FORTRAN_HAS_REAL_NATIVE_16_KIND*/
 
   /* Now begin defining fortran types. */
   fprintf(c_header, "\n");
   /* haddr_t */
-#if defined H5_FORTRAN_HAS_INTEGER_8 && H5_SIZEOF_HADDR_T >= 8
-  writeToFiles("HADDR_T", "haddr_t_f", 8);
-#elif defined H5_FORTRAN_HAS_INTEGER_4 && H5_SIZEOF_HADDR_T >= 4
-  writeToFiles("HADDR_T", "haddr_t_f", 4);
-#elif defined H5_FORTRAN_HAS_INTEGER_2 && H5_SIZEOF_HADDR_T >= 2
-  writeToFiles("HADDR_T", "haddr_t_f", 2);
-#elif defined H5_FORTRAN_HAS_INTEGER_1 && H5_SIZEOF_HADDR_T >= 1
-  writeToFiles("HADDR_T", "haddr_t_f", 1);
+#if defined H5_FORTRAN_HAS_INTEGER_8_KIND && H5_SIZEOF_HADDR_T >= 8
+  writeToFiles("HADDR_T", "haddr_t_f", 8, H5_FORTRAN_HAS_INTEGER_8_KIND);
+#elif defined H5_FORTRAN_HAS_INTEGER_4_KIND && H5_SIZEOF_HADDR_T >= 4
+  writeToFiles("HADDR_T", "haddr_t_f", 4, H5_FORTRAN_HAS_INTEGER_4_KIND);
+#elif defined H5_FORTRAN_HAS_INTEGER_2_KIND && H5_SIZEOF_HADDR_T >= 2
+  writeToFiles("HADDR_T", "haddr_t_f", 2, H5_FORTRAN_HAS_INTEGER_2_KIND);
+#elif defined H5_FORTRAN_HAS_INTEGER_1_KIND && H5_SIZEOF_HADDR_T >= 1
+  writeToFiles("HADDR_T", "haddr_t_f", 1, H5_FORTRAN_HAS_INTEGER_1_KIND);
 #else
     /* Error: couldn't find a size for haddr_t */
     return -1;
 #endif
 
   /* hsize_t */
-#if defined H5_FORTRAN_HAS_INTEGER_8 && H5_SIZEOF_HSIZE_T >= 8
-      writeToFiles("HSIZE_T", "hsize_t_f", 8);
-#elif defined H5_FORTRAN_HAS_INTEGER_4 && H5_SIZEOF_HSIZE_T >= 4
-      writeToFiles("HSIZE_T", "hsize_t_f", 4);
-#elif defined H5_FORTRAN_HAS_INTEGER_2 && H5_SIZEOF_HSIZE_T >= 2
-      writeToFiles("HSIZE_T", "hsize_t_f", 2);
-#elif defined H5_FORTRAN_HAS_INTEGER_1 && H5_SIZEOF_HSIZE_T >= 1
-      writeToFiles("HSIZE_T", "hsize_t_f", 1);
+#if defined H5_FORTRAN_HAS_INTEGER_8_KIND && H5_SIZEOF_HSIZE_T >= 8
+    writeToFiles("HSIZE_T", "hsize_t_f", 8, H5_FORTRAN_HAS_INTEGER_8_KIND);
+#elif defined H5_FORTRAN_HAS_INTEGER_4_KIND && H5_SIZEOF_HSIZE_T >= 4
+    writeToFiles("HSIZE_T", "hsize_t_f", 4, H5_FORTRAN_HAS_INTEGER_4_KIND);
+#elif defined H5_FORTRAN_HAS_INTEGER_2_KIND && H5_SIZEOF_HSIZE_T >= 2
+    writeToFiles("HSIZE_T", "hsize_t_f", 2, H5_FORTRAN_HAS_INTEGER_2_KIND);
+#elif defined H5_FORTRAN_HAS_INTEGER_1_KIND && H5_SIZEOF_HSIZE_T >= 1
+    writeToFiles("HSIZE_T", "hsize_t_f", 1, H5_FORTRAN_HAS_INTEGER_1_KIND);
 #else
     /* Error: couldn't find a size for hsize_t */
     return -1;
 #endif
 
   /* hssize_t */
-#if defined H5_FORTRAN_HAS_INTEGER_8 && H5_SIZEOF_HSSIZE_T >= 8
-      writeToFiles("HSSIZE_T", "hssize_t_f", 8);
-#elif defined H5_FORTRAN_HAS_INTEGER_4 && H5_SIZEOF_HSSIZE_T >= 4
-      writeToFiles("HSSIZE_T", "hssize_t_f", 4);
-#elif defined H5_FORTRAN_HAS_INTEGER_2 && H5_SIZEOF_HSSIZE_T >= 2
-      writeToFiles("HSSIZE_T", "hssize_t_f", 2);
-#elif defined H5_FORTRAN_HAS_INTEGER_1 && H5_SIZEOF_HSSIZE_T >= 1
-      writeToFiles("HSSIZE_T", "hssize_t_f", 1);
+#if defined H5_FORTRAN_HAS_INTEGER_8_KIND && H5_SIZEOF_HSSIZE_T >= 8
+    writeToFiles("HSSIZE_T", "hssize_t_f", 8, H5_FORTRAN_HAS_INTEGER_8_KIND);
+#elif defined H5_FORTRAN_HAS_INTEGER_4_KIND && H5_SIZEOF_HSSIZE_T >= 4
+    writeToFiles("HSSIZE_T", "hssize_t_f", 4, H5_FORTRAN_HAS_INTEGER_4_KIND);
+#elif defined H5_FORTRAN_HAS_INTEGER_2_KIND && H5_SIZEOF_HSSIZE_T >= 2
+    writeToFiles("HSSIZE_T", "hssize_t_f", 2, H5_FORTRAN_HAS_INTEGER_2_KIND);
+#elif defined H5_FORTRAN_HAS_INTEGER_1_KIND && H5_SIZEOF_HSSIZE_T >= 1
+    writeToFiles("HSSIZE_T", "hssize_t_f", 1, H5_FORTRAN_HAS_INTEGER_1_KIND);
 #else
     /* Error: couldn't find a size for hssize_t */
     return -1;
@@ -318,34 +323,33 @@ int main()
 
 
   /* size_t */
-#if defined H5_FORTRAN_HAS_INTEGER_8 && H5_SIZEOF_SIZE_T >= 8
-      writeToFiles("SIZE_T", "size_t_f", 8);
-#elif defined H5_FORTRAN_HAS_INTEGER_4 && H5_SIZEOF_SIZE_T >= 4
-      writeToFiles("SIZE_T", "size_t_f", 4);
-#elif defined H5_FORTRAN_HAS_INTEGER_2 && H5_SIZEOF_SIZE_T >= 2
-      writeToFiles("SIZE_T", "size_t_f", 2);
-#elif defined H5_FORTRAN_HAS_INTEGER_1 && H5_SIZEOF_SIZE_T >= 1
-      writeToFiles("SIZE_T", "size_t_f", 1);
+#if defined H5_FORTRAN_HAS_INTEGER_8_KIND && H5_SIZEOF_SIZE_T >= 8
+    writeToFiles("SIZE_T", "size_t_f", 8, H5_FORTRAN_HAS_INTEGER_8_KIND);
+#elif defined H5_FORTRAN_HAS_INTEGER_4_KIND && H5_SIZEOF_SIZE_T >= 4
+    writeToFiles("SIZE_T", "size_t_f", 4, H5_FORTRAN_HAS_INTEGER_4_KIND);
+#elif defined H5_FORTRAN_HAS_INTEGER_2_KIND && H5_SIZEOF_SIZE_T >= 2
+    writeToFiles("SIZE_T", "size_t_f", 2, H5_FORTRAN_HAS_INTEGER_2_KIND);
+#elif defined H5_FORTRAN_HAS_INTEGER_1_KIND && H5_SIZEOF_SIZE_T >= 1
+    writeToFiles("SIZE_T", "size_t_f", 1, H5_FORTRAN_HAS_INTEGER_1_KIND);
 #else
     /* Error: couldn't find a size for size_t */
     return -1;
 #endif
 
   /* int */
-#if defined H5_FORTRAN_HAS_NATIVE_8
-      writeToFiles("Fortran_INTEGER", "int_f", 8);
-#elif defined H5_FORTRAN_HAS_NATIVE_4
-      writeToFiles("Fortran_INTEGER", "int_f", 4);
-#elif defined H5_FORTRAN_HAS_NATIVE_2
-      writeToFiles("Fortran_INTEGER", "int_f", 2);
-#elif defined H5_FORTRAN_HAS_NATIVE_1
-      writeToFiles("Fortran_INTEGER", "int_f", 1);
+#if defined H5_FORTRAN_HAS_NATIVE_8_KIND
+    writeToFiles("Fortran_INTEGER", "int_f", 8, H5_FORTRAN_HAS_NATIVE_8_KIND);
+#elif defined H5_FORTRAN_HAS_NATIVE_4_KIND
+    writeToFiles("Fortran_INTEGER", "int_f", 4, H5_FORTRAN_HAS_NATIVE_4_KIND);
+#elif defined H5_FORTRAN_HAS_NATIVE_2_KIND
+    writeToFiles("Fortran_INTEGER", "int_f", 2, H5_FORTRAN_HAS_NATIVE_2_KIND);
+#elif defined H5_FORTRAN_HAS_NATIVE_1_KIND
+    writeToFiles("Fortran_INTEGER", "int_f", 1, H5_FORTRAN_HAS_NATIVE_1_KIND);
 #else
     /* Error: couldn't find a size for int */
     return -1;
 #endif
 
-
   /* int_1, int_2, int_4, int_8 */
 
 /* Defined different KINDs of integers:                       */
@@ -358,17 +362,21 @@ int main()
     FoundIntSize[2] = -4;
     FoundIntSize[3] = -8;
 
-#if defined H5_FORTRAN_HAS_INTEGER_1
+#if defined H5_FORTRAN_HAS_INTEGER_1_KIND
     FoundIntSize[0] = 1;
+    FoundIntSizeKind[0] = H5_FORTRAN_HAS_INTEGER_1_KIND;
 #endif
-#if defined H5_FORTRAN_HAS_INTEGER_2
+#if defined H5_FORTRAN_HAS_INTEGER_2_KIND
     FoundIntSize[1] = 2;
+    FoundIntSizeKind[1] = H5_FORTRAN_HAS_INTEGER_2_KIND;
 #endif
-#if defined H5_FORTRAN_HAS_INTEGER_4
+#if defined H5_FORTRAN_HAS_INTEGER_4_KIND
     FoundIntSize[2] = 4;
+    FoundIntSizeKind[2] = H5_FORTRAN_HAS_INTEGER_4_KIND;
 #endif
-#if defined H5_FORTRAN_HAS_INTEGER_8
+#if defined H5_FORTRAN_HAS_INTEGER_8_KIND
     FoundIntSize[3] = 8;
+    FoundIntSizeKind[3] = H5_FORTRAN_HAS_INTEGER_8_KIND ;
 #endif
 
     for(i=0;i<4;i++) {
@@ -376,7 +384,7 @@ int main()
 	{
 	  sprintf(chrA, "Fortran_INTEGER_%d", FoundIntSize[i]);
 	  sprintf(chrB, "int_%d_f", FoundIntSize[i]);
-	  writeToFiles(chrA, chrB, FoundIntSize[i]);
+	  writeToFiles(chrA, chrB, FoundIntSize[i], FoundIntSizeKind[i]);
 	}
       else  /* Did not find the integer type */
 	{
@@ -387,7 +395,7 @@ int main()
 		{
 		  sprintf(chrA, "Fortran_INTEGER_%d", (-1)*FoundIntSize[i]);
 		  sprintf(chrB, "int_%d_f", (-1)*FoundIntSize[i]);
-		  writeToFiles(chrA, chrB, FoundIntSize[j]);
+		  writeToFiles(chrA, chrB, FoundIntSize[j], FoundIntSizeKind[j]);
 		  flag = 1;
 		  break;
 		}
@@ -400,7 +408,7 @@ int main()
 		    {
 		      sprintf(chrA, "Fortran_INTEGER_%d", (-1)*FoundIntSize[i]);
 		      sprintf(chrB, "int_%d_f", (-1)*FoundIntSize[i]);
-		      writeToFiles(chrA, chrB, FoundIntSize[j]);
+		      writeToFiles(chrA, chrB, FoundIntSize[j], FoundIntSizeKind[j]);
 		      flag = 1;
 		      break;
 		    }
@@ -413,7 +421,7 @@ int main()
 	}
     }
 
-  /* real_4, real_8, real_12, real_16 */
+  /* real_4, real_8, real_16 */
 
 /* Defined different KINDs of reals:                          */
 /* if the REAL kind is not available then we assign           */
@@ -422,44 +430,42 @@ int main()
 
     FoundRealSize[0] = -4;
     FoundRealSize[1] = -8;
-    FoundRealSize[2] = -12;
-    FoundRealSize[3] = -16;
+    FoundRealSize[2] = -16;
 
-#if defined H5_FORTRAN_HAS_REAL_4
+#if defined H5_FORTRAN_HAS_REAL_4_KIND
     FoundRealSize[0] = 4;
+    FoundRealSizeKind[0] = H5_FORTRAN_HAS_REAL_4_KIND;
 #endif
-#if defined H5_FORTRAN_HAS_REAL_8
+#if defined H5_FORTRAN_HAS_REAL_8_KIND
     FoundRealSize[1] = 8;
+    FoundRealSizeKind[1] = H5_FORTRAN_HAS_REAL_8_KIND;
 #endif
-#if defined H5_FORTRAN_HAS_REAL_12
-    if(H5_C_HAS_REAL_NATIVE_12 != 0) {
-      FoundRealSize[2] = 12;
-    }
-#endif
-#if defined H5_FORTRAN_HAS_REAL_16
+
+#if defined H5_FORTRAN_HAS_REAL_16_KIND
     if(H5_C_HAS_REAL_NATIVE_16 != 0) {
-      FoundRealSize[3] = 16;
+      FoundRealSize[2] = 16;
+      FoundRealSizeKind[2] = H5_FORTRAN_HAS_REAL_16_KIND;
     }
 #endif
 
-    for(i=0;i<4;i++) {
+    for(i=0;i<3;i++) {
       if( FoundRealSize[i] > 0) /* Found the real type */
 	{
 	  sprintf(chrA, "Fortran_REAL_%d", FoundRealSize[i]);
 	  sprintf(chrB, "real_%d_f", FoundRealSize[i]);
-	  writeFloatToFiles(chrA, chrB, FoundRealSize[i]);
+	  writeFloatToFiles(chrA, chrB, FoundRealSize[i], FoundRealSizeKind[i]);
 	}
       else  /* Did not find the real type */
 	{
 	  flag = 0; /* flag indicating if found the next highest */
-	  for(j=i+1;j<4;j++)  /* search for next highest */
+	  for(j=i+1;j<3;j++)  /* search for next highest */
 	    {
 	      if( FoundRealSize[j] > 0) /* Found the next highest */
 		{
 		  sprintf(chrA, "Fortran_REAL_%d", (-1)*FoundRealSize[i]);
 		  sprintf(chrB, "real_%d_f", (-1)*FoundRealSize[i]);
 		  if(FoundRealSize[j]>4) {
-		    writeFloatToFiles(chrA, chrB, FoundRealSize[j]);
+		    writeFloatToFiles(chrA, chrB,  FoundRealSize[j], FoundRealSizeKind[j]);
 		    flag = 1;
 		  }
 		/*   else { */
@@ -471,14 +477,14 @@ int main()
 	    }
 	  if(flag == 0) /* No higher one found, so find next lowest */
 	    {
-	      for(j=2;j>-1;j--)  /* Search for next lowest */
+	      for(j=1;j>-1;j--)  /* Search for next lowest */
 		{
 		  if( FoundRealSize[j] > 0) /* Found the next lowest */
 		    {
 		      sprintf(chrA, "Fortran_REAL_%d", (-1)*FoundRealSize[i]);
 		      sprintf(chrB, "real_%d_f", (-1)*FoundRealSize[i]);
 		      if(FoundRealSize[j]>4) {
-			writeFloatToFiles(chrA, chrB, FoundRealSize[j]);
+			writeFloatToFiles(chrA, chrB,  FoundRealSize[j], FoundRealSizeKind[j]);
 		      }
 		     /*  else { */
 /* 			writeFloatToFiles(chrA, chrB, FoundRealSize[j]); */
@@ -496,44 +502,40 @@ int main()
     }
 
   /* hid_t */
-#if defined H5_FORTRAN_HAS_INTEGER_8 && H5_SIZEOF_HID_T >= 8
-      writeToFiles("HID_T", "hid_t_f", 8);
-#elif defined H5_FORTRAN_HAS_INTEGER_4 && H5_SIZEOF_HID_T >= 4
-      writeToFiles("HID_T", "hid_t_f", 4);
-#elif defined H5_FORTRAN_HAS_INTEGER_2 && H5_SIZEOF_HID_T >= 2
-      writeToFiles("HID_T", "hid_t_f", 2);
-#elif defined H5_FORTRAN_HAS_INTEGER_1 && H5_SIZEOF_HID_T >= 1
-      writeToFiles("HID_T", "hid_t_f", 1);
-#elif defined H5_FORTRAN_HAS_INTEGER_8 && H5_SIZEOF_HID_T >= 4
-      writeToFiles("HID_T", "hid_t_f", 8);
+#if defined H5_FORTRAN_HAS_INTEGER_8_KIND && H5_SIZEOF_HID_T >= 8
+    writeToFiles("HID_T", "hid_t_f", 8, H5_FORTRAN_HAS_INTEGER_8_KIND);
+#elif defined H5_FORTRAN_HAS_INTEGER_4_KIND && H5_SIZEOF_HID_T >= 4
+    writeToFiles("HID_T", "hid_t_f", 4, H5_FORTRAN_HAS_INTEGER_4_KIND);
+#elif defined H5_FORTRAN_HAS_INTEGER_2_KIND && H5_SIZEOF_HID_T >= 2
+    writeToFiles("HID_T", "hid_t_f", 2, H5_FORTRAN_HAS_INTEGER_2_KIND);
+#elif defined H5_FORTRAN_HAS_INTEGER_1_KIND && H5_SIZEOF_HID_T >= 1
+    writeToFiles("HID_T", "hid_t_f", 1, H5_FORTRAN_HAS_INTEGER_1_KIND);
+#elif defined H5_FORTRAN_HAS_INTEGER_8_KIND && H5_SIZEOF_HID_T >= 4
+    writeToFiles("HID_T", "hid_t_f", 8, H5_FORTRAN_HAS_INTEGER_8_KIND);
 #else
     /* Error: couldn't find a size for hid_t */
     return -1;
 #endif
 
   /* real_f */
-#if defined H5_FORTRAN_HAS_REAL_NATIVE_16
+#if defined H5_FORTRAN_HAS_REAL_NATIVE_16_KIND
     if(H5_C_HAS_REAL_NATIVE_16 != 0) {
-      writeFloatToFiles("Fortran_REAL", "real_f", 16);
-    }
-#elif defined H5_FORTRAN_HAS_REAL_NATIVE_12
-    if(H5_C_HAS_REAL_NATIVE_12 != 0) {
-      writeFloatToFiles("Fortran_REAL", "real_f", 12);
+      writeFloatToFiles("Fortran_REAL", "real_f", 16, H5_FORTRAN_HAS_REAL_NATIVE_16_KIND);
     }
-#elif defined H5_FORTRAN_HAS_REAL_NATIVE_8
-      writeFloatToFiles("Fortran_REAL", "real_f", 8);
-#elif defined H5_FORTRAN_HAS_REAL_NATIVE_4
-      writeFloatToFiles("Fortran_REAL", "real_f", 4);
+#elif defined H5_FORTRAN_HAS_REAL_NATIVE_8_KIND
+    writeFloatToFiles("Fortran_REAL", "real_f", 8, H5_FORTRAN_HAS_REAL_NATIVE_8_KIND);
+#elif defined H5_FORTRAN_HAS_REAL_NATIVE_4_KIND
+    writeFloatToFiles("Fortran_REAL", "real_f", 4, H5_FORTRAN_HAS_REAL_NATIVE_4_KIND);
 #else
     /* Error: couldn't find a size for real_f */
     return -1;
 #endif
 
   /* double_f */
-#if defined H5_FORTRAN_HAS_DOUBLE_NATIVE_16
-      writeFloatToFiles("Fortran_DOUBLE", "double_f", 16);
-#elif defined H5_FORTRAN_HAS_DOUBLE_NATIVE_8
-      writeFloatToFiles("Fortran_DOUBLE", "double_f", 8);
+#if defined H5_FORTRAN_HAS_DOUBLE_NATIVE_16_KIND
+    writeFloatToFiles("Fortran_DOUBLE", "double_f", 16, H5_FORTRAN_HAS_DOUBLE_NATIVE_16_KIND);
+#elif defined H5_FORTRAN_HAS_DOUBLE_NATIVE_8_KIND
+    writeFloatToFiles("Fortran_DOUBLE", "double_f", 8, H5_FORTRAN_HAS_DOUBLE_NATIVE_8_KIND);
 #else
     /* Error: couldn't find a size for real_f */
     return -1;
diff --git a/fortran/src/H5test_kind.f90 b/fortran/src/H5test_kind.f90
index bdf5f5b..3182853 100644
--- a/fortran/src/H5test_kind.f90
+++ b/fortran/src/H5test_kind.f90
@@ -1,9 +1,12 @@
-!****h* fortran/src/H5test_kind.f90
+!****p* Program/H5test_kind
 !
 ! NAME
-!  H5test_kind
+!  Executable: H5test_kind
 !
-! FUNCTION
+! FILE
+!  fortran/src/H5test_kind.f90
+!
+! PURPOSE
 !  This stand alone program is used at build time to generate the program
 !  H5fortran_detect.f90. It cycles through all the available KIND parameters for
 !  integers and reals. The appropriate program and subroutines are then generated
@@ -19,20 +22,20 @@
 !  condition is set in the configure variable "FORTRAN_HAVE_SIZEOF".
 !
 ! COPYRIGHT
-! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-!   Copyright by The HDF Group.                                               *
-!   Copyright by the Board of Trustees of the University of Illinois.         *
-!   All rights reserved.                                                      *
-!                                                                             *
-!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
-!   terms governing use, modification, and redistribution, is contained in    *
-!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
-!   of the source code distribution tree; Copyright.html can be found at the  *
-!   root level of an installed copy of the electronic HDF5 document set and   *
-!   is linked from the top-level documents page.  It can also be found at     *
-!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
-!   access to either file, you may request a copy from help at hdfgroup.org.     *
-! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!  Copyright by The HDF Group.                                               *
+!  Copyright by the Board of Trustees of the University of Illinois.         *
+!  All rights reserved.                                                      *
+!  *
+!  This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!  terms governing use, modification, and redistribution, is contained in    *
+!  the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!  of the source code distribution tree; Copyright.html can be found at the  *
+!  root level of an installed copy of the electronic HDF5 document set and   *
+!  is linked from the top-level documents page.  It can also be found at     *
+!  http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!  access to either file, you may request a copy from help at hdfgroup.org.     *
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
 ! AUTHOR
 !  Elena Pourma
@@ -42,7 +45,7 @@
 PROGRAM test_kind
   IMPLICIT NONE
   INTEGER :: i, j, ii, ir, last, ikind_numbers(10), rkind_numbers(10)
-  INTEGER :: jr, jd
+  INTEGER :: ji, jr, jd
   last = -1
   ii = 0
   j = SELECTED_INT_KIND(18)
@@ -72,15 +75,15 @@ PROGRAM test_kind
      ENDIF
   ENDDO
 
-! Generate program information:
+!  Generate program information:
 
 WRITE(*,'(40(A,/))') &
-'!****h* fortran/src/H5fortran_detect.f90',&
+'!****h* ROBODoc/H5fortran_detect.f90',&
 '!',&
 '! NAME',&
 '!  H5fortran_detect',&
 '! ',&
-'! FUNCTION',&
+'! PURPOSE',&
 '!  This stand alone program is used at build time to generate the header file',&
 '!  H5fort_type_defines.h. The source code itself was automatically generated by',&
 '!  the program H5test_kind.f90',&
@@ -110,12 +113,12 @@ WRITE(*,'(40(A,/))') &
 '!',&
 '!*****'
 
-! Generate a program
+!  Generate a program
 
   WRITE(*,*) "PROGRAM int_kind"
   WRITE(*,*) "WRITE(*,*) "" /*generating header file*/ """
-  j = 0
-  WRITE(*, "("" CALL i"", i2.2,""()"")") j
+  ji = 0
+  WRITE(*, "("" CALL i"", i2.2,""()"")") ji
   jr = 0
   WRITE(*, "("" CALL r"", i2.2,""()"")") jr
   jd = 0
@@ -130,62 +133,76 @@ WRITE(*,'(40(A,/))') &
   ENDDO
   WRITE(*,*) "END PROGRAM int_kind"
   j = 0
+  ji = KIND(1)
   WRITE(*, "("" SUBROUTINE i"", i2.2,""()"")") j
   WRITE(*,*)"   IMPLICIT NONE"
   WRITE(*,*)"   INTEGER :: a = 0"
   WRITE(*,*)"   INTEGER :: a_size"
+  WRITE(*,*)"   CHARACTER(LEN=2) :: jchr2"
   WRITE(*,*)"   a_size = BIT_SIZE(a)"
   WRITE(*,*)"   IF (a_size .EQ. 8) THEN"
-  WRITE(*,*)"       WRITE(*,*) ""#define H5_FORTRAN_HAS_NATIVE_1"" "
+  WRITE(*,*)"       WRITE(jchr2,'(I2)')",ji
+  WRITE(*,'(A)')'       WRITE(*,*) "#define H5_FORTRAN_HAS_NATIVE_1_KIND "'//"//ADJUSTL(jchr2)"
   WRITE(*,*)"   endif"
   WRITE(*,*)"   IF (a_size .EQ. 16) THEN"
-  WRITE(*,*)"       WRITE(*,*) ""#define H5_FORTRAN_HAS_NATIVE_2"" "
+  WRITE(*,*)"       WRITE(jchr2,'(I2)')",ji
+  WRITE(*,'(A)')'       WRITE(*,*) "#define H5_FORTRAN_HAS_NATIVE_2_KIND "'//"//ADJUSTL(jchr2)"
   WRITE(*,*)"   endif"
   WRITE(*,*)"   IF (a_size .EQ. 32) THEN"
-  WRITE(*,*)"       WRITE(*,*) ""#define H5_FORTRAN_HAS_NATIVE_4"" "
+  WRITE(*,*)"       WRITE(jchr2,'(I2)')",ji
+  WRITE(*,'(A)')'       WRITE(*,*) "#define H5_FORTRAN_HAS_NATIVE_4_KIND "'//"//ADJUSTL(jchr2)"
   WRITE(*,*)"   ENDIF"
   WRITE(*,*)"   IF (a_size .EQ. 64) THEN"
-  WRITE(*,*)"       WRITE(*,*) ""#define H5_FORTRAN_HAS_NATIVE_8"" "
+  WRITE(*,*)"       WRITE(jchr2,'(I2)')",ji
+  WRITE(*,'(A)')'       WRITE(*,*) "#define H5_FORTRAN_HAS_NATIVE_8_KIND "'//"//ADJUSTL(jchr2)"
   WRITE(*,*)"   ENDIF"
   WRITE(*,*)"   IF (a_size .EQ. 128) THEN"
-  WRITE(*,*)"       WRITE(*,*) ""#define H5_FORTRAN_HAS_NATIVE_16"" "
+  WRITE(*,*)"       WRITE(jchr2,'(I2)')",ji
+  WRITE(*,'(A)')'       WRITE(*,*) "#define H5_FORTRAN_HAS_NATIVE_16_KIND "'//"//ADJUSTL(jchr2)"
   WRITE(*,*)"   ENDIF"
   WRITE(*,*)"   RETURN"
   WRITE(*,*)"END SUBROUTINE"
-  jr = 0
+  jr = KIND(1.0)
   WRITE(*, "("" SUBROUTINE r"", i2.2,""()"")") j
   WRITE(*,*)"   IMPLICIT NONE"
   WRITE(*,*)"   REAL :: b(32)"
   WRITE(*,*)"   INTEGER :: a(1)"
   WRITE(*,*)"   INTEGER :: a_size"
   WRITE(*,*)"   INTEGER :: real_size"
+  WRITE(*,*)"   CHARACTER(LEN=2) :: jchr2"
   WRITE(*,*)"   a_size = BIT_SIZE(a(1)) ! Size in bits for integer"
   WRITE(*,*)"   real_size = (SIZE(TRANSFER(b,a))*a_size)/SIZE(b)"
   WRITE(*,*)"   IF (real_size .EQ. 32) THEN"
-  WRITE(*,*)"       WRITE(*,*) ""#define H5_FORTRAN_HAS_REAL_NATIVE_4"" "
+  WRITE(*,*)"       WRITE(jchr2,'(I2)')",jr
+  WRITE(*,'(A)')'       WRITE(*,*) "#define H5_FORTRAN_HAS_REAL_NATIVE_4_KIND "'//"//ADJUSTL(jchr2)"
   WRITE(*,*)"   ENDIF"
   WRITE(*,*)"   IF (real_size .EQ. 64) THEN"
-  WRITE(*,*)"       write(*,*) ""#define H5_FORTRAN_HAS_REAL_NATIVE_8"" "
-  WRITE(*,*)"   endif"
+  WRITE(*,*)"       WRITE(jchr2,'(I2)')",jr
+  WRITE(*,'(A)')'       WRITE(*,*) "#define H5_FORTRAN_HAS_REAL_NATIVE_8_KIND "'//"//ADJUSTL(jchr2)"
+  WRITE(*,*)"   ENDIF"
   WRITE(*,*)"   IF (real_size .EQ. 128) THEN"
-  WRITE(*,*)"       write(*,*) ""#define H5_FORTRAN_HAS_REAL_NATIVE_16"" "
+  WRITE(*,*)"       WRITE(jchr2,'(I2)')",jr
+  WRITE(*,'(A)')'       WRITE(*,*) "#define H5_FORTRAN_HAS_REAL_NATIVE_16_KIND "'//"//ADJUSTL(jchr2)"
   WRITE(*,*)"   ENDIF"
   WRITE(*,*)"   RETURN"
   WRITE(*,*)"END SUBROUTINE"
-  jd = 0
-  WRITE(*, "("" SUBROUTINE d"", i2.2,""()"")") jd
+  jd = KIND(1.d0)
+  WRITE(*, "("" SUBROUTINE d"", i2.2,""()"")") j
   WRITE(*,*)"   IMPLICIT NONE"
   WRITE(*,*)"   DOUBLE PRECISION :: b=0"
   WRITE(*,*)"   INTEGER :: a(8)=0"
   WRITE(*,*)"   INTEGER :: a_size"
   WRITE(*,*)"   INTEGER :: b_size"
+  WRITE(*,*)"   CHARACTER(LEN=2) :: jchr2"
   WRITE(*,*)"   a_size = BIT_SIZE(a(1))"
   WRITE(*,*)"   b_size = SIZE(transfer(b,a))*a_size"
   WRITE(*,*)"   IF (b_size .EQ. 64) THEN"
-  WRITE(*,*)"       WRITE(*,*) ""#define H5_FORTRAN_HAS_DOUBLE_NATIVE_8"" "
+  WRITE(*,*)"       WRITE(jchr2,'(I2)')",jd
+  WRITE(*,'(A)')'       WRITE(*,*) "#define H5_FORTRAN_HAS_DOUBLE_NATIVE_8_KIND "'//"//ADJUSTL(jchr2)"
   WRITE(*,*)"   ENDIF"
   WRITE(*,*)"   IF (b_size .EQ. 128) THEN"
-  WRITE(*,*)"       WRITE(*,*) ""#define H5_FORTRAN_HAS_DOUBLE_NATIVE_16"" "
+  WRITE(*,*)"       WRITE(jchr2,'(I2)')",jd
+  WRITE(*,'(A)')'       WRITE(*,*) "#define H5_FORTRAN_HAS_DOUBLE_NATIVE_16_KIND "'//"//ADJUSTL(jchr2)"
   WRITE(*,*)"   ENDIF"
   WRITE(*,*)"   RETURN"
   WRITE(*,*)"END SUBROUTINE"
@@ -195,21 +212,27 @@ WRITE(*,'(40(A,/))') &
      WRITE(*,*)"   IMPLICIT NONE"
      WRITE(*,*)"   INTEGER(",j,") :: a = 0"
      WRITE(*,*)"   INTEGER :: a_size"
+     WRITE(*,*)"   CHARACTER(LEN=2) :: jchr2"
      WRITE(*,*)"   a_size = BIT_SIZE(a)"
      WRITE(*,*)"   IF (a_size .EQ. 8) THEN"
-     WRITE(*,*)"       WRITE(*,*) ""#define H5_FORTRAN_HAS_INTEGER_1"" "
+     WRITE(*,*)"       WRITE(jchr2,'(I2)')",j
+     WRITE(*,'(A)')'       WRITE(*,*) "#define H5_FORTRAN_HAS_INTEGER_1_KIND "'//"//ADJUSTL(jchr2)"
      WRITE(*,*)"   ENDIF"
      WRITE(*,*)"   IF (a_size .EQ. 16) THEN"
-     WRITE(*,*)"       WRITE(*,*) ""#define H5_FORTRAN_HAS_INTEGER_2"" "
+     WRITE(*,*)"       WRITE(jchr2,'(I2)')",j
+     WRITE(*,'(A)')'       WRITE(*,*) "#define H5_FORTRAN_HAS_INTEGER_2_KIND "'//"//ADJUSTL(jchr2)"
      WRITE(*,*)"   ENDIF"
      WRITE(*,*)"   IF (a_size .EQ. 32) THEN"
-     WRITE(*,*)"       WRITE(*,*) ""#define H5_FORTRAN_HAS_INTEGER_4"" "
+     WRITE(*,*)"       WRITE(jchr2,'(I2)')",j
+     WRITE(*,'(A)')'       WRITE(*,*) "#define H5_FORTRAN_HAS_INTEGER_4_KIND "'//"//ADJUSTL(jchr2)"
      WRITE(*,*)"   ENDIF"
      WRITE(*,*)"   IF (a_size .EQ. 64) THEN"
-     WRITE(*,*)"       WRITE(*,*) ""#define H5_FORTRAN_HAS_INTEGER_8"" "
+     WRITE(*,*)"       WRITE(jchr2,'(I2)')",j
+     WRITE(*,'(A)')'       WRITE(*,*) "#define H5_FORTRAN_HAS_INTEGER_8_KIND "'//"//ADJUSTL(jchr2)"
      WRITE(*,*)"   ENDIF"
      WRITE(*,*)"   IF (a_size .EQ. 128) THEN"
-     WRITE(*,*)"       WRITE(*,*) ""#define H5_FORTRAN_HAS_INTEGER_16"" "
+     WRITE(*,*)"       WRITE(jchr2,'(I2)')",j
+     WRITE(*,'(A)')'       WRITE(*,*) "#define H5_FORTRAN_HAS_INTEGER_16_KIND "'//"//ADJUSTL(jchr2)"
      WRITE(*,*)"   ENDIF"
      WRITE(*,*)"   RETURN"
      WRITE(*,*)"   END SUBROUTINE"
@@ -222,16 +245,20 @@ WRITE(*,'(40(A,/))') &
      WRITE(*,*)"   INTEGER :: a(1)"
      WRITE(*,*)"   INTEGER :: a_size"
      WRITE(*,*)"   INTEGER :: real_size"
+     WRITE(*,*)"   CHARACTER(LEN=2) :: jchr2"
      WRITE(*,*)"   a_size = BIT_SIZE(a(1)) ! Size in bits for integer"
      WRITE(*,*)"   real_size = (SIZE(TRANSFER(b,a))*a_size)/SIZE(b)"
      WRITE(*,*)"   IF (real_size .EQ. 32) THEN"
-     WRITE(*,*)"       WRITE(*,*) ""#define H5_FORTRAN_HAS_REAL_4"" "
+     WRITE(*,*)"       WRITE(jchr2,'(I2)')",j
+     WRITE(*,'(A)')'       WRITE(*,*) "#define H5_FORTRAN_HAS_REAL_4_KIND "'//"//ADJUSTL(jchr2)"
      WRITE(*,*)"   ENDIF"
      WRITE(*,*)"   IF (real_size .EQ. 64) THEN"
-     WRITE(*,*)"       write(*,*) ""#define H5_FORTRAN_HAS_REAL_8"" "
+     WRITE(*,*)"       WRITE(jchr2,'(I2)')",j
+     WRITE(*,*)'       WRITE(*,*) "#define H5_FORTRAN_HAS_REAL_8_KIND "'//"//ADJUSTL(jchr2)"
      WRITE(*,*)"   endif"
      WRITE(*,*)"   IF (real_size .EQ. 128) THEN"
-     WRITE(*,*)"       write(*,*) ""#define H5_FORTRAN_HAS_REAL_16"" "
+     WRITE(*,*)"       WRITE(jchr2,'(I2)')",j
+     WRITE(*,'(A)')'       WRITE(*,*) "#define H5_FORTRAN_HAS_REAL_16_KIND "'//"//ADJUSTL(jchr2)"
      WRITE(*,*)"   ENDIF"
      WRITE(*,*)"   RETURN"
      WRITE(*,*)"   END SUBROUTINE"
diff --git a/fortran/src/H5test_kind_SIZEOF.f90 b/fortran/src/H5test_kind_SIZEOF.f90
index fbbe8e9..ba982ee 100644
--- a/fortran/src/H5test_kind_SIZEOF.f90
+++ b/fortran/src/H5test_kind_SIZEOF.f90
@@ -1,9 +1,12 @@
-!****h* fortran/src/H5test_kind_SIZEOF.f90
+!****p* Program/H5test_kind_SIZEOF
 !
 ! NAME
-!  H5test_kind
+!  Executable: H5test_kind
 !
-! FUNCTION
+! FILE
+!  fortran/src/H5test_kind_SIZEOF.f90
+!
+! PURPOSE
 !  This stand alone program is used at build time to generate the program
 !  H5fortran_detect.f90. It cycles through all the available KIND parameters for
 !  integers and reals. The appropriate program and subroutines are then generated
@@ -18,30 +21,30 @@
 !  condition is set in the configure variable "FORTRAN_HAVE_SIZEOF".
 !
 ! COPYRIGHT
-! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-!   Copyright by The HDF Group.                                               *
-!   Copyright by the Board of Trustees of the University of Illinois.         *
-!   All rights reserved.                                                      *
-!                                                                             *
-!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
-!   terms governing use, modification, and redistribution, is contained in    *
-!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
-!   of the source code distribution tree; Copyright.html can be found at the  *
-!   root level of an installed copy of the electronic HDF5 document set and   *
-!   is linked from the top-level documents page.  It can also be found at     *
-!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
-!   access to either file, you may request a copy from help at hdfgroup.org.     *
-! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!  Copyright by The HDF Group.                                               *
+!  Copyright by the Board of Trustees of the University of Illinois.         *
+!  All rights reserved.                                                      *
+!  *
+!  This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!  terms governing use, modification, and redistribution, is contained in    *
+!  the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!  of the source code distribution tree; Copyright.html can be found at the  *
+!  root level of an installed copy of the electronic HDF5 document set and   *
+!  is linked from the top-level documents page.  It can also be found at     *
+!  http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!  access to either file, you may request a copy from help at hdfgroup.org.     *
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
 ! AUTHOR
-!  M.S. Breitenfeld
+!  M. Scot Breitenfeld
 !
 !*****
 
 PROGRAM test_kind
   IMPLICIT NONE
-  INTEGER :: i, j, ii, ir, last, ikind_numbers(10),rkind_numbers(10)
-  INTEGER :: jr, jd
+  INTEGER :: i, j, ii, ir, last, ikind_numbers(10), rkind_numbers(10)
+  INTEGER :: ji, jr, jd
   last = -1
   ii = 0
   DO i = 1,100
@@ -70,15 +73,15 @@ PROGRAM test_kind
      ENDIF
   ENDDO
 
-! Generate program information:
+!  Generate program information:
 
 WRITE(*,'(40(A,/))') &
-'!****h* fortran/src/H5fortran_detect.f90',&
+'!****h* ROBODoc/H5fortran_detect.f90',&
 '!',&
 '! NAME',&
 '!  H5fortran_detect',&
 '! ',&
-'! FUNCTION',&
+'! PURPOSE',&
 '!  This stand alone program is used at build time to generate the header file',&
 '!  H5fort_type_defines.h. The source code itself was automatically generated by',&
 '!  the program H5test_kind_SIZEOF.f90',&
@@ -109,11 +112,11 @@ WRITE(*,'(40(A,/))') &
 '!',&
 '!*****'
 
-! Generate a program
+!  Generate a program
   WRITE(*,*) "PROGRAM int_kind"
   WRITE(*,*) "WRITE(*,*) "" /*generating header file*/ """
-  j = 0
-  WRITE(*, "("" CALL i"", i2.2,""()"")") j
+  ji = 0
+  WRITE(*, "("" CALL i"", i2.2,""()"")") ji
   jr = 0
   WRITE(*, "("" CALL r"", i2.2,""()"")") jr
   jd = 0
@@ -128,48 +131,59 @@ WRITE(*,'(40(A,/))') &
   ENDDO
   WRITE(*,*) "END PROGRAM int_kind"
   j = 0
+  ji = KIND(1)
   WRITE(*, "("" SUBROUTINE i"", i2.2,""()"")") j
   WRITE(*,*)"   IMPLICIT NONE"
   WRITE(*,*)"   INTEGER :: a"
   WRITE(*,*)"   INTEGER :: a_size"
-  WRITE(*,*)"   CHARACTER(LEN=2) :: ichr2"
+  WRITE(*,*)"   CHARACTER(LEN=2) :: ichr2, jchr2"
   WRITE(*,*)"   a_size = SIZEOF(a)"
   WRITE(*,*)"   WRITE(ichr2,'(I2)') a_size"
-  WRITE(*,*)'   WRITE(*,*) "#define H5_FORTRAN_HAS_NATIVE_"'//"//ADJUSTL(ichr2)"
+  WRITE(*,'(A,I0)')"    WRITE(jchr2,'(I2)') ",ji
+  WRITE(*,'(A)')'    WRITE(*,*) "#define H5_FORTRAN_HAS_NATIVE_"'//  &
+       "//TRIM(ADJUSTL(ichr2))//"//'"_KIND "'//"//ADJUSTL(jchr2)"
   WRITE(*,*)"   RETURN"
   WRITE(*,*)"END SUBROUTINE"
   jr = 0
-  WRITE(*, "("" SUBROUTINE r"", i2.2,""()"")") j
+  j = KIND(1.0)
+  WRITE(*, "("" SUBROUTINE r"", i2.2,""()"")") jr
   WRITE(*,*)"   IMPLICIT NONE"
   WRITE(*,*)"   REAL :: a"
   WRITE(*,*)"   INTEGER :: a_size"
-  WRITE(*,*)"   CHARACTER(LEN=2) :: ichr2"
+  WRITE(*,*)"   CHARACTER(LEN=2) :: ichr2, jchr2"
   WRITE(*,*)"   a_size = SIZEOF(a)"
   WRITE(*,*)"   WRITE(ichr2,'(I2)') a_size"
-  WRITE(*,*)'   WRITE(*,*) "#define H5_FORTRAN_HAS_REAL_NATIVE_"'//"//ADJUSTL(ichr2)"
+  WRITE(*,'(A,I0)')"    WRITE(jchr2,'(I2)') ",j
+  WRITE(*,'(A)')'    WRITE(*,*) "#define H5_FORTRAN_HAS_REAL_NATIVE_"'//  &
+       "//TRIM(ADJUSTL(ichr2))//"//'"_KIND "'//"//ADJUSTL(jchr2)"
   WRITE(*,*)"   RETURN"
   WRITE(*,*)"END SUBROUTINE"
   jd = 0
+  j = KIND(1.d0)
   WRITE(*, "("" SUBROUTINE d"", i2.2,""()"")") jd
   WRITE(*,*)"   IMPLICIT NONE"
   WRITE(*,*)"   DOUBLE PRECISION :: a"
   WRITE(*,*)"   INTEGER :: a_size"
-  WRITE(*,*)"   CHARACTER(LEN=2) :: ichr2"
+  WRITE(*,*)"   CHARACTER(LEN=2) :: ichr2, jchr2"
   WRITE(*,*)"   a_size = SIZEOF(a)"
   WRITE(*,*)"   WRITE(ichr2,'(I2)') a_size"
-  WRITE(*,*)'   WRITE(*,*) "#define H5_FORTRAN_HAS_DOUBLE_NATIVE_"'//"//ADJUSTL(ichr2)"
+  WRITE(*,'(A,I0)')"    WRITE(jchr2,'(I2)') ",j
+  WRITE(*,'(A)')'    WRITE(*,*) "#define H5_FORTRAN_HAS_DOUBLE_NATIVE_"'//  &
+       "//TRIM(ADJUSTL(ichr2))//"//'"_KIND "'//"//ADJUSTL(jchr2)"
   WRITE(*,*)"   RETURN"
   WRITE(*,*)"END SUBROUTINE"
   DO i = 1, ii
      j = ikind_numbers(i)
      WRITE(*, "("" SUBROUTINE i"", i2.2,""()"")") j
      WRITE(*,*)"   IMPLICIT NONE"
-     WRITE(*,*)"   INTEGER(",j,") :: a"
+     WRITE(*,'(A,I0,A)')"   INTEGER(KIND=",j,") :: a"
      WRITE(*,*)"   INTEGER :: a_size"
-     WRITE(*,*)"   CHARACTER(LEN=2) :: ichr2"
+     WRITE(*,*)"   CHARACTER(LEN=2) :: ichr2, jchr2"
      WRITE(*,*)"   a_size = SIZEOF(a)"
      WRITE(*,*)"   WRITE(ichr2,'(I2)') a_size"
-     WRITE(*,*)'   WRITE(*,*) "#define H5_FORTRAN_HAS_INTEGER_"'//"//ADJUSTL(ichr2)"
+     WRITE(*,'(A,I0)')"    WRITE(jchr2,'(I2)') ",j
+     WRITE(*,'(A)')'    WRITE(*,*) "#define H5_FORTRAN_HAS_INTEGER_"'//  &
+          "//TRIM(ADJUSTL(ichr2))//"//'"_KIND "'//"//ADJUSTL(jchr2)"
      WRITE(*,*)"   RETURN"
      WRITE(*,*)"END SUBROUTINE"
   ENDDO
@@ -177,12 +191,14 @@ WRITE(*,'(40(A,/))') &
      j = rkind_numbers(i)
      WRITE(*, "("" SUBROUTINE r"", i2.2,""()"")") j
      WRITE(*,*)"   IMPLICIT NONE"
-     WRITE(*,*)"   REAL(KIND=",j,") :: a"
+     WRITE(*,'(A,I0,A)')"   REAL(KIND= ",j,") :: a"
      WRITE(*,*)"   INTEGER :: a_size"
-     WRITE(*,*)"   CHARACTER(LEN=2) :: ichr2"
+     WRITE(*,*)"   CHARACTER(LEN=2) :: ichr2, jchr2"
      WRITE(*,*)"   a_size = SIZEOF(a)"
      WRITE(*,*)"   WRITE(ichr2,'(I2)') a_size"
-     WRITE(*,*)'   WRITE(*,*) "#define H5_FORTRAN_HAS_REAL_"'//"//ADJUSTL(ichr2)"
+     WRITE(*,'(A,I0)')"    WRITE(jchr2,'(I2)') ", j
+     WRITE(*,'(A)')'    WRITE(*,*) "#define H5_FORTRAN_HAS_REAL_"'//  &
+          "//TRIM(ADJUSTL(ichr2))//"//'"_KIND "'//"//ADJUSTL(jchr2)"
      WRITE(*,*)"   RETURN"
      WRITE(*,*)"END SUBROUTINE"
   ENDDO
diff --git a/fortran/src/HDF5.f90 b/fortran/src/HDF5.f90
index b18591d..cb3d8bf 100644
--- a/fortran/src/HDF5.f90
+++ b/fortran/src/HDF5.f90
@@ -1,3 +1,15 @@
+!****h* ROBODoc/HDF5
+!
+! NAME
+!  MODULE HDF5
+!
+! FILE
+!  src/fortran/src/HDF5.f90
+!
+! PURPOSE
+!  This is the main module used for linking to the Fortran HDF library.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,22 +25,31 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+!*****
+
 MODULE HDF5
   USE H5GLOBAL
   USE H5F
   USE H5G
   USE H5E
+  USE H5E_PROVISIONAL
   USE H5I
   USE H5L
+  USE H5L_PROVISIONAL
   USE H5S
   USE H5D
+  USE H5D_PROVISIONAL
   USE H5A
+  USE H5A_PROVISIONAL
   USE H5T
+  USE H5T_PROVISIONAL
   USE H5O
+  USE H5O_PROVISIONAL
   USE H5P
+  USE H5P_PROVISIONAL
   USE H5R
+  USE H5R_PROVISIONAL
   USE H5Z
   USE H5_DBLE_INTERFACE
   USE H5LIB
-
 END MODULE HDF5
diff --git a/fortran/src/HDF5mpio.f90 b/fortran/src/HDF5mpio.f90
index 15d3a93..ac4d2b1 100644
--- a/fortran/src/HDF5mpio.f90
+++ b/fortran/src/HDF5mpio.f90
@@ -1,34 +1,54 @@
-! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
-!   Copyright by The HDF Group.                                               *
-!   Copyright by the Board of Trustees of the University of Illinois.         *
-!   All rights reserved.                                                      *
-!                                                                             *
-!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
-!   terms governing use, modification, and redistribution, is contained in    *
-!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
-!   of the source code distribution tree; Copyright.html can be found at the  *
-!   root level of an installed copy of the electronic HDF5 document set and   *
-!   is linked from the top-level documents page.  It can also be found at     *
-!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
-!   access to either file, you may request a copy from help at hdfgroup.org.     *
-! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!****h* ROBODoc/HDF5 (mpio)
 !
-    MODULE HDF5
-       USE H5GLOBAL
-       USE H5F
-       USE H5E
-       USE H5G
-       USE H5I
-       USE H5L
-       USE H5S
-       USE H5D
-       USE H5A
-       USE H5T
-       USE H5O
-       USE H5P
-       USE H5FDMPIO
-       USE H5R
-       USE H5Z
-       USE H5_DBLE_INTERFACE
-       USE H5LIB
-    END MODULE HDF5
+! NAME
+!  HDF5
+!
+! PURPOSE
+!  This is the main module used for linking to the Fortran parallel HDF library.
+!  This file replaces HDF5.f90 when compiling the parallel library.
+!
+! COPYRIGHT
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!  Copyright by The HDF Group.                                                 *
+!  Copyright by the Board of Trustees of the University of Illinois.           *
+!  All rights reserved.                                                        *
+!                                                                              *
+!  This file is part of HDF5.  The full HDF5 copyright notice, including       *
+!  terms governing use, modification, and redistribution, is contained in      *
+!  the files COPYING and Copyright.html.  COPYING can be found at the root     *
+!  of the source code distribution tree; Copyright.html can be found at the    *
+!  root level of an installed copy of the electronic HDF5 document set and     *
+!  is linked from the top-level documents page.  It can also be found at       *
+!  http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have            *
+!  access to either file, you may request a copy from help at hdfgroup.org.       *
+!  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+!*****
+
+MODULE HDF5
+  USE H5GLOBAL
+  USE H5F
+  USE H5G
+  USE H5E
+  USE H5E_PROVISIONAL
+  USE H5I
+  USE H5L
+  USE H5L_PROVISIONAL
+  USE H5S
+  USE H5D
+  USE H5D_PROVISIONAL
+  USE H5A
+  USE H5A_PROVISIONAL
+  USE H5T
+  USE H5T_PROVISIONAL
+  USE H5O
+  USE H5O_PROVISIONAL
+  USE H5P
+  USE H5P_PROVISIONAL
+  USE H5FDMPIO
+  USE H5R
+  USE H5R_PROVISIONAL
+  USE H5Z
+  USE H5_DBLE_INTERFACE
+  USE H5LIB
+END MODULE HDF5
diff --git a/fortran/src/Makefile.am b/fortran/src/Makefile.am
index ee06a88..e6ef610 100644
--- a/fortran/src/Makefile.am
+++ b/fortran/src/Makefile.am
@@ -49,6 +49,14 @@ else
    PARALLEL_COND_SRC = HDF5.f90
 endif
 
+# Check if the compiler supports the Fortran 2003 standard
+# which should include the intrinsic module iso_c_binding
+if FORTRAN_2003_CONDITIONAL_F
+   F_STATUS = _F03
+else
+   F_STATUS = _F90
+endif
+
 #   Condition for including/excluding the DBLE interfaces for when the 
 #   default REAL is of type DOUBLE PRECISION.
 #   We do not include the double precision interfaces if the defaut REAL is
@@ -61,14 +69,15 @@ else
 endif
 
 # Source files for the library.
-libhdf5_fortran_la_SOURCES= H5f90global.f90          \
-         H5fortran_types.f90 H5_ff.f90 H5Aff.f90 H5Dff.f90 H5Eff.f90    \
-         H5Fff.f90 H5Gff.f90 H5Iff.f90 H5Lff.f90 H5Off.f90 H5Pff.f90 H5Rff.f90 H5Sff.f90    \
-         H5Tff.f90 H5Zff.f90                                            \
-	 H5_DBLE_Interface$(F_DBLE).f90 \
-         H5f90kit.c H5_f.c H5Af.c H5Df.c H5Ef.c H5Ff.c H5Gf.c           \
-         H5If.c H5Lf.c H5Of.c H5Pf.c H5Rf.c H5Sf.c H5Tf.c H5Zf.c        \
-         $(PARALLEL_COND_SRC)
+libhdf5_fortran_la_SOURCES=H5f90global.f90 \
+          H5fortran_types.f90 H5_ff$(F_STATUS).f90 H5_ff.f90 H5Aff.f90 H5Dff.f90 H5Eff.f90    \
+          H5Fff.f90 H5Gff.f90 H5Iff.f90 H5Lff.f90 H5Off.f90 H5Pff.f90 H5Rff.f90 H5Sff.f90    \
+          H5Tff.f90 H5Zff.f90                                            \
+	  H5_DBLE_Interface$(F_DBLE).f90 \
+          H5f90kit.c H5_f.c H5Af.c H5Df.c H5Ef.c H5Ff.c H5Gf.c           \
+          H5If.c H5Lf.c H5Of.c H5Pf.c H5Rf.c H5Sf.c H5Tf.c H5Zf.c        \
+	  H5Aff$(F_STATUS).f90 H5Dff$(F_STATUS).f90 H5Eff$(F_STATUS).f90 H5Lff$(F_STATUS).f90 \
+	  H5Off$(F_STATUS).f90 H5Pff$(F_STATUS).f90 H5Rff$(F_STATUS).f90 H5Tff$(F_STATUS).f90 $(PARALLEL_COND_SRC)
 
 # HDF5 Fortran library depends on HDF5 Library.
 libhdf5_fortran_la_LIBADD=$(LIBHDF5)
@@ -102,8 +111,8 @@ install-data-local:
 	$(CP) $(top_srcdir)/fortran/src/H5f90i.h $(DESTDIR)$(includedir)/.
 
 uninstall-local:
-	@if test -n "$(DESTDIR)$(F9XMODEXT)" -a "X$(DESTDIR)$(F9XMODEXT)" != "Xo"; then      \
-	  if test -f "$(DESTDIR)$(includedir)/hdf5.$(F9XMODEXT)" -o -f "$(DESTDIR)$(includedir)/HDF5.$(F9XMODEXT)"; then \
+	@if test -n "$(F9XMODEXT)" -a "X$(F9XMODEXT)" != "Xo"; then      \
+	  if test -f "$(includedir)/hdf5.$(F9XMODEXT)" -o -f "$(includedir)/HDF5.$(F9XMODEXT)"; then \
 	    set -x; $(RM) $(DESTDIR)$(includedir)/*.$(F9XMODEXT);                 \
 	  fi;                                                           \
 	fi;								\
@@ -184,10 +193,19 @@ H5f90global.lo:      $(srcdir)/H5f90global.f90 H5fortran_types.lo
 H5fortran_types.lo:  H5fortran_types.f90
 H5fortran_detect.lo: H5fortran_detect.f90
 H5test_kind.lo:      $(srcdir)/H5test_kind.f90
-H5test_kind_SIZEOF.lo:      $(srcdir)/H5test_kind_SIZEOF.f90
-H5_ff.lo:            $(srcdir)/H5_ff.f90 H5f90global.lo
+H5test_kind_SIZEOF.lo: $(srcdir)/H5test_kind_SIZEOF.f90
+H5_ff$(F_STATUS).lo: $(srcdir)/H5_ff$(F_STATUS).f90 H5f90global.lo
+H5_ff.lo:            $(srcdir)/H5_ff.f90 H5f90global.lo H5_ff$(F_STATUS).lo
 H5Aff.lo:            $(srcdir)/H5Aff.f90 H5f90global.lo
 H5Dff.lo:            $(srcdir)/H5Dff.f90 H5f90global.lo
+H5Aff$(F_STATUS).lo:  $(srcdir)/H5Aff$(F_STATUS).f90 H5f90global.lo
+H5Dff$(F_STATUS).lo:  $(srcdir)/H5Dff$(F_STATUS).f90 H5f90global.lo
+H5Eff$(F_STATUS).lo:  $(srcdir)/H5Eff$(F_STATUS).f90 H5f90global.lo
+H5Lff$(F_STATUS).lo:  $(srcdir)/H5Lff$(F_STATUS).f90 H5f90global.lo
+H5Off$(F_STATUS).lo:  $(srcdir)/H5Off$(F_STATUS).f90 H5f90global.lo
+H5Pff$(F_STATUS).lo:  $(srcdir)/H5Pff$(F_STATUS).f90 H5f90global.lo
+H5Rff$(F_STATUS).lo:  $(srcdir)/H5Rff$(F_STATUS).f90 H5f90global.lo
+H5Tff$(F_STATUS).lo:  $(srcdir)/H5Tff$(F_STATUS).f90 H5f90global.lo
 H5Eff.lo:            $(srcdir)/H5Eff.f90 H5f90global.lo
 H5Fff.lo:            $(srcdir)/H5Fff.f90 H5f90global.lo
 H5Gff.lo:            $(srcdir)/H5Gff.f90 H5f90global.lo
@@ -199,15 +217,22 @@ H5Rff.lo:            $(srcdir)/H5Rff.f90 H5f90global.lo
 H5Sff.lo:            $(srcdir)/H5Sff.f90 H5f90global.lo
 H5Tff.lo:            $(srcdir)/H5Tff.f90 H5f90global.lo
 H5Zff.lo:            $(srcdir)/H5Zff.f90 H5f90global.lo
-H5_DBLE_Interface$(F_DBLE).lo:  $(srcdir)/H5_DBLE_Interface$(F_DBLE).f90 H5Aff.lo H5Dff.lo H5Pff.lo
-
-HDF5.lo:             $(srcdir)/HDF5.f90 H5f90global.lo H5Aff.lo      \
-                     H5Dff.lo H5Eff.lo H5Fff.lo H5Gff.lo H5Iff.lo H5Lff.lo \
-                     H5Pff.lo H5Rff.lo H5Sff.lo H5Tff.lo H5Zff.lo \
-                     H5_DBLE_Interface$(F_DBLE).lo
+H5_DBLE_Interface$(F_DBLE).lo:  $(srcdir)/H5_DBLE_Interface$(F_DBLE).f90 H5Aff$(F_STATUS).lo H5Dff$(F_STATUS).lo H5Eff$(F_STATUS).lo H5Pff$(F_STATUS).lo
+HDF5.lo:             $(srcdir)/HDF5.f90 H5f90global.lo H5_ff$(F_STATUS).lo H5_ff.lo H5Aff.lo H5Aff$(F_STATUS).lo \
+                     H5Dff.lo H5Dff$(F_STATUS).lo  \
+                     H5Eff.lo H5Eff$(F_STATUS).lo \
+		     H5Fff.lo H5Gff.lo H5Iff.lo H5Lff.lo H5Lff$(F_STATUS).lo \
+	             H5Off.lo H5Off$(F_STATUS).lo H5Pff.lo H5Pff$(F_STATUS).lo H5Rff$(F_STATUS).lo H5Rff.lo \
+                     H5Sff.lo H5Tff.lo H5Tff$(F_STATUS).lo H5Zff.lo \
+                     H5_DBLE_Interface$(F_DBLE).lo 
 H5FDmpioff.lo:       $(srcdir)/H5FDmpioff.f90 H5f90global.lo
-HDF5mpio.lo:         $(srcdir)/H5FDmpioff.f90 H5f90global.lo H5Aff.lo  \
-                     H5Dff.lo H5Eff.lo H5Fff.lo H5Gff.lo H5Iff.lo H5Lff.lo  \
-                     H5Pff.lo H5Rff.lo H5Sff.lo H5Tff.lo H5Zff.lo H5_DBLE_Interface$(F_DBLE).lo H5FDmpioff.lo
+HDF5mpio.lo:         $(srcdir)/H5FDmpioff.f90 H5f90global.lo H5_ff$(F_STATUS).lo H5_ff.lo \
+		     H5Aff.lo H5Aff$(F_STATUS).lo \
+                     H5Dff.lo H5Dff$(F_STATUS).lo \
+		     H5Eff.lo H5Eff$(F_STATUS).lo \
+                     H5Fff.lo H5Gff.lo H5Iff.lo H5Lff.lo H5Lff$(F_STATUS).lo \
+		     H5Off.lo H5Off$(F_STATUS).lo H5Pff.lo H5Pff$(F_STATUS).lo H5Rff$(F_STATUS).lo H5Rff.lo \
+                     H5Sff.lo H5Tff.lo H5Tff$(F_STATUS).lo H5Zff.lo \
+	             H5_DBLE_Interface$(F_DBLE).lo H5FDmpioff.lo
 
 include $(top_srcdir)/config/conclude.am
diff --git a/fortran/src/Makefile.in b/fortran/src/Makefile.in
index ee6aa6b..083c675 100644
--- a/fortran/src/Makefile.in
+++ b/fortran/src/Makefile.in
@@ -98,21 +98,28 @@ am__installdirs = "$(DESTDIR)$(libdir)"
 LTLIBRARIES = $(lib_LTLIBRARIES)
 libhdf5_fortran_la_DEPENDENCIES = $(LIBHDF5)
 am__libhdf5_fortran_la_SOURCES_DIST = H5f90global.f90 \
-	H5fortran_types.f90 H5_ff.f90 H5Aff.f90 H5Dff.f90 H5Eff.f90 \
-	H5Fff.f90 H5Gff.f90 H5Iff.f90 H5Lff.f90 H5Off.f90 H5Pff.f90 \
-	H5Rff.f90 H5Sff.f90 H5Tff.f90 H5Zff.f90 \
+	H5fortran_types.f90 H5_ff$(F_STATUS).f90 H5_ff.f90 H5Aff.f90 \
+	H5Dff.f90 H5Eff.f90 H5Fff.f90 H5Gff.f90 H5Iff.f90 H5Lff.f90 \
+	H5Off.f90 H5Pff.f90 H5Rff.f90 H5Sff.f90 H5Tff.f90 H5Zff.f90 \
 	H5_DBLE_Interface$(F_DBLE).f90 H5f90kit.c H5_f.c H5Af.c H5Df.c \
 	H5Ef.c H5Ff.c H5Gf.c H5If.c H5Lf.c H5Of.c H5Pf.c H5Rf.c H5Sf.c \
-	H5Tf.c H5Zf.c HDF5.f90 H5FDmpiof.c HDF5mpio.f90 H5FDmpioff.f90
+	H5Tf.c H5Zf.c H5Aff$(F_STATUS).f90 H5Dff$(F_STATUS).f90 \
+	H5Eff$(F_STATUS).f90 H5Lff$(F_STATUS).f90 H5Off$(F_STATUS).f90 \
+	H5Pff$(F_STATUS).f90 H5Rff$(F_STATUS).f90 H5Tff$(F_STATUS).f90 \
+	HDF5.f90 H5FDmpiof.c HDF5mpio.f90 H5FDmpioff.f90
 @BUILD_PARALLEL_CONDITIONAL_FALSE at am__objects_1 = HDF5.lo
 @BUILD_PARALLEL_CONDITIONAL_TRUE at am__objects_1 = H5FDmpiof.lo \
 @BUILD_PARALLEL_CONDITIONAL_TRUE@	HDF5mpio.lo H5FDmpioff.lo
 am_libhdf5_fortran_la_OBJECTS = H5f90global.lo H5fortran_types.lo \
-	H5_ff.lo H5Aff.lo H5Dff.lo H5Eff.lo H5Fff.lo H5Gff.lo H5Iff.lo \
-	H5Lff.lo H5Off.lo H5Pff.lo H5Rff.lo H5Sff.lo H5Tff.lo H5Zff.lo \
-	H5_DBLE_Interface$(F_DBLE).lo H5f90kit.lo H5_f.lo H5Af.lo \
-	H5Df.lo H5Ef.lo H5Ff.lo H5Gf.lo H5If.lo H5Lf.lo H5Of.lo \
-	H5Pf.lo H5Rf.lo H5Sf.lo H5Tf.lo H5Zf.lo $(am__objects_1)
+	H5_ff$(F_STATUS).lo H5_ff.lo H5Aff.lo H5Dff.lo H5Eff.lo \
+	H5Fff.lo H5Gff.lo H5Iff.lo H5Lff.lo H5Off.lo H5Pff.lo H5Rff.lo \
+	H5Sff.lo H5Tff.lo H5Zff.lo H5_DBLE_Interface$(F_DBLE).lo \
+	H5f90kit.lo H5_f.lo H5Af.lo H5Df.lo H5Ef.lo H5Ff.lo H5Gf.lo \
+	H5If.lo H5Lf.lo H5Of.lo H5Pf.lo H5Rf.lo H5Sf.lo H5Tf.lo \
+	H5Zf.lo H5Aff$(F_STATUS).lo H5Dff$(F_STATUS).lo \
+	H5Eff$(F_STATUS).lo H5Lff$(F_STATUS).lo H5Off$(F_STATUS).lo \
+	H5Pff$(F_STATUS).lo H5Rff$(F_STATUS).lo H5Tff$(F_STATUS).lo \
+	$(am__objects_1)
 libhdf5_fortran_la_OBJECTS = $(am_libhdf5_fortran_la_OBJECTS)
 AM_V_lt = $(am__v_lt_$(V))
 am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
@@ -251,6 +258,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -271,10 +279,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -318,7 +328,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
@@ -469,7 +478,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
 # Add libtool shared library version numbers to the HDF5 library
 # See libtool versioning documentation online.
 LT_VERS_INTERFACE = 7
-LT_VERS_REVISION = 1
+LT_VERS_REVISION = 2
 LT_VERS_AGE = 0
 
 # Include src directory in both Fortran and C flags (C compiler is used
@@ -486,6 +495,11 @@ libhdf5_fortran_la_LDFLAGS = -version-info $(LT_VERS_INTERFACE):$(LT_VERS_REVISI
 
 # Include HDF5.f90 if parallel is disabled, HDF5mpiof*  if parallel is enabled
 @BUILD_PARALLEL_CONDITIONAL_TRUE at PARALLEL_COND_SRC = H5FDmpiof.c HDF5mpio.f90 H5FDmpioff.f90
+ at FORTRAN_2003_CONDITIONAL_F_FALSE@F_STATUS = _F90
+
+# Check if the compiler supports the Fortran 2003 standard
+# which should include the intrinsic module iso_c_binding
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@F_STATUS = _F03
 @FORTRAN_DEFAULT_REALisDBLE_F_FALSE at F_DBLE = Include
 
 #   Condition for including/excluding the DBLE interfaces for when the 
@@ -496,14 +510,15 @@ libhdf5_fortran_la_LDFLAGS = -version-info $(LT_VERS_INTERFACE):$(LT_VERS_REVISI
 @FORTRAN_DEFAULT_REALisDBLE_F_TRUE at F_DBLE = Exclude
 
 # Source files for the library.
-libhdf5_fortran_la_SOURCES = H5f90global.f90          \
-         H5fortran_types.f90 H5_ff.f90 H5Aff.f90 H5Dff.f90 H5Eff.f90    \
-         H5Fff.f90 H5Gff.f90 H5Iff.f90 H5Lff.f90 H5Off.f90 H5Pff.f90 H5Rff.f90 H5Sff.f90    \
-         H5Tff.f90 H5Zff.f90                                            \
-	 H5_DBLE_Interface$(F_DBLE).f90 \
-         H5f90kit.c H5_f.c H5Af.c H5Df.c H5Ef.c H5Ff.c H5Gf.c           \
-         H5If.c H5Lf.c H5Of.c H5Pf.c H5Rf.c H5Sf.c H5Tf.c H5Zf.c        \
-         $(PARALLEL_COND_SRC)
+libhdf5_fortran_la_SOURCES = H5f90global.f90 \
+          H5fortran_types.f90 H5_ff$(F_STATUS).f90 H5_ff.f90 H5Aff.f90 H5Dff.f90 H5Eff.f90    \
+          H5Fff.f90 H5Gff.f90 H5Iff.f90 H5Lff.f90 H5Off.f90 H5Pff.f90 H5Rff.f90 H5Sff.f90    \
+          H5Tff.f90 H5Zff.f90                                            \
+	  H5_DBLE_Interface$(F_DBLE).f90 \
+          H5f90kit.c H5_f.c H5Af.c H5Df.c H5Ef.c H5Ff.c H5Gf.c           \
+          H5If.c H5Lf.c H5Of.c H5Pf.c H5Rf.c H5Sf.c H5Tf.c H5Zf.c        \
+	  H5Aff$(F_STATUS).f90 H5Dff$(F_STATUS).f90 H5Eff$(F_STATUS).f90 H5Lff$(F_STATUS).f90 \
+	  H5Off$(F_STATUS).f90 H5Pff$(F_STATUS).f90 H5Rff$(F_STATUS).f90 H5Tff$(F_STATUS).f90 $(PARALLEL_COND_SRC)
 
 
 # HDF5 Fortran library depends on HDF5 Library.
@@ -983,8 +998,8 @@ install-data-local:
 	$(CP) $(top_srcdir)/fortran/src/H5f90i.h $(DESTDIR)$(includedir)/.
 
 uninstall-local:
-	@if test -n "$(DESTDIR)$(F9XMODEXT)" -a "X$(DESTDIR)$(F9XMODEXT)" != "Xo"; then      \
-	  if test -f "$(DESTDIR)$(includedir)/hdf5.$(F9XMODEXT)" -o -f "$(DESTDIR)$(includedir)/HDF5.$(F9XMODEXT)"; then \
+	@if test -n "$(F9XMODEXT)" -a "X$(F9XMODEXT)" != "Xo"; then      \
+	  if test -f "$(includedir)/hdf5.$(F9XMODEXT)" -o -f "$(includedir)/HDF5.$(F9XMODEXT)"; then \
 	    set -x; $(RM) $(DESTDIR)$(includedir)/*.$(F9XMODEXT);                 \
 	  fi;                                                           \
 	fi;								\
@@ -1022,10 +1037,19 @@ H5f90global.lo:      $(srcdir)/H5f90global.f90 H5fortran_types.lo
 H5fortran_types.lo:  H5fortran_types.f90
 H5fortran_detect.lo: H5fortran_detect.f90
 H5test_kind.lo:      $(srcdir)/H5test_kind.f90
-H5test_kind_SIZEOF.lo:      $(srcdir)/H5test_kind_SIZEOF.f90
-H5_ff.lo:            $(srcdir)/H5_ff.f90 H5f90global.lo
+H5test_kind_SIZEOF.lo: $(srcdir)/H5test_kind_SIZEOF.f90
+H5_ff$(F_STATUS).lo: $(srcdir)/H5_ff$(F_STATUS).f90 H5f90global.lo
+H5_ff.lo:            $(srcdir)/H5_ff.f90 H5f90global.lo H5_ff$(F_STATUS).lo
 H5Aff.lo:            $(srcdir)/H5Aff.f90 H5f90global.lo
 H5Dff.lo:            $(srcdir)/H5Dff.f90 H5f90global.lo
+H5Aff$(F_STATUS).lo:  $(srcdir)/H5Aff$(F_STATUS).f90 H5f90global.lo
+H5Dff$(F_STATUS).lo:  $(srcdir)/H5Dff$(F_STATUS).f90 H5f90global.lo
+H5Eff$(F_STATUS).lo:  $(srcdir)/H5Eff$(F_STATUS).f90 H5f90global.lo
+H5Lff$(F_STATUS).lo:  $(srcdir)/H5Lff$(F_STATUS).f90 H5f90global.lo
+H5Off$(F_STATUS).lo:  $(srcdir)/H5Off$(F_STATUS).f90 H5f90global.lo
+H5Pff$(F_STATUS).lo:  $(srcdir)/H5Pff$(F_STATUS).f90 H5f90global.lo
+H5Rff$(F_STATUS).lo:  $(srcdir)/H5Rff$(F_STATUS).f90 H5f90global.lo
+H5Tff$(F_STATUS).lo:  $(srcdir)/H5Tff$(F_STATUS).f90 H5f90global.lo
 H5Eff.lo:            $(srcdir)/H5Eff.f90 H5f90global.lo
 H5Fff.lo:            $(srcdir)/H5Fff.f90 H5f90global.lo
 H5Gff.lo:            $(srcdir)/H5Gff.f90 H5f90global.lo
@@ -1037,16 +1061,23 @@ H5Rff.lo:            $(srcdir)/H5Rff.f90 H5f90global.lo
 H5Sff.lo:            $(srcdir)/H5Sff.f90 H5f90global.lo
 H5Tff.lo:            $(srcdir)/H5Tff.f90 H5f90global.lo
 H5Zff.lo:            $(srcdir)/H5Zff.f90 H5f90global.lo
-H5_DBLE_Interface$(F_DBLE).lo:  $(srcdir)/H5_DBLE_Interface$(F_DBLE).f90 H5Aff.lo H5Dff.lo H5Pff.lo
-
-HDF5.lo:             $(srcdir)/HDF5.f90 H5f90global.lo H5Aff.lo      \
-                     H5Dff.lo H5Eff.lo H5Fff.lo H5Gff.lo H5Iff.lo H5Lff.lo \
-                     H5Pff.lo H5Rff.lo H5Sff.lo H5Tff.lo H5Zff.lo \
-                     H5_DBLE_Interface$(F_DBLE).lo
+H5_DBLE_Interface$(F_DBLE).lo:  $(srcdir)/H5_DBLE_Interface$(F_DBLE).f90 H5Aff$(F_STATUS).lo H5Dff$(F_STATUS).lo H5Eff$(F_STATUS).lo H5Pff$(F_STATUS).lo
+HDF5.lo:             $(srcdir)/HDF5.f90 H5f90global.lo H5_ff$(F_STATUS).lo H5_ff.lo H5Aff.lo H5Aff$(F_STATUS).lo \
+                     H5Dff.lo H5Dff$(F_STATUS).lo  \
+                     H5Eff.lo H5Eff$(F_STATUS).lo \
+		     H5Fff.lo H5Gff.lo H5Iff.lo H5Lff.lo H5Lff$(F_STATUS).lo \
+	             H5Off.lo H5Off$(F_STATUS).lo H5Pff.lo H5Pff$(F_STATUS).lo H5Rff$(F_STATUS).lo H5Rff.lo \
+                     H5Sff.lo H5Tff.lo H5Tff$(F_STATUS).lo H5Zff.lo \
+                     H5_DBLE_Interface$(F_DBLE).lo 
 H5FDmpioff.lo:       $(srcdir)/H5FDmpioff.f90 H5f90global.lo
-HDF5mpio.lo:         $(srcdir)/H5FDmpioff.f90 H5f90global.lo H5Aff.lo  \
-                     H5Dff.lo H5Eff.lo H5Fff.lo H5Gff.lo H5Iff.lo H5Lff.lo  \
-                     H5Pff.lo H5Rff.lo H5Sff.lo H5Tff.lo H5Zff.lo H5_DBLE_Interface$(F_DBLE).lo H5FDmpioff.lo
+HDF5mpio.lo:         $(srcdir)/H5FDmpioff.f90 H5f90global.lo H5_ff$(F_STATUS).lo H5_ff.lo \
+		     H5Aff.lo H5Aff$(F_STATUS).lo \
+                     H5Dff.lo H5Dff$(F_STATUS).lo \
+		     H5Eff.lo H5Eff$(F_STATUS).lo \
+                     H5Fff.lo H5Gff.lo H5Iff.lo H5Lff.lo H5Lff$(F_STATUS).lo \
+		     H5Off.lo H5Off$(F_STATUS).lo H5Pff.lo H5Pff$(F_STATUS).lo H5Rff$(F_STATUS).lo H5Rff.lo \
+                     H5Sff.lo H5Tff.lo H5Tff$(F_STATUS).lo H5Zff.lo \
+	             H5_DBLE_Interface$(F_DBLE).lo H5FDmpioff.lo
 
 # lib/progs/tests targets recurse into subdirectories. build-* targets
 # build files in this directory.
diff --git a/fortran/src/hdf5_fortrandll.def b/fortran/src/hdf5_fortrandll.def
index 5f45350..6b3aad8 100644
--- a/fortran/src/hdf5_fortrandll.def
+++ b/fortran/src/hdf5_fortrandll.def
@@ -50,54 +50,54 @@ H5_DBLE_INTERFACE_mp_H5PREGISTER_DOUBLE
 H5A_mp_H5ACREATE_F
 H5A_mp_H5AOPEN_NAME_F
 H5A_mp_H5AOPEN_IDX_F
-H5A_mp_H5AWRITE_INTEGER_SCALAR
-H5A_mp_H5AWRITE_INTEGER_1
-H5A_mp_H5AWRITE_INTEGER_2
-H5A_mp_H5AWRITE_INTEGER_3
-H5A_mp_H5AWRITE_INTEGER_4
-H5A_mp_H5AWRITE_INTEGER_5
-H5A_mp_H5AWRITE_INTEGER_6
-H5A_mp_H5AWRITE_INTEGER_7
-H5A_mp_H5AWRITE_REAL_SCALAR
-H5A_mp_H5AWRITE_REAL_1
-H5A_mp_H5AWRITE_REAL_2
-H5A_mp_H5AWRITE_REAL_3
-H5A_mp_H5AWRITE_REAL_4
-H5A_mp_H5AWRITE_REAL_5
-H5A_mp_H5AWRITE_REAL_6
-H5A_mp_H5AWRITE_REAL_7
-H5A_mp_H5AWRITE_CHAR_SCALAR
-H5A_mp_H5AWRITE_CHAR_1
-H5A_mp_H5AWRITE_CHAR_2
-H5A_mp_H5AWRITE_CHAR_3
-H5A_mp_H5AWRITE_CHAR_4
-H5A_mp_H5AWRITE_CHAR_5
-H5A_mp_H5AWRITE_CHAR_6
-H5A_mp_H5AWRITE_CHAR_7
-H5A_mp_H5AREAD_INTEGER_SCALAR
-H5A_mp_H5AREAD_INTEGER_1
-H5A_mp_H5AREAD_INTEGER_2
-H5A_mp_H5AREAD_INTEGER_3
-H5A_mp_H5AREAD_INTEGER_4
-H5A_mp_H5AREAD_INTEGER_5
-H5A_mp_H5AREAD_INTEGER_6
-H5A_mp_H5AREAD_INTEGER_7
-H5A_mp_H5AREAD_REAL_SCALAR
-H5A_mp_H5AREAD_REAL_1
-H5A_mp_H5AREAD_REAL_2
-H5A_mp_H5AREAD_REAL_3
-H5A_mp_H5AREAD_REAL_4
-H5A_mp_H5AREAD_REAL_5
-H5A_mp_H5AREAD_REAL_6
-H5A_mp_H5AREAD_REAL_7
-H5A_mp_H5AREAD_CHAR_SCALAR
-H5A_mp_H5AREAD_CHAR_1
-H5A_mp_H5AREAD_CHAR_2
-H5A_mp_H5AREAD_CHAR_3
-H5A_mp_H5AREAD_CHAR_4
-H5A_mp_H5AREAD_CHAR_5
-H5A_mp_H5AREAD_CHAR_6
-H5A_mp_H5AREAD_CHAR_7
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_SCALAR
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_1
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_2
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_3
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_4
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_5
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_6
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_7
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_SCALAR
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_1
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_2
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_3
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_4
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_5
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_6
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_7
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_SCALAR
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_1
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_2
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_3
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_4
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_5
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_6
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_7
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_SCALAR
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_1
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_2
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_3
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_4
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_5
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_6
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_7
+H5A_PROVISIONAL_mp_H5AREAD_REAL_SCALAR
+H5A_PROVISIONAL_mp_H5AREAD_REAL_1
+H5A_PROVISIONAL_mp_H5AREAD_REAL_2
+H5A_PROVISIONAL_mp_H5AREAD_REAL_3
+H5A_PROVISIONAL_mp_H5AREAD_REAL_4
+H5A_PROVISIONAL_mp_H5AREAD_REAL_5
+H5A_PROVISIONAL_mp_H5AREAD_REAL_6
+H5A_PROVISIONAL_mp_H5AREAD_REAL_7
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_SCALAR
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_1
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_2
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_3
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_4
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_5
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_6
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_7
 H5A_mp_H5AGET_SPACE_F
 H5A_mp_H5AGET_TYPE_F
 H5A_mp_H5AGET_NAME_F
@@ -124,58 +124,58 @@ H5A_mp_H5ARENAME_F
 H5D_mp_H5DCREATE_F
 H5D_mp_H5DOPEN_F
 H5D_mp_H5DCLOSE_F
-H5D_mp_H5DWRITE_REFERENCE_OBJ
-H5D_mp_H5DWRITE_REFERENCE_DSETREG
-H5D_mp_H5DWRITE_INTEGER_SCALAR
-H5D_mp_H5DWRITE_INTEGER_1
-H5D_mp_H5DWRITE_INTEGER_2
-H5D_mp_H5DWRITE_INTEGER_3
-H5D_mp_H5DWRITE_INTEGER_4
-H5D_mp_H5DWRITE_INTEGER_5
-H5D_mp_H5DWRITE_INTEGER_6
-H5D_mp_H5DWRITE_INTEGER_7
-H5D_mp_H5DWRITE_CHAR_SCALAR
-H5D_mp_H5DWRITE_CHAR_1
-H5D_mp_H5DWRITE_CHAR_2
-H5D_mp_H5DWRITE_CHAR_3
-H5D_mp_H5DWRITE_CHAR_4
-H5D_mp_H5DWRITE_CHAR_5
-H5D_mp_H5DWRITE_CHAR_6
-H5D_mp_H5DWRITE_CHAR_7
-H5D_mp_H5DWRITE_REAL_SCALAR
-H5D_mp_H5DWRITE_REAL_1
-H5D_mp_H5DWRITE_REAL_2
-H5D_mp_H5DWRITE_REAL_3
-H5D_mp_H5DWRITE_REAL_4
-H5D_mp_H5DWRITE_REAL_5
-H5D_mp_H5DWRITE_REAL_6
-H5D_mp_H5DWRITE_REAL_7
-H5D_mp_H5DREAD_REFERENCE_OBJ
-H5D_mp_H5DREAD_REFERENCE_DSETREG
-H5D_mp_H5DREAD_INTEGER_SCALAR
-H5D_mp_H5DREAD_INTEGER_1
-H5D_mp_H5DREAD_INTEGER_2
-H5D_mp_H5DREAD_INTEGER_3
-H5D_mp_H5DREAD_INTEGER_4
-H5D_mp_H5DREAD_INTEGER_5
-H5D_mp_H5DREAD_INTEGER_6
-H5D_mp_H5DREAD_INTEGER_7
-H5D_mp_H5DREAD_CHAR_SCALAR
-H5D_mp_H5DREAD_CHAR_1
-H5D_mp_H5DREAD_CHAR_2
-H5D_mp_H5DREAD_CHAR_3
-H5D_mp_H5DREAD_CHAR_4
-H5D_mp_H5DREAD_CHAR_5
-H5D_mp_H5DREAD_CHAR_6
-H5D_mp_H5DREAD_CHAR_7
-H5D_mp_H5DREAD_REAL_SCALAR
-H5D_mp_H5DREAD_REAL_1
-H5D_mp_H5DREAD_REAL_2
-H5D_mp_H5DREAD_REAL_3
-H5D_mp_H5DREAD_REAL_4
-H5D_mp_H5DREAD_REAL_5
-H5D_mp_H5DREAD_REAL_6
-H5D_mp_H5DREAD_REAL_7
+H5D_PROVISIONAL_mp_H5DWRITE_REFERENCE_OBJ
+H5D_PROVISIONAL_mp_H5DWRITE_REFERENCE_DSETREG
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_SCALAR
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_1
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_2
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_3
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_4
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_5
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_6
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_7
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_SCALAR
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_1
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_2
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_3
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_4
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_5
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_6
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_7
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_SCALAR
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_1
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_2
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_3
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_4
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_5
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_6
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_7
+H5D_PROVISIONAL_mp_H5DREAD_REFERENCE_OBJ
+H5D_PROVISIONAL_mp_H5DREAD_REFERENCE_DSETREG
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_SCALAR
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_1
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_2
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_3
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_4
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_5
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_6
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_7
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_SCALAR
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_1
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_2
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_3
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_4
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_5
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_6
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_7
+H5D_PROVISIONAL_mp_H5DREAD_REAL_SCALAR
+H5D_PROVISIONAL_mp_H5DREAD_REAL_1
+H5D_PROVISIONAL_mp_H5DREAD_REAL_2
+H5D_PROVISIONAL_mp_H5DREAD_REAL_3
+H5D_PROVISIONAL_mp_H5DREAD_REAL_4
+H5D_PROVISIONAL_mp_H5DREAD_REAL_5
+H5D_PROVISIONAL_mp_H5DREAD_REAL_6
+H5D_PROVISIONAL_mp_H5DREAD_REAL_7
 H5D_mp_H5DGET_SPACE_F
 H5D_mp_H5DGET_TYPE_F
 H5D_mp_H5DSET_EXTENT_F
@@ -188,9 +188,9 @@ H5D_mp_H5DWRITE_VL_REAL
 H5D_mp_H5DREAD_VL_REAL
 H5D_mp_H5DWRITE_VL_STRING
 H5D_mp_H5DREAD_VL_STRING
-H5D_mp_H5DFILL_INTEGER
-H5D_mp_H5DFILL_REAL
-H5D_mp_H5DFILL_CHAR
+H5D_PROVISIONAL_mp_H5DFILL_INTEGER
+H5D_PROVISIONAL_mp_H5DFILL_REAL
+H5D_PROVISIONAL_mp_H5DFILL_CHAR
 H5D_mp_H5DGET_SPACE_STATUS_F
 H5D_mp_H5DCREATE_ANON_F
 H5D_mp_H5DGET_SPACE_F
@@ -205,7 +205,7 @@ H5E_mp_H5ECLEAR_F
 H5E_mp_H5EPRINT_F
 H5E_mp_H5EGET_MAJOR_F
 H5E_mp_H5EGET_MINOR_F
-H5E_mp_H5ESET_AUTO_F
+H5E_PROVISIONAL_mp_H5ESET_AUTO_F
 ; H5F
 H5F_mp_H5FCREATE_F
 H5F_mp_H5FFLUSH_F
@@ -297,12 +297,12 @@ H5P_mp_H5PCLOSE_F
 H5P_mp_H5PSET_CHUNK_F
 H5P_mp_H5PGET_CHUNK_F
 H5P_mp_H5PSET_DEFLATE_F
-H5P_mp_H5PSET_FILL_VALUE_INTEGER
-H5P_mp_H5PGET_FILL_VALUE_INTEGER
-H5P_mp_H5PSET_FILL_VALUE_REAL
-H5P_mp_H5PGET_FILL_VALUE_REAL
-H5P_mp_H5PSET_FILL_VALUE_CHAR
-H5P_mp_H5PGET_FILL_VALUE_CHAR
+H5P_PROVISIONAL_mp_H5PSET_FILL_VALUE_INTEGER
+H5P_PROVISIONAL_mp_H5PGET_FILL_VALUE_INTEGER
+H5P_PROVISIONAL_mp_H5PSET_FILL_VALUE_REAL
+H5P_PROVISIONAL_mp_H5PGET_FILL_VALUE_REAL
+H5P_PROVISIONAL_mp_H5PSET_FILL_VALUE_CHAR
+H5P_PROVISIONAL_mp_H5PGET_FILL_VALUE_CHAR
 H5P_mp_H5PGET_VERSION_F
 H5P_mp_H5PSET_USERBLOCK_F
 H5P_mp_H5PGET_USERBLOCK_F
@@ -354,12 +354,12 @@ H5P_mp_H5PSET_SMALL_DATA_BLOCK_SIZE_F
 H5P_mp_H5PGET_SMALL_DATA_BLOCK_SIZE_F
 H5P_mp_H5PSET_HYPER_VECTOR_SIZE_F
 H5P_mp_H5PGET_HYPER_VECTOR_SIZE_F
-H5P_mp_H5PSET_INTEGER
-H5P_mp_H5PSET_REAL
-H5P_mp_H5PSET_CHAR
-H5P_mp_H5PGET_INTEGER
-H5P_mp_H5PGET_REAL
-H5P_mp_H5PGET_CHAR
+H5P_PROVISIONAL_mp_H5PSET_INTEGER
+H5P_PROVISIONAL_mp_H5PSET_REAL
+H5P_PROVISIONAL_mp_H5PSET_CHAR
+H5P_PROVISIONAL_mp_H5PGET_INTEGER
+H5P_PROVISIONAL_mp_H5PGET_REAL
+H5P_PROVISIONAL_mp_H5PGET_CHAR
 H5P_mp_H5PEXIST_F
 H5P_mp_H5PGET_SIZE_F
 H5P_mp_H5PGET_NPROPS_F
@@ -370,13 +370,13 @@ H5P_mp_H5PCOPY_PROP_F
 H5P_mp_H5PREMOVE_F
 H5P_mp_H5PUNREGISTER_F
 H5P_mp_H5PCLOSE_CLASS_F
-H5P_mp_H5PCREATE_CLASS_F
-H5P_mp_H5PREGISTER_INTEGER
-H5P_mp_H5PREGISTER_REAL
-H5P_mp_H5PREGISTER_CHAR
-H5P_mp_H5PINSERT_INTEGER
-H5P_mp_H5PINSERT_REAL
-H5P_mp_H5PINSERT_CHAR
+H5P_PROVISIONAL_mp_H5PCREATE_CLASS_F
+H5P_PROVISIONAL_mp_H5PREGISTER_INTEGER
+H5P_PROVISIONAL_mp_H5PREGISTER_REAL
+H5P_PROVISIONAL_mp_H5PREGISTER_CHAR
+H5P_PROVISIONAL_mp_H5PINSERT_INTEGER
+H5P_PROVISIONAL_mp_H5PINSERT_REAL
+H5P_PROVISIONAL_mp_H5PINSERT_CHAR
 H5P_mp_H5PSET_SHUFFLE_F
 H5P_mp_H5PSET_EDC_CHECK_F
 H5P_mp_H5PGET_EDC_CHECK_F
@@ -424,14 +424,14 @@ H5P_mp_H5PGET_CREATE_INTER_GROUP_F
 H5P_mp_H5PSET_CHUNK_CACHE_F
 H5P_mp_H5PGET_CHUNK_CACHE_F
 ; H5R
-H5R_mp_H5RCREATE_OBJECT_F
-H5R_mp_H5RCREATE_REGION_F
-H5R_mp_H5RDEREFERENCE_OBJECT_F
-H5R_mp_H5RDEREFERENCE_REGION_F
+H5R_PROVISIONAL_mp_H5RCREATE_OBJECT_F
+H5R_PROVISIONAL_mp_H5RCREATE_REGION_F
+H5R_PROVISIONAL_mp_H5RDEREFERENCE_OBJECT_F
+H5R_PROVISIONAL_mp_H5RDEREFERENCE_REGION_F
 H5R_mp_H5RGET_REGION_REGION_F
 H5R_mp_H5RGET_OBJECT_TYPE_OBJ_F
-H5R_mp_H5RGET_NAME_OBJECT_F
-H5R_mp_H5RGET_NAME_REGION_F
+H5R_PROVISIONAL_mp_H5RGET_NAME_OBJECT_F
+H5R_PROVISIONAL_mp_H5RGET_NAME_REGION_F
 ; H5S
 H5S_mp_H5SCREATE_SIMPLE_F
 H5S_mp_H5SCLOSE_F
diff --git a/fortran/src/phdf5_fortrandll.def b/fortran/src/phdf5_fortrandll.def
new file mode 100644
index 0000000..a4bc9eb
--- /dev/null
+++ b/fortran/src/phdf5_fortrandll.def
@@ -0,0 +1,530 @@
+EXPORTS
+; H5LIB
+H5LIB_mp_H5OPEN_F
+H5LIB_mp_H5CLOSE_F
+H5LIB_mp_H5GET_LIBVERSION_F
+H5LIB_mp_H5CHECK_VERSION_F
+H5LIB_mp_H5GARBAGE_COLLECT_F
+H5LIB_mp_H5DONT_ATEXIT_F
+; H5_DBLE_INTERFACE
+H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_SCALAR
+H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_1
+H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_2
+H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_3
+H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_4
+H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_5
+H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_6
+H5_DBLE_INTERFACE_mp_H5AREAD_DOUBLE_7
+H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_SCALAR
+H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_1
+H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_2
+H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_3
+H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_4
+H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_5
+H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_6
+H5_DBLE_INTERFACE_mp_H5AWRITE_DOUBLE_7
+H5_DBLE_INTERFACE_mp_H5DFILL_DOUBLE
+H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_SCALAR
+H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_1
+H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_2
+H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_3
+H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_4
+H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_5
+H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_6
+H5_DBLE_INTERFACE_mp_H5DREAD_DOUBLE_7
+H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_SCALAR
+H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_1
+H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_2
+H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_3
+H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_4
+H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_5
+H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_6
+H5_DBLE_INTERFACE_mp_H5DWRITE_DOUBLE_7
+H5_DBLE_INTERFACE_mp_H5PGET_DOUBLE
+H5_DBLE_INTERFACE_mp_H5PSET_DOUBLE
+H5_DBLE_INTERFACE_mp_H5PSET_FILL_VALUE_DOUBLE
+H5_DBLE_INTERFACE_mp_H5PGET_FILL_VALUE_DOUBLE
+H5_DBLE_INTERFACE_mp_H5PINSERT_DOUBLE
+H5_DBLE_INTERFACE_mp_H5PREGISTER_DOUBLE
+; H5A
+H5A_mp_H5ACREATE_F
+H5A_mp_H5AOPEN_NAME_F
+H5A_mp_H5AOPEN_IDX_F
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_SCALAR
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_1
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_2
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_3
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_4
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_5
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_6
+H5A_PROVISIONAL_mp_H5AWRITE_INTEGER_7
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_SCALAR
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_1
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_2
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_3
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_4
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_5
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_6
+H5A_PROVISIONAL_mp_H5AWRITE_REAL_7
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_SCALAR
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_1
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_2
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_3
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_4
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_5
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_6
+H5A_PROVISIONAL_mp_H5AWRITE_CHAR_7
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_SCALAR
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_1
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_2
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_3
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_4
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_5
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_6
+H5A_PROVISIONAL_mp_H5AREAD_INTEGER_7
+H5A_PROVISIONAL_mp_H5AREAD_REAL_SCALAR
+H5A_PROVISIONAL_mp_H5AREAD_REAL_1
+H5A_PROVISIONAL_mp_H5AREAD_REAL_2
+H5A_PROVISIONAL_mp_H5AREAD_REAL_3
+H5A_PROVISIONAL_mp_H5AREAD_REAL_4
+H5A_PROVISIONAL_mp_H5AREAD_REAL_5
+H5A_PROVISIONAL_mp_H5AREAD_REAL_6
+H5A_PROVISIONAL_mp_H5AREAD_REAL_7
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_SCALAR
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_1
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_2
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_3
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_4
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_5
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_6
+H5A_PROVISIONAL_mp_H5AREAD_CHAR_7
+H5A_mp_H5AGET_SPACE_F
+H5A_mp_H5AGET_TYPE_F
+H5A_mp_H5AGET_NAME_F
+H5A_mp_H5AGET_NAME_BY_IDX_F
+H5A_mp_H5AGET_NUM_ATTRS_F
+H5A_mp_H5ADELETE_F
+H5A_mp_H5ACLOSE_F
+H5A_mp_H5AGET_STORAGE_SIZE_F
+H5A_mp_H5AGET_CREATE_PLIST_F
+H5A_mp_H5ARENAME_BY_NAME_F
+H5A_mp_H5AOPEN_F
+H5A_mp_H5ADELETE_BY_IDX_F
+H5A_mp_H5ADELETE_BY_NAME_F
+H5A_mp_H5AOPEN_BY_IDX_F
+H5A_mp_H5AGET_INFO_F
+H5A_mp_H5AGET_INFO_BY_IDX_F
+H5A_mp_H5AGET_INFO_BY_NAME_F
+H5A_mp_H5ACREATE_BY_NAME_F
+H5A_mp_H5AEXISTS_F
+H5A_mp_H5AEXISTS_BY_NAME_F
+H5A_mp_H5AOPEN_BY_NAME_F
+H5A_mp_H5ARENAME_F
+; H5D
+H5D_mp_H5DCREATE_F
+H5D_mp_H5DOPEN_F
+H5D_mp_H5DCLOSE_F
+H5D_PROVISIONAL_mp_H5DWRITE_REFERENCE_OBJ
+H5D_PROVISIONAL_mp_H5DWRITE_REFERENCE_DSETREG
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_SCALAR
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_1
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_2
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_3
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_4
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_5
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_6
+H5D_PROVISIONAL_mp_H5DWRITE_INTEGER_7
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_SCALAR
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_1
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_2
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_3
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_4
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_5
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_6
+H5D_PROVISIONAL_mp_H5DWRITE_CHAR_7
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_SCALAR
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_1
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_2
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_3
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_4
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_5
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_6
+H5D_PROVISIONAL_mp_H5DWRITE_REAL_7
+H5D_PROVISIONAL_mp_H5DREAD_REFERENCE_OBJ
+H5D_PROVISIONAL_mp_H5DREAD_REFERENCE_DSETREG
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_SCALAR
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_1
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_2
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_3
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_4
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_5
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_6
+H5D_PROVISIONAL_mp_H5DREAD_INTEGER_7
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_SCALAR
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_1
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_2
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_3
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_4
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_5
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_6
+H5D_PROVISIONAL_mp_H5DREAD_CHAR_7
+H5D_PROVISIONAL_mp_H5DREAD_REAL_SCALAR
+H5D_PROVISIONAL_mp_H5DREAD_REAL_1
+H5D_PROVISIONAL_mp_H5DREAD_REAL_2
+H5D_PROVISIONAL_mp_H5DREAD_REAL_3
+H5D_PROVISIONAL_mp_H5DREAD_REAL_4
+H5D_PROVISIONAL_mp_H5DREAD_REAL_5
+H5D_PROVISIONAL_mp_H5DREAD_REAL_6
+H5D_PROVISIONAL_mp_H5DREAD_REAL_7
+H5D_mp_H5DGET_SPACE_F
+H5D_mp_H5DGET_TYPE_F
+H5D_mp_H5DSET_EXTENT_F
+H5D_mp_H5DGET_CREATE_PLIST_F
+H5D_mp_H5DGET_STORAGE_SIZE_F
+H5D_mp_H5DVLEN_GET_MAX_LEN_F
+H5D_mp_H5DWRITE_VL_INTEGER
+H5D_mp_H5DREAD_VL_INTEGER
+H5D_mp_H5DWRITE_VL_REAL
+H5D_mp_H5DREAD_VL_REAL
+H5D_mp_H5DWRITE_VL_STRING
+H5D_mp_H5DREAD_VL_STRING
+H5D_PROVISIONAL_mp_H5DFILL_INTEGER
+H5D_PROVISIONAL_mp_H5DFILL_REAL
+H5D_PROVISIONAL_mp_H5DFILL_CHAR
+H5D_mp_H5DGET_SPACE_STATUS_F
+H5D_mp_H5DCREATE_ANON_F
+H5D_mp_H5DGET_SPACE_F
+H5D_mp_H5DGET_TYPE_F
+H5D_mp_H5DSET_EXTENT_F
+H5D_mp_H5DGET_CREATE_PLIST_F
+H5D_mp_H5DGET_STORAGE_SIZE_F
+H5D_mp_H5DVLEN_GET_MAX_LEN_F
+H5D_mp_H5DGET_ACCESS_PLIST_F
+; H5E
+H5E_mp_H5ECLEAR_F
+H5E_mp_H5EPRINT_F
+H5E_mp_H5EGET_MAJOR_F
+H5E_mp_H5EGET_MINOR_F
+H5E_PROVISIONAL_mp_H5ESET_AUTO_F
+; H5F
+H5F_mp_H5FCREATE_F
+H5F_mp_H5FFLUSH_F
+H5F_mp_H5FCLOSE_F
+H5F_mp_H5FGET_OBJ_COUNT_F
+H5F_mp_H5FGET_OBJ_IDS_F
+H5F_mp_H5FGET_FREESPACE_F
+H5F_mp_H5FMOUNT_F
+H5F_mp_H5FUNMOUNT_F
+H5F_mp_H5FOPEN_F
+H5F_mp_H5FREOPEN_F
+H5F_mp_H5FGET_CREATE_PLIST_F
+H5F_mp_H5FGET_ACCESS_PLIST_F
+H5F_mp_H5FIS_HDF5_F
+H5F_mp_H5FGET_NAME_F
+H5F_mp_H5FGET_FILESIZE_F
+; H5G
+H5G_mp_H5GOPEN_F
+H5G_mp_H5GCREATE_F
+H5G_mp_H5GCLOSE_F
+H5G_mp_H5GGET_OBJ_INFO_IDX_F
+H5G_mp_H5GN_MEMBERS_F
+H5G_mp_H5GLINK_F
+H5G_mp_H5GLINK2_F
+H5G_mp_H5GUNLINK_F
+H5G_mp_H5GMOVE_F
+H5G_mp_H5GMOVE2_F
+H5G_mp_H5GGET_LINKVAL_F
+H5G_mp_H5GSET_COMMENT_F
+H5G_mp_H5GGET_COMMENT_F
+H5G_mp_H5GCREATE_ANON_F
+H5G_mp_H5GGET_CREATE_PLIST_F
+H5G_mp_H5GGET_INFO_F
+H5G_mp_H5GGET_INFO_BY_IDX_F
+H5G_mp_H5GGET_INFO_BY_NAME_F
+H5G_mp_H5GGET_OBJ_INFO_IDX_F
+; H5GLOBAL
+; PREDEFINED_TYPES DATA
+; FLOATING_TYPES DATA
+; INTEGER_TYPES DATA
+; H5F_FLAGS DATA
+; H5GENERIC_FLAGS DATA
+; H5G_FLAGS DATA
+; H5D_FLAGS DATA
+; H5FD_FLAGS DATA
+; H5FD_HID_FLAGS DATA
+; H5I_FLAGS DATA
+; H5L_FLAGS DATA
+; H5O_FLAGS DATA
+; H5P_FLAGS DATA
+; H5P_FLAGS_INT DATA
+; H5R_FLAGS DATA
+; H5S_FLAGS DATA
+; H5T_FLAGS DATA
+; H5Z_FLAGS DATA
+; H5LIB_FLAGS DATA
+; H5I
+H5I_mp_H5IGET_TYPE_F
+H5I_mp_H5IGET_NAME_F
+H5I_mp_H5IINC_REF_F
+H5I_mp_H5IDEC_REF_F
+H5I_mp_H5IGET_REF_F
+H5I_mp_H5IGET_FILE_ID_F
+H5I_mp_H5IIS_VALID_F
+; H5L
+H5L_mp_H5LCOPY_F
+H5L_mp_H5LDELETE_F
+H5L_mp_H5LCREATE_SOFT_F
+H5L_mp_H5LCREATE_HARD_F
+H5L_mp_H5LCREATE_EXTERNAL_F
+H5L_mp_H5LDELETE_BY_IDX_F
+H5L_mp_H5LEXISTS_F
+H5L_mp_H5LGET_INFO_F
+H5L_mp_H5LGET_INFO_BY_IDX_F
+H5L_mp_H5LIS_REGISTERED_F
+H5L_mp_H5LMOVE_F
+H5L_mp_H5LGET_NAME_BY_IDX_F
+; H5O
+H5O_mp_H5OLINK_F
+H5O_mp_H5OOPEN_F
+H5O_mp_H5OOPEN_BY_ADDR_F
+; H5P
+H5P_mp_H5PCREATE_F
+H5P_mp_H5PSET_PRESERVE_F
+H5P_mp_H5PGET_PRESERVE_F
+H5P_mp_H5PGET_CLASS_F
+H5P_mp_H5PCOPY_F
+H5P_mp_H5PCLOSE_F
+H5P_mp_H5PSET_CHUNK_F
+H5P_mp_H5PGET_CHUNK_F
+H5P_mp_H5PSET_DEFLATE_F
+H5P_PROVISIONAL_mp_H5PSET_FILL_VALUE_INTEGER
+H5P_PROVISIONAL_mp_H5PGET_FILL_VALUE_INTEGER
+H5P_PROVISIONAL_mp_H5PSET_FILL_VALUE_REAL
+H5P_PROVISIONAL_mp_H5PGET_FILL_VALUE_REAL
+H5P_PROVISIONAL_mp_H5PSET_FILL_VALUE_CHAR
+H5P_PROVISIONAL_mp_H5PGET_FILL_VALUE_CHAR
+H5P_mp_H5PGET_VERSION_F
+H5P_mp_H5PSET_USERBLOCK_F
+H5P_mp_H5PGET_USERBLOCK_F
+H5P_mp_H5PSET_SIZES_F
+H5P_mp_H5PGET_SIZES_F
+H5P_mp_H5PSET_SYM_K_F
+H5P_mp_H5PGET_SYM_K_F
+H5P_mp_H5PSET_ISTORE_K_F
+H5P_mp_H5PGET_ISTORE_K_F
+H5P_mp_H5PGET_DRIVER_F
+H5P_mp_H5PSET_FAPL_STDIO_F
+H5P_mp_H5PSET_FAPL_SEC2_F
+H5P_mp_H5PSET_ALIGNMENT_F
+H5P_mp_H5PGET_ALIGNMENT_F
+H5P_mp_H5PSET_FAPL_CORE_F
+H5P_mp_H5PGET_FAPL_CORE_F
+H5P_mp_H5PSET_FAPL_FAMILY_F
+H5P_mp_H5PGET_FAPL_FAMILY_F
+H5P_mp_H5PSET_CACHE_F
+H5P_mp_H5PGET_CACHE_F
+H5P_mp_H5PSET_FAPL_SPLIT_F
+H5P_mp_H5PSET_GC_REFERENCES_F
+H5P_mp_H5PGET_GC_REFERENCES_F
+H5P_mp_H5PSET_LAYOUT_F
+H5P_mp_H5PGET_LAYOUT_F
+H5P_mp_H5PSET_FILTER_F
+H5P_mp_H5PGET_NFILTERS_F
+H5P_mp_H5PGET_FILTER_F
+H5P_mp_H5PSET_EXTERNAL_F
+H5P_mp_H5PGET_EXTERNAL_COUNT_F
+H5P_mp_H5PGET_EXTERNAL_F
+H5P_mp_H5PSET_BTREE_RATIOS_F
+H5P_mp_H5PGET_BTREE_RATIOS_F
+H5P_mp_H5PGET_FCLOSE_DEGREE_F
+H5P_mp_H5PSET_FCLOSE_DEGREE_F
+H5P_mp_H5PEQUAL_F
+H5P_mp_H5PSET_BUFFER_F
+H5P_mp_H5PGET_BUFFER_F
+H5P_mp_H5PFILL_VALUE_DEFINED_F
+H5P_mp_H5PSET_ALLOC_TIME_F
+H5P_mp_H5PGET_ALLOC_TIME_F
+H5P_mp_H5PSET_FILL_TIME_F
+H5P_mp_H5PGET_FILL_TIME_F
+H5P_mp_H5PSET_META_BLOCK_SIZE_F
+H5P_mp_H5PGET_META_BLOCK_SIZE_F
+H5P_mp_H5PSET_SIEVE_BUF_SIZE_F
+H5P_mp_H5PGET_SIEVE_BUF_SIZE_F
+H5P_mp_H5PSET_SMALL_DATA_BLOCK_SIZE_F
+H5P_mp_H5PGET_SMALL_DATA_BLOCK_SIZE_F
+H5P_mp_H5PSET_HYPER_VECTOR_SIZE_F
+H5P_mp_H5PGET_HYPER_VECTOR_SIZE_F
+H5P_PROVISIONAL_mp_H5PSET_INTEGER
+H5P_PROVISIONAL_mp_H5PSET_REAL
+H5P_PROVISIONAL_mp_H5PSET_CHAR
+H5P_PROVISIONAL_mp_H5PGET_INTEGER
+H5P_PROVISIONAL_mp_H5PGET_REAL
+H5P_PROVISIONAL_mp_H5PGET_CHAR
+H5P_mp_H5PEXIST_F
+H5P_mp_H5PGET_SIZE_F
+H5P_mp_H5PGET_NPROPS_F
+H5P_mp_H5PGET_CLASS_NAME_F
+H5P_mp_H5PGET_CLASS_PARENT_F
+H5P_mp_H5PISA_CLASS_F
+H5P_mp_H5PCOPY_PROP_F
+H5P_mp_H5PREMOVE_F
+H5P_mp_H5PUNREGISTER_F
+H5P_mp_H5PCLOSE_CLASS_F
+H5P_PROVISIONAL_mp_H5PCREATE_CLASS_F
+H5P_PROVISIONAL_mp_H5PREGISTER_INTEGER
+H5P_PROVISIONAL_mp_H5PREGISTER_REAL
+H5P_PROVISIONAL_mp_H5PREGISTER_CHAR
+H5P_PROVISIONAL_mp_H5PINSERT_INTEGER
+H5P_PROVISIONAL_mp_H5PINSERT_REAL
+H5P_PROVISIONAL_mp_H5PINSERT_CHAR
+H5P_mp_H5PSET_SHUFFLE_F
+H5P_mp_H5PSET_EDC_CHECK_F
+H5P_mp_H5PGET_EDC_CHECK_F
+H5P_mp_H5PSET_FLETCHER32_F
+H5P_mp_H5PSET_FAMILY_OFFSET_F
+H5P_mp_H5PSET_FAPL_MULTI_L
+H5P_mp_H5PSET_FAPL_MULTI_S
+H5P_mp_H5PGET_FAPL_MULTI_F
+H5P_mp_H5PSET_SZIP_F
+H5P_mp_H5PALL_FILTERS_AVAIL_F
+H5P_mp_H5PGET_FILTER_BY_ID_F
+H5P_mp_H5PMODIFY_FILTER_F
+H5P_mp_H5PREMOVE_FILTER_F
+H5P_mp_H5PGET_ATTR_PHASE_CHANGE_F
+H5P_mp_H5PSET_ATTR_CREATION_ORDER_F
+H5P_mp_H5PSET_SHARED_MESG_NINDEXES_F
+H5P_mp_H5PSET_SHARED_MESG_INDEX_F
+H5P_mp_H5PGET_ATTR_CREATION_ORDER_F
+H5P_mp_H5PSET_LIBVER_BOUNDS_F
+H5P_mp_H5PSET_LINK_CREATION_ORDER_F
+H5P_mp_H5PGET_LINK_PHASE_CHANGE_F
+H5P_mp_H5PGET_OBJ_TRACK_TIMES_F
+H5P_mp_H5PSET_OBJ_TRACK_TIMES_F
+H5P_mp_H5PSET_CREATE_INTER_GROUP_F
+H5P_mp_H5PGET_LINK_CREATION_ORDER_F
+H5P_mp_H5PSET_CHAR_ENCODING_F
+H5P_mp_H5PGET_CHAR_ENCODING_F
+H5P_mp_H5PSET_COPY_OBJECT_F
+H5P_mp_H5PGET_COPY_OBJECT_F
+H5P_mp_H5PGET_DATA_TRANSFORM_F
+H5P_mp_H5PSET_DATA_TRANSFORM_F
+H5P_mp_H5PGET_LOCAL_HEAP_SIZE_HINT_F
+H5P_mp_H5PGET_EST_LINK_INFO_F
+H5P_mp_H5PSET_LOCAL_HEAP_SIZE_HINT_F
+H5P_mp_H5PSET_EST_LINK_INFO_F
+H5P_mp_H5PSET_LINK_PHASE_CHANGE_F
+H5P_mp_H5PSET_FAPL_DIRECT_F
+H5P_mp_H5PGET_FAPL_DIRECT_F
+H5P_mp_H5PSET_ATTR_PHASE_CHANGE_F
+H5P_mp_H5PSET_NBIT_F
+H5P_mp_H5PSET_SCALEOFFSET_F
+H5P_mp_H5PSET_NLINKS_F
+H5P_mp_H5PGET_NLINKS_F
+H5P_mp_H5PGET_CREATE_INTER_GROUP_F
+H5P_mp_H5PSET_CHUNK_CACHE_F
+H5P_mp_H5PGET_CHUNK_CACHE_F
+; H5R
+H5R_PROVISIONAL_mp_H5RCREATE_OBJECT_F
+H5R_PROVISIONAL_mp_H5RCREATE_REGION_F
+H5R_PROVISIONAL_mp_H5RDEREFERENCE_OBJECT_F
+H5R_PROVISIONAL_mp_H5RDEREFERENCE_REGION_F
+H5R_mp_H5RGET_REGION_REGION_F
+H5R_mp_H5RGET_OBJECT_TYPE_OBJ_F
+H5R_PROVISIONAL_mp_H5RGET_NAME_OBJECT_F
+H5R_PROVISIONAL_mp_H5RGET_NAME_REGION_F
+; H5S
+H5S_mp_H5SCREATE_SIMPLE_F
+H5S_mp_H5SCLOSE_F
+H5S_mp_H5SCREATE_F
+H5S_mp_H5SCOPY_F
+H5S_mp_H5SGET_SELECT_HYPER_NBLOCKS_F
+H5S_mp_H5SGET_SELECT_HYPER_BLOCKLIST_F
+H5S_mp_H5SGET_SELECT_BOUNDS_F
+H5S_mp_H5SGET_SELECT_ELEM_NPOINTS_F
+H5S_mp_H5SGET_SELECT_ELEM_POINTLIST_F
+H5S_mp_H5SSELECT_ELEMENTS_F
+H5S_mp_H5SSELECT_ALL_F
+H5S_mp_H5SSELECT_NONE_F
+H5S_mp_H5SSELECT_VALID_F
+H5S_mp_H5SGET_SIMPLE_EXTENT_NPOINTS_F
+H5S_mp_H5SGET_SELECT_NPOINTS_F
+H5S_mp_H5SGET_SIMPLE_EXTENT_NDIMS_F
+H5S_mp_H5SGET_SIMPLE_EXTENT_DIMS_F
+H5S_mp_H5SGET_SIMPLE_EXTENT_TYPE_F
+H5S_mp_H5SSET_EXTENT_SIMPLE_F
+H5S_mp_H5SIS_SIMPLE_F
+H5S_mp_H5SOFFSET_SIMPLE_F
+H5S_mp_H5SEXTENT_COPY_F
+H5S_mp_H5SSET_EXTENT_NONE_F
+H5S_mp_H5SSELECT_HYPERSLAB_F
+H5S_mp_H5SGET_SELECT_TYPE_F
+H5S_mp_H5SDECODE_F
+H5S_mp_H5SENCODE_F
+H5S_mp_H5SEXTENT_EQUAL_F
+; H5T
+H5T_mp_H5TOPEN_F
+H5T_mp_H5TCOMMIT_F
+H5T_mp_H5TCOPY_F
+H5T_mp_H5TEQUAL_F
+H5T_mp_H5TCLOSE_F
+H5T_mp_H5TGET_CLASS_F
+H5T_mp_H5TGET_SIZE_F
+H5T_mp_H5TSET_SIZE_F
+H5T_mp_H5TGET_ORDER_F
+H5T_mp_H5TSET_ORDER_F
+H5T_mp_H5TGET_PRECISION_F
+H5T_mp_H5TSET_PRECISION_F
+H5T_mp_H5TGET_OFFSET_F
+H5T_mp_H5TSET_OFFSET_F
+H5T_mp_H5TGET_PAD_F
+H5T_mp_H5TSET_PAD_F
+H5T_mp_H5TGET_SIGN_F
+H5T_mp_H5TSET_SIGN_F
+H5T_mp_H5TGET_FIELDS_F
+H5T_mp_H5TSET_FIELDS_F
+H5T_mp_H5TGET_EBIAS_F
+H5T_mp_H5TSET_EBIAS_F
+H5T_mp_H5TGET_NORM_F
+H5T_mp_H5TSET_NORM_F
+H5T_mp_H5TGET_INPAD_F
+H5T_mp_H5TSET_INPAD_F
+H5T_mp_H5TGET_CSET_F
+H5T_mp_H5TSET_CSET_F
+H5T_mp_H5TGET_STRPAD_F
+H5T_mp_H5TSET_STRPAD_F
+H5T_mp_H5TGET_NMEMBERS_F
+H5T_mp_H5TGET_MEMBER_NAME_F
+H5T_mp_H5TGET_MEMBER_OFFSET_F
+H5T_mp_H5TGET_MEMBER_INDEX_F
+H5T_mp_H5TGET_ARRAY_DIMS_F
+H5T_mp_H5TGET_ARRAY_NDIMS_F
+H5T_mp_H5TGET_SUPER_F
+H5T_mp_H5TGET_MEMBER_TYPE_F
+H5T_mp_H5TCREATE_F
+H5T_mp_H5TINSERT_F
+H5T_mp_H5TPACK_F
+H5T_mp_H5TARRAY_CREATE_F
+H5T_mp_H5TENUM_CREATE_F
+H5T_mp_H5TENUM_INSERT_F
+H5T_mp_H5TENUM_NAMEOF_F
+H5T_mp_H5TENUM_VALUEOF_F
+H5T_mp_H5TGET_MEMBER_VALUE_F
+H5T_mp_H5TSET_TAG_F
+H5T_mp_H5TGET_TAG_F
+H5T_mp_H5TVLEN_CREATE_F
+H5T_mp_H5TIS_VARIABLE_STR_F
+H5T_mp_H5TGET_MEMBER_CLASS_F
+H5T_mp_H5TCOMMIT_ANON_F
+H5T_mp_H5TCOMMITTED_F
+H5T_mp_H5TDECODE_F
+H5T_mp_H5TENCODE_F
+H5T_mp_H5TGET_CREATE_PLIST_F
+H5T_mp_H5TCOMPILER_CONV_F
+H5T_mp_H5TGET_NATIVE_TYPE_F
+; H5Z
+H5Z_mp_H5ZUNREGISTER_F
+H5Z_mp_H5ZFILTER_AVAIL_F
+H5Z_mp_H5ZGET_FILTER_INFO_F
+; Parallel
+H5FDMPIO_mp_H5PSET_FAPL_MPIO_F
+H5FDMPIO_mp_H5PSET_DXPL_MPIO_F
diff --git a/fortran/test/CMakeLists.txt b/fortran/test/CMakeLists.txt
index eab7180..e4cc94d 100644
--- a/fortran/test/CMakeLists.txt
+++ b/fortran/test/CMakeLists.txt
@@ -21,21 +21,25 @@ SET (SHARED_LINK_FLAGS " ")
 IF (WIN32 AND NOT CYGWIN)
   IF (BUILD_SHARED_LIBS)
     SET_PROPERTY (TARGET ${HDF5_F90_TEST_LIB_TARGET}
-	    APPEND PROPERTY COMPILE_DEFINITIONS
-		    BUILD_HDF5_DLL
-	)
+      APPEND PROPERTY COMPILE_DEFINITIONS
+        BUILD_HDF5_DLL
+  )
     IF (MSVC)
       SET (SHARED_LINK_FLAGS "/DLL")
     ENDIF (MSVC)
   ENDIF (BUILD_SHARED_LIBS)
   SET_PROPERTY (TARGET ${HDF5_F90_TEST_LIB_TARGET}
       APPEND PROPERTY COMPILE_DEFINITIONS
-  	    HDF5F90_WINDOWS
+          HDF5F90_WINDOWS
   )
 ENDIF (WIN32 AND NOT CYGWIN)
 TARGET_FORTRAN_WIN_PROPERTIES (${HDF5_F90_TEST_LIB_TARGET} ${SHARED_LINK_FLAGS})
 SET_TARGET_PROPERTIES (${HDF5_F90_TEST_LIB_TARGET} PROPERTIES LINKER_LANGUAGE Fortran)
-TARGET_LINK_LIBRARIES (${HDF5_F90_TEST_LIB_TARGET} ${HDF5_F90_C_TEST_LIB_TARGET})
+TARGET_LINK_LIBRARIES (${HDF5_F90_TEST_LIB_TARGET}
+    ${HDF5_F90_C_TEST_LIB_TARGET}
+    ${HDF5_F90_LIB_TARGET}
+    ${HDF5_LIB_TARGET}
+)
 H5_SET_LIB_OPTIONS (${HDF5_F90_TEST_LIB_TARGET} ${HDF5_F90_TEST_LIB_NAME} ${LIB_TYPE})
 
 #-----------------------------------------------------------------------------
@@ -95,6 +99,31 @@ SET_TARGET_PROPERTIES (testhdf5_fortran_1_8 PROPERTIES LINKER_LANGUAGE Fortran)
 
 ADD_TEST (NAME testhdf5_fortran_1_8 COMMAND $<TARGET_FILE:testhdf5_fortran_1_8>)
 
+#-- Adding test for fortranlib_test_F03
+IF (FORTRAN_HAVE_ISO_C_BINDING AND HDF5_ENABLE_F2003)
+  ADD_EXECUTABLE (fortranlib_test_F03
+      fortranlib_test_F03.f90
+      tH5F.f90
+      tH5E_F03.f90
+      tH5L_F03.f90
+      tH5P_F03.f90
+      tH5T_F03.f90
+  )
+  TARGET_NAMING (fortranlib_test_F03 ${LIB_TYPE})
+  TARGET_FORTRAN_WIN_PROPERTIES (fortranlib_test_F03 "")
+  TARGET_LINK_LIBRARIES (fortranlib_test_F03 
+      ${HDF5_F90_TEST_LIB_TARGET}
+      ${HDF5_F90_LIB_TARGET}
+      ${HDF5_LIB_TARGET}
+  )
+  IF (WIN32 AND MSVC)
+    TARGET_LINK_LIBRARIES (fortranlib_test_F03 "ws2_32.lib")
+  ENDIF (WIN32 AND MSVC)
+  SET_TARGET_PROPERTIES (fortranlib_test_F03 PROPERTIES LINKER_LANGUAGE Fortran)
+
+  ADD_TEST (NAME fortranlib_test_F03 COMMAND $<TARGET_FILE:fortranlib_test_F03>)
+ENDIF (FORTRAN_HAVE_ISO_C_BINDING AND HDF5_ENABLE_F2003)
+
 #-- Adding test for fflush1
 ADD_EXECUTABLE (fflush1 fflush1.f90)
 TARGET_NAMING (fflush1 ${LIB_TYPE})
diff --git a/fortran/test/Makefile.am b/fortran/test/Makefile.am
index fb4d6ca..b261785 100644
--- a/fortran/test/Makefile.am
+++ b/fortran/test/Makefile.am
@@ -35,8 +35,21 @@ else
    AM_LDFLAGS+=-static
 endif
 
+# Check if the compiler supports the Fortran 2003 standard
+# which should include the intrinsic module iso_c_binding
+if FORTRAN_2003_CONDITIONAL_F
+   ff_PREFIX = F03
+else
+   ff_PREFIX = F90
+endif
+
 # Our main targets, the tests themselves
 TEST_PROG=fortranlib_test fflush1 fflush2 fortranlib_test_1_8
+
+if FORTRAN_2003_CONDITIONAL_F
+   TEST_PROG += fortranlib_test_F03
+endif
+
 check_PROGRAMS=$(TEST_PROG)
 
 libh5test_fortran_la_SOURCES= tf.f90 t.c
@@ -51,8 +64,14 @@ fortranlib_test_SOURCES = fortranlib_test.f90 \
         tH5Sselect.f90 tH5P.f90 tH5A.f90 tH5I.f90 tH5G.f90 tH5E.f90
 
 fortranlib_test_1_8_SOURCES = fortranlib_test_1_8.f90 \
-        tH5F.f90 tH5O.f90 tH5A_1_8.f90  tH5G_1_8.f90
- 
+        tH5F.f90 tH5O.f90 tH5A_1_8.f90 tH5G_1_8.f90
+
+if FORTRAN_2003_CONDITIONAL_F
+   fortranlib_test_F03_SOURCES = fortranlib_test_F03.f90 \
+	tH5F.f90 tH5E_F03.f90 tH5L_F03.f90 tH5P_F03.f90 tH5T_F03.f90
+endif
+
+
 fflush1_SOURCES=fflush1.f90
 fflush2_SOURCES=fflush2.f90
 
diff --git a/fortran/test/Makefile.in b/fortran/test/Makefile.in
index 0a354ff..27198a8 100644
--- a/fortran/test/Makefile.in
+++ b/fortran/test/Makefile.in
@@ -59,7 +59,8 @@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \
 # want to build a shared C library and a static Fortran library.  If so,
 # pass the -static flag to the library linker.
 @FORTRAN_SHARED_CONDITIONAL_FALSE at am__append_1 = -static
-check_PROGRAMS = $(am__EXEEXT_1)
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@am__append_2 = fortranlib_test_F03
+check_PROGRAMS = $(am__EXEEXT_2)
 TESTS = $(check_PROGRAMS)
 subdir = fortran/test
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -77,8 +78,10 @@ libh5test_fortran_la_OBJECTS = $(am_libh5test_fortran_la_OBJECTS)
 AM_V_lt = $(am__v_lt_$(V))
 am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
 am__v_lt_0 = --silent
-am__EXEEXT_1 = fortranlib_test$(EXEEXT) fflush1$(EXEEXT) \
-	fflush2$(EXEEXT) fortranlib_test_1_8$(EXEEXT)
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@am__EXEEXT_1 =  \
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@	fortranlib_test_F03$(EXEEXT)
+am__EXEEXT_2 = fortranlib_test$(EXEEXT) fflush1$(EXEEXT) \
+	fflush2$(EXEEXT) fortranlib_test_1_8$(EXEEXT) $(am__EXEEXT_1)
 am_fflush1_OBJECTS = fflush1.$(OBJEXT)
 fflush1_OBJECTS = $(am_fflush1_OBJECTS)
 fflush1_LDADD = $(LDADD)
@@ -114,6 +117,18 @@ fortranlib_test_1_8_OBJECTS = $(am_fortranlib_test_1_8_OBJECTS)
 fortranlib_test_1_8_LDADD = $(LDADD)
 fortranlib_test_1_8_DEPENDENCIES = libh5test_fortran.la $(LIBH5TEST) \
 	$(LIBH5F) $(LIBHDF5)
+am__fortranlib_test_F03_SOURCES_DIST = fortranlib_test_F03.f90 \
+	tH5F.f90 tH5E_F03.f90 tH5L_F03.f90 tH5P_F03.f90 tH5T_F03.f90
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@am_fortranlib_test_F03_OBJECTS = fortranlib_test_F03.$(OBJEXT) \
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@	tH5F.$(OBJEXT) \
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@	tH5E_F03.$(OBJEXT) \
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@	tH5L_F03.$(OBJEXT) \
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@	tH5P_F03.$(OBJEXT) \
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@	tH5T_F03.$(OBJEXT)
+fortranlib_test_F03_OBJECTS = $(am_fortranlib_test_F03_OBJECTS)
+fortranlib_test_F03_LDADD = $(LDADD)
+fortranlib_test_F03_DEPENDENCIES = libh5test_fortran.la $(LIBH5TEST) \
+	$(LIBH5F) $(LIBHDF5)
 DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)/src
 depcomp = $(SHELL) $(top_srcdir)/bin/depcomp
 am__depfiles_maybe = depfiles
@@ -155,10 +170,11 @@ am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
 am__v_GEN_0 = @echo "  GEN   " $@;
 SOURCES = $(libh5test_fortran_la_SOURCES) $(fflush1_SOURCES) \
 	$(fflush2_SOURCES) $(fortranlib_test_SOURCES) \
-	$(fortranlib_test_1_8_SOURCES)
+	$(fortranlib_test_1_8_SOURCES) $(fortranlib_test_F03_SOURCES)
 DIST_SOURCES = $(libh5test_fortran_la_SOURCES) $(fflush1_SOURCES) \
 	$(fflush2_SOURCES) $(fortranlib_test_SOURCES) \
-	$(fortranlib_test_1_8_SOURCES)
+	$(fortranlib_test_1_8_SOURCES) \
+	$(am__fortranlib_test_F03_SOURCES_DIST)
 ETAGS = etags
 CTAGS = ctags
 am__tty_colors = \
@@ -232,6 +248,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -252,10 +269,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -299,7 +318,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
@@ -452,9 +470,15 @@ INCLUDES = -I$(top_srcdir)/src -I$(top_builddir)/fortran/src
 
 # The Fortran test library
 noinst_LTLIBRARIES = libh5test_fortran.la
+ at FORTRAN_2003_CONDITIONAL_F_FALSE@ff_PREFIX = F90
+
+# Check if the compiler supports the Fortran 2003 standard
+# which should include the intrinsic module iso_c_binding
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@ff_PREFIX = F03
 
 # Our main targets, the tests themselves
-TEST_PROG = fortranlib_test fflush1 fflush2 fortranlib_test_1_8
+TEST_PROG = fortranlib_test fflush1 fflush2 fortranlib_test_1_8 \
+	$(am__append_2)
 libh5test_fortran_la_SOURCES = tf.f90 t.c
 
 # Source files are used for both the library and fortranlib_test.
@@ -466,7 +490,10 @@ fortranlib_test_SOURCES = fortranlib_test.f90 \
         tH5Sselect.f90 tH5P.f90 tH5A.f90 tH5I.f90 tH5G.f90 tH5E.f90
 
 fortranlib_test_1_8_SOURCES = fortranlib_test_1_8.f90 \
-        tH5F.f90 tH5O.f90 tH5A_1_8.f90  tH5G_1_8.f90
+        tH5F.f90 tH5O.f90 tH5A_1_8.f90 tH5G_1_8.f90
+
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@fortranlib_test_F03_SOURCES = fortranlib_test_F03.f90 \
+ at FORTRAN_2003_CONDITIONAL_F_TRUE@	tH5F.f90 tH5E_F03.f90 tH5L_F03.f90 tH5P_F03.f90 tH5T_F03.f90
 
 fflush1_SOURCES = fflush1.f90
 fflush2_SOURCES = fflush2.f90
@@ -560,6 +587,9 @@ fortranlib_test$(EXEEXT): $(fortranlib_test_OBJECTS) $(fortranlib_test_DEPENDENC
 fortranlib_test_1_8$(EXEEXT): $(fortranlib_test_1_8_OBJECTS) $(fortranlib_test_1_8_DEPENDENCIES) 
 	@rm -f fortranlib_test_1_8$(EXEEXT)
 	$(AM_V_FCLD)$(FCLINK) $(fortranlib_test_1_8_OBJECTS) $(fortranlib_test_1_8_LDADD) $(LIBS)
+fortranlib_test_F03$(EXEEXT): $(fortranlib_test_F03_OBJECTS) $(fortranlib_test_F03_DEPENDENCIES) 
+	@rm -f fortranlib_test_F03$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(fortranlib_test_F03_OBJECTS) $(fortranlib_test_F03_LDADD) $(LIBS)
 
 mostlyclean-compile:
 	-rm -f *.$(OBJEXT)
diff --git a/fortran/test/fflush1.f90 b/fortran/test/fflush1.f90
index 8767e55..d35bfff 100644
--- a/fortran/test/fflush1.f90
+++ b/fortran/test/fflush1.f90
@@ -1,3 +1,15 @@
+!****h* root/fortran/test/fflush1.f90
+!
+! NAME
+!  FFLUSH1EXAMPLE
+!
+! FUNCTION
+!  This is the first half of a two-part test that makes sure
+!  that a file can be read after an application crashes as long
+!  as the file was flushed first.  We simulate by exit the 
+!  the program using stop statement
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,12 +25,7 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
-!
-! Purpose:	This is the first half of a two-part test that makes sure
-!		that a file can be read after an application crashes as long
-!		as the file was flushed first.  We simulate by exit the
-!              the program using stop statement
-!
+!*****
 
      PROGRAM FFLUSH1EXAMPLE
 
diff --git a/fortran/test/fflush2.f90 b/fortran/test/fflush2.f90
index a4710e2..d699150 100644
--- a/fortran/test/fflush2.f90
+++ b/fortran/test/fflush2.f90
@@ -1,3 +1,15 @@
+!****h* root/fortran/test/fflush2.f90
+!
+! NAME
+!  fflush2.f90
+!
+! FUNCTION
+!  This is the second half of a two-part test that makes sure
+!  that a file can be read after an application crashes as long
+!  as the file was flushed first.  This half tries to read the
+!  file created by the first half.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,12 +25,7 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
-!
-! Purpose:	This is the second half of a two-part test that makes sure
-!		that a file can be read after an application crashes as long
-!		as the file was flushed first.  This half tries to read the
-!		file created by the first half.
-!
+!*****
 
      PROGRAM FFLUSH2EXAMPLE
 
@@ -89,7 +96,6 @@
               write(*,*) "Cannot modify filename"
               CALL h5_exit_f (1)
           endif
-	  print *, "filename=", filename, "fix_filename=", fix_filename
      CALL h5fopen_f(fix_filename, H5F_ACC_RDONLY_F, file_id, error)
           CALL check("h5fopen_f",error,total_error)
 
@@ -135,7 +141,6 @@
      !In case error happens, exit.
      !
      IF (error == -1) CALL h5_exit_f (1)
-
      !
      !Close the datatype
      !
diff --git a/fortran/test/fortranlib_test.f90 b/fortran/test/fortranlib_test.f90
index 9f17e50..6268d15 100644
--- a/fortran/test/fortranlib_test.f90
+++ b/fortran/test/fortranlib_test.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/fortranlib_test.f90
+!
+! NAME
+!  fortranlib_test.f90
+!
+! FUNCTION
+!  Basic testing of Fortran API's functionality.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,10 +22,8 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
-!
-!
-!    Testing Fortran functionality.
-!
+!*****
+
 PROGRAM fortranlibtest
 
   USE HDF5
@@ -30,6 +37,7 @@ PROGRAM fortranlibtest
   LOGICAL :: cleanup, status
 
   CALL h5open_f(error)
+
   cleanup = .TRUE.
   CALL h5_env_nocleanup_f(status)
   IF(status) cleanup=.FALSE.
@@ -141,7 +149,7 @@ PROGRAM fortranlibtest
   ret_total_error = 0
   CALL test_select_bounds(cleanup, ret_total_error)
   CALL write_test_status(ret_total_error, ' Selection bounds test ', total_error)
-
+  
 !     write(*,*)
 !     write(*,*) '========================================='
 !     write(*,*) 'Testing DATATYPE interface               '
diff --git a/fortran/test/fortranlib_test_1_8.f90 b/fortran/test/fortranlib_test_1_8.f90
index fac83eb..321cb99 100644
--- a/fortran/test/fortranlib_test_1_8.f90
+++ b/fortran/test/fortranlib_test_1_8.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/fortranlib_test_1_8.f90
+!
+! NAME
+!  fortranlib_test_1_8.f90
+!
+! FUNCTION
+!  Basic testing of Fortran API's introduced in 1.8 release.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,10 +22,8 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
-!
-!
-!    Testing Fortran wrappers introduced in 1.8 release.
-!
+!*****
+
 PROGRAM fortranlibtest
 
   USE HDF5
@@ -81,20 +88,22 @@ PROGRAM fortranlibtest
        total_error)
 
   ret_total_error = 0
-  CALL test_genprop_basic_class(cleanup, ret_total_error)
+  CALL test_h5s_encode(cleanup, ret_total_error)
   CALL write_test_status(ret_total_error, &
-       ' Testing basic generic properties', &
+       ' Testing dataspace encoding and decoding', &
        total_error)
 
   ret_total_error = 0
-  CALL test_h5s_encode(cleanup, ret_total_error)
+  CALL test_nbit(cleanup, ret_total_error )
   CALL write_test_status(ret_total_error, &
-       ' Testing dataspace encoding and decoding', &
+       ' Testing nbit filter', &
        total_error)
 
-
-
-!  CALL test_hard_query(group_total_error)
+  ret_total_error = 0
+  CALL test_scaleoffset(cleanup, ret_total_error )
+  CALL write_test_status(ret_total_error, &
+       ' Testing scaleoffset filter', &
+       total_error)
 
   WRITE(*,*)
 
@@ -129,7 +138,6 @@ SUBROUTINE dtransform(cleanup, total_error)
 
   INTEGER(SIZE_T) :: size
 
-
   CALL H5Fcreate_f("dtransform.h5", H5F_ACC_TRUNC_F, file_id, error)
   CALL check("dtransform.H5Fcreate_f", error, total_error)
 
@@ -194,10 +202,6 @@ SUBROUTINE test_genprop_basic_class(cleanup, total_error)
   INTEGER :: size
   LOGICAL :: flag
 
-  !/* Output message about test being performed */
-
-  !WRITE(*,*) "Testing Basic Generic Property List Class Creation Functionality"
-
   ! /* Create a new generic class, derived from the root of the class hierarchy */
   CALL H5Pcreate_class_f(H5P_ROOT_F, CLASS1_NAME, cid1, error)
   CALL check("H5Pcreate_class", error, total_error)
@@ -277,13 +281,10 @@ SUBROUTINE test_h5s_encode(cleanup, total_error)
   INTEGER :: rank	!/* LOGICAL rank of dataspace	*/
   INTEGER(size_t) :: sbuf_size=0, scalar_size=0
 
-! Make sure the size is large, need variable length in fortran 2003
+! Make sure the size is large
   CHARACTER(LEN=288) :: sbuf
   CHARACTER(LEN=288) :: scalar_buf
-! F2003  CHARACTER(LEN=:), ALLOCATABLE :: sbuf
 
-!    unsigned char       *sbuf=NULL, *null_sbuf=NULL, *scalar_buf=NULL;
-!    hsize_t		tdims[4];	/* Dimension array to test with */
   INTEGER(hsize_t) :: n ! /* Number of dataspace elements */
 
   INTEGER(hsize_t), DIMENSION(1:3) :: start = (/0, 0, 0/)
@@ -292,11 +293,8 @@ SUBROUTINE test_h5s_encode(cleanup, total_error)
   INTEGER(hsize_t), DIMENSION(1:3) :: BLOCK = (/1, 3, 1/)
 
   INTEGER :: space_type
-
-!    H5S_sel_type        sel_type;
-!    hssize_t            nblocks;
   !
-  !Dataset dimensions
+  ! Dataset dimensions
   !
   INTEGER, PARAMETER :: SPACE1_DIM1= 3,  SPACE1_DIM2=15, SPACE1_DIM3=13
 
@@ -304,9 +302,6 @@ SUBROUTINE test_h5s_encode(cleanup, total_error)
   INTEGER :: SPACE1_RANK = 3
   INTEGER :: error
 
-  !/* Output message about test being performed */
-  !WRITE(*,*) "Testing Dataspace Encoding and Decoding"
-
   !/*-------------------------------------------------------------------------
   ! * Test encoding and decoding of simple dataspace and hyperslab selection.
   ! *-------------------------------------------------------------------------
@@ -326,7 +321,6 @@ SUBROUTINE test_h5s_encode(cleanup, total_error)
   CALL H5Sencode_f(sid1, sbuf, sbuf_size, error)
   CALL check("H5Sencode", error, total_error)
 
-  ! In fortran 2003 we can allocate the needed character size here
 
   ! /* Try decoding bogus buffer */
 
@@ -347,23 +341,6 @@ SUBROUTINE test_h5s_encode(cleanup, total_error)
   CALL VERIFY("h5sget_simple_extent_npoints_f", INT(n), SPACE1_DIM1 * SPACE1_DIM2 * SPACE1_DIM3, &
        total_error)
 
-!!$
-!!$    rank = H5Sget_simple_extent_ndims(decoded_sid1);
-!!$    CHECK(rank, FAIL, "H5Sget_simple_extent_ndims");
-!!$    VERIFY(rank, SPACE1_RANK, "H5Sget_simple_extent_ndims");
-!!$
-!!$    rank = H5Sget_simple_extent_dims(decoded_sid1, tdims, NULL);
-!!$    CHECK(rank, FAIL, "H5Sget_simple_extent_dims");
-!!$    VERIFY(HDmemcmp(tdims, dims1, SPACE1_RANK * sizeof(hsize_t)), 0,
-!!$	   "H5Sget_simple_extent_dims");
-!!$
-!!$    /* Verify hyperslabe selection */
-!!$    sel_type = H5Sget_select_type(decoded_sid1);
-!!$    VERIFY(sel_type, H5S_SEL_HYPERSLABS, "H5Sget_select_type");
-!!$
-!!$    nblocks = H5Sget_select_hyper_nblocks(decoded_sid1);
-!!$    VERIFY(nblocks, 2*2*2, "H5Sget_select_hyper_nblocks");
-!!$
   !
   !Close the dataspace for the dataset.
   !
@@ -423,3 +400,289 @@ SUBROUTINE test_h5s_encode(cleanup, total_error)
 
 END SUBROUTINE test_h5s_encode
 
+!-------------------------------------------------------------------------
+! Function:    test_nbit
+!
+! Purpose:     Tests (real) datatype for nbit filter
+!
+! Return:      Success:        0
+!              Failure:        >0
+!
+! Programmer:  M. Scot Breitenfeld
+!              Decemeber 7, 2010
+!
+! Modifications:
+!
+!-------------------------------------------------------------------------
+!
+
+SUBROUTINE test_nbit(cleanup, total_error )
+
+  USE HDF5
+
+  IMPLICIT NONE
+  INTEGER, PARAMETER :: wp = KIND(1.0)
+  LOGICAL, INTENT(IN)  :: cleanup
+  INTEGER, INTENT(INOUT) :: total_error
+  INTEGER(hid_t) :: file
+  
+  INTEGER(hid_t) :: dataset, datatype, space, dc
+  INTEGER(hsize_t), DIMENSION(1:2) :: dims = (/2,5/)
+  INTEGER(hsize_t), DIMENSION(1:2) :: chunk_dim = (/2,5/)
+  ! orig_data[] are initialized to be within the range that can be represented by
+  ! dataset datatype (no precision loss during datatype conversion)
+  !
+  REAL(kind=wp), DIMENSION(1:2,1:5) :: orig_data = RESHAPE( (/188384.00, 19.103516, -1.0831790e9, -84.242188, &
+       5.2045898, -49140.000, 2350.2500, -3.2110596e-1, 6.4998865e-5, -0.0000000/) , (/2,5/) )
+  REAL(kind=wp), DIMENSION(1:2,1:5) :: new_data
+  INTEGER(size_t) :: PRECISION, offset
+  INTEGER :: error
+  LOGICAL :: status
+  INTEGER*8 :: ii
+  INTEGER(size_t) :: i, j
+
+
+  ! check to see if filter is available
+  CALL H5Zfilter_avail_f(H5Z_FILTER_NBIT_F, status, error)
+  IF(.NOT.status)THEN ! We don't have H5Z_FILTER_NBIT_F filter
+     total_error = -1     ! so return
+     RETURN
+  ENDIF
+
+  CALL H5Fcreate_f("nbit.h5", H5F_ACC_TRUNC_F, file, error)
+  CALL check("H5Fcreate_f", error, total_error)
+
+  ! Define dataset datatype (integer), and set precision, offset
+  CALL H5Tcopy_f(H5T_IEEE_F32BE, datatype, error)
+  CALL CHECK(" H5Tcopy_f", error, total_error)
+  CALL H5Tset_fields_f(datatype, 26_size_t, 20_size_t, 6_size_t, 7_size_t, 13_size_t, error)
+  CALL CHECK(" H5Tset_fields_f", error, total_error)
+  offset = 7
+  CALL H5Tset_offset_f(datatype, offset, error)
+  CALL CHECK(" H5Tset_offset_f", error, total_error)
+  PRECISION = 20
+  CALL H5Tset_precision_f(datatype,PRECISION, error)
+  CALL CHECK(" H5Tset_precision_f", error, total_error)
+  
+  CALL H5Tset_size_f(datatype, 4_size_t, error)
+  CALL CHECK(" H5Tset_size_f", error, total_error)
+  
+  CALL H5Tset_ebias_f(datatype, 31_size_t, error)
+  CALL CHECK(" H5Tset_ebias_f", error, total_error)
+ 
+  ! Create the data space 
+  CALL H5Screate_simple_f(2, dims, space, error)
+  CALL CHECK(" H5Screate_simple_f", error, total_error)
+
+  ! USE nbit filter
+  CALL H5Pcreate_f(H5P_DATASET_CREATE_F, dc, error)
+  CALL CHECK(" H5Pcreate_f", error, total_error)
+
+  CALL H5Pset_chunk_f(dc, 2, chunk_dim, error)
+  CALL CHECK(" H5Pset_chunk_f", error, total_error)
+  CALL H5Pset_nbit_f(dc, error)
+  CALL CHECK(" H5Pset_nbit_f", error, total_error)
+
+  ! Create the dataset
+  CALL  H5Dcreate_f(file, "nbit_real", datatype, &
+       space, dataset, error, dc)
+  CALL CHECK(" H5Dcreate_f", error, total_error)
+
+  !----------------------------------------------------------------------
+  ! STEP 1: Test nbit by setting up a chunked dataset and writing
+  ! to it.
+  !----------------------------------------------------------------------
+  !
+  CALL H5Dwrite_f(dataset, H5T_NATIVE_REAL, orig_data, dims, error)
+  CALL CHECK(" H5Dwrite_f", error, total_error)
+
+  !----------------------------------------------------------------------
+  ! STEP 2: Try to read the data we just wrote.
+  !----------------------------------------------------------------------
+  !  
+  CALL H5Dread_f(dataset, H5T_NATIVE_REAL, new_data, dims, error)
+  CALL CHECK(" H5Dread_f", error, total_error)
+
+  ! Check that the values read are the same as the values written
+  ! Assume size of long long = size of double
+  !
+  i_loop: DO i = 1, dims(1)
+     j_loop: DO j = 1, dims(2)
+        IF(.NOT.(orig_data(i,j).EQ.orig_data(i,j))) CYCLE  ! skip IF value is NaN
+        IF(new_data(i,j) .NE. orig_data(i,j))THEN
+           total_error = total_error + 1
+           WRITE(*,'("    Read different values than written.")')
+           WRITE(*,'("    At index ", 2(1X,I0))') i, j
+           EXIT i_loop
+        END IF
+     ENDDO j_loop
+  ENDDO i_loop
+
+  !----------------------------------------------------------------------
+  ! Cleanup
+  !----------------------------------------------------------------------
+  !
+  CALL H5Tclose_f(datatype, error)
+  CALL CHECK(" H5Tclose_f", error, total_error)
+  CALL H5Pclose_f(dc, error)
+  CALL CHECK(" H5Pclose_f", error, total_error)
+  CALL H5Sclose_f(space, error)
+  CALL CHECK(" H5Sclose_f", error, total_error)
+  CALL H5Dclose_f(dataset, error)
+  CALL CHECK(" H5Dclose_f", error, total_error)
+  CALL H5Fclose_f(file, error)
+  CALL CHECK(" H5Fclose_f", error, total_error)
+
+END SUBROUTINE test_nbit
+
+!-------------------------------------------------------------------------
+! Function:    test_scaleoffset
+!
+! Purpose:     Tests the integer datatype for scaleoffset filter
+!              with fill value set
+!
+! Return:      Success:        0
+!              Failure:        >0
+!
+! Programmer:  M. Scot Breitenfeld
+!              Decemeber 11, 2010
+!
+! Modifications:
+!
+!-------------------------------------------------------------------------
+!
+
+SUBROUTINE test_scaleoffset(cleanup, total_error )
+
+  USE HDF5
+
+  IMPLICIT NONE
+  LOGICAL, INTENT(IN)  :: cleanup
+  INTEGER, INTENT(INOUT) :: total_error
+  INTEGER(hid_t) :: file
+
+  INTEGER(hid_t)   :: dataset, datatype, space, mspace, dc
+  INTEGER(hsize_t), DIMENSION(1:2) :: dims = (/2, 5/)
+  INTEGER(hsize_t), DIMENSION(1:2) :: chunk_dim = (/2, 5/)
+  INTEGER, DIMENSION(1:2,1:5) :: orig_data
+  INTEGER, DIMENSION(1:2,1:5) :: new_data
+  INTEGER(hsize_t), DIMENSION(1:2) :: start  ! Start of hyperslab 
+  INTEGER(hsize_t), DIMENSION(1:2) :: stride ! Stride of hyperslab
+  INTEGER(hsize_t), DIMENSION(1:2) :: count  ! BLOCK count
+  INTEGER(hsize_t), DIMENSION(1:2) :: BLOCK  ! BLOCK sizes
+  INTEGER :: fillval
+  INTEGER(size_t) :: j
+  REAL :: x
+  INTEGER :: error
+  LOGICAL :: status
+
+  ! check to see if filter is available
+  CALL H5Zfilter_avail_f(H5Z_FILTER_SCALEOFFSET_F, status, error)
+  IF(.NOT.status)THEN ! We don't have H5Z_FILTER_SCALEOFFSET_F filter
+     total_error = -1       ! so return
+     RETURN
+  ENDIF
+
+  CALL H5Fcreate_f("h5scaleoffset.h5", H5F_ACC_TRUNC_F, file, error)
+  CALL check("H5Fcreate_f", error, total_error)
+
+  CALL H5Tcopy_f(H5T_NATIVE_INTEGER, datatype, error)
+  CALL CHECK(" H5Tcopy_f", error, total_error)
+
+  ! Set order of dataset datatype
+  CALL H5Tset_order_f(datatype, H5T_ORDER_BE_F, error)
+  CALL CHECK(" H5Tset_order_f", error, total_error)
+
+  ! Create the data space for the dataset
+  CALL H5Screate_simple_f(2, dims, space, error)
+  CALL CHECK(" H5Screate_simple_f", error, total_error)
+
+  ! Create the dataset property list  
+  CALL H5Pcreate_f(H5P_DATASET_CREATE_F, dc, error)
+  CALL CHECK(" H5Pcreate_f", error, total_error)
+
+  ! Set fill value 
+  fillval = 10000
+  CALL H5Pset_fill_value_f(dc, H5T_NATIVE_INTEGER, fillval, error)
+  CALL CHECK(" H5Pset_fill_value_f", error, total_error)
+
+  ! Set up to use scaleoffset filter, let library calculate minbits
+  CALL H5Pset_chunk_f(dc, 2, chunk_dim, error)
+  CALL CHECK(" H5Pset_chunk_f", error, total_error)
+  
+  CALL H5Pset_scaleoffset_f(dc, H5Z_SO_INT_F, H5Z_SO_INT_MINBITS_DEFAULT_F, error)
+  CALL CHECK(" H5Pset_scaleoffset_f", error, total_error)
+  
+  ! Create the dataset
+  CALL H5Dcreate_f(file, "scaleoffset_int", datatype, &
+       space, dataset, error, dc)
+  CALL CHECK(" H5Dcreate_f", error, total_error)
+
+  ! Create the memory data space
+  CALL H5Screate_simple_f(2, dims, mspace, error)
+  CALL CHECK(" H5Screate_simple_f", error, total_error)
+
+  ! Select hyperslab for data to write, using 1x5 blocks,
+  ! (1,1) stride and (1,1) count starting at the position (0,0)
+     
+  start(1:2) = (/0,0/)
+  stride(1:2) = (/1,1/)
+  COUNT(1:2) = (/1,1/)
+  BLOCK(1:2) = (/1,5/)
+
+  CALL H5Sselect_hyperslab_f(mspace, H5S_SELECT_SET_F, start, &
+       count, error, stride, BLOCK)
+  CALL CHECK(" H5Sselect_hyperslab_f", error, total_error)
+
+  CALL RANDOM_SEED()
+  ! Initialize data of hyperslab
+  DO j = 1, dims(2)
+     CALL RANDOM_NUMBER(x)
+     orig_data(1,j) = INT(x*10000.)
+     IF(MOD(j,2_size_t).EQ.0)THEN
+        orig_data(1,j) = - orig_data(1,j)
+     ENDIF
+  ENDDO
+
+  !----------------------------------------------------------------------
+  ! STEP 1: Test scaleoffset by setting up a chunked dataset and writing
+  ! to it.
+  !----------------------------------------------------------------------
+  
+  ! Only data in the hyperslab will be written, other value should be fill value 
+  CALL H5Dwrite_f(dataset, H5T_NATIVE_INTEGER, orig_data, dims, error, mspace, mspace, H5P_DEFAULT_F)
+  CALL CHECK(" H5Dwrite_f", error, total_error)
+
+  !----------------------------------------------------------------------
+  ! STEP 2: Try to read the data we just wrote.
+  !----------------------------------------------------------------------
+     
+  ! Read the dataset back
+  
+  CALL H5Dread_f(dataset, H5T_NATIVE_INTEGER, new_data, dims, error, mspace, mspace, H5P_DEFAULT_F)
+  CALL CHECK(" H5Dread_f", error, total_error)
+
+  ! Check that the values read are the same as the values written 
+  DO j = 1, dims(2)
+     IF(new_data(1,j) .NE. orig_data(1,j))THEN
+        total_error = total_error + 1
+        WRITE(*,'("    Read different values than written.")')
+        WRITE(*,'("    At index ", 2(1X,I0))') 1, j
+        EXIT
+     ENDIF
+  ENDDO
+  !----------------------------------------------------------------------
+  ! Cleanup
+  !----------------------------------------------------------------------
+  CALL H5Tclose_f(datatype, error)
+  CALL CHECK(" H5Tclose_f", error, total_error)
+  CALL H5Pclose_f(dc, error)
+  CALL CHECK(" H5Pclose_f", error, total_error)
+  CALL H5Sclose_f(space, error)
+  CALL CHECK(" H5Sclose_f", error, total_error)
+  CALL H5Dclose_f(dataset, error)
+  CALL CHECK(" H5Dclose_f", error, total_error)
+  CALL H5Fclose_f(file, error)
+  CALL CHECK(" H5Fclose_f", error, total_error)
+
+END SUBROUTINE test_scaleoffset
diff --git a/fortran/test/fortranlib_test_F03.f90 b/fortran/test/fortranlib_test_F03.f90
new file mode 100644
index 0000000..8ebee82
--- /dev/null
+++ b/fortran/test/fortranlib_test_F03.f90
@@ -0,0 +1,159 @@
+!****h* root/fortran/test/fortranlib_test_F03.f90
+!
+! NAME
+!  fortranlib_test_F03.f90
+!
+! FUNCTION
+!  Basic testing of Fortran API's requiring Fortran 2003
+!  compliance.
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+!*****
+
+PROGRAM fortranlibtest_F03
+  
+  USE HDF5
+  
+  IMPLICIT NONE
+  INTEGER :: total_error = 0
+  INTEGER :: error
+  INTEGER :: majnum, minnum, relnum
+  LOGICAL :: szip_flag
+  INTEGER :: ret_total_error
+  LOGICAL :: cleanup, status
+
+  CALL h5open_f(error)
+
+  cleanup = .TRUE.
+  CALL h5_env_nocleanup_f(status)
+  IF(status) cleanup=.FALSE.
+
+  WRITE(*,'(24X,A)') '=============================='
+  WRITE(*,'(24X,A)') '      FORTRAN 2003 tests      '
+  WRITE(*,'(24X,A)') '=============================='
+  CALL h5get_libversion_f(majnum, minnum, relnum, total_error)
+  IF(total_error .EQ. 0) THEN
+     WRITE(*, '(" FORTRANLIB_TEST is linked with HDF5 Library version ")', advance="NO")
+     WRITE(*, '(I1)', advance="NO") majnum
+     WRITE(*, '(".")', advance="NO") 
+     WRITE(*, '(I1)', advance="NO") minnum
+     WRITE(*, '(" release ")', advance="NO")
+     WRITE(*, '(I3)') relnum
+  ELSE
+     total_error = total_error + 1
+  ENDIF
+
+  WRITE(*,*)
+!     write(*,*)
+!     write(*,*) '========================================='
+!     write(*,*) 'Testing DATATYPE interface               '
+!     write(*,*) '========================================='
+  ret_total_error = 0
+  CALL test_array_compound_atomic(ret_total_error)
+  CALL write_test_status(ret_total_error, ' Testing 1-D Array of Compound Datatypes Functionality', total_error)
+
+  ret_total_error = 0
+  CALL test_array_compound_array(ret_total_error)
+  CALL write_test_status(ret_total_error, ' Testing 1-D Array of Compound Array Datatypes Functionality', total_error)
+
+  ret_total_error = 0
+  CALL t_array(ret_total_error)
+  CALL write_test_status(ret_total_error, ' Testing 3-D array by dataset, using C_LOC', total_error)
+
+  ret_total_error = 0
+  CALL t_enum(ret_total_error)
+  CALL write_test_status(ret_total_error, ' Testing writing/reading enum dataset, using C_LOC', total_error)  
+
+  ret_total_error = 0
+  CALL t_bit(ret_total_error)
+  CALL write_test_status(ret_total_error, ' Testing writing/reading bitfield dataset, using C_LOC', total_error)
+
+  ret_total_error = 0
+  CALL t_opaque(ret_total_error)
+  CALL write_test_status(ret_total_error, ' Testing writing/reading opaque datatypes, using C_LOC', total_error) 
+
+  ret_total_error = 0
+  CALL t_objref(ret_total_error)
+  CALL write_test_status(ret_total_error, ' Testing writing/reading object references, using C_LOC', total_error)
+
+  ret_total_error = 0
+  CALL t_regref(ret_total_error)
+  CALL write_test_status(ret_total_error, ' Testing writing/reading region references, using C_LOC', total_error)  
+
+  ret_total_error = 0
+  CALL t_vlen(ret_total_error)
+  CALL write_test_status(ret_total_error, ' Testing writing/reading variable-length datatypes, using C_LOC', total_error)
+
+  ret_total_error = 0
+  CALL t_vlstring(ret_total_error)
+  CALL write_test_status(ret_total_error, ' Testing writing/reading variable-string datatypes, using C_LOC', total_error)
+
+  ret_total_error = 0
+  CALL t_vlstring_readwrite(ret_total_error)
+  CALL write_test_status(ret_total_error, ' Testing variable-string write/read, using h5dwrite_f/h5dread_f', total_error)
+
+  ret_total_error = 0
+  CALL t_string(ret_total_error)
+  CALL write_test_status(ret_total_error, ' Testing writing/reading string datatypes, using C_LOC', total_error)
+
+  ret_total_error = 0
+  CALL test_create(ret_total_error)
+  CALL write_test_status(ret_total_error, &
+       ' Testing filling functions', &
+       total_error)
+
+  ret_total_error = 0
+  CALL test_h5kind_to_type(total_error)
+  CALL write_test_status(ret_total_error, &
+       ' Test function h5kind_to_type', &
+       total_error)
+
+  ret_total_error = 0
+  CALL test_array_bkg(ret_total_error)
+  CALL write_test_status(ret_total_error, ' Testing Partial I/O of Array Fields in Compound Datatype FunctionalityT', total_error)
+
+  ret_total_error = 0
+  CALL test_genprop_class_callback(ret_total_error)
+  CALL write_test_status(ret_total_error, ' Test basic generic property list callback functionality', total_error)
+
+  ret_total_error = 0
+  CALL test_iter_group(ret_total_error)
+  CALL write_test_status(ret_total_error, ' Testing Group Iteration Functionality', total_error)
+ 
+!     write(*,*)
+!     write(*,*) '========================================='
+!     write(*,*) 'Testing GROUP interface             '
+!     write(*,*) '========================================='
+
+  
+  WRITE(*,*)
+
+  WRITE(*,*) '                  ============================================  '
+  WRITE(*, fmt = '(19x, 27a)', advance='NO') ' FORTRAN tests completed with '
+  WRITE(*, fmt = '(i4)', advance='NO') total_error
+  WRITE(*, fmt = '(12a)' ) ' error(s) ! '
+  WRITE(*,*) '                  ============================================  '
+  
+  CALL h5close_f(error)
+
+  ! if errors detected, exit with non-zero code.
+  IF (total_error .NE. 0) CALL h5_exit_f(1)
+
+END PROGRAM fortranlibtest_F03
+
+
diff --git a/fortran/test/t.c b/fortran/test/t.c
index bf30331..01d4cdd 100644
--- a/fortran/test/t.c
+++ b/fortran/test/t.c
@@ -1,4 +1,13 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+/****h* root/fortran/test/tc.c
+ *
+ * NAME
+ *   tc.c
+ *
+ * FUNCTION
+ *   This file contains C routines needed for the test programs.
+ *
+ * COPYRIGHT
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
  * Copyright by The HDF Group.                                               *
  * Copyright by the Board of Trustees of the University of Illinois.         *
  * All rights reserved.                                                      *
@@ -11,7 +20,10 @@
  * is linked from the top-level documents page.  It can also be found at     *
  * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
  * access to either file, you may request a copy from help at hdfgroup.org.     *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ *
+ ******
+*/
 
 #include "t.h"
 #include "H5Eprivate.h"
diff --git a/fortran/test/tH5A.f90 b/fortran/test/tH5A.f90
index dd6cbb1..03522f7 100644
--- a/fortran/test/tH5A.f90
+++ b/fortran/test/tH5A.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/tH5A.f90
+!
+! NAME
+!  tH5A.f90
+!
+! FUNCTION
+!  Basic testing of Fortran H5A APIs.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,6 +22,12 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! CONTAINS SUBROUTINES
+!  attribute_test 
+!
+!
+!*****
+
     SUBROUTINE attribute_test(cleanup, total_error)
 
 !   This subroutine tests following functionalities:
diff --git a/fortran/test/tH5A_1_8.f90 b/fortran/test/tH5A_1_8.f90
index c48420e..32cb228 100644
--- a/fortran/test/tH5A_1_8.f90
+++ b/fortran/test/tH5A_1_8.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/tH5A_1_8.f90
+!
+! NAME
+!  tH5A_1_8.f90
+!
+! FUNCTION
+!  Basic testing of Fortran H5A APIs introduced in 1.8.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,6 +22,15 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! CONTAINS SUBROUTINES
+!  attribute_test_1_8, test_attr_corder_create_compact, test_attr_null_space,
+!  test_attr_create_by_name, test_attr_info_by_idx, attr_info_by_idx_check,
+!  test_attr_shared_rename, test_attr_delete_by_idx, test_attr_shared_delete,
+!  test_attr_dense_open, test_attr_dense_verify, test_attr_corder_create_basic,
+!  test_attr_basic_write, test_attr_many, attr_open_check, 
+!
+!*****
+
 SUBROUTINE attribute_test_1_8(cleanup, total_error)
 
 !   This subroutine tests following 1.8 functionalities:
@@ -96,18 +114,6 @@ SUBROUTINE attribute_test_1_8(cleanup, total_error)
           '  - Tests INT attributes on both datasets and groups', &
           total_error)
 
-!!$        CALL test_attr_basic_read(my_fapl)
-!!$        CALL test_attr_flush(my_fapl)
-!!$        CALL test_attr_plist(my_fapl) ! this is next
-!!$        CALL test_attr_compound_write(my_fapl)
-!!$        CALL test_attr_compound_read(my_fapl)
-!!$        CALL test_attr_scalar_write(my_fapl)
-!!$        CALL test_attr_scalar_read(my_fapl)
-!!$        CALL test_attr_mult_write(my_fapl)
-!!$        CALL test_attr_mult_read(my_fapl)
-!!$        CALL test_attr_iterate(my_fapl)
-!!$        CALL test_attr_delete(my_fapl)
-!!$        CALL test_attr_dtype_shared(my_fapl)
      IF(new_format(i)) THEN
         DO j = 1, 2
            IF (use_shared(j)) THEN
@@ -117,7 +123,6 @@ SUBROUTINE attribute_test_1_8(cleanup, total_error)
               WRITE(*,*) " - Testing without shared attributes:"
               my_fcpl = fcpl
            END IF
-!!$              CALL test_attr_dense_create(my_fcpl, my_fapl)
 
            ret_total_error = 0
            CALL test_attr_dense_open(my_fcpl, my_fapl, ret_total_error)
@@ -125,17 +130,11 @@ SUBROUTINE attribute_test_1_8(cleanup, total_error)
                 '   - Testing INT attributes on both datasets and groups', &
                 total_error)
 
-!!$              CALL test_attr_dense_delete(my_fcpl, my_fapl)
-!!$              CALL test_attr_dense_rename(my_fcpl, my_fapl)
-!!$              CALL test_attr_dense_unlink(my_fcpl, my_fapl)
-!!$              CALL test_attr_dense_limits(my_fcpl, my_fapl)
-!!$              CALL test_attr_big(my_fcpl, my_fapl)
            ret_total_error = 0
            CALL test_attr_null_space(my_fcpl, my_fapl, ret_total_error)
            CALL write_test_status(ret_total_error, &
                 '   - Testing storing attribute with "null" dataspace', &
                 total_error)
-!!$              CALL test_attr_deprec(fcpl, my_fapl)
            ret_total_error = 0
            CALL test_attr_many(new_format(i), my_fcpl, my_fapl, ret_total_error)
            CALL write_test_status(ret_total_error, &
@@ -153,10 +152,6 @@ SUBROUTINE attribute_test_1_8(cleanup, total_error)
            CALL write_test_status(ret_total_error, &
                 '   - Testing compact storage on objects with attribute creation order', &
                 total_error)
-!!$              CALL test_attr_corder_create_dense(my_fcpl, my_fapl)
-!!$              CALL test_attr_corder_create_reopen(my_fcpl, my_fapl)
-!!$              CALL test_attr_corder_transition(my_fcpl, my_fapl)
-!!$              CALL test_attr_corder_delete(my_fcpl, my_fapl)
            ret_total_error = 0
            CALL test_attr_info_by_idx(new_format(i), my_fcpl, my_fapl, ret_total_error)
            CALL write_test_status(ret_total_error, &
@@ -169,9 +164,6 @@ SUBROUTINE attribute_test_1_8(cleanup, total_error)
                 '   - Testing deleting attribute by index', &
                 total_error)
 
-!!$              CALL test_attr_iterate2(new_format, my_fcpl, my_fapl)
-!!$              CALL test_attr_open_by_idx(new_format, my_fcpl, my_fapl)
-!!$              CALL test_attr_open_by_name(new_format, my_fcpl, my_fapl)
            ret_total_error = 0
            CALL test_attr_create_by_name(new_format(i), my_fcpl, my_fapl, ret_total_error)
            CALL write_test_status(ret_total_error, &
@@ -180,7 +172,6 @@ SUBROUTINE attribute_test_1_8(cleanup, total_error)
 
              ! /* More complex tests with both "new format" and "shared" attributes */
            IF( use_shared(j) ) THEN
-!!$                 CALL test_attr_shared_write(my_fcpl, my_fapl)
               ret_total_error = 0
               CALL test_attr_shared_rename(my_fcpl, my_fapl, ret_total_error)
               CALL write_test_status(ret_total_error,&
@@ -193,24 +184,8 @@ SUBROUTINE attribute_test_1_8(cleanup, total_error)
                    '   - Testing deleting shared attributes in "compact" & "dense" storage', &
                    total_error)
 
-
-!!$                 CALL test_attr_shared_unlink(my_fcpl, my_fapl)
            END IF
-!!$              CALL test_attr_bug1(my_fcpl, my_fapl)
         END DO
-!!$        ELSE
-!!$           CALL test_attr_big(fcpl, my_fapl)
-!!$           CALL test_attr_null_space(fcpl, my_fapl)
-!!$           CALL test_attr_deprec(fcpl, my_fapl)
-!!$           CALL test_attr_many(new_format, fcpl, my_fapl)
-!!$           CALL test_attr_info_by_idx(new_format, fcpl, my_fapl)
-!!$           CALL test_attr_delete_by_idx(new_format, fcpl, my_fapl)
-!!$           CALL test_attr_iterate2(new_format, fcpl, my_fapl)
-!!$           CALL test_attr_open_by_idx(new_format, fcpl, my_fapl)
-!!$           CALL test_attr_open_by_name(new_format, fcpl, my_fapl)
-!!$           CALL test_attr_create_by_name(new_format, fcpl, my_fapl)
-!!$           CALL test_attr_bug1(fcpl, my_fapl)
-
      END IF
   ENDDO
 
@@ -315,13 +290,7 @@ SUBROUTINE test_attr_corder_create_compact(fcpl,fapl, total_error)
         my_dataset = dset2
      CASE (2)
         my_dataset = dset3
-!     CASE DEFAULT
-!        CALL HDassert(0.AND."Toomanydatasets!")
      END SELECT
-!!$    is_empty = H5O_is_attr_empty_test(my_dataset)
-!!$    CALL VERIFY(is_empty, TRUE, "H5O_is_attr_empty_test")
-!!$    is_dense = H5O_is_attr_dense_test(my_dataset)
-!!$    CALL VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test")
     DO u = 0, max_compact - 1
        ! /* Create attribute */
        WRITE(chr2,'(I2.2)') u
@@ -337,13 +306,6 @@ SUBROUTINE test_attr_corder_create_compact(fcpl,fapl, total_error)
        CALL h5aclose_f(attr, error)
        CALL check("h5aclose_f",error,total_error)
 
-!!$      ret = H5O_num_attrs_test(my_dataset, nattrs)
-!!$      CALL CHECK(ret, FAIL, "H5O_num_attrs_test")
-!!$      CALL VERIFY(nattrs, (u + 1))
-!!$      is_empty = H5O_is_attr_empty_test(my_dataset)
-!!$      CALL VERIFY(is_empty, FALSE, "H5O_is_attr_empty_test")
-!!$      is_dense = H5O_is_attr_dense_test(my_dataset)
-!!$      CALL VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test")
     END DO
   END DO
 
@@ -387,14 +349,6 @@ SUBROUTINE test_attr_corder_create_compact(fcpl,fapl, total_error)
      CASE DEFAULT
         WRITE(*,*) " WARNING: To many data sets! "
      END SELECT
-!!$    ret = H5O_num_attrs_test(my_dataset, nattrs)
-!!$    CALL CHECK(ret, FAIL, "H5O_num_attrs_test")
-!!$    CALL VERIFY(nattrs, max_compact, "H5O_num_attrs_test")
-!!$    is_empty = H5O_is_attr_empty_test(my_dataset)
-!!$    CALL VERIFY(is_empty, FALSE, "H5O_is_attr_empty_test")
-!!$    is_dense = H5O_is_attr_dense_test(my_dataset)
-!!$    CALL VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test")
-
      DO u = 0,max_compact-1
         WRITE(chr2,'(I2.2)') u
         attrname = 'attr '//chr2
@@ -483,8 +437,6 @@ SUBROUTINE test_attr_null_space(fcpl, fapl, total_error)
 
   data_dims = 0
 
-  ! /* Output message about test being performed */
-!  WRITE(*,*) "     - Testing Storing Attributes with 'null' dataspace"
   ! /* Create file */
   CALL h5fcreate_f(FileName, H5F_ACC_TRUNC_F, fid, error, fcpl, fapl)
   CALL check("h5fcreate_f",error,total_error)
@@ -513,6 +465,7 @@ SUBROUTINE test_attr_null_space(fcpl, fapl, total_error)
   ! /* Try to read data from the attribute */
   ! /* (shouldn't fail, but should leave buffer alone) */
   value(1) = 103
+  data_dims(1) = 1
   CALL h5aread_f(attr, H5T_NATIVE_INTEGER, value, data_dims, error)
   CALL check("h5aread_f",error,total_error)
   CALL verify("h5aread_f",value(1),103,total_error)
@@ -533,9 +486,6 @@ SUBROUTINE test_attr_null_space(fcpl, fapl, total_error)
   CALL check("H5Sextent_equal_f",error,total_error)
   CALL Verifylogical("H5Sextent_equal_f",equal,.TRUE.,total_error)
 
-!!$  ret = H5Sclose(attr_sid)
-!!$  CALL CHECK(ret, FAIL, "H5Sclose")
-
   CALL h5aget_storage_size_f(attr, storage_size, error)
   CALL check("h5aget_storage_size_f",error,total_error)
   CALL VERIFY("h5aget_storage_size_f",INT(storage_size),0,total_error)
@@ -639,11 +589,11 @@ SUBROUTINE test_attr_create_by_name(new_format,fcpl,fapl, total_error)
   ! /* Loop over using index for creation order value */
   DO i = 1, 2
      ! /* Print appropriate test message */
-!!$     IF(use_index(i))THEN
-!!$        WRITE(*,*) "       - Testing Creating Attributes By Name w/Creation Order Index"
-!!$     ELSE
-!!$        WRITE(*,*) "       - Testing Creating Attributes By Name w/o Creation Order Index"
-!!$     ENDIF
+     IF(use_index(i))THEN
+        WRITE(*,*) "   - Testing Creating Attributes By Name w/Creation Order Index"
+     ELSE
+        WRITE(*,*) "   - Testing Creating Attributes By Name w/o Creation Order Index"
+     ENDIF
      ! /* Create file */
      CALL h5fcreate_f(FileName, H5F_ACC_TRUNC_F, fid, error, fcpl, fapl)
      CALL check("h5fcreate_f",error,total_error)
@@ -691,11 +641,6 @@ SUBROUTINE test_attr_create_by_name(new_format,fcpl,fapl, total_error)
            !        CALL HDassert(0.AND."Toomanydatasets!")
         END SELECT
 
-        ! /* Check on dataset's attribute storage status */
-!!$            is_empty = H5O_is_attr_empty_test(my_dataset);
-!!$            VERIFY(is_empty, TRUE, "H5O_is_attr_empty_test");
-!!$            is_dense = H5O_is_attr_dense_test(my_dataset);
-!!$            VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
 
         !/* Create attributes, up to limit of compact form */
 
@@ -722,15 +667,6 @@ SUBROUTINE test_attr_create_by_name(new_format,fcpl,fapl, total_error)
          !   CALL check("FAILED IN attr_info_by_idx_check",total_error)
         ENDDO
 
-        ! /* Verify state of object */
-!!$            ret = H5O_num_attrs_test(my_dataset, &nattrs);
-!!$            CHECK(ret, FAIL, "H5O_num_attrs_test");
-!!$            VERIFY(nattrs, max_compact, "H5O_num_attrs_test");
-!!$            is_empty = H5O_is_attr_empty_test(my_dataset);
-!!$            VERIFY(is_empty, FALSE, "H5O_is_attr_empty_test");
-!!$            is_dense = H5O_is_attr_dense_test(my_dataset);
-!!$            VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
-
         ! /* Test opening attributes stored compactly */
 
         CALL attr_open_check(fid, dsetname, my_dataset, u, total_error)
@@ -771,39 +707,8 @@ SUBROUTINE test_attr_create_by_name(new_format,fcpl,fapl, total_error)
            CALL h5aclose_f(attr, error)
            CALL check("h5aclose_f",error,total_error)
 
-           ! /* Verify state of object */
-!!$                if(u >= max_compact) {
-!!$                    is_dense = H5O_is_attr_dense_test(my_dataset);
-!!$                    VERIFY(is_dense, (new_format ? TRUE : FALSE), "H5O_is_attr_dense_test");
-!!$                } /* end if */
-!!$
-!!$                /* Verify information for new attribute */
-!!$                ret = attr_info_by_idx_check(my_dataset, attrname, (hsize_t)u, use_index);
-!!$                CHECK(ret, FAIL, "attr_info_by_idx_check");
         ENDDO
 
-        ! /* Verify state of object */
-!!$            ret = H5O_num_attrs_test(my_dataset, &nattrs);
-!!$            CHECK(ret, FAIL, "H5O_num_attrs_test");
-!!$            VERIFY(nattrs, (max_compact * 2), "H5O_num_attrs_test");
-!!$            is_empty = H5O_is_attr_empty_test(my_dataset);
-!!$            VERIFY(is_empty, FALSE, "H5O_is_attr_empty_test");
-!!$            is_dense = H5O_is_attr_dense_test(my_dataset);
-!!$            VERIFY(is_dense, (new_format ? TRUE : FALSE), "H5O_is_attr_dense_test");
-
-!!$            if(new_format) {
-!!$                /* Retrieve & verify # of records in the name & creation order indices */
-!!$                ret = H5O_attr_dense_info_test(my_dataset, &name_count, &corder_count);
-!!$                CHECK(ret, FAIL, "H5O_attr_dense_info_test");
-!!$                if(use_index)
-!!$                    VERIFY(name_count, corder_count, "H5O_attr_dense_info_test");
-!!$                VERIFY(name_count, (max_compact * 2), "H5O_attr_dense_info_test");
-!!$            } /* end if */
-
-!!$            /* Test opening attributes stored compactly */
-!!$            ret = attr_open_check(fid, dsetname, my_dataset, u);
-!!$            CHECK(ret, FAIL, "attr_open_check");
-
      ENDDO
 
      ! /* Close Datasets */
@@ -914,13 +819,6 @@ SUBROUTINE test_attr_info_by_idx(new_format, fcpl, fapl, total_error)
 
   DO i = 1, 2
 
-     ! /* Output message about test being performed */
-!!$     IF(use_index(i))THEN
-!!$        WRITE(*,'(A72)') "       - Testing Querying Attribute Info By Index w/Creation Order Index"
-!!$     ELSE
-!!$        WRITE(*,'(A74)') "       - Testing Querying Attribute Info By Index w/o Creation Order Index"
-!!$     ENDIF
-
      ! /* Create file */
      CALL h5fcreate_f(FileName, H5F_ACC_TRUNC_F, fid, error, fcpl, fapl)
      CALL check("h5fcreate_f",error,total_error)
@@ -958,16 +856,8 @@ SUBROUTINE test_attr_info_by_idx(new_format, fcpl, fapl, total_error)
            my_dataset = dset2
         CASE (2)
            my_dataset = dset3
-           !     CASE DEFAULT
-           !        CALL HDassert(0.AND."Toomanydatasets!")
         END SELECT
 
-        !/* Check on dataset's attribute storage status */
-!!$            is_empty = H5O_is_attr_empty_test(my_dataset);
-!!$            VERIFY(is_empty, TRUE, "H5O_is_attr_empty_test");
-!!$            is_dense = H5O_is_attr_dense_test(my_dataset);
-!!$            VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
-
         ! /* Check for query on non-existant attribute */
 
         n = 0
@@ -1005,7 +895,6 @@ SUBROUTINE test_attr_info_by_idx(new_format, fcpl, fapl, total_error)
            WRITE(chr2,'(I2.2)') j
            attrname = 'attr '//chr2
 
-           ! attr = H5Acreate2(my_dataset, attrname, H5T_NATIVE_UINT, sid, H5P_DEFAULT, H5P_DEFAULT);
            ! check with the optional information create2 specs.
            CALL h5acreate_f(my_dataset, attrname, H5T_NATIVE_INTEGER, sid, attr, error, H5P_DEFAULT_F, H5P_DEFAULT_F)
            CALL check("h5acreate_f",error,total_error)
@@ -1138,7 +1027,6 @@ SUBROUTINE attr_info_by_idx_check(obj_id, attrname, n, use_index, total_error )
   END IF
 
 
-  ! CALL HDmemset(ainfo, 0, SIZEOF(ainfo)
   CALL h5aget_info_by_idx_f(obj_id, ".", H5_INDEX_CRT_ORDER_F, H5_ITER_DEC_F, n, &
        f_corder_valid, corder, cset, data_size, error)
   CALL check("h5aget_info_by_idx_f",error,total_error)
@@ -1178,9 +1066,7 @@ SUBROUTINE attr_info_by_idx_check(obj_id, attrname, n, use_index, total_error )
        f_corder_valid, corder, cset, data_size, error)
   CALL check("h5aget_info_by_idx_f",error,total_error)
   CALL VERIFY("h5aget_info_by_idx_f",corder,INT(n),total_error)
-!!$    ret = H5Aget_name_by_idx(obj_id, ".", H5_INDEX_NAME, H5_ITER_INC, n, tmpname, (size_t)NAME_BUF_SIZE, H5P_DEFAULT)
-!!$    CALL CHECK(ret, FAIL, "H5Aget_name_by_idx")
-!!$    IF (HDstrcmp(attrname, tmpname)) CALL TestErrPrintf("Line %d: attribute name size wrong!\n"C, __LINE__)
+
   CALL h5aget_info_by_idx_f(obj_id, ".", H5_INDEX_NAME_F, H5_ITER_DEC_F, n, &
        f_corder_valid, corder, cset, data_size, error)
   CALL check("h5aget_info_by_idx_f",error,total_error)
@@ -1190,9 +1076,7 @@ SUBROUTINE attr_info_by_idx_check(obj_id, attrname, n, use_index, total_error )
        f_corder_valid, corder, cset, data_size, error)
   CALL check("h5aget_info_by_idx_f",error,total_error)
   CALL VERIFY("h5aget_info_by_idx_f",corder,INT(n),total_error)
-!!$    ret = H5Aget_name_by_idx(obj_id, ".", H5_INDEX_NAME, H5_ITER_DEC, (hsize_t)0, tmpname, (size_t)NAME_BUF_SIZE, H5P_DEFAULT)
-!!$    CALL CHECK(ret, FAIL, "H5Aget_name_by_idx")
-!!$    IF (HDstrcmp(attrname, tmpname)) CALL TestErrPrintf("Line %d: attribute name size wrong!\n"C, __LINE__)
+
 
 END SUBROUTINE attr_info_by_idx_check
 
@@ -1263,9 +1147,7 @@ SUBROUTINE test_attr_shared_rename( fcpl, fapl, total_error)
   INTEGER(HSIZE_T), DIMENSION(1) :: adims2 = (/1/) ! Attribute dimension
   INTEGER     ::   arank = 1                      ! Attribure rank
 
-  ! /* Output message about test being performed */
-!  WRITE(*,*) "     - Testing Renaming Shared & Unshared Attributes in Compact & Dense Storage"
-!!$ /* Initialize "big" attribute data */
+  ! /* Initialize "big" attribute data */
 
   ! /* Create dataspace for dataset */
   CALL h5screate_f(H5S_SCALAR_F, sid, error)
@@ -1338,19 +1220,6 @@ SUBROUTINE test_attr_shared_rename( fcpl, fapl, total_error)
      CALL h5dcreate_f(fid, DSET2_NAME, H5T_NATIVE_CHARACTER, sid, dataset2, error, dcpl_id=dcpl )
      CALL check("h5dcreate_f",error,total_error)
 
-     ! /* Check on dataset's message storage status */
-!!$        if(test_shared != 0) {
-!!$            /* Datasets' datatypes can be shared */
-!!$            ret = H5F_get_sohm_mesg_count_test(fid, H5O_DTYPE_ID, &mesg_count);
-!!$            CHECK(ret, FAIL, "H5F_get_sohm_mesg_count_test");
-!!$            VERIFY(mesg_count, 1, "H5F_get_sohm_mesg_count_test");
-!!$
-!!$            /* Datasets' dataspace can be shared */
-!!$            ret = H5F_get_sohm_mesg_count_test(fid, H5O_SDSPACE_ID, &mesg_count);
-!!$            CHECK(ret, FAIL, "H5F_get_sohm_mesg_count_test");
-!!$            VERIFY(mesg_count, 1, "H5F_get_sohm_mesg_count_test");
-!!$        } /* end if */
-
      ! /* Retrieve limits for compact/dense attribute storage */
      CALL H5Pget_attr_phase_change_f(dcpl, max_compact, min_dense, error)
      CALL check("H5Pget_attr_phase_change_f",error,total_error)
@@ -1358,16 +1227,8 @@ SUBROUTINE test_attr_shared_rename( fcpl, fapl, total_error)
      ! /* Close property list */
      CALL h5pclose_f(dcpl,error)
      CALL check("h5pclose_f", error, total_error)
-!!$
-!!$
-!!$        /* Check on datasets' attribute storage status */
-!!$        is_dense = H5O_is_attr_dense_test(dataset);
-!!$        VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
-!!$        is_dense = H5O_is_attr_dense_test(dataset2);
-!!$        VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
-     ! /* Add attributes to each dataset, until after converting to dense storage */
-
 
+     ! /* Add attributes to each dataset, until after converting to dense storage */
      DO u = 0, (max_compact * 2) - 1
 
         ! /* Create attribute name */
@@ -1382,10 +1243,6 @@ SUBROUTINE test_attr_shared_rename( fcpl, fapl, total_error)
            CALL h5acreate_f(dataset, attrname, attr_tid, sid, attr, error, H5P_DEFAULT_F, H5P_DEFAULT_F)
            CALL check("h5acreate_f",error,total_error)
 
-!!$                /* Check that attribute is not shared */
-!!$                is_shared = H5A_is_shared_test(attr);
-!!$                VERIFY(is_shared, FALSE, "H5A_is_shared_test");
-
            ! /* Write data into the attribute */
            attr_integer_data(1) = u + 1
            data_dims(1) = 1
@@ -1397,15 +1254,6 @@ SUBROUTINE test_attr_shared_rename( fcpl, fapl, total_error)
            CALL h5acreate_f(dataset, attrname, attr_tid, big_sid, attr, error, H5P_DEFAULT_F, H5P_DEFAULT_F)
            CALL check("h5acreate_f",error,total_error)
 
-           !  Check that attribute is shared */
-!!$                is_shared = H5A_is_shared_test(attr);
-!!$                VERIFY(is_shared, TRUE, "H5A_is_shared_test");
-
-           !  Check refcount for attribute */
-!!$                ret = H5A_get_shared_rc_test(attr, &shared_refcount);
-!!$                CHECK(ret, FAIL, "H5A_get_shared_rc_test");
-!!$                VERIFY(shared_refcount, 1, "H5A_get_shared_rc_test");
-!!$
            !  Write data into the attribute */
 
            data_dims(1) = 1
@@ -1413,24 +1261,12 @@ SUBROUTINE test_attr_shared_rename( fcpl, fapl, total_error)
            CALL h5awrite_f(attr, attr_tid, attr_integer_data, data_dims, error)
            CALL check("h5awrite_f",error,total_error)
 
-           !  Check refcount for attribute */
-!!$                ret = H5A_get_shared_rc_test(attr, &shared_refcount);
-!!$                CHECK(ret, FAIL, "H5A_get_shared_rc_test");
-!!$                VERIFY(shared_refcount, 1, "H5A_get_shared_rc_test");
         ENDIF
 
         ! /* Close attribute */
         CALL h5aclose_f(attr, error)
         CALL check("h5aclose_f",error,total_error)
 
-        ! /* Check on dataset's attribute storage status */
-!!$            is_dense = H5O_is_attr_dense_test(dataset);
-!!$            if(u < max_compact)
-!!$                VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
-!!$            else
-!!$                VERIFY(is_dense, TRUE, "H5O_is_attr_dense_test");
-!!$
-!!$
         ! /* Alternate between creating "small" & "big" attributes */
         IF(MOD(u+1,2).EQ.0)THEN
 
@@ -1439,10 +1275,6 @@ SUBROUTINE test_attr_shared_rename( fcpl, fapl, total_error)
            CALL h5acreate_f(dataset2, attrname, attr_tid, sid, attr, error, H5P_DEFAULT_F, H5P_DEFAULT_F)
            CALL check("h5acreate_f",error,total_error)
 
-           !  /* Check that attribute is not shared */
-!!$                is_shared = H5A_is_shared_test(attr);
-!!$                VERIFY(is_shared, FALSE, "H5A_is_shared_test");
-!!$
            ! /* Write data into the attribute */
 
            attr_integer_data(1) = u + 1
@@ -1456,15 +1288,6 @@ SUBROUTINE test_attr_shared_rename( fcpl, fapl, total_error)
            CALL h5acreate_f(dataset2, attrname, attr_tid, big_sid, attr, error, H5P_DEFAULT_F, H5P_DEFAULT_F)
            CALL check("h5acreate_f",error,total_error)
 
-! /* Check that attribute is shared */
-!!$                is_shared = H5A_is_shared_test(attr);
-!!$                VERIFY(is_shared, TRUE, "H5A_is_shared_test");
-!!$
-! /* Check refcount for attribute */
-!!$                ret = H5A_get_shared_rc_test(attr, &shared_refcount);
-!!$                CHECK(ret, FAIL, "H5A_get_shared_rc_test");
-!!$                VERIFY(shared_refcount, 1, "H5A_get_shared_rc_test");
-!!$
 ! /* Write data into the attribute */
 
 
@@ -1475,23 +1298,11 @@ SUBROUTINE test_attr_shared_rename( fcpl, fapl, total_error)
 
 
 ! /* Check refcount for attribute */
-!!$                ret = H5A_get_shared_rc_test(attr, &shared_refcount);
-!!$                CHECK(ret, FAIL, "H5A_get_shared_rc_test");
-!!$                VERIFY(shared_refcount, 2, "H5A_get_shared_rc_test");
-
         ENDIF
         ! /* Close attribute */
         CALL h5aclose_f(attr, error)
         CALL check("h5aclose_f",error,total_error)
 
-        !    /* Check on dataset's attribute storage status */
-!!$            is_dense = H5O_is_attr_dense_test(dataset2);
-!!$            if(u < max_compact)
-!!$                VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
-!!$            else
-!!$                VERIFY(is_dense, TRUE, "H5O_is_attr_dense_test");
-
-
         ! /* Create new attribute name */
 
         WRITE(chr2,'(I2.2)') u
@@ -1510,22 +1321,6 @@ SUBROUTINE test_attr_shared_rename( fcpl, fapl, total_error)
         CALL H5Aopen_f(dataset2, attrname2, attr, error, aapl_id=H5P_DEFAULT_F)
         CALL check("H5Aopen_f",error,total_error)
 
-!!$
-!!$        IF(MOD(u+1,2).EQ.0)THEN
-!!$           ! /* Check that attribute is not shared */
-!!$           is_shared = H5A_is_shared_test(attr);
-!!$           CALL VERIFY("H5A_is_shared_test", error, minusone)
-!!$        ELSE
-!!$                ! /* Check that attribute is shared */
-!!$                is_shared = H5A_is_shared_test(attr);
-!!$                VERIFY(is_shared, TRUE, "H5A_is_shared_test");
-!!$
-!!$                /* Check refcount for attribute */
-!!$                ret = H5A_get_shared_rc_test(attr, &shared_refcount);
-!!$                CHECK(ret, FAIL, "H5A_get_shared_rc_test");
-!!$                VERIFY(shared_refcount, 1, "H5A_get_shared_rc_test")
-!!$             ENDIF
-
         ! /* Close attribute */
         CALL h5aclose_f(attr, error)
         CALL check("h5aclose_f",error,total_error)
@@ -1534,22 +1329,6 @@ SUBROUTINE test_attr_shared_rename( fcpl, fapl, total_error)
         CALL H5Aopen_f(dataset, attrname, attr, error)
         CALL check("H5Aopen",error,total_error)
 
-!!$            if(u % 2) {
-!!$                /* Check that attribute is not shared */
-!!$                is_shared = H5A_is_shared_test(attr);
-!!$                VERIFY(is_shared, FALSE, "H5A_is_shared_test");
-!!$            } /* end if */
-!!$            else {
-!!$                /* Check that attribute is shared */
-!!$                is_shared = H5A_is_shared_test(attr);
-!!$                VERIFY(is_shared, TRUE, "H5A_is_shared_test");
-!!$
-!!$                /* Check refcount for attribute */
-!!$                ret = H5A_get_shared_rc_test(attr, &shared_refcount);
-!!$                CHECK(ret, FAIL, "H5A_get_shared_rc_test");
-!!$                VERIFY(shared_refcount, 1, "H5A_get_shared_rc_test");
-!!$            } /* end else */
-
         ! /* Close attribute */
         CALL h5aclose_f(attr, error)
         CALL check("h5aclose_f",error,total_error)
@@ -1565,22 +1344,6 @@ SUBROUTINE test_attr_shared_rename( fcpl, fapl, total_error)
         ! /* Check refcount on renamed attribute */
         CALL H5Aopen_f(dataset2, attrname, attr, error)
         CALL check("H5Aopen",error,total_error)
-!!$
-!!$            if(u % 2) {
-!!$                /* Check that attribute is not shared */
-!!$                is_shared = H5A_is_shared_test(attr);
-!!$                VERIFY(is_shared, FALSE, "H5A_is_shared_test");
-!!$            } /* end if */
-!!$            else {
-!!$                /* Check that attribute is shared */
-!!$                is_shared = H5A_is_shared_test(attr);
-!!$                VERIFY(is_shared, TRUE, "H5A_is_shared_test");
-!!$
-!!$                /* Check refcount for attribute */
-!!$                ret = H5A_get_shared_rc_test(attr, &shared_refcount);
-!!$                CHECK(ret, FAIL, "H5A_get_shared_rc_test");
-!!$                VERIFY(shared_refcount, 2, "H5A_get_shared_rc_test");
-!!$            } /* end else */
 
         ! /* Close attribute */
         CALL h5aclose_f(attr, error)
@@ -1592,22 +1355,6 @@ SUBROUTINE test_attr_shared_rename( fcpl, fapl, total_error)
         CALL H5Aopen_f(dataset, attrname, attr, error)
         CALL check("H5Aopen",error,total_error)
 
-!!$            if(u % 2) {
-!!$                /* Check that attribute is not shared */
-!!$                is_shared = H5A_is_shared_test(attr);
-!!$                VERIFY(is_shared, FALSE, "H5A_is_shared_test");
-!!$            } /* end if */
-!!$            else {
-!!$                /* Check that attribute is shared */
-!!$                is_shared = H5A_is_shared_test(attr);
-!!$                VERIFY(is_shared, TRUE, "H5A_is_shared_test");
-!!$
-!!$                /* Check refcount for attribute */
-!!$                ret = H5A_get_shared_rc_test(attr, &shared_refcount);
-!!$                CHECK(ret, FAIL, "H5A_get_shared_rc_test");
-!!$                VERIFY(shared_refcount, 2, "H5A_get_shared_rc_test");
-!!$            } /* end else */
-
         ! /* Close attribute */
         CALL h5aclose_f(attr, error)
         CALL check("h5aclose_f",error,total_error)
@@ -1624,20 +1371,6 @@ SUBROUTINE test_attr_shared_rename( fcpl, fapl, total_error)
      CALL h5dclose_f(dataset2, error)
      CALL check("h5dclose_f",error,total_error)
 
-!!$        /* Check on shared message status now */
-!!$        if(test_shared != 0) {
-!!$            if(test_shared == 1) {
-!!$                /* Check on datatype storage status */
-!!$                ret = H5F_get_sohm_mesg_count_test(fid, H5O_DTYPE_ID, &mesg_count);
-!!$                CHECK(ret, FAIL, "H5F_get_sohm_mesg_count_test");
-!!$                VERIFY(mesg_count, 2, "H5F_get_sohm_mesg_count_test");
-!!$            } /* end if */
-!!$
-!!$            /* Check on dataspace storage status */
-!!$            ret = H5F_get_sohm_mesg_count_test(fid, H5O_SDSPACE_ID, &mesg_count);
-!!$            CHECK(ret, FAIL, "H5F_get_sohm_mesg_count_test");
-!!$            VERIFY(mesg_count, 2, "H5F_get_sohm_mesg_count_test");
-!!$        } /* end if */
 
      ! /* Unlink datasets with attributes */
      CALL H5Ldelete_f(fid, DSET1_NAME, error, H5P_DEFAULT_F)
@@ -1651,23 +1384,6 @@ SUBROUTINE test_attr_shared_rename( fcpl, fapl, total_error)
         CALL check("HLdelete_f",error,total_error)
      ENDIF
 
-     ! /* Check on attribute storage status */
-!!$        ret = H5F_get_sohm_mesg_count_test(fid, H5O_ATTR_ID, &mesg_count);
-!!$        CHECK(ret, FAIL, "H5F_get_sohm_mesg_count_test");
-!!$        VERIFY(mesg_count, 0, "H5F_get_sohm_mesg_count_test");
-!!$
-!!$        if(test_shared != 0) {
-!!$            /* Check on datatype storage status */
-!!$            ret = H5F_get_sohm_mesg_count_test(fid, H5O_DTYPE_ID, &mesg_count);
-!!$            CHECK(ret, FAIL, "H5F_get_sohm_mesg_count_test");
-!!$            VERIFY(mesg_count, 0, "H5F_get_sohm_mesg_count_test");
-!!$
-!!$            /* Check on dataspace storage status */
-!!$            ret = H5F_get_sohm_mesg_count_test(fid, H5O_SDSPACE_ID, &mesg_count);
-!!$            CHECK(ret, FAIL, "H5F_get_sohm_mesg_count_test");
-!!$            VERIFY(mesg_count, 0, "H5F_get_sohm_mesg_count_test");
-!!$        } /* end if */
-
      ! /* Close file */
      CALL h5fclose_f(fid, error)
      CALL check("h5fclose_f",error,total_error)
@@ -1774,41 +1490,6 @@ SUBROUTINE test_attr_delete_by_idx(new_format, fcpl, fapl, total_error)
         ! /* Loop over using index for creation order value */
         DO i = 1, 2
 
-           ! /* Print appropriate test message */
-!!$           IF(idx_type .EQ. H5_INDEX_CRT_ORDER_F)THEN
-!!$              IF(order .EQ. H5_ITER_INC_F) THEN
-!!$                 IF(use_index(i))THEN
-!!$                    WRITE(*,'(A102)') &
-!!$                         "       - Testing Deleting Attribute By Creation Order Index in Increasing Order w/Creation Order Index"
-!!$                 ELSE
-!!$                    WRITE(*,'(A104)') &
-!!$                         "       - Testing Deleting Attribute By Creation Order Index in Increasing Order w/o Creation Order Index"
-!!$                 ENDIF
-!!$              ELSE
-!!$                 IF(use_index(i))THEN
-!!$                    WRITE(*,'(A102)') &
-!!$                         "       - Testing Deleting Attribute By Creation Order Index in Decreasing Order w/Creation Order Index"
-!!$                 ELSE
-!!$                    WRITE(*,'(A104)') &
-!!$                         "       - Testing Deleting Attribute By Creation Order Index in Decreasing Order w/o Creation Order Index"
-!!$                 ENDIF
-!!$              ENDIF
-!!$           ELSE
-!!$              IF(order .EQ. H5_ITER_INC_F)THEN
-!!$                 IF(use_index(i))THEN
-!!$                    WRITE(*,'(7X,A86)')"- Testing Deleting Attribute By Name Index in Increasing Order w/Creation Order Index"
-!!$                 ELSE
-!!$                    WRITE(*,'(7X,A88)')"- Testing Deleting Attribute By Name Index in Increasing Order w/o Creation Order Index"
-!!$                 ENDIF
-!!$              ELSE
-!!$                 IF(use_index(i))THEN
-!!$                    WRITE(*,'(7X,A86)') "- Testing Deleting Attribute By Name Index in Decreasing Order w/Creation Order Index"
-!!$                 ELSE
-!!$                    WRITE(*,'(7X,A88)') "- Testing Deleting Attribute By Name Index in Decreasing Order w/o Creation Order Index"
-!!$                 ENDIF
-!!$              ENDIF
-!!$           ENDIF
-
            ! /* Create file */
            CALL h5fcreate_f(FileName, H5F_ACC_TRUNC_F, fid, error, fcpl, fapl)
            CALL check("h5fcreate_f",error,total_error)
@@ -1852,11 +1533,6 @@ SUBROUTINE test_attr_delete_by_idx(new_format, fcpl, fapl, total_error)
                  !        CALL HDassert(0.AND."Toomanydatasets!")
               END SELECT
 
-              ! /* Check on dataset's attribute storage status */
-!!$                is_empty = H5O_is_attr_empty_test(my_dataset);
-!!$                VERIFY(is_empty, TRUE, "H5O_is_attr_empty_test");
-!!$                is_dense = H5O_is_attr_dense_test(my_dataset);
-!!$                VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
 
               ! /* Check for deleting non-existant attribute */
 !EP              CALL H5Adelete_by_idx_f(my_dataset, '.', idx_type, order, 0_HSIZE_T,error, lapl_id=H5P_DEFAULT_F)
@@ -1887,18 +1563,6 @@ SUBROUTINE test_attr_delete_by_idx(new_format, fcpl, fapl, total_error)
 
               ENDDO
 
-
-
-              !  /* Verify state of object */
-
-!!$                ret = H5O_num_attrs_test(my_dataset, &nattrs);
-!!$                CHECK(ret, FAIL, "H5O_num_attrs_test");
-!!$                VERIFY(nattrs, max_compact, "H5O_num_attrs_test");
-!!$                is_empty = H5O_is_attr_empty_test(my_dataset);
-!!$                VERIFY(is_empty, FALSE, "H5O_is_attr_empty_test");
-!!$                is_dense = H5O_is_attr_dense_test(my_dataset);
-!!$                VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
-
               !/* Check for out of bound deletions */
               CALL H5Adelete_by_idx_f(my_dataset, ".", idx_type, order, INT(u,HSIZE_T), error, lapl_id=H5P_DEFAULT_F)
               CALL VERIFY("H5Adelete_by_idx_f",error,minusone,total_error)
@@ -1946,7 +1610,6 @@ SUBROUTINE test_attr_delete_by_idx(new_format, fcpl, fapl, total_error)
                  ENDIF
 
                    ! /* Verify the name for first attribute in appropriate order */
-                   ! HDmemset(tmpname, 0, (size_t)NAME_BUF_SIZE);
 
                  size = 7 ! *CHECK* IF NOT THE SAME SIZE
                  CALL h5aget_name_by_idx_f(my_dataset, ".", idx_type, order,INT(0,hsize_t), &
@@ -1969,10 +1632,6 @@ SUBROUTINE test_attr_delete_by_idx(new_format, fcpl, fapl, total_error)
               CALL H5Adelete_by_idx_f(my_dataset, ".", idx_type, order, hzero, error)
               CALL check("H5Adelete_by_idx_f",error,total_error)
 
-
-              ! /* Verify state of attribute storage (empty) */
-!!$                is_empty = H5O_is_attr_empty_test(my_dataset);
-!!$                VERIFY(is_empty, TRUE, "H5O_is_attr_empty_test");
            ENDDO
 
 !   /* Work on all the datasets */
@@ -2011,34 +1670,8 @@ SUBROUTINE test_attr_delete_by_idx(new_format, fcpl, fapl, total_error)
                  CALL h5aclose_f(attr, error)
                  CALL check("h5aclose_f",error,total_error)
 
-                 ! /* Verify state of object */
-                 IF(u .GE. max_compact)THEN
-!!$                  is_dense = H5O_is_attr_dense_test(my_dataset);
-!!$                  VERIFY(is_dense, (new_format ? TRUE : FALSE), "H5O_is_attr_dense_test");
-                 ENDIF
 
-                 ! /* Verify information for new attribute */
-!!$              CALL check("attr_info_by_idx_check",error,total_error)
               ENDDO
-
-              ! /* Verify state of object */
-!!$                    ret = H5O_num_attrs_test(my_dataset, &nattrs);
-!!$                    CHECK(ret, FAIL, "H5O_num_attrs_test");
-!!$                    VERIFY(nattrs, (max_compact * 2), "H5O_num_attrs_test");
-!!$                    is_empty = H5O_is_attr_empty_test(my_dataset);
-!!$                    VERIFY(is_empty, FALSE, "H5O_is_attr_empty_test");
-!!$                    is_dense = H5O_is_attr_dense_test(my_dataset);
-!!$                    VERIFY(is_dense, (new_format ? TRUE : FALSE), "H5O_is_attr_dense_test");
-!!$
-              IF(new_format)THEN
-!!$                 ! /* Retrieve & verify # of records in the name & creation order indices */
-!!$                 ret = H5O_attr_dense_info_test(my_dataset, &name_count, &corder_count);
-!!$                 CHECK(ret, FAIL, "H5O_attr_dense_info_test");
-!!$                 IF(use_index)
-!!$                 VERIFY(name_count, corder_count, "H5O_attr_dense_info_test");
-!!$                 VERIFY(name_count, (max_compact * 2), "H5O_attr_dense_info_test");
-              ENDIF
-
               ! /* Check for out of bound deletion */
               CALL H5Adelete_by_idx_f(my_dataset, ".", idx_type, order, INT(u,HSIZE_T), error)
               CALL VERIFY("H5Adelete_by_idx_f",error,minusone,total_error)
@@ -2054,8 +1687,6 @@ SUBROUTINE test_attr_delete_by_idx(new_format, fcpl, fapl, total_error)
                  my_dataset = dset2
               CASE (2)
                  my_dataset = dset3
-                 !     CASE DEFAULT
-                 !        CALL HDassert(0.AND."Toomanydatasets!")
               END SELECT
 
               ! /* Delete attributes from dense storage */
@@ -2101,9 +1732,6 @@ SUBROUTINE test_attr_delete_by_idx(new_format, fcpl, fapl, total_error)
 
               CALL H5Adelete_by_idx_f(my_dataset, ".", idx_type, order, INT(0,HSIZE_T), error, lapl_id=H5P_DEFAULT_F)
               CALL check("H5Adelete_by_idx_f",error,total_error)
-              ! /* Verify state of attribute storage (empty) */
-!!$                    is_empty = H5O_is_attr_empty_test(my_dataset);
-!!$                    VERIFY(is_empty, TRUE, "H5O_is_attr_empty_test");
 
               !/* Check for deletion on empty attribute storage again */
               CALL H5Adelete_by_idx_f(my_dataset, ".", idx_type, order, INT(0,HSIZE_T), error)
@@ -2194,7 +1822,6 @@ SUBROUTINE test_attr_shared_delete(fcpl, fapl, total_error)
   INTEGER     ::   arank = 1                      ! Attribure rank
 
   ! /* Output message about test being performed */
-!  WRITE(*,*) "     - Testing Deleting Shared & Unshared Attributes in Compact & Dense Storage"
 
   ! /* Initialize "big" attribute DATA */
   !    /* Create dataspace for dataset */
@@ -2225,11 +1852,9 @@ SUBROUTINE test_attr_shared_delete(fcpl, fapl, total_error)
         ! /* Make attributes > 500 bytes shared */
         CALL H5Pset_shared_mesg_nindexes_f(my_fcpl,1,error)
         CALL check("H5Pset_shared_mesg_nindexes_f",error, total_error)
-!!$     CHECK_I(ret, "H5Pset_shared_mesg_nindexes");
         CALL H5Pset_shared_mesg_index_f(my_fcpl, 0, H5O_SHMESG_ATTR_FLAG_F, 500,error)
         CALL check(" H5Pset_shared_mesg_index_f",error, total_error)
 
-!!$     CHECK_I(ret, "H5Pset_shared_mesg_index");
      ELSE
         ! /* Set up copy of file creation property list */
         CALL H5Pset_shared_mesg_nindexes_f(my_fcpl,3,error)
@@ -2238,7 +1863,6 @@ SUBROUTINE test_attr_shared_delete(fcpl, fapl, total_error)
         ! /* Make datatypes & dataspaces > 1 byte shared (i.e. all of them :-) */
         CALL H5Pset_shared_mesg_index_f(my_fcpl, 1, H5O_SHMESG_DTYPE_FLAG_F, 1,error)
         CALL H5Pset_shared_mesg_index_f(my_fcpl, 2,  H5O_SHMESG_SDSPACE_FLAG_F, 1,error)
-!!$            CHECK_I(ret, "H5Pset_shared_mesg_index");
      ENDIF
 
      ! /* Create file */
@@ -2275,19 +1899,6 @@ SUBROUTINE test_attr_shared_delete(fcpl, fapl, total_error)
      CALL h5dcreate_f(fid, DSET2_NAME, H5T_NATIVE_CHARACTER, sid, dataset2, error, dcpl_id=dcpl )
      CALL check("h5dcreate_f",error,total_error)
 
-     ! /* Check on dataset's message storage status */
-!!$        if(test_shared != 0) {
-!!$            /* Datasets' datatypes can be shared */
-!!$            ret = H5F_get_sohm_mesg_count_test(fid, H5O_DTYPE_ID, &mesg_count);
-!!$            CHECK(ret, FAIL, "H5F_get_sohm_mesg_count_test");
-!!$            VERIFY(mesg_count, 1, "H5F_get_sohm_mesg_count_test");
-!!$
-!!$            /* Datasets' dataspace can be shared */
-!!$            ret = H5F_get_sohm_mesg_count_test(fid, H5O_SDSPACE_ID, &mesg_count);
-!!$            CHECK(ret, FAIL, "H5F_get_sohm_mesg_count_test");
-!!$            VERIFY(mesg_count, 1, "H5F_get_sohm_mesg_count_test");
-!!$        } /* end if */
-!!$
      ! /* Retrieve limits for compact/dense attribute storage */
      CALL H5Pget_attr_phase_change_f(dcpl, max_compact, min_dense, error)
      CALL check("H5Pget_attr_phase_change_f",error,total_error)
@@ -2295,13 +1906,7 @@ SUBROUTINE test_attr_shared_delete(fcpl, fapl, total_error)
      ! /* Close property list */
      CALL h5pclose_f(dcpl,error)
      CALL check("h5pclose_f", error, total_error)
-!!$
-!!$        /* Check on datasets' attribute storage status */
-!!$        is_dense = H5O_is_attr_dense_test(dataset);
-!!$        VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
-!!$        is_dense = H5O_is_attr_dense_test(dataset2);
-!!$        VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
-!!$
+
      ! /* Add attributes to each dataset, until after converting to dense storage */
 
      DO u = 0, (max_compact * 2) - 1
@@ -2318,10 +1923,6 @@ SUBROUTINE test_attr_shared_delete(fcpl, fapl, total_error)
            CALL h5acreate_f(dataset, attrname, attr_tid, sid, attr, error, H5P_DEFAULT_F, H5P_DEFAULT_F)
            CALL check("h5acreate_f",error,total_error)
 
-!!$                /* Check that attribute is not shared */
-!!$                is_shared = H5A_is_shared_test(attr);
-!!$                VERIFY(is_shared, FALSE, "H5A_is_shared_test");
-
            ! /* Write data into the attribute */
            attr_integer_data(1) = u + 1
            data_dims(1) = 1
@@ -2332,16 +1933,7 @@ SUBROUTINE test_attr_shared_delete(fcpl, fapl, total_error)
 
            CALL h5acreate_f(dataset, attrname, attr_tid, big_sid, attr, error)
            CALL check("h5acreate_f",error,total_error)
-!!$
-           !  Check that attribute is shared */
-!!$                is_shared = H5A_is_shared_test(attr);
-!!$                VERIFY(is_shared, TRUE, "H5A_is_shared_test");
-
-           !  Check refcount for attribute */
-!!$                ret = H5A_get_shared_rc_test(attr, &shared_refcount);
-!!$                CHECK(ret, FAIL, "H5A_get_shared_rc_test");
-!!$                VERIFY(shared_refcount, 1, "H5A_get_shared_rc_test");
-!!$
+
            !  Write data into the attribute */
 
            attr_integer_data(1) = u + 1
@@ -2349,24 +1941,12 @@ SUBROUTINE test_attr_shared_delete(fcpl, fapl, total_error)
            CALL h5awrite_f(attr,  attr_tid, attr_integer_data, data_dims, error)
            CALL check("h5awrite_f",error,total_error)
 
-           !  Check refcount for attribute */
-!!$                ret = H5A_get_shared_rc_test(attr, &shared_refcount);
-!!$                CHECK(ret, FAIL, "H5A_get_shared_rc_test");
-!!$                VERIFY(shared_refcount, 1, "H5A_get_shared_rc_test");
         ENDIF
 
         ! /* Close attribute */
         CALL h5aclose_f(attr, error)
         CALL check("h5aclose_f",error,total_error)
 
-        ! /* Check on dataset's attribute storage status */
-!!$            is_dense = H5O_is_attr_dense_test(dataset);
-!!$            if(u < max_compact)
-!!$                VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
-!!$            else
-!!$                VERIFY(is_dense, TRUE, "H5O_is_attr_dense_test");
-!!$
-!!$
         ! /* Alternate between creating "small" & "big" attributes */
         IF(MOD(u+1,2).EQ.0)THEN
 
@@ -2375,10 +1955,6 @@ SUBROUTINE test_attr_shared_delete(fcpl, fapl, total_error)
            CALL h5acreate_f(dataset2, attrname, attr_tid, sid, attr, error)
            CALL check("h5acreate_f",error,total_error)
 
-           !  /* Check that attribute is not shared */
-!!$                is_shared = H5A_is_shared_test(attr);
-!!$                VERIFY(is_shared, FALSE, "H5A_is_shared_test");
-!!$
            ! /* Write data into the attribute */
            attr_integer_data(1) = u + 1
            data_dims(1) = 1
@@ -2391,15 +1967,6 @@ SUBROUTINE test_attr_shared_delete(fcpl, fapl, total_error)
            CALL h5acreate_f(dataset2, attrname, attr_tid, big_sid, attr, error, acpl_id=H5P_DEFAULT_F, aapl_id=H5P_DEFAULT_F)
            CALL check("h5acreate_f",error,total_error)
 
-! /* Check that attribute is shared */
-!!$                is_shared = H5A_is_shared_test(attr);
-!!$                VERIFY(is_shared, TRUE, "H5A_is_shared_test");
-!!$
-! /* Check refcount for attribute */
-!!$                ret = H5A_get_shared_rc_test(attr, &shared_refcount);
-!!$                CHECK(ret, FAIL, "H5A_get_shared_rc_test");
-!!$                VERIFY(shared_refcount, 1, "H5A_get_shared_rc_test");
-!!$
 ! /* Write data into the attribute */
 
 
@@ -2408,23 +1975,11 @@ SUBROUTINE test_attr_shared_delete(fcpl, fapl, total_error)
            CALL h5awrite_f(attr,  attr_tid, attr_integer_data, data_dims, error)
            CALL check("h5awrite_f",error,total_error)
 
-
-! /* Check refcount for attribute */
-!!$                ret = H5A_get_shared_rc_test(attr, &shared_refcount);
-!!$                CHECK(ret, FAIL, "H5A_get_shared_rc_test");
-!!$                VERIFY(shared_refcount, 2, "H5A_get_shared_rc_test");
-
         ENDIF
         ! /* Close attribute */
         CALL h5aclose_f(attr, error)
         CALL check("h5aclose_f",error,total_error)
 
-        ! /* Check on dataset's attribute storage status */
-!!$            is_dense = H5O_is_attr_dense_test(dataset2);
-!!$            if(u < max_compact)
-!!$                VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
-!!$            else
-!!$                VERIFY(is_dense, TRUE, "H5O_is_attr_dense_test");
      ENDDO
 
      ! /* Delete attributes from second dataset */
@@ -2439,29 +1994,9 @@ SUBROUTINE test_attr_shared_delete(fcpl, fapl, total_error)
         CALL H5Adelete_by_name_f(fid, DSET2_NAME, attrname,error,lapl_id=H5P_DEFAULT_F)
         CALL check("H5Adelete_by_name", error, total_error)
 
-!!$            /* Check refcount on attributes now */
-!!$
-!!$            /* Check refcount on first dataset's attribute */
-
         CALL h5aopen_f(dataset, attrname, attr, error, aapl_id=H5P_DEFAULT_F)
         CALL check("h5aopen_f",error,total_error)
 
-!!$
-!!$            if(u % 2) {
-! /* Check that attribute is not shared */
-!!$                is_shared = H5A_is_shared_test(attr);
-!!$                VERIFY(is_shared, FALSE, "H5A_is_shared_test");
-!!$            } /* end if */
-!!$            else {
-!/*  Check that attribute is shared */
-!!$                is_shared = H5A_is_shared_test(attr);
-!!$                VERIFY(is_shared, TRUE, "H5A_is_shared_test");
-!!$
-!/*  Check refcount for attribute */
-!!$                ret = H5A_get_shared_rc_test(attr, &shared_refcount);
-!!$                CHECK(ret, FAIL, "H5A_get_shared_rc_test");
-!!$                VERIFY(shared_refcount, 1, "H5A_get_shared_rc_test");
-!!$            } /* end else */
 
         ! /* Close attribute */
         CALL h5aclose_f(attr, error)
@@ -2480,21 +2015,6 @@ SUBROUTINE test_attr_shared_delete(fcpl, fapl, total_error)
      CALL h5dclose_f(dataset2, error)
      CALL check("h5dclose_f",error,total_error)
 
-     ! /* Check on shared message status now */
-!!$        if(test_shared != 0) {
-!!$            if(test_shared == 1) {
-     ! /*  Check on datatype storage status */
-!!$                ret = H5F_get_sohm_mesg_count_test(fid, H5O_DTYPE_ID, &mesg_count);
-!!$                CHECK(ret, FAIL, "H5F_get_sohm_mesg_count_test");
-!!$                VERIFY(mesg_count, 2, "H5F_get_sohm_mesg_count_test");
-!!$            } /* end if */
-!!$
-!!$            /* Check on dataspace storage status */
-!!$            ret = H5F_get_sohm_mesg_count_test(fid, H5O_SDSPACE_ID, &mesg_count);
-!!$            CHECK(ret, FAIL, "H5F_get_sohm_mesg_count_test");
-!!$            VERIFY(mesg_count, 2, "H5F_get_sohm_mesg_count_test");
-!!$        } /* end if */
-!!$
      ! /* Unlink datasets WITH attributes */
 
      CALL h5ldelete_f(fid, DSET1_NAME, error, H5P_DEFAULT_F)
@@ -2509,31 +2029,11 @@ SUBROUTINE test_attr_shared_delete(fcpl, fapl, total_error)
         CALL check("H5Ldelete_f", error, total_error)
      ENDIF
 
-     ! /* Check on attribute storage status */
-!!$        ret = H5F_get_sohm_mesg_count_test(fid, H5O_ATTR_ID, &mesg_count);
-!!$        CHECK(ret, FAIL, "H5F_get_sohm_mesg_count_test");
-!!$        VERIFY(mesg_count, 0, "H5F_get_sohm_mesg_count_test");
-!!$
-!!$        if(test_shared != 0) {
-!!$            /* Check on datatype storage status */
-!!$            ret = H5F_get_sohm_mesg_count_test(fid, H5O_DTYPE_ID, &mesg_count);
-!!$            CHECK(ret, FAIL, "H5F_get_sohm_mesg_count_test");
-!!$            VERIFY(mesg_count, 0, "H5F_get_sohm_mesg_count_test");
-!!$
-!!$            /* Check on dataspace storage status */
-!!$            ret = H5F_get_sohm_mesg_count_test(fid, H5O_SDSPACE_ID, &mesg_count);
-!!$            CHECK(ret, FAIL, "H5F_get_sohm_mesg_count_test");
-!!$            VERIFY(mesg_count, 0, "H5F_get_sohm_mesg_count_test");
-!!$        } /* end if */
-!!$
 
      ! /* Close file */
      CALL h5fclose_f(fid, error)
      CALL check("h5fclose_f",error,total_error)
-!!$
-!!$        /* Check size of file */
-!!$        filesize = h5_get_file_size(FILENAME);
-!!$        VERIFY(filesize, empty_filesize, "h5_get_file_size");
+
   ENDDO
 
   ! /* Close dataspaces */
@@ -2587,8 +2087,6 @@ SUBROUTINE test_attr_dense_open( fcpl, fapl, total_error)
 
   data_dims = 0
 
-  ! /* Output message about test being performed */
-!  WRITE(*,*) "     - Testing Opening Attributes in Dense Storage"
 
   ! /* Create file */
 
@@ -2631,10 +2129,6 @@ SUBROUTINE test_attr_dense_open( fcpl, fapl, total_error)
   CALL h5pclose_f(dcpl, error)
   CALL check("h5pclose_f",error,total_error)
 
-  ! /* Check on dataset's attribute storage status */
-  !  is_dense = H5O_is_attr_dense_test(dataset);
-  !  VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
-
   ! /* Add attributes, until just before converting to dense storage */
 
   DO u = 0, max_compact - 1
@@ -2657,13 +2151,8 @@ SUBROUTINE test_attr_dense_open( fcpl, fapl, total_error)
 
      ! /* Verify attributes written so far */
      CALL test_attr_dense_verify(dataset, u, total_error)
-     ! CHECK(ret, FAIL, "test_attr_dense_verify");
   ENDDO
-
-  ! /* Check on dataset's attribute storage status */
-!!$    is_dense = H5O_is_attr_dense_test(dataset);
-!!$    VERIFY(is_dense, FALSE, "H5O_is_attr_dense_test");
-
+!
 !    /* Add one more attribute, to push into "dense" storage */
 !    /* Create attribute */
 
@@ -2673,11 +2162,6 @@ SUBROUTINE test_attr_dense_open( fcpl, fapl, total_error)
   CALL h5acreate_f(dataset, attrname, H5T_NATIVE_INTEGER, sid, attr, error, aapl_id=H5P_DEFAULT_F)
   CALL check("h5acreate_f",error,total_error)
 
-  ! /* Check on dataset's attribute storage status */
-!!$    is_dense = H5O_is_attr_dense_test(dataset);
-!!$    VERIFY(is_dense, TRUE, "H5O_is_attr_dense_test");
-
-
   ! /* Write data into the attribute */
   data_dims(1) = 1
   CALL h5awrite_f(attr, H5T_NATIVE_INTEGER, u, data_dims, error)
@@ -2687,7 +2171,6 @@ SUBROUTINE test_attr_dense_open( fcpl, fapl, total_error)
   CALL h5aclose_f(attr, error)
   CALL check("h5aclose_f",error,total_error)
 
-
   ! /* Close dataspace */
   CALL h5sclose_f(sid, error)
   CALL check("h5sclose_f",error,total_error)
@@ -2990,8 +2473,6 @@ SUBROUTINE test_attr_basic_write(fapl, total_error)
   attr_data1a(2) = 1087
   attr_data1a(3) = -99890
 
-  ! /* Output message about test being performed */
-!  WRITE(*,*) "     - Testing Basic Scalar Attribute Writing Functions"
 
   ! /* Create file */
   CALL h5fcreate_f(FileName, H5F_ACC_TRUNC_F, fid1, error, H5P_DEFAULT_F, fapl)
@@ -3056,8 +2537,6 @@ SUBROUTINE test_attr_basic_write(fapl, total_error)
   CALL check("h5aget_storage_size_f",error,total_error)
 !EP  CALL VERIFY("h5aget_storage_size_f", INT(attr_size), 2*HSIZE_T, total_error)
 
-!  attr_size = H5Aget_storage_size(attr);
-!  VERIFY(attr_size, (ATTR1_DIM1 * sizeof(int)), "H5A_get_storage_size");
 
   ! /* Read attribute information immediately, without closing attribute */
   CALL h5aread_f(attr, H5T_NATIVE_INTEGER, read_data1, dimsa, error)
@@ -3156,9 +2635,6 @@ SUBROUTINE test_attr_many(new_format, fcpl, fapl, total_error)
   INTEGER(HID_T) :: sid
   INTEGER(HID_T) :: gid
   INTEGER(HID_T) :: aid
-
-
-
   INTEGER :: error
 
   INTEGER(HSIZE_T), DIMENSION(7) :: data_dims
@@ -3175,8 +2651,6 @@ SUBROUTINE test_attr_many(new_format, fcpl, fapl, total_error)
 
   data_dims = 0
 
-  ! /* Output message about test being performed */
-!  WRITE(*,*) "     - Testing Storing Many Attributes"
 
   !/* Create file */
   CALL h5fcreate_f(FileName, H5F_ACC_TRUNC_F, fid, error, fcpl, fapl)
diff --git a/fortran/test/tH5D.f90 b/fortran/test/tH5D.f90
index 56e82f4..682e242 100644
--- a/fortran/test/tH5D.f90
+++ b/fortran/test/tH5D.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/tH5D.f90
+!
+! NAME
+!  tH5D.f90
+!
+! FUNCTION
+!  Basic testing of Fortran H5D APIs.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,14 +22,17 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! NOTES
+!  Tests the H5D APIs functionalities of:
+!   h5dcreate_f, h5dopen_f, h5dclose_f, h5dget_space_f, h5dget_type_f,
+!   h5dread_f, and h5dwrite_f
 !
 !
-!    Testing Dataset Interface functionality.
+! CONTAINS SUBROUTINES
+!  datasettest, extenddsettest
 !
-!
-!    The following subroutine tests the following functionalities:
-!    h5dcreate_f, h5dopen_f, h5dclose_f, h5dget_space_f, h5dget_type_f,
-!    h5dread_f, and h5dwrite_f
+!*****
+
 !
         SUBROUTINE datasettest(cleanup, total_error)
         USE HDF5 ! This module contains all necessary modules
diff --git a/fortran/test/tH5E.f90 b/fortran/test/tH5E.f90
index a4912bd..4d431a1 100644
--- a/fortran/test/tH5E.f90
+++ b/fortran/test/tH5E.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/tH5E.f90
+!
+! NAME
+!  tH5E.f90
+!
+! FUNCTION
+!  Basic testing of Fortran H5E APIs.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,6 +22,15 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! NOTES
+!  Tests the H5D APIs functionalities of:
+!   h5eprint_f
+!
+! CONTAINS SUBROUTINES
+!  error_report_test
+!
+!*****
+!
     SUBROUTINE error_report_test(cleanup, total_error)
 
 !   This subroutine tests following functionalities: h5eprint_f
diff --git a/fortran/test/tH5E_F03.f90 b/fortran/test/tH5E_F03.f90
new file mode 100644
index 0000000..e378aa7
--- /dev/null
+++ b/fortran/test/tH5E_F03.f90
@@ -0,0 +1,34 @@
+!****h* root/fortran/test/tH5E_F03.f90
+!
+! NAME
+!  tH5E_F03.f90
+!
+! FUNCTION
+!  Test FORTRAN HDF5 H5E APIs which are dependent on FORTRAN 2003
+!  features. 
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! USES
+!
+! CONTAINS SUBROUTINES
+!
+!*****
+
+! *****************************************
+! ***        H 5 E   T E S T S
+! *****************************************
diff --git a/fortran/test/tH5F.f90 b/fortran/test/tH5F.f90
index 4b88cb3..d8f683c 100644
--- a/fortran/test/tH5F.f90
+++ b/fortran/test/tH5F.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/tH5F.f90
+!
+! NAME
+!  tH5F.f90
+!
+! FUNCTION
+!  Basic testing of Fortran H5F APIs.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,15 +22,15 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! CONTAINS SUBROUTINES
+!  mountingtest, reopentest, plisttest, file_close, file_space
 !
+!*****
 !
-!    Testing File Interface functionality.
-!
-!    In the mountingtest subroutine we create one file with a group in it,
-!    and another file with a dataset. Mounting is used to
-!    access the dataset from the second file as a member of a group
-!    in the first file.
-!
+!  In the mountingtest subroutine we create one file with a group in it, 
+!  and another file with a dataset. Mounting is used to
+!  access the dataset from the second file as a member of a group 
+!  in the first file. 
         SUBROUTINE mountingtest(cleanup, total_error)
         USE HDF5  ! This module contains all necessary modules
           IMPLICIT NONE
diff --git a/fortran/test/tH5G.f90 b/fortran/test/tH5G.f90
index 300e538..6befa94 100644
--- a/fortran/test/tH5G.f90
+++ b/fortran/test/tH5G.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/tH5G.f90
+!
+! NAME
+!  tH5G.f90
+!
+! FUNCTION
+!  Basic testing of Fortran H5G APIs.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,6 +22,11 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! CONTAINS SUBROUTINES
+!  group_test
+!
+!*****
+
     SUBROUTINE group_test(cleanup, total_error)
 
 !   This subroutine tests following functionalities:
@@ -236,6 +250,7 @@
      CALL h5sclose_f(dspace_id, error)
      CALL check("h5sclose_f", error, total_error)
 
+
           if(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
               CALL check("h5_cleanup_f", error, total_error)
   END SUBROUTINE group_test
diff --git a/fortran/test/tH5G_1_8.f90 b/fortran/test/tH5G_1_8.f90
index 6a2c623..fd55ba9 100644
--- a/fortran/test/tH5G_1_8.f90
+++ b/fortran/test/tH5G_1_8.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/tH5G_1_8.f90
+!
+! NAME
+!  tH5G_1_8.f90
+!
+! FUNCTION
+!  Basic testing of Fortran H5G APIs introduced in 1.8.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,6 +22,12 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! CONTAINS SUBROUTINES
+!  group_test, group_info, timestamps, mklinks, test_move_preserves, lifecycle
+!  cklinks, delete_by_idx, link_info_by_idx_check, test_lcpl, objcopy, 
+!  lapl_nlinks
+!
+!*****
 SUBROUTINE group_test(cleanup, total_error)
   USE HDF5 ! This module contains all necessary modules
 
@@ -1057,6 +1072,7 @@ SUBROUTINE lifecycle(cleanup, fapl2, total_error)
     CALL check("h5_cleanup_f", error, total_error)
 
   END SUBROUTINE lifecycle
+
 !/*-------------------------------------------------------------------------
 ! * Function:	cklinks
 ! *
@@ -1070,7 +1086,7 @@ SUBROUTINE lifecycle(cleanup, fapl2, total_error)
 ! * Programmer:	M.S. Breitenfeld
 ! *             April 14, 2008
 ! *
-! * Modifications: Modified Original C code
+! * Modifications: Modified original C code
 ! *
 ! *-------------------------------------------------------------------------
 ! */
@@ -1118,10 +1134,10 @@ SUBROUTINE lifecycle(cleanup, fapl2, total_error)
 
 
   CALL H5Lexists_f(file,"d1",Lexists, error)
-  CALL verifylogical("test_lcpl.H5Lexists", Lexists,.TRUE.,total_error)
+  CALL verifylogical("H5Lexists", Lexists,.TRUE.,total_error)
 
   CALL H5Lexists_f(file,"grp1/hard",Lexists, error)
-  CALL verifylogical("test_lcpl.H5Lexists", Lexists,.TRUE.,total_error)
+  CALL verifylogical("H5Lexists", Lexists,.TRUE.,total_error)
 
   ! /* Cleanup */
   CALL H5Fclose_f(file,error)
@@ -1490,7 +1506,6 @@ SUBROUTINE link_info_by_idx_check(group_id, linkname, n, &
 ! *-------------------------------------------------------------------------
 ! */
 
-
   SUBROUTINE test_lcpl(cleanup, fapl, total_error)
 
   USE HDF5 ! This module contains all necessary modules
@@ -1542,13 +1557,13 @@ SUBROUTINE link_info_by_idx_check(group_id, linkname, n, &
   !  h5_fixname(FILENAME[0], fapl, filename, sizeof filename);
 
   CALL H5Fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error, H5P_DEFAULT_F, fapl)
-  CALL check("test_lcpl.H5Fcreate_f", error, total_error)
+  CALL check("H5Fcreate_f", error, total_error)
 
 
   ! /* Create and link a group with the default LCPL */
 
   CALL H5Gcreate_f(file_id, "/group", group_id, error)
-  CALL check("test_lcpl.H5Gcreate_f", error, total_error)
+  CALL check("H5Gcreate_f", error, total_error)
 
 
   ! /* Check that its character encoding is the default */
@@ -1561,49 +1576,54 @@ SUBROUTINE link_info_by_idx_check(group_id, linkname, n, &
 ! * creation property list and is always ASCII. */
 !#define H5F_DEFAULT_CSET H5T_CSET_ASCII  -- FROM H5Fprivate.h --
 
-  CALL VERIFY("test_lcpl.H5Lget_info_f",cset, H5T_CSET_ASCII_F,total_error)
+  CALL VERIFY("H5Lget_info_f",cset, H5T_CSET_ASCII_F,total_error)
 
   ! /* Create and commit a datatype with the default LCPL */
   CALL h5tcopy_f(H5T_NATIVE_INTEGER, type_id, error)
-  CALL check("test_lcpl.h5tcopy_f",error,total_error)
+  CALL check("h5tcopy_f",error,total_error)
   CALL h5tcommit_f(file_id, "/type", type_id, error)
-  CALL check("test_lcpl.h5tcommit_f", error, total_error)
+  CALL check("h5tcommit_f", error, total_error)
   CALL h5tclose_f(type_id, error)
-  CALL check("test_lcpl.h5tclose_f", error, total_error)
+  CALL check("h5tclose_f", error, total_error)
 
 
   ! /* Check that its character encoding is the default */
   CALL H5Lget_info_f(file_id, "type", &
        cset, corder, f_corder_valid, link_type, address, val_size, &
        error)
-  CALL check("test_lcpl.h5tclose_f", error, total_error)
+  CALL check("h5tclose_f", error, total_error)
 
 !/* File-wide default character encoding can not yet be set via the file
 ! * creation property list and is always ASCII. */
 !#define H5F_DEFAULT_CSET H5T_CSET_ASCII  -- FROM H5Fprivate.h --
 
-  CALL verify("test_lcpl.H5Lget_info_f",cset, H5T_CSET_ASCII_F,total_error)
+  CALL verify("H5Lget_info_f",cset, H5T_CSET_ASCII_F,total_error)
 
   !/* Create a dataspace */
   CALL h5screate_simple_f(2, dims, space_id, error)
-  CALL check("test_lcpl.h5screate_simple_f",error,total_error)
+  CALL check("h5screate_simple_f",error,total_error)
+  CALL h5pcreate_f(H5P_DATASET_CREATE_F, crp_list, error)
+  CALL h5pset_chunk_f(crp_list, 2, dims, error)
+  CALL h5pcreate_f(H5P_DATASET_CREATE_F, crp_list, error)
+  CALL h5pset_chunk_f(crp_list, 2, dims, error)
   CALL h5pcreate_f(H5P_DATASET_CREATE_F, crp_list, error)
   CALL h5pset_chunk_f(crp_list, 2, dims, error)
 
   ! /* Create a dataset using the default LCPL */
   CALL h5dcreate_f(file_id, "/dataset", H5T_NATIVE_INTEGER, space_id, dset_id, error, crp_list)
-  CALL check("test_lcpl.h5dcreate_f", error, total_error)
+  CALL check("h5dcreate_f", error, total_error)
+
   CALL h5dclose_f(dset_id, error)
-  CALL check("test_lcpl.h5dclose_f", error, total_error)
+  CALL check("h5dclose_f", error, total_error)
 
   ! Reopen
 
   CALL H5Dopen_f(file_id, "/dataset", dset_id, error)
-  CALL check("test_lcpl.h5dopen_f", error, total_error)
+  CALL check("h5dopen_f", error, total_error)
 
   !  /* Extend the  dataset */
   CALL H5Dset_extent_f(dset_id, extend_dim, error)
-  CALL check("test_lcpl.H5Dset_extent_f", error, total_error)
+  CALL check("H5Dset_extent_f", error, total_error)
   !  /* Verify the dataspaces */
         !
           !Get dataset's dataspace handle.
@@ -1612,7 +1632,7 @@ SUBROUTINE link_info_by_idx_check(group_id, linkname, n, &
   CALL check("h5dget_space_f",error,total_error)
 
   CALL h5sget_simple_extent_dims_f(data_space, dimsout, maxdimsout, error)
-  CALL check("test_lcpl.h5sget_simple_extent_dims_f",error, total_error)
+  CALL check("h5sget_simple_extent_dims_f",error, total_error)
 
   DO i = 1, 2
      tmp1 = dimsout(i)
@@ -1628,170 +1648,170 @@ SUBROUTINE link_info_by_idx_check(group_id, linkname, n, &
   ! /* close data set */
 
   CALL h5dclose_f(dset_id, error)
-  CALL check("test_lcpl.h5dclose_f", error, total_error)
+  CALL check("h5dclose_f", error, total_error)
 
   ! /* Check that its character encoding is the default */
   CALL H5Lget_info_f(file_id, "dataset", &
        cset, corder, f_corder_valid, link_type, address, val_size, &
        error)
-  CALL check("test_lcpl.H5Lget_info_f", error, total_error)
+  CALL check("H5Lget_info_f", error, total_error)
 
 !/* File-wide default character encoding can not yet be set via the file
 ! * creation property list and is always ASCII. */
 !#define H5F_DEFAULT_CSET H5T_CSET_ASCII  -- FROM H5Fprivate.h --
 
-  CALL verify("test_lcpl.h5tclose_f",cset, H5T_CSET_ASCII_F,total_error)
+  CALL verify("h5tclose_f",cset, H5T_CSET_ASCII_F,total_error)
 
   !/* Create a link creation property list with the UTF-8 character encoding */
   CALL H5Pcreate_f(H5P_LINK_CREATE_F,lcpl_id,error)
-  CALL check("test_lcpl.h5Pcreate_f",error,total_error)
+  CALL check("h5Pcreate_f",error,total_error)
   CALL H5Pset_char_encoding_f(lcpl_id, H5T_CSET_UTF8_F, error)
-  CALL check("test_lcpl.H5Pset_char_encoding_f",error, total_error)
+  CALL check("H5Pset_char_encoding_f",error, total_error)
 
   ! /* Create and link a group with the new LCPL */
   CALL H5Gcreate_f(file_id, "/group2", group_id, error,lcpl_id=lcpl_id)
-  CALL check("test_lcpl.test_lcpl.H5Gcreate_f", error, total_error)
+  CALL check("H5Gcreate_f", error, total_error)
   CALL H5Gclose_f(group_id, error)
-  CALL check("test_lcpl.test_lcpl.H5Gclose_f", error, total_error)
+  CALL check("H5Gclose_f", error, total_error)
 
 
   !/* Check that its character encoding is UTF-8 */
   CALL H5Lget_info_f(file_id, "group2", &
        cset, corder, f_corder_valid, link_type, address, val_size, &
        error)
-  CALL check("test_lcpl.H5Lget_info_f", error, total_error)
-  CALL verify("test_lcpl.H5Lget_info_f",cset, H5T_CSET_UTF8_F,total_error)
+  CALL check("H5Lget_info_f", error, total_error)
+  CALL verify("H5Lget_info_f",cset, H5T_CSET_UTF8_F,total_error)
 
 
   ! /* Create and commit a datatype with the new LCPL */
 
   CALL h5tcopy_f(H5T_NATIVE_INTEGER, type_id, error)
-  CALL check("test_lcpl.h5tcopy_f",error,total_error)
+  CALL check("h5tcopy_f",error,total_error)
   CALL h5tcommit_f(file_id, "/type2", type_id, error, lcpl_id=lcpl_id)
-  CALL check("test_lcpl.h5tcommit_f", error, total_error)
+  CALL check("h5tcommit_f", error, total_error)
   CALL h5tclose_f(type_id, error)
-  CALL check("test_lcpl.h5tclose_f", error, total_error)
+  CALL check("h5tclose_f", error, total_error)
 
 
   !/* Check that its character encoding is UTF-8 */
   CALL H5Lget_info_f(file_id, "type2", &
        cset, corder, f_corder_valid, link_type, address, val_size, &
        error)
-  CALL check("test_lcpl.H5Lget_info_f", error, total_error)
-  CALL verify("test_lcpl.H5Lget_info_f",cset, H5T_CSET_UTF8_F,total_error)
+  CALL check("H5Lget_info_f", error, total_error)
+  CALL verify("H5Lget_info_f",cset, H5T_CSET_UTF8_F,total_error)
 
   ! /* Create a dataset using the new LCPL */
   CALL h5dcreate_f(file_id, "/dataset2", H5T_NATIVE_INTEGER, space_id, dset_id, error,lcpl_id=lcpl_id)
-  CALL check("test_lcpl.h5dcreate_f", error, total_error)
+  CALL check("h5dcreate_f", error, total_error)
 
   CALL h5dclose_f(dset_id, error)
-  CALL check("test_lcpl.h5dclose_f", error, total_error)
+  CALL check("h5dclose_f", error, total_error)
 
   CALL H5Pget_char_encoding_f(lcpl_id, encoding, error)
-  CALL check("test_lcpl.H5Pget_char_encoding_f", error, total_error)
-  CALL VERIFY("test_lcpl.H5Pget_char_encoding_f", encoding, H5T_CSET_UTF8_F, total_error)
+  CALL check("H5Pget_char_encoding_f", error, total_error)
+  CALL VERIFY("H5Pget_char_encoding_f", encoding, H5T_CSET_UTF8_F, total_error)
 
   ! /* Check that its character encoding is UTF-8 */
   CALL H5Lget_info_f(file_id, "dataset2", &
        cset, corder, f_corder_valid, link_type, address, val_size, &
        error)
-  CALL check("test_lcpl.H5Lget_info_f", error, total_error)
-  CALL verify("test_lcpl.H5Lget_info_f2",cset, H5T_CSET_UTF8_F,total_error)
+  CALL check("H5Lget_info_f", error, total_error)
+  CALL verify("H5Lget_info_f2",cset, H5T_CSET_UTF8_F,total_error)
 
   ! /* Create a new link to the dataset with a different character encoding. */
   CALL H5Pclose_f(lcpl_id, error)
-  CALL check("test_lcpl.H5Pclose_f", error, total_error)
+  CALL check("H5Pclose_f", error, total_error)
 
   CALL H5Pcreate_f(H5P_LINK_CREATE_F,lcpl_id,error)
-  CALL check("test_lcpl.h5Pcreate_f",error,total_error)
+  CALL check("h5Pcreate_f",error,total_error)
   CALL H5Pset_char_encoding_f(lcpl_id, H5T_CSET_ASCII_F, error)
-  CALL check("test_lcpl.H5Pset_char_encoding_f",error, total_error)
+  CALL check("H5Pset_char_encoding_f",error, total_error)
   CALL H5Lcreate_hard_f(file_id, "/dataset2", file_id, "/dataset2_link", error, lcpl_id)
-  CALL check("test_lcpl.H5Lcreate_hard_f",error, total_error)
+  CALL check("H5Lcreate_hard_f",error, total_error)
 
   CALL H5Lexists_f(file_id,"/dataset2_link",Lexists, error)
-  CALL check("test_lcpl.H5Lexists",error, total_error)
-  CALL verifylogical("test_lcpl.H5Lexists", Lexists,.TRUE.,total_error)
+  CALL check("H5Lexists",error, total_error)
+  CALL verifylogical("H5Lexists", Lexists,.TRUE.,total_error)
 
   ! /* Check that its character encoding is ASCII */
   CALL H5Lget_info_f(file_id, "/dataset2_link", &
        cset, corder, f_corder_valid, link_type, address, val_size, &
        error)
-  CALL check("test_lcpl.H5Lget_info_f", error, total_error)
-  CALL verify("test_lcpl.H5Lget_info_f",cset, H5T_CSET_ASCII_F,total_error)
+  CALL check("H5Lget_info_f", error, total_error)
+  CALL verify("H5Lget_info_f",cset, H5T_CSET_ASCII_F,total_error)
 
   ! /* Check that the first link's encoding hasn't changed */
 
   CALL H5Lget_info_f(file_id, "/dataset2", &
        cset, corder, f_corder_valid, link_type, address, val_size, &
        error)
-  CALL check("test_lcpl.H5Lget_info_f", error, total_error)
-  CALL verify("test_lcpl.H5Lget_info_f3",cset, H5T_CSET_UTF8_F,total_error)
+  CALL check("H5Lget_info_f", error, total_error)
+  CALL verify("H5Lget_info_f3",cset, H5T_CSET_UTF8_F,total_error)
 
 
   !/* Make sure that LCPLs work properly for other API calls: */
   !/* H5Lcreate_soft */
 
   CALL H5Pset_char_encoding_f(lcpl_id, H5T_CSET_UTF8_F, error)
-  CALL check("test_lcpl.H5Pset_char_encoding_f",error, total_error)
+  CALL check("H5Pset_char_encoding_f",error, total_error)
   CALL H5Lcreate_soft_f("dataset2", file_id, "slink_to_dset2",error,lcpl_id)
   CALL check("H5Lcreate_soft_f", error, total_error)
 
   CALL H5Lget_info_f(file_id, "slink_to_dset2", &
        cset, corder, f_corder_valid, link_type, address, val_size, &
        error)
-  CALL check("test_lcpl.H5Lget_info_f", error, total_error)
-  CALL verify("test_lcpl.H5Lget_info_f",cset, H5T_CSET_UTF8_F,total_error)
+  CALL check("H5Lget_info_f", error, total_error)
+  CALL verify("H5Lget_info_f",cset, H5T_CSET_UTF8_F,total_error)
 
 
   ! /* H5Lmove */
   CALL H5Pset_char_encoding_f(lcpl_id, H5T_CSET_ASCII_F, error)
-  CALL check("test_lcpl.H5Pset_char_encoding_f",error, total_error)
+  CALL check("H5Pset_char_encoding_f",error, total_error)
 
   CALL H5Lmove_f(file_id, "slink_to_dset2", file_id, "moved_slink", error, lcpl_id, H5P_DEFAULT_F)
-  CALL check("test_lcpl.H5Lmove_f",error, total_error)
+  CALL check("H5Lmove_f",error, total_error)
 
   CALL H5Lget_info_f(file_id, "moved_slink", &
        cset, corder, f_corder_valid, link_type, address, val_size, &
        error)
-  CALL check("test_lcpl.H5Lget_info_f", error, total_error)
-  CALL verify("test_lcpl.H5Lget_info_f",cset, H5T_CSET_ASCII_F,total_error)
+  CALL check("H5Lget_info_f", error, total_error)
+  CALL verify("H5Lget_info_f",cset, H5T_CSET_ASCII_F,total_error)
 
 
   ! /* H5Lcopy */
 
   CALL H5Pset_char_encoding_f(lcpl_id, H5T_CSET_UTF8_F, error)
-  CALL check("test_lcpl.H5Pset_char_encoding_f",error, total_error)
+  CALL check("H5Pset_char_encoding_f",error, total_error)
 
   CALL H5Lcopy_f(file_id, "moved_slink", file_id, "copied_slink", error, lcpl_id)
 
   CALL H5Lget_info_f(file_id, "copied_slink", &
        cset, corder, f_corder_valid, link_type, address, val_size, &
        error)
-  CALL check("test_lcpl.H5Lget_info_f", error, total_error)
-  CALL verify("test_lcpl.H5Lget_info_f",cset, H5T_CSET_UTF8_F,total_error)
+  CALL check("H5Lget_info_f", error, total_error)
+  CALL verify("H5Lget_info_f",cset, H5T_CSET_UTF8_F,total_error)
 
 
   ! /* H5Lcreate_external */
 
-  CALL H5Lcreate_external_f("test_lcpl.filename", "path", file_id, "extlink", error, lcpl_id)
-  CALL check("test_lcpl.H5Lcreate_external_f", error, total_error)
+  CALL H5Lcreate_external_f("filename", "path", file_id, "extlink", error, lcpl_id)
+  CALL check("H5Lcreate_external_f", error, total_error)
 
   CALL H5Lget_info_f(file_id, "extlink", &
        cset, corder, f_corder_valid, link_type, address, val_size, &
        error)
-  CALL check("test_lcpl.H5Lget_info_f", error, total_error)
-  CALL verify("test_lcpl.H5Lget_info_f",cset, H5T_CSET_UTF8_F,total_error)
+  CALL check("H5Lget_info_f", error, total_error)
+  CALL verify("H5Lget_info_f",cset, H5T_CSET_UTF8_F,total_error)
 
 
   ! /* Close open IDs */
 
   CALL H5Pclose_f(lcpl_id, error)
-  CALL check("test_lcpl.H5Pclose_f", error, total_error)
+  CALL check("H5Pclose_f", error, total_error)
   CALL H5Sclose_f(space_id, error)
-  CALL check("test_lcpl.h5Sclose_f",error,total_error)
+  CALL check("h5Sclose_f",error,total_error)
   CALL H5Fclose_f(file_id, error)
-  CALL check("test_lcpl.H5Fclose_f", error, total_error)
+  CALL check("H5Fclose_f", error, total_error)
 
   IF(cleanup) CALL h5_cleanup_f("tempfile", H5P_DEFAULT_F, error)
   CALL check("h5_cleanup_f", error, total_error)
diff --git a/fortran/test/tH5I.f90 b/fortran/test/tH5I.f90
index 0d1a8c5..184edaf 100644
--- a/fortran/test/tH5I.f90
+++ b/fortran/test/tH5I.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/tH5I.f90
+!
+! NAME
+!  tH5I.f90
+!
+! FUNCTION
+!  Basic testing of Fortran H5I APIs.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,6 +22,11 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! CONTAINS SUBROUTINES
+!  identifier_test
+!
+!*****
+
     SUBROUTINE identifier_test(cleanup, total_error)
 
 !   This subroutine tests following functionalities: h5iget_type_f
@@ -69,21 +83,21 @@
      ! check that the ID is not valid
      dtype = -1
      CALL H5Iis_valid_f(dtype, tri_ret, error)
-     CALL check("H5Iis_valid_f", error, total_error)
+     CALL check("H5Iis_valid_f", error, total_error) 
      CALL VerifyLogical("H5Iis_valid_f", tri_ret, .FALSE., total_error)
-
+     
      ! Create a datatype id
      CALL H5Tcopy_f(H5T_NATIVE_INTEGER,dtype,error)
-     CALL check("H5Tcopy_f", error, total_error)
-
+     CALL check("H5Tcopy_f", error, total_error) 
+     
      ! Check that the ID is valid
      CALL H5Iis_valid_f(dtype, tri_ret, error)
-     CALL check("H5Iis_valid_f", error, total_error)
+     CALL check("H5Iis_valid_f", error, total_error) 
      CALL VerifyLogical("H5Tequal_f", tri_ret, .TRUE., total_error)
-
+     
      CALL H5Tclose_f(dtype, error)
-     CALL check("H5Tclose_f", error, total_error)
-
+     CALL check("H5Tclose_f", error, total_error) 
+  
      !
      ! Create a new file using default properties.
      !
diff --git a/fortran/test/tH5L_F03.f90 b/fortran/test/tH5L_F03.f90
new file mode 100644
index 0000000..f71f450
--- /dev/null
+++ b/fortran/test/tH5L_F03.f90
@@ -0,0 +1,321 @@
+!****h* root/fortran/test/tH5L_F03.f90
+!
+! NAME
+!  tH5L_F03.f90
+!
+! FUNCTION
+!  Test FORTRAN HDF5 H5L APIs which are dependent on FORTRAN 2003
+!  features. 
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! USES
+!  liter_cb_mod
+!
+! CONTAINS SUBROUTINES
+!  test_iter_group
+!
+!*****
+
+MODULE liter_cb_mod
+
+  USE HDF5
+  USE ISO_C_BINDING
+  IMPLICIT NONE
+    
+  TYPE iter_enum 
+     INTEGER RET_ZERO
+     INTEGER RET_TWO
+     INTEGER RET_CHANGE
+     INTEGER RET_CHANGE2
+  END TYPE iter_enum
+
+  ! Custom group iteration callback data 
+  TYPE, bind(c) ::  iter_info
+     CHARACTER(LEN=1), DIMENSION(1:10) :: name !  The name of the object 
+     INTEGER(c_int) :: TYPE    !  The TYPE of the object 
+     INTEGER(c_int) :: command ! The TYPE of RETURN value 
+  END TYPE iter_info
+
+CONTAINS
+
+!***************************************************************
+!**
+!**  liter_cb(): Custom link iteration callback routine.
+!**
+!***************************************************************
+
+  INTEGER FUNCTION liter_cb(group, name, link_info, op_data) bind(C)
+
+    USE HDF5
+    USE ISO_C_BINDING
+    IMPLICIT NONE
+
+    INTEGER(HID_T), VALUE :: group
+    CHARACTER(LEN=1), DIMENSION(1:10) :: name
+
+
+    TYPE (H5L_info_t) :: link_info
+
+    TYPE(iter_info) :: op_data
+
+    INTEGER, SAVE :: count
+    INTEGER, SAVE :: count2 
+
+!!$    
+!!$    iter_info *info = (iter_info *)op_data;
+!!$    static int count = 0;
+!!$    static int count2 = 0;
+
+    op_data%name(1:10) = name(1:10)
+
+    SELECT CASE (op_data%command)
+
+    CASE(0)
+       liter_cb = 0
+    CASE(2)
+       liter_cb = 2
+    CASE(3)
+       count = count + 1
+       IF(count.GT.10) THEN
+          liter_cb = 1
+       ELSE
+          liter_cb = 0
+       ENDIF
+    CASE(4)
+       count2 = count2 + 1
+       IF(count2.GT.10) THEN
+          liter_cb = 1
+       ELSE
+          liter_cb = 0
+       ENDIF
+    END SELECT
+
+  END FUNCTION liter_cb
+END MODULE liter_cb_mod
+
+! *****************************************
+! ***        H 5 L   T E S T S
+! *****************************************
+
+
+!***************************************************************
+!**
+!**  test_iter_group(): Test group iteration functionality
+!**
+!***************************************************************
+SUBROUTINE test_iter_group(total_error)
+
+  USE HDF5 
+  USE ISO_C_BINDING
+  USE liter_cb_mod
+  IMPLICIT NONE
+
+  INTEGER, INTENT(INOUT) :: total_error
+  INTEGER(HID_T) :: fapl
+  INTEGER(HID_T) :: file !  File ID 
+  INTEGER(hid_t) :: dataset          ! Dataset ID 
+  INTEGER(hid_t) :: datatype         ! Common datatype ID 
+  INTEGER(hid_t) :: filespace        ! Common dataspace ID 
+  INTEGER(hid_t) :: root_group,grp   ! Root group ID 
+  INTEGER i,j                  ! counting variable 
+  INTEGER(hsize_t) idx            ! Index in the group 
+  CHARACTER(LEN=11) :: DATAFILE = "titerate.h5"
+  INTEGER, PARAMETER :: ndatasets = 50
+  CHARACTER(LEN=10) :: name !  temporary name buffer 
+  CHARACTER(LEN=10), DIMENSION(1:ndatasets+2) :: lnames !  Names of the links created 
+!!$    char dataset_name[NAMELEN];   dataset name 
+
+  TYPE(iter_info), TARGET :: info
+
+!!$    iter_info info;          Custom iteration information 
+!!$    H5G_info_t ginfo;        Buffer for querying object's info 
+!!$    herr_t ret;		     Generic return value 
+
+  INTEGER :: error
+  INTEGER :: ret_value
+  TYPE(C_PTR) :: f_ptr
+  TYPE(C_FUNPTR) :: f1
+  TYPE(C_PTR) :: f2
+  CHARACTER(LEN=2) :: ichr2
+  CHARACTER(LEN=10) :: ichr10
+
+  ! Get the default FAPL 
+  CALL H5Pcreate_f(H5P_FILE_ACCESS_F, fapl, error)
+  CALL check("h5pcreate_f", error, total_error)
+
+  ! Set the "use the latest version of the format" bounds for creating objects in the file 
+  CALL H5Pset_libver_bounds_f(fapl, H5F_LIBVER_LATEST_F, H5F_LIBVER_LATEST_F, error)
+  CALL check("H5Pset_libver_bounds_f",error, total_error)
+
+  ! Create the test file with the datasets 
+  CALL h5fcreate_f(DATAFILE, H5F_ACC_TRUNC_F, file, error, H5P_DEFAULT_F, fapl)
+  CALL check("h5fcreate_f", error, total_error)
+
+  ! Test iterating over empty group
+  idx = 0
+  info%command = 0
+  f1 = C_FUNLOC(liter_cb)
+  f2 = C_LOC(info)
+
+
+  CALL H5Literate_f(file, H5_INDEX_NAME_F, H5_ITER_INC_F, idx, f1, f2, ret_value, error)
+  CALL check("H5Literate_f", error, total_error)
+
+  CALL H5Tcopy_f(H5T_NATIVE_INTEGER, datatype, error)
+  CALL check("H5Tcopy_f", error, total_error)
+
+  CALL H5Screate_f(H5S_SCALAR_F, filespace, error)
+  CALL check("H5Screate_f", error, total_error)
+
+  DO i = 1, ndatasets
+     WRITE(ichr2, '(I2.2)') i
+
+     name = 'Dataset '//ichr2
+
+     CALL h5dcreate_f(file, name, datatype, filespace, dataset, error)
+     CALL check("H5dcreate_f", error, total_error)
+
+     lnames(i) = name
+
+     CALL h5dclose_f(dataset,error)
+     CALL check("H5dclose_f", error, total_error)
+
+  ENDDO
+
+  !  Create a group and named datatype under root group for testing 
+
+  CALL H5Gcreate_f(file, "grp0000000", grp, error)
+  CALL check("H5Gcreate_f", error, total_error)
+
+  lnames(ndatasets+2) = "grp0000000" 
+
+!!$
+!!$    lnames[NDATASETS] = HDstrdup("grp");
+!!$    CHECK(lnames[NDATASETS], NULL, "strdup");
+!!$
+
+  CALL H5Tcommit_f(file, "dtype00000", datatype, error)
+  CALL check("H5Tcommit_f", error, total_error)
+
+  lnames(ndatasets+1) = "dtype00000" 
+
+  !  Close everything up 
+
+  CALL H5Tclose_f(datatype, error)
+  CALL check("H5Tclose_f", error, total_error)
+
+  CALL H5Gclose_f(grp, error)
+  CALL check("H5Gclose_f", error, total_error)
+
+  CALL H5Sclose_f(filespace, error)
+  CALL check("H5Sclose_f", error, total_error)
+
+  CALL H5Fclose_f(file, error)
+  CALL check("H5Fclose_f", error, total_error)
+
+  !  Iterate through the datasets in the root group in various ways 
+  CALL H5Fopen_f(DATAFILE, H5F_ACC_RDONLY_F, file, error, access_prp=fapl)
+  CALL check("h5fopen_f", error, total_error)
+
+  ! Test all objects in group, when callback always returns 0 
+  info%command = 0
+  idx = 0
+  CALL H5Literate_f(file, H5_INDEX_NAME_F, H5_ITER_INC_F, idx, f1, f2, ret_value, error)
+  IF(ret_value.GT.0)THEN
+     PRINT*,"ERROR: Group iteration function didn't return zero correctly!"
+     CALL verify("H5Literate_f", error, -1, total_error)
+  ENDIF
+
+  !   Test all objects in group, when callback always returns 1 
+  !   This also tests the "restarting" ability, because the index changes 
+
+  info%command = 2
+  idx = 0
+  i = 0
+  f1 = C_FUNLOC(liter_cb)
+  f2 = C_LOC(info)
+  DO 
+     CALL H5Literate_f(file, H5_INDEX_NAME_F, H5_ITER_INC_F, idx, f1, f2, ret_value, error)
+     IF(error.LT.0) EXIT
+     !  Verify return value from iterator gets propagated correctly 
+     CALL VERIFY("H5Literate", ret_value, 2, total_error)
+     !  Increment the number of times "2" is returned 
+     i = i + 1
+     ! Verify that the index is the correct value 
+     CALL VERIFY("H5Literate", INT(idx), INT(i), total_error)
+     IF(idx .GT.ndatasets+2)THEN
+        PRINT*,"ERROR: Group iteration function walked too far!"
+     ENDIF
+
+     ! Verify the correct name is retrieved 
+     DO j = 1, 10
+        ichr10(j:j) = info%name(j)(1:1)
+     ENDDO
+     CALL verifystring("H5Literate_f", ichr10, lnames(INT(idx)), total_error)
+     IF(i.EQ.52)EXIT ! prints out error message otherwise (for gcc/gfortran/g95) not intel (why) -FIXME- scot
+  END DO
+
+  ! put check if did not walk far enough -scot FIXME
+
+  IF(i .NE. (NDATASETS + 2)) THEN
+     CALL VERIFY("H5Literate_f", i, INT(NDATASETS + 2), total_error)
+     PRINT*,"ERROR: Group iteration function didn't perform multiple iterations correctly"
+  ENDIF
+
+  ! Test all objects in group, when callback changes return value 
+  ! This also tests the "restarting" ability, because the index changes 
+
+  info%command = 3
+  idx = 0
+  i = 0
+
+  f1 = C_FUNLOC(liter_cb)
+  f2 = C_LOC(info)
+  DO
+
+     CALL H5Literate_f(file, H5_INDEX_NAME_F, H5_ITER_INC_F, idx, f1, f2, ret_value, error)
+     IF(error.LT.0) EXIT
+     CALL VERIFY("H5Literate_f", ret_value, 1, total_error)
+
+     ! Increment the number of times "1" is returned 
+     i = i + 1
+
+     ! Verify that the index is the correct value 
+     CALL VERIFY("H5Literate_f", INT(idx), INT(i+10), total_error)
+
+     IF(idx .GT.ndatasets+2)THEN
+        PRINT*,"Group iteration function walked too far!"
+     ENDIF
+
+     DO j = 1, 10
+        ichr10(j:j) = info%name(j)(1:1)
+     ENDDO
+     ! Verify that the correct name is retrieved 
+     CALL verifystring("H5Literate_f", ichr10, lnames(INT(idx)), total_error)
+     IF(i.EQ.42)EXIT ! prints out error message otherwise (for gcc/gfortran/g95) not intel (why) -FIX- scot
+  ENDDO
+
+  IF(i .NE. 42 .OR. idx .NE. 52)THEN
+     PRINT*,"ERROR: Group iteration function didn't perform multiple iterations correctly!"
+     CALL check("H5Literate_f",-1,total_error)
+  ENDIF
+
+  CALL H5Fclose_f(file, error)
+  CALL check("H5Fclose_f", error, total_error)
+
+END SUBROUTINE test_iter_group
diff --git a/fortran/test/tH5O.f90 b/fortran/test/tH5O.f90
index 253a42a..d871e59 100644
--- a/fortran/test/tH5O.f90
+++ b/fortran/test/tH5O.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/tH5O.f90
+!
+! NAME
+!  tH5O.f90
+!
+! FUNCTION
+!  Basic testing of Fortran H5O APIs.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,6 +22,11 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! CONTAINS SUBROUTINES
+!  test_h5o, test_h5o_link, test_h5o_plist
+!
+!*****
+
 SUBROUTINE test_h5o(cleanup, total_error)
   USE HDF5 ! This module contains all necessary modules
 
diff --git a/fortran/test/tH5P.f90 b/fortran/test/tH5P.f90
index 6a49f72..3faaac2 100644
--- a/fortran/test/tH5P.f90
+++ b/fortran/test/tH5P.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/tH5P.f90
+!
+! NAME
+!  tH5P.f90
+!
+! FUNCTION
+!  Basic testing of Fortran H5P APIs.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,6 +22,11 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! CONTAINS SUBROUTINES
+!  external_test, multi_file_test
+!
+!*****
+
     SUBROUTINE external_test(cleanup, total_error)
 
 !   This subroutine tests following functionalities:
@@ -231,7 +245,8 @@
           !
           CALL h5pget_cache_f(fapl, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, &
                               rdcc_w0, error)
-               CALL check("h5pget_cache_f", error, total_error)
+               CALL check("h5pget_cache_f", error, total_error)  
+
 
           ! Set cache to some number
           !
@@ -239,7 +254,6 @@
           CALL h5pset_cache_f(fapl, mdc_nelmts, rdcc_nelmts, rdcc_nbytes, &
                               rdcc_w0, error)
                CALL check("h5pset_cache_f", error, total_error)
-
           CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, file_id, error, access_prp = fapl)
               CALL check("h5fcreate_f", error, total_error)
           if(error .ne. 0) then
@@ -249,7 +263,6 @@
              return
           endif
 
-
           !
           ! Create the dataspace.
           !
@@ -377,7 +390,7 @@
           CALL check("h5pclose_f", error, total_error)
           IF(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
           CALL check("h5_cleanup_f", error, total_error)
-
+          
           IF(cleanup) CALL h5_cleanup_f(filename//'.h5-b', H5P_DEFAULT_F, error)
           CALL check("h5_cleanup_f", error, total_error)
           IF(cleanup) CALL h5_cleanup_f(filename//'.h5-g', H5P_DEFAULT_F, error)
@@ -390,7 +403,7 @@
           CALL check("h5_cleanup_f", error, total_error)
           IF(cleanup) CALL h5_cleanup_f(filename//'.h5-s', H5P_DEFAULT_F, error)
           CALL check("h5_cleanup_f", error, total_error)
-
+     
           RETURN
         END SUBROUTINE multi_file_test
 
@@ -412,14 +425,14 @@
 !                     April 16, 2009
 !-------------------------------------------------------------------------
 !
-SUBROUTINE test_chunk_cache(cleanup, total_error)
-
-  USE HDF5 ! This module contains all necessary modules
+SUBROUTINE test_chunk_cache(cleanup, total_error) 
 
+  USE HDF5 ! This module contains all necessary modules 
+  
   IMPLICIT NONE
   LOGICAL, INTENT(IN)  :: cleanup
   INTEGER, INTENT(OUT) :: total_error
-
+   
   CHARACTER(LEN=14), PARAMETER :: filename="chunk_cache"
   CHARACTER(LEN=80) :: fix_filename
   INTEGER(hid_t) :: fid = -1        ! /* File ID */
@@ -457,7 +470,7 @@ SUBROUTINE test_chunk_cache(cleanup, total_error)
 
   !  Verify that H5Pget_chunk_cache(dapl) returns the same values as are in
   !  the default fapl.
-  !
+  ! 
   CALL H5Pget_cache_f(fapl_def, mdc_nelmts, nslots_1, nbytes_1, w0_1, error)
   CALL check("H5Pget_cache_f", error, total_error)
   CALL H5Pget_chunk_cache_f(dapl1, nslots_4, nbytes_4, w0_4, error)
@@ -514,7 +527,7 @@ SUBROUTINE test_chunk_cache(cleanup, total_error)
   ! /* Create dataset with default dapl */
   CALL H5Dcreate_f(fid, "dset", H5T_NATIVE_INTEGER, sid, dsid, error,  dcpl, H5P_DEFAULT_F,  dapl1)
   CALL check("H5Pcreate_f", error, total_error)
-
+ 
   ! /* Retrieve dapl from dataset, verify cache values are the same as on fapl_local */
   CALL H5Dget_access_plist_f(dsid, dapl2, error)
   CALL check("H5Dget_access_plist_f", error, total_error)
@@ -526,7 +539,7 @@ SUBROUTINE test_chunk_cache(cleanup, total_error)
      CALL VERIFYlogical("H5Pget_chunk_cache_f", .TRUE., .FALSE., total_error)
   ENDIF
   CALL H5Pclose_f(dapl2,error); CALL check("H5Pclose_f", error, total_error)
-
+  
   ! Set new values on dapl1.  nbytes will be set to default, so the file
   ! property will override this setting
 
@@ -601,7 +614,7 @@ SUBROUTINE test_chunk_cache(cleanup, total_error)
   CALL check("H5Pset_cache_f", error, total_error)
 
   !  Close and reopen file with new fapl_local
-
+  
   CALL H5Dclose_f(dsid, error); CALL check("H5Dclose_f", error, total_error)
   CALL H5Fclose_f(fid,error); CALL check("h5fclose_f", error, total_error)
 
@@ -611,12 +624,12 @@ SUBROUTINE test_chunk_cache(cleanup, total_error)
   ! Verify that dapl2 retrieved earlier (using values from the old fapl)
   ! sets its values in the new file (test use of H5Dopen2 with a dapl)
   !
-
+  
   CALL h5dopen_f (fid, "dset", dsid, error, dapl2)
   CALL check("h5dopen_f", error, total_error)
-
+  
   CALL H5Pclose_f(dapl2,error); CALL check("H5Pclose_f", error, total_error) ! Close dapl2, to avoid id leak
-
+  
   CALL H5Dget_access_plist_f(dsid, dapl2, error)
   CALL check("H5Dget_access_plist_f", error, total_error)
   CALL H5Pget_chunk_cache_f(dapl2, nslots_4, nbytes_4, w0_4, error)
@@ -654,11 +667,11 @@ SUBROUTINE test_chunk_cache(cleanup, total_error)
 
   CALL H5Dclose_f(dsid, error); CALL check("H5Dclose_f", error, total_error)
   CALL H5Sclose_f(sid,error); CALL check("H5Sclose_f", error, total_error)
-  CALL H5Pclose_f(fapl_local,error); CALL check("H5Pclose_f", error, total_error)
-  CALL H5Pclose_f(fapl_def,error); CALL check("H5Pclose_f", error, total_error)
-  CALL H5Pclose_f(dapl1,error); CALL check("H5Pclose_f", error, total_error)
-  CALL H5Pclose_f(dapl2,error); CALL check("H5Pclose_f", error, total_error)
-  CALL H5Pclose_f(dcpl,error); CALL check("H5Pclose_f", error, total_error)
+  CALL H5Pclose_f(fapl_local,error); CALL check("H5Pclose_f", error, total_error) 
+  CALL H5Pclose_f(fapl_def,error); CALL check("H5Pclose_f", error, total_error) 
+  CALL H5Pclose_f(dapl1,error); CALL check("H5Pclose_f", error, total_error) 
+  CALL H5Pclose_f(dapl2,error); CALL check("H5Pclose_f", error, total_error) 
+  CALL H5Pclose_f(dcpl,error); CALL check("H5Pclose_f", error, total_error) 
   CALL H5Fclose_f(fid,error); CALL check("H5Fclose_f", error, total_error)
 
   IF(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
diff --git a/fortran/test/tH5P_F03.f90 b/fortran/test/tH5P_F03.f90
new file mode 100644
index 0000000..aec8a26
--- /dev/null
+++ b/fortran/test/tH5P_F03.f90
@@ -0,0 +1,364 @@
+!****h* root/fortran/test/tH5P_F03.f90
+!
+! NAME
+!  tH5P_F03.f90
+!
+! FUNCTION
+!  Test FORTRAN HDF5 H5P APIs which are dependent on FORTRAN 2003
+!  features. 
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! USES
+!  test_genprop_cls_cb1_mod
+!
+! CONTAINS SUBROUTINES
+!  test_create, test_genprop_class_callback
+!
+!*****
+
+! *****************************************
+! ***        H 5 P   T E S T S
+! *****************************************
+
+MODULE test_genprop_cls_cb1_mod
+
+  ! Callback subroutine for test_genprop_class_callback
+  ! and the function H5Pcreate_class_f.
+
+  USE HDF5
+  USE ISO_C_BINDING
+  IMPLICIT NONE
+  
+  TYPE, bind(C) :: cop_cb_struct_ ! /* Struct for iterations */
+    INTEGER :: count
+    INTEGER(HID_T) :: id
+  END TYPE cop_cb_struct_
+
+CONTAINS
+  
+  INTEGER FUNCTION test_genprop_cls_cb1_f(list_id, create_data ) bind(C)
+    
+    USE HDF5
+    USE ISO_C_BINDING
+    IMPLICIT NONE
+
+    INTEGER(HID_T), INTENT(IN), VALUE :: list_id
+    
+    TYPE(cop_cb_struct_) :: create_data
+    
+    create_data%count = create_data%count + 1
+    create_data%id = list_id
+    
+    test_genprop_cls_cb1_f = 0
+    
+  END FUNCTION test_genprop_cls_cb1_f
+
+END MODULE test_genprop_cls_cb1_mod
+
+!/*-------------------------------------------------------------------------
+! * Function:	test_create
+! *
+! * Purpose:	Tests H5Pset_fill_value_f and H5Pget_fill_value_f
+! *
+! * Return:	Success:	0
+! *
+! *		Failure:	number of errors
+! *
+! * Programmer:	M. Scot Breitenfeld
+! *             June 24, 2008
+! *
+! * Modifications:
+! *
+! *-------------------------------------------------------------------------
+! */
+
+SUBROUTINE test_create(total_error)
+
+  USE HDF5 
+  USE ISO_C_BINDING
+  IMPLICIT NONE
+
+  INTEGER, INTENT(INOUT) :: total_error
+  INTEGER(HID_T) :: fapl
+
+  INTEGER(hid_t) :: file=-1, space=-1, dcpl=-1, comp_type_id=-1
+  INTEGER(hid_t) :: dset1=-1, dset2=-1, dset3=-1, dset4=-1, dset5=-1, &
+       dset6=-1, dset7=-1, dset8=-1, dset9=-1
+  INTEGER(hsize_t), DIMENSION(1:5), PARAMETER :: cur_size = (/2, 8, 8, 4, 2/)
+  INTEGER(hsize_t), DIMENSION(1:5), PARAMETER :: ch_size= (/1, 1, 1, 4, 1/)
+  CHARACTER(LEN=14) :: filename ='test_create.h5'
+
+  ! /* compound datatype operations */
+  TYPE, BIND(C) :: comp_datatype
+    REAL :: a
+    INTEGER :: x
+    DOUBLE PRECISION :: y
+    CHARACTER(LEN=1) :: z
+  END TYPE comp_datatype
+
+  TYPE(comp_datatype), TARGET :: rd_c, fill_ctype
+
+  INTEGER(SIZE_T) :: type_sizei  ! Size of the integer datatype 
+  INTEGER(SIZE_T) :: type_sizer  ! Size of the real datatype 
+  INTEGER(SIZE_T) :: type_sized  ! Size of the double datatype 
+  INTEGER(SIZE_T) :: type_sizec  ! Size of the double datatype
+  INTEGER(SIZE_T) :: sizeof_compound ! total size of compound
+  INTEGER :: error
+  INTEGER(SIZE_T) :: h5off
+  TYPE(C_PTR) :: f_ptr
+  
+  !/*
+  ! * Create a file.
+  ! */
+  CALL h5fcreate_f(filename,H5F_ACC_TRUNC_F,file,error)
+  CALL check("h5fcreate_f", error, total_error)   
+
+  CALL h5screate_simple_f(5, cur_size, space, error, cur_size)
+  CALL check("h5screate_simple_f", error, total_error)
+
+  CALL H5Pcreate_f(H5P_DATASET_CREATE_F, dcpl, error)
+  CALL check("H5Pcreate_f", error, total_error)
+
+  CALL h5pset_chunk_f(dcpl, 5, ch_size, error)
+  CALL check("h5pset_chunk_f",error, total_error)
+
+  ! /* Create a compound datatype */
+
+  CALL h5tcreate_f(H5T_COMPOUND_F, INT(SIZEOF(fill_ctype),size_t), comp_type_id, error)
+  CALL check("h5tcreate_f", error, total_error)
+  h5off = H5OFFSETOF(C_LOC(fill_ctype), C_LOC(fill_ctype%a))
+  CALL h5tinsert_f(comp_type_id, "a", h5off , H5T_NATIVE_REAL, error)
+  CALL check("h5tinsert_f", error, total_error)
+  CALL h5tinsert_f(comp_type_id, "x", H5OFFSETOF(C_LOC(fill_ctype), C_LOC(fill_ctype%x)), H5T_NATIVE_INTEGER, error)
+  CALL check("h5tinsert_f", error, total_error)
+  CALL h5tinsert_f(comp_type_id, "y", H5OFFSETOF(C_LOC(fill_ctype), C_LOC(fill_ctype%y)), H5T_NATIVE_DOUBLE, error)
+  CALL check("h5tinsert_f", error, total_error)
+  CALL h5tinsert_f(comp_type_id, "z", &
+       H5OFFSETOF(C_LOC(fill_ctype), C_LOC(fill_ctype%z)), H5T_NATIVE_CHARACTER, error)
+  CALL check("h5tinsert_f", error, total_error)
+
+
+  CALL H5Pset_alloc_time_f(dcpl, H5D_ALLOC_TIME_LATE_F,error)
+  CALL check("H5Pset_alloc_time_f",error, total_error)
+
+  CALL H5Pset_fill_time_f(dcpl, H5D_FILL_TIME_ALLOC_F, error)
+  CALL check("H5Pset_fill_time_f",error, total_error)
+
+  ! /* Compound datatype test */
+
+  f_ptr = C_LOC(fill_ctype)
+
+  CALL H5Pget_fill_value_f(dcpl, comp_type_id, f_ptr, error)
+  CALL check("H5Pget_fill_value_f",error, total_error)
+
+  fill_ctype%y = 4444.
+  fill_ctype%z = 'S'
+  fill_ctype%a = 5555.
+  fill_ctype%x = 55
+
+  f_ptr = C_LOC(fill_ctype)
+
+  CALL H5Pset_fill_value_f(dcpl, comp_type_id, f_ptr, error)
+  CALL check("H5Pget_fill_value_f",error, total_error)
+
+  CALL h5dcreate_f(file,"dset9", comp_type_id, space, dset9, error, dcpl_id=dcpl)
+  CALL check("h5dcreate_f", error, total_error)
+
+  CALL h5dclose_f(dset9, error)
+  CALL check("h5dclose_f", error, total_error)
+
+  CALL h5fclose_f(file,error)
+  CALL check("h5fclose_f", error, total_error)
+
+  ! /* Open the file and get the dataset fill value from each dataset */
+  CALL H5Pcreate_f(H5P_FILE_ACCESS_F, fapl, error)
+  CALL check("H5Pcreate_f",error, total_error)
+
+  CALL H5Pset_libver_bounds_f(fapl, H5F_LIBVER_LATEST_F, H5F_LIBVER_LATEST_F, error)
+  CALL check("H5Pset_libver_bounds_f",error, total_error)
+
+  CALL h5fopen_f (FILENAME, H5F_ACC_RDONLY_F, file, error, fapl)
+  CALL check("h5fopen_f", error, total_error)
+
+  !/* Compound datatype test */
+  CALL h5dopen_f(file, "dset9", dset9, error)
+  CALL check("h5dopen_f", error, total_error)
+
+  CALL H5Dget_create_plist_f(dset9, dcpl, error)
+  CALL check("H5Dget_create_plist_f", error, total_error)
+
+  f_ptr = C_LOC(rd_c)
+
+  CALL H5Pget_fill_value_f(dcpl, comp_type_id, f_ptr, error)
+  CALL check("H5Pget_fill_value_f", error, total_error)
+
+  IF( rd_c%a .NE. fill_ctype%a .OR. &
+       rd_c%y .NE. fill_ctype%y .OR. &
+       rd_c%x .NE. fill_ctype%x .OR. &
+       rd_c%z .NE. fill_ctype%z )THEN
+
+     PRINT*,"***ERROR: Returned wrong fill value"
+     total_error = total_error + 1
+
+  ENDIF
+
+  CALL h5dclose_f(dset9, error)
+  CALL check("h5dclose_f", error, total_error)
+
+  CALL H5Pclose_f(dcpl, error)
+  CALL check("H5Pclose_f", error, total_error)
+
+  CALL h5fclose_f(file,error)
+  CALL check("h5fclose_f", error, total_error)
+
+END SUBROUTINE test_create
+
+
+SUBROUTINE test_genprop_class_callback(total_error)
+
+  !/****************************************************************
+  !**
+  !**  test_genprop_class_callback(): Test basic generic property list code.
+  !**      Tests callbacks for property lists in a generic class.
+  !**
+  !**  FORTRAN TESTS:
+  !**      Tests function H5Pcreate_class_f with callback.
+  !**
+  !****************************************************************/
+
+  USE HDF5
+  USE ISO_C_BINDING
+  USE test_genprop_cls_cb1_mod
+  IMPLICIT NONE
+
+  INTEGER, INTENT(INOUT) :: total_error
+
+  INTEGER(hid_t) :: cid1 !/* Generic Property class ID */
+  INTEGER(hid_t) :: lid1 !/* Generic Property list ID */
+  INTEGER(hid_t) :: lid2 !/* 2nd Generic Property list ID */
+  INTEGER(size_t) :: nprops !/* Number of properties in class */
+
+  TYPE cb_struct
+     INTEGER :: count
+     INTEGER(hid_t) :: id
+  END TYPE cb_struct
+
+  TYPE(cb_struct), TARGET :: crt_cb_struct, cls_cb_struct
+
+  CHARACTER(LEN=7) :: CLASS1_NAME = "Class 1"
+  TYPE(C_FUNPTR) :: f1, f3, f5
+  TYPE(C_PTR) :: f2, f4, f6
+
+  CHARACTER(LEN=10) :: PROP1_NAME = "Property 1"
+  INTEGER(SIZE_T) :: PROP1_SIZE = 10
+  CHARACTER(LEN=10) :: PROP2_NAME = "Property 2"
+  INTEGER(SIZE_T) :: PROP2_SIZE = 10
+  CHARACTER(LEN=10) :: PROP3_NAME = "Property 3"
+  INTEGER(SIZE_T) :: PROP3_SIZE = 10
+  CHARACTER(LEN=10) :: PROP4_NAME = "Property 4"
+  INTEGER(SIZE_T) :: PROP4_SIZE = 10
+  INTEGER :: PROP1_DEF_VALUE = 10
+  INTEGER :: PROP2_DEF_VALUE = 10
+  INTEGER :: PROP3_DEF_VALUE = 10
+  INTEGER :: PROP4_DEF_VALUE = 10
+
+  INTEGER :: error ! /* Generic RETURN value	*/
+
+  f1 = C_FUNLOC(test_genprop_cls_cb1_f)
+  f5 = C_FUNLOC(test_genprop_cls_cb1_f)
+
+  f2 = C_LOC(crt_cb_struct)
+  f6 = C_LOC(cls_cb_struct)
+
+  !/* Create a new generic class, derived from the root of the class hierarchy */
+  CALL h5pcreate_class_f(h5p_ROOT_F,CLASS1_NAME, cid1, error, f1, f2, c_null_funptr, c_null_ptr, f5, f6)
+  CALL check("h5pcreate_class_f", error, total_error)
+
+  !/* Insert first property into class (with no callbacks) */
+  CALL h5pregister_f(cid1, PROP1_NAME, PROP1_SIZE, PROP1_DEF_VALUE, error)
+  CALL check("h5pregister_f", error, total_error)
+  !/* Insert second property into class (with no callbacks) */
+  CALL h5pregister_f(cid1, PROP2_NAME, PROP2_SIZE, PROP2_DEF_VALUE, error)
+  CALL check("h5pregister_f", error, total_error)
+  !/* Insert third property into class (with no callbacks) */
+  CALL h5pregister_f(cid1, PROP3_NAME, PROP3_SIZE, PROP3_DEF_VALUE, error)
+  CALL check("h5pregister_f", error, total_error)
+
+  !/* Insert fourth property into class (with no callbacks) */
+  CALL h5pregister_f(cid1, PROP4_NAME, PROP4_SIZE, PROP4_DEF_VALUE, error)
+  CALL check("h5pregister_f", error, total_error)
+
+  ! /* Check the number of properties in class */
+  CALL h5pget_nprops_f(cid1, nprops, error)
+  CALL check("h5pget_nprops_f", error, total_error)
+  CALL VERIFY("h5pget_nprops_f", INT(nprops), 4, total_error)
+
+  ! /* Initialize class callback structs */
+
+  crt_cb_struct%count = 0
+  crt_cb_struct%id    = -1
+  cls_cb_struct%count = 0
+  cls_cb_struct%id    = -1
+
+  !/* Create a property list from the class */
+  CALL h5pcreate_f(cid1, lid1, error)
+  CALL check("h5pcreate_f", error, total_error)
+
+  !/* Verify that the creation callback occurred */
+  CALL VERIFY("h5pcreate_f", crt_cb_struct%count, 1, total_error)
+  CALL VERIFY("h5pcreate_f", INT(crt_cb_struct%id), INT(lid1), total_error)
+
+  ! /* Check the number of properties in list */
+  CALL h5pget_nprops_f(lid1,nprops, error)
+  CALL check("h5pget_nprops_f", error, total_error)
+  CALL VERIFY("h5pget_nprops_f", INT(nprops), 4, total_error)
+
+  ! /* Create another property list from the class */
+  CALL h5pcreate_f(cid1, lid2, error)
+  CALL check("h5pcreate_f", error, total_error)
+
+  ! /* Verify that the creation callback occurred */
+  CALL VERIFY("h5pcreate_f", crt_cb_struct%count, 2, total_error)
+  CALL VERIFY("h5pcreate_f", INT(crt_cb_struct%id), INT(lid2), total_error)
+
+  ! /* Check the number of properties in list */
+  CALL h5pget_nprops_f(lid2,nprops, error)
+  CALL check("h5pget_nprops_f", error, total_error)
+  CALL VERIFY("h5pget_nprops_f", INT(nprops), 4, total_error)
+
+  ! /* Close first list */
+  CALL h5pclose_f(lid1, error);
+  CALL check("h5pclose_f", error, total_error)
+
+  !/* Verify that the close callback occurred */
+  CALL VERIFY("h5pcreate_f", cls_cb_struct%count, 1, total_error)
+  CALL VERIFY("h5pcreate_f", INT(cls_cb_struct%id), INT(lid1), total_error)
+
+  !/* Close second list */
+  CALL h5pclose_f(lid2, error);
+  CALL check("h5pclose_f", error, total_error)
+
+  !/* Verify that the close callback occurred */
+  CALL VERIFY("h5pcreate_f", cls_cb_struct%count, 2, total_error)
+  CALL VERIFY("h5pcreate_f", INT(cls_cb_struct%id), INT(lid2), total_error)
+
+  !/* Close class */
+  CALL h5pclose_class_f(cid1, error)
+  CALL check("h5pclose_class_f", error, total_error)
+
+END SUBROUTINE test_genprop_class_callback
diff --git a/fortran/test/tH5R.f90 b/fortran/test/tH5R.f90
index 0289465..ac105fc 100644
--- a/fortran/test/tH5R.f90
+++ b/fortran/test/tH5R.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/tH5R.f90
+!
+! NAME
+!  tH5R.f90
+!
+! FUNCTION
+!  Basic testing of Fortran H5R, Reference Interface, APIs.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,12 +22,14 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! NOTES
+!  Tests h5rcreate_f, h5rdereference_f, h5rget_name_f 
+!  and H5Rget_object_type functions
 !
+! CONTAINS SUBROUTINES
+!  refobjtest, refregtest
 !
-!    Testing Reference Interface functionality.
-!
-!    The following subroutine tests h5rcreate_f, h5rdereference_f, h5rget_name_f
-!    and H5Rget_object_type functions
+!*****
 !
 SUBROUTINE refobjtest(cleanup, total_error)
   USE HDF5 ! This module contains all necessary modules
@@ -230,6 +241,8 @@ END SUBROUTINE refobjtest
 !
 SUBROUTINE refregtest(cleanup, total_error)
   USE HDF5 ! This module contains all necessary modules
+!  use iso_c_binding  ! NOTE: if this is uncommented, then need to move subroutine into another file.
+
   IMPLICIT NONE
   LOGICAL, INTENT(IN)  :: cleanup
   INTEGER, INTENT(OUT) :: total_error
@@ -249,23 +262,30 @@ SUBROUTINE refregtest(cleanup, total_error)
   INTEGER(HID_T) :: dsetv_id      ! Dataset identifier
   INTEGER(HID_T) :: dsetr_id      ! Dataset identifier
   INTEGER     ::   error
-  TYPE(hdset_reg_ref_t_f) , DIMENSION(2) :: ref     ! Buffers to store references
-  TYPE(hdset_reg_ref_t_f) , DIMENSION(2) :: ref_out !
-  INTEGER(HSIZE_T), DIMENSION(2) :: ref_dim
-  INTEGER(HSIZE_T), DIMENSION(2) :: data_dims
-  INTEGER(HSIZE_T), DIMENSION(2) :: dims = (/2,9/)  ! Datasets dimensions
-  INTEGER(HSIZE_T), DIMENSION(1) :: dimsr = (/2/)   !
-  INTEGER(HSIZE_T), DIMENSION(2) :: start
-  INTEGER(HSIZE_T), DIMENSION(2) :: count
+!  TYPE(hdset_reg_ref_t_f) , DIMENSION(1:2), TARGET :: ref 
+  TYPE(hdset_reg_ref_t_f) , DIMENSION(1:2) :: ref 
+  TYPE(hdset_reg_ref_t_f) , DIMENSION(1:2) :: ref_out
+  INTEGER(HSIZE_T), DIMENSION(2) :: ref_dim   = (/0,0/)
+  INTEGER(HSIZE_T), DIMENSION(2) :: data_dims ! = (/0,0/)
+  INTEGER(HSIZE_T), DIMENSION(2) :: dims      = (/2,9/)  ! Datasets dimensions
+  INTEGER(HSIZE_T), DIMENSION(1) :: dimsr     = (/2/)    ! 
+  INTEGER(HSIZE_T), DIMENSION(2) :: start     ! = (/0,0/)
+  INTEGER(HSIZE_T), DIMENSION(2) :: count     ! = (/0,0/)
+
   INTEGER :: rankr = 1
   INTEGER :: rank = 2
-  INTEGER , DIMENSION(2,9) ::  DATA
+!  INTEGER , DIMENSION(2,9), TARGET ::  DATA 
+  INTEGER , DIMENSION(2,9) ::  DATA 
   INTEGER , DIMENSION(2,9) ::  data_out = 0
   INTEGER(HSIZE_T) , DIMENSION(2,3) :: coord
   INTEGER(SIZE_T) ::num_points = 3  ! Number of selected points
+!  type(c_ptr) :: f_ptr
   coord = RESHAPE((/1,1,2,7,1,9/), (/2,3/))   ! Coordinates of selected points
   DATA = RESHAPE ((/1,1,1,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6/), (/2,9/))
 
+  ref_out(1)%ref = 0
+  ref_out(2)%ref = 0
+
   !
   !  Initialize FORTRAN predefined datatypes.
   !
@@ -305,11 +325,16 @@ SUBROUTINE refregtest(cleanup, total_error)
   CALL check("h5dcreate_f", error, total_error)
   data_dims(1) = 2
   data_dims(2) = 9
+
+!  f_ptr = c_loc(data)
+!  CALL h5dwrite_f(dsetv_id, H5T_NATIVE_INTEGER, f_ptr, error)
+
   CALL h5dwrite_f(dsetv_id, H5T_NATIVE_INTEGER, DATA, data_dims, error)
   CALL check("h5dwrite_f", error, total_error)
 
   CALL h5dclose_f(dsetv_id, error)
   CALL check("h5dclose_f", error, total_error)
+
   !
   ! Dataset with references
   !
@@ -326,8 +351,12 @@ SUBROUTINE refregtest(cleanup, total_error)
   CALL h5sselect_hyperslab_f(space_id, H5S_SELECT_SET_F, &
        start, count, error)
   CALL check("h5sselect_hyperslab_f", error, total_error)
+  ref(1)%ref(:) = 0
+!  f_ptr = C_LOC(ref(1))
+!  CALL h5rcreate_f(file_id, dsetnamev, 1, space_id, f_ptr, error) 
   CALL h5rcreate_f(file_id, dsetnamev, space_id, ref(1), error)
   CALL check("h5rcreate_f", error, total_error)
+
   !
   ! Create a reference to elements selection.
   !
@@ -336,6 +365,7 @@ SUBROUTINE refregtest(cleanup, total_error)
   CALL h5sselect_elements_f(space_id, H5S_SELECT_SET_F, rank, num_points,&
        coord, error)
   CALL check("h5sselect_elements_f", error, total_error)
+  ref(2)%ref(:) = 0
   CALL h5rcreate_f(file_id, dsetnamev, space_id, ref(2), error)
   CALL check("h5rcreate_f", error, total_error)
   !
@@ -355,6 +385,7 @@ SUBROUTINE refregtest(cleanup, total_error)
   CALL check("h5dclose_f", error, total_error)
   CALL h5fclose_f(file_id, error)
   CALL check("h5fclose_f", error, total_error)
+
   !
   ! Reopen the file to test selections.
   !
@@ -369,7 +400,6 @@ SUBROUTINE refregtest(cleanup, total_error)
   CALL h5dread_f(dsetr_id, H5T_STD_REF_DSETREG, ref_out, ref_dim, error)
   CALL check("h5dread_f", error, total_error)
 
-
   ! Get name of the dataset the first region reference points to using H5Rget_name_f
   CALL H5Rget_name_f(dsetr_id, ref_out(1), buf, error, buf_size )
   CALL check("H5Rget_name_f", error, total_error)
@@ -390,7 +420,6 @@ SUBROUTINE refregtest(cleanup, total_error)
   CALL check("H5Rget_name_f", error, total_error)
   CALL VERIFY("H5Rget_name_f", INT(buf_size),7,total_error)
   CALL VerifyString("H5Rget_name_f", TRIM(buf_small), "/MAT", total_error)
-
   !
   ! Dereference the first reference.
   !
@@ -402,9 +431,7 @@ SUBROUTINE refregtest(cleanup, total_error)
   ! Get name of the dataset the second region reference points to using H5Rget_name_f
   CALL H5Rget_name_f(dsetr_id, ref_out(2), buf, error) ! no optional size
   CALL check("H5Rget_name_f", error, total_error)
-  CALL VerifyString("H5Rget_name_f", buf, "/MATRIX", total_error)
-
-
+  CALL VerifyString("H5Rget_name_f", TRIM(buf), "/MATRIX", total_error)
   !
   ! Read selected data from the dataset.
   !
diff --git a/fortran/test/tH5S.f90 b/fortran/test/tH5S.f90
index b56d3a7..e3a44ad 100644
--- a/fortran/test/tH5S.f90
+++ b/fortran/test/tH5S.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/tH5S.f90
+!
+! NAME
+!  tH5S.f90
+!
+! FUNCTION
+!  Basic testing of Fortran H5S, Dataspace Interface, APIs.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,17 +22,18 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
-!
-!
-!    Testing Dataspace Interface functionality.
-!
-!
-!   The following subroutine tests the following functionalities:
+! NOTES
+!  Tests the following functionalities:
 !   h5screate_f, h5scopy_f, h5screate_simple_f, h5sis_simple_f,
 !   h5sget_simple_extent_dims_f,h5sget_simple_extent_ndims_f
 !   h5sget_simple_extent_npoints_f, h5sget_simple_extent_type_f,
 !   h5sextent_copy_f, h5sset_extent_simple_f, h5sset_extent_none_f
 !
+! CONTAINS SUBROUTINES
+!  dataspace_basic_test
+!
+!*****
+
         SUBROUTINE dataspace_basic_test(cleanup, total_error)
 
         USE HDF5 ! This module contains all necessary modules
@@ -162,7 +172,7 @@
               CALL check("h5sget_simple_extent_type_f", error, total_error)
           IF (classtype .NE. 1) write(*,*)"class type not H5S_SIMPLE_f"
 
-          !
+          ! 
           !set the copied space to none before extend the dimensions.
           !
           CALL h5sset_extent_none_f(space2_id, error)
diff --git a/fortran/test/tH5Sselect.f90 b/fortran/test/tH5Sselect.f90
index f7fd8af..1cbabe8 100644
--- a/fortran/test/tH5Sselect.f90
+++ b/fortran/test/tH5Sselect.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/tH5Sselect.f90
+!
+! NAME
+!  tH5Sselect.f90
+!
+! FUNCTION
+!  Basic testing of Fortran H5S, Selection-related Dataspace Interface, APIs.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,18 +22,20 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
-!
-!    Testing Selection-related Dataspace Interface functionality.
-!
-
-!
-!    The following subroutines tests the following functionalities:
+! NOTES
+!  Tests the following functionalities:
 !    h5sget_select_npoints_f, h5sselect_elements_f, h5sselect_all_f,
 !    h5sselect_none_f, h5sselect_valid_f, h5sselect_hyperslab_f,
 !    h5sget_select_bounds_f, h5sget_select_elem_pointlist_f,
 !    h5sget_select_elem_npoints_f, h5sget_select_hyper_blocklist_f,
-!    h5sget_select_hyper_nblocks_f, h5sget_select_npoints_f
+!    h5sget_select_hyper_nblocks_f, h5sget_select_npoints_f   
+!
+! CONTAINS SUBROUTINES
+!  test_select_hyperslab, test_select_element, test_basic_select,
+!  test_select_point, test_select_combine, test_select_bounds
+!  
 !
+!*****
 
   SUBROUTINE test_select_hyperslab(cleanup, total_error)
 
@@ -1021,13 +1032,13 @@
 !****************************************************************/
 
 SUBROUTINE test_select_point(cleanup, total_error)
-  USE HDF5 ! This module contains all necessary modules
-
+  USE HDF5 ! This module contains all necessary modules 
+  
   IMPLICIT NONE
   LOGICAL, INTENT(IN)  :: cleanup
   INTEGER, INTENT(OUT) :: total_error
   INTEGER(HID_T) :: xfer_plist
-
+  
   INTEGER, PARAMETER :: SPACE1_DIM1=3
   INTEGER, PARAMETER :: SPACE1_DIM2=15
   INTEGER, PARAMETER :: SPACE1_DIM3=13
@@ -1035,11 +1046,11 @@ SUBROUTINE test_select_point(cleanup, total_error)
   INTEGER, PARAMETER :: SPACE2_DIM2=26
   INTEGER, PARAMETER :: SPACE3_DIM1=15
   INTEGER, PARAMETER :: SPACE3_DIM2=26
-
+  
   INTEGER, PARAMETER :: SPACE1_RANK=3
   INTEGER, PARAMETER :: SPACE2_RANK=2
   INTEGER, PARAMETER :: SPACE3_RANK=2
-
+  
   ! /* Element selection information */
   INTEGER, PARAMETER :: POINT1_NPOINTS=10
   INTEGER(hid_t) ::fid1 ! /* HDF5 File IDs */
@@ -1048,7 +1059,7 @@ SUBROUTINE test_select_point(cleanup, total_error)
   INTEGER(hsize_t), DIMENSION(1:3) :: dims1 = (/SPACE1_DIM1, SPACE1_DIM2, SPACE1_DIM3/)
   INTEGER(hsize_t), DIMENSION(1:2) :: dims2 = (/SPACE2_DIM1, SPACE2_DIM2/)
   INTEGER(hsize_t), DIMENSION(1:2) :: dims3 = (/SPACE3_DIM1, SPACE3_DIM2/)
-
+  
   INTEGER(hsize_t), DIMENSION(1:SPACE1_RANK,1:POINT1_NPOINTS) :: coord1 !/* Coordinates for point selection */
   INTEGER(hsize_t), DIMENSION(1:SPACE1_RANK,1:POINT1_NPOINTS) :: temp_coord1 !/* Coordinates for point selection */
   INTEGER(hsize_t), DIMENSION(1:SPACE2_RANK,1:POINT1_NPOINTS) :: coord2 !/* Coordinates for point selection */
@@ -1064,7 +1075,7 @@ SUBROUTINE test_select_point(cleanup, total_error)
 !    struct pnt_iter pi;     /* Custom Pointer iterator struct */
   INTEGER :: error		!/* Generic return value		*/
   CHARACTER(LEN=9) :: filename = 'h5s_hyper'
-  CHARACTER(LEN=80) :: fix_filename
+  CHARACTER(LEN=80) :: fix_filename 
   CHARACTER(LEN=1), DIMENSION(1:SPACE2_DIM1,1:SPACE2_DIM2) :: wbuf, rbuf
 
   CALL h5_fixname_f(filename, fix_filename, H5P_DEFAULT_F, error)
@@ -1090,11 +1101,11 @@ SUBROUTINE test_select_point(cleanup, total_error)
 !!$  for(i=0, tbuf=wbuf; i<SPACE2_DIM1; i++)
 !!$  for(j=0; j<SPACE2_DIM2; j++)
 !!$  *tbuf++=(uint8_t)((i*SPACE2_DIM2)+j);
-
+  
   !/* Create file */
   CALL h5fcreate_f(fix_filename, H5F_ACC_TRUNC_F, fid1, error)
   CALL check("h5fcreate_f", error, total_error)
-
+  
   !/* Create dataspace for dataset */
   CALL h5screate_simple_f(SPACE1_RANK, dims1, sid1, error)
   CALL check("h5screate_simple_f", error, total_error)
@@ -1115,7 +1126,6 @@ SUBROUTINE test_select_point(cleanup, total_error)
   coord1(1,9)=3; coord1(2,9)= 2; coord1(3,9)= 7;
   coord1(1,10)=1; coord1(2,10)= 4; coord1(3,10)= 9
 
-
   CALL h5sselect_elements_f(sid1, H5S_SELECT_SET_F, SPACE1_RANK, INT(POINT1_NPOINTS,size_t), coord1, error)
   CALL check("h5sselect_elements_f", error, total_error)
 
@@ -1151,7 +1161,7 @@ SUBROUTINE test_select_point(cleanup, total_error)
   CALL h5sselect_elements_f(sid1, H5S_SELECT_APPEND_F, SPACE1_RANK, INT(POINT1_NPOINTS,size_t), coord1, error)
   CALL check("h5sselect_elements_f", error, total_error)
   ! /* Verify correct elements selected */
-
+  
   CALL h5sget_select_elem_pointlist_f(sid1, INT(POINT1_NPOINTS,hsize_t), INT(POINT1_NPOINTS,hsize_t),temp_coord1,error)
   CALL check("h5sget_select_elem_pointlist_f", error, total_error)
 
@@ -1182,7 +1192,7 @@ SUBROUTINE test_select_point(cleanup, total_error)
 
 
   !/* Verify correct elements selected */
-
+  
   CALL h5sget_select_elem_pointlist_f(sid2, INT(0,hsize_t), INT(POINT1_NPOINTS,hsize_t),temp_coord2,error)
   CALL check("h5sget_select_elem_pointlist_f", error, total_error)
 
@@ -1333,7 +1343,6 @@ SUBROUTINE test_select_point(cleanup, total_error)
   CALL h5fclose_f(fid1, error)
   CALL check("h5fclose_f", error, total_error)
 
-
   IF(cleanup) CALL h5_cleanup_f(filename, H5P_DEFAULT_F, error)
   CALL check("h5_cleanup_f", error, total_error)
 
@@ -1349,8 +1358,8 @@ END SUBROUTINE test_select_point
 !****************************************************************/
 
 SUBROUTINE test_select_combine(cleanup, total_error)
-  USE HDF5 ! This module contains all necessary modules
-
+  USE HDF5 ! This module contains all necessary modules 
+  
   IMPLICIT NONE
   LOGICAL, INTENT(IN)  :: cleanup
   INTEGER, INTENT(OUT) :: total_error
@@ -1358,7 +1367,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   INTEGER, PARAMETER :: SPACE7_RANK = 2
   INTEGER, PARAMETER :: SPACE7_DIM1 = 10
   INTEGER, PARAMETER :: SPACE7_DIM2 = 10
-
+  
   INTEGER(hid_t) :: base_id !      /* Base dataspace for test */
   INTEGER(hid_t) :: all_id !       /* Dataspace for "all" selection */
   INTEGER(hid_t) :: none_id !      /* Dataspace for "none" selection */
@@ -1378,7 +1387,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   CALL check("h5screate_simple_f", error, total_error)
 
   ! /* Copy base dataspace and set selection to "all" */
-  CALL h5scopy_f(base_id, all_id, error)
+  CALL h5scopy_f(base_id, all_id, error)  
   CALL check("h5scopy_f", error, total_error)
 
   CALL H5Sselect_all_f(all_id, error)
@@ -1389,7 +1398,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   CALL VERIFY("H5Sget_select_type_f", INT(sel_type), INT(H5S_SEL_ALL_F), total_error)
 
   !/* Copy base dataspace and set selection to "none" */
-  CALL h5scopy_f(base_id, none_id, error)
+  CALL h5scopy_f(base_id, none_id, error)  
   CALL check("h5scopy_f", error, total_error)
 
   CALL H5Sselect_none_f(none_id, error)
@@ -1398,9 +1407,9 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   CALL H5Sget_select_type_f(none_id, sel_type, error)
   CALL check("H5Sget_select_type_f", error, total_error)
   CALL VERIFY("H5Sget_select_type_f", INT(sel_type), INT(H5S_SEL_NONE_F), total_error)
-
+  
   !/* Copy "all" selection & space */
-  CALL H5Scopy_f(all_id, space1, error)
+  CALL H5Scopy_f(all_id, space1, error)  
   CALL check("h5scopy_f", error, total_error)
 
   !/* 'OR' "all" selection with another hyperslab */
@@ -1409,7 +1418,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   icount(1:2) = 1
   iblock(1:2) = (/5,4/)
   CALL h5sselect_hyperslab_f(space1, H5S_SELECT_OR_F, start, &
-                                icount, error, stride, iblock)
+                                icount, error, stride, iblock) 
   CALL check("h5sselect_hyperslab_f", error, total_error)
 
   !/* Verify that it's still "all" selection */
@@ -1422,7 +1431,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   CALL check("h5sclose_f", error, total_error)
 
   !/* Copy "all" selection & space */
-  CALL H5Scopy_f(all_id, space1, error)
+  CALL H5Scopy_f(all_id, space1, error)  
   CALL check("h5scopy_f", error, total_error)
 
   ! /* 'AND' "all" selection with another hyperslab */
@@ -1431,7 +1440,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   icount(1:2) = 1
   iblock(1:2) = (/5,4/)
   CALL h5sselect_hyperslab_f(space1, H5S_SELECT_AND_F, start, &
-       icount, error, stride, iblock)
+       icount, error, stride, iblock) 
   CALL check("h5sselect_hyperslab_f", error, total_error)
 
   !/* Verify that the new selection is the same at the original block */
@@ -1443,7 +1452,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   CALL h5sget_select_hyper_nblocks_f(space1, nblocks, error)
   CALL check("h5sget_select_hyper_nblocks_f", error, total_error)
   CALL VERIFY("h5sget_select_hyper_nblocks_f", INT(nblocks), 1, total_error)
-
+  
   !/* Retrieve the block defined */
   CALL h5sget_select_hyper_blocklist_f(space1, INT(0, hsize_t), INT(nblocks,hsize_t), blocks, error)
   CALL check("h5sget_select_hyper_blocklist_f", error, total_error)
@@ -1460,7 +1469,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   CALL check("h5sclose_f", error, total_error)
 
   !/* Copy "all" selection & space */
-  CALL H5Scopy_f(all_id, space1, error)
+  CALL H5Scopy_f(all_id, space1, error)  
   CALL check("h5scopy_f", error, total_error)
 
   ! /* 'XOR' "all" selection with another hyperslab */
@@ -1470,7 +1479,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   iblock(1:2) = (/5,4/)
 
   CALL h5sselect_hyperslab_f(space1, H5S_SELECT_XOR_F, start, &
-       icount, error, stride, iblock)
+       icount, error, stride, iblock) 
   CALL check("h5sselect_hyperslab_f", error, total_error)
 
   ! /* Verify that the new selection is an inversion of the original block */
@@ -1491,7 +1500,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
 
   ! /* Verify that the correct block is defined */
 
-  ! No guarantee is implied as the order in which blocks are listed.
+  ! No guarantee is implied as the order in which blocks are listed. 
   ! So this will ONLY work for square domains iblock(1:2) = (/5,5/)
 !!$  CALL VERIFY("h5sget_select_hyper_blocklist_f", INT(blocks(1,1,1)), 1, total_error)
 !!$  CALL VERIFY("h5sget_select_hyper_blocklist_f", INT(blocks(2,1,1)), 5, total_error)
@@ -1512,7 +1521,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   CALL check("h5sclose_f", error, total_error)
 
   ! /* Copy "all" selection & space */
-  CALL H5Scopy_f(all_id, space1, error)
+  CALL H5Scopy_f(all_id, space1, error)  
   CALL check("h5scopy_f", error, total_error)
 
   ! /* 'NOTB' "all" selection with another hyperslab */
@@ -1522,7 +1531,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   iblock(1:2) = (/5,4/) !5
 
   CALL h5sselect_hyperslab_f(space1, H5S_SELECT_NOTB_F, start, &
-       icount, error, stride, iblock)
+       icount, error, stride, iblock) 
   CALL check("h5sselect_hyperslab_f", error, total_error)
 
   ! /* Verify that the new selection is an inversion of the original block */
@@ -1540,9 +1549,9 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   CALL h5sget_select_hyper_blocklist_f(space1, INT(0, hsize_t), INT(nblocks,hsize_t), blocks, error)
   CALL check("h5sget_select_hyper_blocklist_f", error, total_error)
 
-  ! /* Verify that the correct block is defined */
+  ! /* Verify that the correct block is defined */ 
 
-  ! No guarantee is implied as the order in which blocks are listed.
+  ! No guarantee is implied as the order in which blocks are listed. 
   ! So this will ONLY work for square domains iblock(1:2) = (/5,5/)
 
 !!$  CALL VERIFY("h5sget_select_hyper_blocklist_f", INT(blocks(1,1,1)), 1, total_error)
@@ -1564,7 +1573,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   CALL h5sclose_f(space1, error)
   CALL check("h5sclose_f", error, total_error)
   ! /* Copy "all" selection & space */
-  CALL H5Scopy_f(all_id, space1, error)
+  CALL H5Scopy_f(all_id, space1, error)  
   CALL check("h5scopy_f", error, total_error)
 
   ! /* 'NOTA' "all" selection with another hyperslab */
@@ -1574,7 +1583,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   iblock(1:2) = (/5,4/) !5
 
   CALL h5sselect_hyperslab_f(space1, H5S_SELECT_NOTA_F, start, &
-       icount, error, stride, iblock)
+       icount, error, stride, iblock) 
   CALL check("h5sselect_hyperslab_f", error, total_error)
 
   !/* Verify that the new selection is the "none" selection */
@@ -1587,7 +1596,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   CALL check("h5sclose_f", error, total_error)
 
   ! /* Copy "none" selection & space */
-  CALL H5Scopy_f(none_id, space1, error)
+  CALL H5Scopy_f(none_id, space1, error)  
   CALL check("h5scopy_f", error, total_error)
 
   ! /* 'OR' "none" selection with another hyperslab */
@@ -1597,14 +1606,14 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   iblock(1:2) = (/5,4/) !5
 
   CALL h5sselect_hyperslab_f(space1, H5S_SELECT_OR_F, start, &
-       icount, error, stride, iblock)
+       icount, error, stride, iblock) 
   CALL check("h5sselect_hyperslab_f", error, total_error)
 
   ! /* Verify that the new selection is the same as the original hyperslab */
   CALL H5Sget_select_type_f(space1, sel_type, error)
   CALL check("H5Sget_select_type_f", error, total_error)
   CALL VERIFY("H5Sget_select_type_f", INT(sel_type), INT( H5S_SEL_HYPERSLABS_F), total_error)
-
+  
 
   ! /* Verify that there is only one block */
   CALL h5sget_select_hyper_nblocks_f(space1, nblocks, error)
@@ -1627,7 +1636,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   CALL check("h5sclose_f", error, total_error)
 
   ! /* Copy "none" selection & space */
-  CALL H5Scopy_f(none_id, space1, error)
+  CALL H5Scopy_f(none_id, space1, error)  
   CALL check("h5scopy_f", error, total_error)
 
   ! /* 'AND' "none" selection with another hyperslab */
@@ -1637,7 +1646,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   iblock(1:2) = (/5,4/) !5
 
   CALL h5sselect_hyperslab_f(space1, H5S_SELECT_AND_F, start, &
-       icount, error, stride, iblock)
+       icount, error, stride, iblock) 
   CALL check("h5sselect_hyperslab_f", error, total_error)
 
   ! /* Verify that the new selection is the "none" selection */
@@ -1650,7 +1659,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   CALL check("h5sclose_f", error, total_error)
 
   ! /* Copy "none" selection & space */
-  CALL H5Scopy_f(none_id, space1, error)
+  CALL H5Scopy_f(none_id, space1, error)  
   CALL check("h5scopy_f", error, total_error)
 
   ! /* 'XOR' "none" selection with another hyperslab */
@@ -1660,14 +1669,14 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   iblock(1:2) = (/5,4/) !5
 
   CALL h5sselect_hyperslab_f(space1, H5S_SELECT_XOR_F, start, &
-       icount, error, stride, iblock)
+       icount, error, stride, iblock) 
   CALL check("h5sselect_hyperslab_f", error, total_error)
 
   ! /* Verify that the new selection is the same as the original hyperslab */
   CALL H5Sget_select_type_f(space1, sel_type, error)
   CALL check("H5Sget_select_type_f", error, total_error)
   CALL VERIFY("H5Sget_select_type_f", INT(sel_type), INT( H5S_SEL_HYPERSLABS_F), total_error)
-
+  
 
   ! /* Verify that there is only one block */
   CALL h5sget_select_hyper_nblocks_f(space1, nblocks, error)
@@ -1683,13 +1692,13 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   CALL VERIFY("h5sget_select_hyper_blocklist_f", INT(blocks(2,1,1)), 1, total_error)
   CALL VERIFY("h5sget_select_hyper_blocklist_f", INT(blocks(3,1,1)), 5, total_error)
   CALL VERIFY("h5sget_select_hyper_blocklist_f", INT(blocks(4,1,1)), 4, total_error)
-
+  
   ! /* Close temporary dataspace */
   CALL h5sclose_f(space1, error)
   CALL check("h5sclose_f", error, total_error)
 
   ! /* Copy "none" selection & space */
-  CALL H5Scopy_f(none_id, space1, error)
+  CALL H5Scopy_f(none_id, space1, error)  
   CALL check("h5scopy_f", error, total_error)
 
   ! /* 'NOTB' "none" selection with another hyperslab */
@@ -1699,7 +1708,7 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   iblock(1:2) = (/5,4/) !5
 
   CALL h5sselect_hyperslab_f(space1, H5S_SELECT_NOTB_F, start, &
-       icount, error, stride, iblock)
+       icount, error, stride, iblock) 
   CALL check("h5sselect_hyperslab_f", error, total_error)
 
   ! /* Verify that the new selection is the "none" selection */
@@ -1712,23 +1721,23 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   CALL check("h5sclose_f", error, total_error)
 
   ! /* Copy "none" selection & space */
-  CALL H5Scopy_f(none_id, space1, error)
+  CALL H5Scopy_f(none_id, space1, error)  
   CALL check("h5scopy_f", error, total_error)
 
   ! /* 'NOTA' "none" selection with another hyperslab */
   start(1:2) = 0
   stride(1:2) = 1
   icount(1:2) = 1
-  iblock(1:2) = (/5,4/) !5
+  iblock(1:2) = (/5,4/) !5  
   CALL h5sselect_hyperslab_f(space1, H5S_SELECT_NOTA_F, start, &
-       icount, error, stride, iblock)
+       icount, error, stride, iblock) 
   CALL check("h5sselect_hyperslab_f", error, total_error)
 
   ! /* Verify that the new selection is the same as the original hyperslab */
   CALL H5Sget_select_type_f(space1, sel_type, error)
   CALL check("H5Sget_select_type_f", error, total_error)
   CALL VERIFY("H5Sget_select_type_f", INT(sel_type), INT( H5S_SEL_HYPERSLABS_F), total_error)
-
+    
   ! /* Verify that there is ONLY one BLOCK */
   CALL h5sget_select_hyper_nblocks_f(space1, nblocks, error)
   CALL check("h5sget_select_hyper_nblocks_f", error, total_error)
@@ -1747,13 +1756,13 @@ SUBROUTINE test_select_combine(cleanup, total_error)
   CALL VERIFY("h5sget_select_hyper_blocklist_f", INT(blocks(2,1,1)), 1, total_error)
   CALL VERIFY("h5sget_select_hyper_blocklist_f", INT(blocks(3,1,1)), 5, total_error)
   CALL VERIFY("h5sget_select_hyper_blocklist_f", INT(blocks(4,1,1)), 4, total_error)
-
+  
   ! /* Close temporary dataspace */
   CALL h5sclose_f(space1, error)
   CALL check("h5sclose_f", error, total_error)
 
   ! /* Close dataspaces */
-
+  
   CALL h5sclose_f(base_id, error)
   CALL check("h5sclose_f", error, total_error)
   CALL h5sclose_f(all_id, error)
@@ -1771,8 +1780,8 @@ END SUBROUTINE test_select_combine
 !****************************************************************/
 
 SUBROUTINE test_select_bounds(cleanup, total_error)
-  USE HDF5 ! This module contains all necessary modules
-
+  USE HDF5 ! This module contains all necessary modules 
+  
   IMPLICIT NONE
   LOGICAL, INTENT(IN)  :: cleanup
   INTEGER, INTENT(OUT) :: total_error
@@ -1781,7 +1790,7 @@ SUBROUTINE test_select_bounds(cleanup, total_error)
   INTEGER, PARAMETER :: SPACE11_DIM1=100
   INTEGER, PARAMETER :: SPACE11_DIM2=50
   INTEGER, PARAMETER :: SPACE11_NPOINTS=4
-
+  
   INTEGER(hid_t) :: sid ! /* Dataspace ID */
   INTEGER(hsize_t), DIMENSION(1:SPACE11_RANK) :: dims = (/SPACE11_DIM1, SPACE11_DIM2/) !Dataspace dimensions
   INTEGER(hsize_t), DIMENSION(SPACE11_RANK, SPACE11_NPOINTS) :: coord !/* Coordinates for point selection
@@ -1792,7 +1801,7 @@ SUBROUTINE test_select_bounds(cleanup, total_error)
   INTEGER(hssize_t), DIMENSION(SPACE11_RANK) :: offset !/* Offset amount for selection */
   INTEGER(hsize_t), DIMENSION(SPACE11_RANK) :: low_bounds !/* The low bounds for the selection */
   INTEGER(hsize_t), DIMENSION(SPACE11_RANK) :: high_bounds !/* The high bounds for the selection */
-
+    
   INTEGER :: error
 
   !/* Create dataspace */
@@ -1836,7 +1845,7 @@ SUBROUTINE test_select_bounds(cleanup, total_error)
   CALL VERIFY("h5sget_select_bounds_f", error, -1, total_error)
 
   !/* Set point selection */
-
+  
   coord(1,1)=  3; coord(2,1)=  3;
   coord(1,2)=  3; coord(2,2)= 46;
   coord(1,3)= 96; coord(2,3)=  3;
@@ -1863,7 +1872,7 @@ SUBROUTINE test_select_bounds(cleanup, total_error)
   ! /* Get bounds for hyperslab selection with negative offset */
   CALL h5sget_select_bounds_f(sid, low_bounds, high_bounds, error)
   CALL VERIFY("h5sget_select_bounds_f", error, -1, total_error)
-
+ 
   ! /* Set valid offset for selection */
   offset(1:2) = (/2,-2/)
   CALL H5Soffset_simple_f(sid, offset, error)
@@ -1888,9 +1897,9 @@ SUBROUTINE test_select_bounds(cleanup, total_error)
   stride(1:2) = 10
   count(1:2) = 4
   block(1:2) = 5
-
+  
   CALL h5sselect_hyperslab_f(sid, H5S_SELECT_SET_F, start, &
-       count, error, stride, block)
+       count, error, stride, block) 
   CALL check("h5sselect_hyperslab_f", error, total_error)
 
   !/* Get bounds for hyperslab selection */
@@ -1929,7 +1938,7 @@ SUBROUTINE test_select_bounds(cleanup, total_error)
   offset(1:2) = 0
   CALL H5Soffset_simple_f(sid, offset, error)
   CALL check("H5Soffset_simple_f", error, total_error)
-
+  
   ! /* Make "irregular" hyperslab selection */
   start(1:2) = 20
   stride(1:2) = 20
@@ -1937,7 +1946,7 @@ SUBROUTINE test_select_bounds(cleanup, total_error)
   block(1:2) = 10
 
   CALL h5sselect_hyperslab_f(sid, H5S_SELECT_OR_F, start, &
-       count, error, stride, block)
+       count, error, stride, block) 
   CALL check("h5sselect_hyperslab_f", error, total_error)
 
   !/* Get bounds for hyperslab selection */
diff --git a/fortran/test/tH5T.f90 b/fortran/test/tH5T.f90
index 15576e1..6af1ba6 100644
--- a/fortran/test/tH5T.f90
+++ b/fortran/test/tH5T.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/tH5T.f90
+!
+! NAME
+!  tH5T.f90
+!
+! FUNCTION
+!  Basic testing of Fortran H5T APIs.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,6 +22,11 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! CONTAINS SUBROUTINES
+!  compoundtest, basic_data_type_test, enumtest, test_derived_flt
+!
+!*****
+
     SUBROUTINE compoundtest(cleanup, total_error)
 !
 ! This program creates a dataset that is one dimensional array of
@@ -822,7 +836,7 @@
     INTEGER, DIMENSION(2) :: data
     INTEGER(HSIZE_T), DIMENSION(7) :: dims
     INTEGER :: order1, order2
-    INTEGER(SIZE_T) :: type_size1, type_size2
+!    INTEGER(SIZE_T) :: type_size1, type_size2
     INTEGER :: class
 
     dims(1) = 2
@@ -919,7 +933,6 @@
     RETURN
   END SUBROUTINE enumtest
 
-
 !/*-------------------------------------------------------------------------
 ! * Function:    test_derived_flt
 ! *
@@ -947,7 +960,7 @@ SUBROUTINE test_derived_flt(cleanup, total_error)
   INTEGER, INTENT(OUT) :: total_error
   INTEGER(hid_t) :: file=-1, tid1=-1, tid2=-1
   INTEGER(hid_t) :: dxpl_id=-1
-  INTEGER(size_t) :: spos, epos, esize, mpos, msize, size
+  INTEGER(size_t) :: spos, epos, esize, mpos, msize
 
   CHARACTER(LEN=15), PARAMETER :: filename="h5t_derived_flt"
   CHARACTER(LEN=80) :: fix_filename
diff --git a/fortran/test/tH5T_F03.f90 b/fortran/test/tH5T_F03.f90
new file mode 100644
index 0000000..215ac9e
--- /dev/null
+++ b/fortran/test/tH5T_F03.f90
@@ -0,0 +1,2803 @@
+!****h* root/fortran/test/tH5T_F03.f90
+!
+! NAME
+!  tH5T_F03.f90
+!
+! FUNCTION
+!  Test FORTRAN HDF5 H5T APIs which are dependent on FORTRAN 2003
+!  features. 
+!
+! COPYRIGHT
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+!
+! CONTAINS SUBROUTINES
+!  test_array_compound_atomic, test_array_compound_array,
+!  test_array_bkg, test_h5kind_to_type
+!
+!*****
+
+! *****************************************
+! ***        H 5 T   T E S T S
+! *****************************************
+
+!/****************************************************************
+!**
+!**  test_array_compound_atomic(): Test basic array datatype code.
+!**  Tests 1-D array of compound datatypes (with no array fields)
+!**
+!****************************************************************/
+!
+SUBROUTINE test_array_compound_atomic(total_error)
+
+  USE HDF5 
+  USE ISO_C_BINDING
+  IMPLICIT NONE
+
+  INTEGER, INTENT(INOUT) :: total_error
+  ! 1-D dataset WITH fixed dimensions 
+  CHARACTER(LEN=6), PARAMETER :: SPACE1_NAME = "Space1"
+  INTEGER, PARAMETER :: SPACE1_RANK = 1
+  INTEGER, PARAMETER :: SPACE1_DIM1 = 4
+  ! 1-D array datatype 
+  INTEGER, PARAMETER :: ARRAY1_RANK= 1
+  INTEGER, PARAMETER :: ARRAY1_DIM1= 4
+  CHARACTER(LEN=10), PARAMETER :: FILENAME = "tarray1.h5"
+
+  TYPE s1_t
+     INTEGER :: i
+     REAL :: f
+  END TYPE s1_t
+  TYPE(s1_t), DIMENSION(:,:), ALLOCATABLE, TARGET :: wdata !  Information to write 
+  TYPE(s1_t), DIMENSION(:,:), ALLOCATABLE, TARGET :: rdata !  Information read in 
+  INTEGER(hid_t)	:: fid1	! HDF5 File IDs		
+  INTEGER(hid_t) :: dataset	! Dataset ID			
+  INTEGER(hid_t)	:: sid1       ! Dataspace ID			
+  INTEGER(hid_t)	:: tid1       ! Array Datatype ID			
+  INTEGER(hid_t)	:: tid2       ! Compound Datatype ID			
+
+  INTEGER(HSIZE_T), DIMENSION(1) :: sdims1 = (/SPACE1_DIM1/)
+  INTEGER(HSIZE_T), DIMENSION(1) :: tdims1=(/ARRAY1_DIM1/)
+  INTEGER :: ndims !  Array rank for reading 
+  INTEGER(HSIZE_T), ALLOCATABLE, DIMENSION(:) :: rdims1 ! Array dimensions for reading 
+  INTEGER(HSIZE_T), ALLOCATABLE, DIMENSION(:) :: rdims ! Array dimensions for reading 
+  INTEGER :: nmemb ! Number of compound members 
+  CHARACTER(LEN=20) :: mname ! Name of compound field 
+  INTEGER(size_t) :: off   ! Offset of compound field 
+  INTEGER(hid_t) :: mtid   ! Datatype ID for field 
+  INTEGER :: i,j      !  counting variables  
+  INTEGER(SIZE_T) :: type_sizei  ! Size of the integer datatype 
+  INTEGER(SIZE_T) :: type_sizer  ! Size of the real datatype
+
+  INTEGER(SIZE_T) :: sizeof_compound ! total size of compound
+  INTEGER :: error    !  Generic RETURN value 
+  INTEGER(SIZE_T)     ::   offset     ! Member's offset
+  INTEGER :: namelen
+  LOGICAL :: flag
+
+  TYPE(C_PTR) :: f_ptr ! Needed to pass the pointer, for g95 compiler to work
+
+  ALLOCATE( wdata(1:SPACE1_DIM1,1:ARRAY1_DIM1) )
+  ALLOCATE( rdata(1:SPACE1_DIM1,1:ARRAY1_DIM1) )
+
+  ! Initialize array data to write 
+  DO i = 1, SPACE1_DIM1
+     DO j = 1, ARRAY1_DIM1
+        wdata(i,j)%i = i * 10 + j
+        wdata(i,j)%f = i * 2.5 + j
+     ENDDO
+  ENDDO
+
+  ! Create file 
+  CALL h5fcreate_f(FILENAME,H5F_ACC_TRUNC_F,fid1,error)
+  CALL check("h5fcreate_f", error, total_error)    
+
+  ! Create dataspace for datasets 
+  CALL h5screate_simple_f(SPACE1_RANK, sdims1, sid1, error)
+  CALL check("h5screate_simple_f", error, total_error)
+
+  CALL h5tcreate_f(H5T_COMPOUND_F, H5OFFSETOF(C_LOC(wdata(1,1)), C_LOC(wdata(2,1))), tid2, error)
+  CALL check("h5tcreate_f", error, total_error)
+
+  ! Insert integer field 
+  CALL h5tinsert_f(tid2, "i", H5OFFSETOF(C_LOC(wdata(1,1)),C_LOC(wdata(1,1)%i)), H5T_NATIVE_INTEGER, error)
+  CALL check("h5tinsert_f", error, total_error)
+
+  ! Insert float field 
+
+  CALL h5tinsert_f(tid2, "f", H5OFFSETOF(C_LOC(wdata(1,1)),C_LOC(wdata(1,1)%f)), H5T_NATIVE_REAL, error)
+  CALL check("h5tinsert_f", error, total_error)
+
+  !  Create an array datatype to refer to 
+  CALL h5tarray_create_f(tid2, ARRAY1_RANK, tdims1, tid1, error)
+  CALL check("h5tarray_create_f", error, total_error)
+
+  ! Close compound datatype 
+  CALL h5tclose_f(tid2,error)
+  CALL check("h5tclose_f", error, total_error)
+
+
+  ! Create a dataset 
+  CALL h5dcreate_f(fid1,"Dataset1",tid1, sid1, dataset,error)
+  CALL check("h5dcreate_f", error, total_error)
+
+  ! Write dataset to disk 
+
+  ALLOCATE(rdims(1:2)) ! dummy not needed
+
+  f_ptr = C_LOC(wdata(1,1))
+  CALL h5dwrite_f(dataset, tid1, f_ptr, error )
+  CALL check("h5dwrite_f", error, total_error)
+  ! Close Dataset  
+  CALL h5dclose_f(dataset, error)
+  CALL check("h5dclose_f", error, total_error)
+
+  ! Close datatype 
+  CALL h5tclose_f(tid1,error)
+  CALL check("h5tclose_f", error, total_error)
+
+  ! Close disk dataspace 
+  CALL h5sclose_f(sid1,error)
+  CALL check("h5sclose_f", error, total_error)
+
+  ! Close file 
+  CALL h5fclose_f(fid1,error)
+  CALL check("h5fclose_f", error, total_error)
+
+  ! Re-open file 
+  CALL h5fopen_f (FILENAME, H5F_ACC_RDONLY_F, fid1, error)
+  CALL check("h5fopen_f", error, total_error)
+
+  ! Open the dataset  
+  CALL h5dopen_f(fid1, "Dataset1", dataset, error)
+  CALL check("h5dopen_f", error, total_error)
+
+  ! Get the datatype     
+  CALL h5dget_type_f(dataset, tid1, error)
+  CALL check("h5dget_type_f", error, total_error)
+
+  ! Check the array rank 
+  CALL h5tget_array_ndims_f(tid1, ndims, error)
+  CALL check("h5tget_array_ndims_f", error, total_error)
+  CALL VERIFY("h5tget_array_ndims_f",ndims, ARRAY1_RANK, total_error)
+
+  ! Get the array dimensions 
+  ALLOCATE(rdims1(1:ndims))
+  CALL h5tget_array_dims_f(tid1, rdims1, error)
+  CALL check("h5tget_array_dims_f", error, total_error)
+
+
+  ! Check the array dimensions 
+  DO i = 1, ndims
+     CALL VERIFY("h5tget_array_dims_f", INT(rdims1(i)), INT(tdims1(i)), total_error)
+  ENDDO
+
+  ! Get the compound datatype 
+  CALL h5tget_super_f(tid1, tid2, error)
+  CALL check("h5tget_super_f", error, total_error)
+
+  ! Check the number of members 
+  CALL h5tget_nmembers_f(tid2, nmemb, error)
+  CALL check("h5tget_nmembers_f", error, total_error)
+  CALL VERIFY("h5tget_nmembers_f", nmemb, 2, total_error)
+
+  ! Check the 1st field's name 
+  CALL H5Tget_member_name_f(tid2, 0, mname, namelen,error)
+  CALL check("H5Tget_member_name_f", error, total_error)
+  CALL verifystring("H5Tget_member_name_f",mname(1:namelen),"i", total_error)
+
+  !  Check the 1st field's offset 
+  CALL H5Tget_member_offset_f(tid2, 0, off, error)
+  CALL check("H5Tget_member_offset_f", error, total_error)
+  CALL VERIFY("H5Tget_member_offset_f",INT(off),0, total_error) 
+
+
+  ! Check the 1st field's datatype 
+  CALL H5Tget_member_type_f(tid2, 0, mtid, error)
+  CALL check("H5Tget_member_type_f", error, total_error)
+
+  CALL H5Tequal_f(mtid, H5T_NATIVE_INTEGER, flag, error)
+  CALL check("H5Tequal_f", error, total_error) 
+  CALL VerifyLogical("H5Tequal_f", flag, .TRUE., total_error)
+
+  CALL h5tclose_f(mtid,error)
+  CALL check("h5tclose_f", error, total_error)
+
+  ! Check the 2nd field's name 
+  CALL H5Tget_member_name_f(tid2, 1, mname, namelen,error)
+  CALL check("H5Tget_member_name_f", error, total_error)
+  CALL verifystring("H5Tget_member_name_f",mname(1:namelen),"f", total_error)
+
+  !  Check the 2nd field's offset 
+  CALL H5Tget_member_offset_f(tid2, 1, off, error)
+  CALL check("H5Tget_member_offset_f", error, total_error)
+  CALL VERIFY("H5Tget_member_offset_f",INT(off),INT(H5OFFSETOF(C_LOC(wdata(1,1)),C_LOC(wdata(1,1)%f))), total_error)    
+
+  ! Check the 2nd field's datatype 
+  CALL H5Tget_member_type_f(tid2, 1, mtid, error)
+  CALL check("H5Tget_member_type_f", error, total_error)
+
+  CALL H5Tequal_f(mtid, H5T_NATIVE_REAL, flag, error)
+  CALL check("H5Tequal_f", error, total_error) 
+  CALL VerifyLogical("H5Tequal_f", flag, .TRUE., total_error)
+
+  CALL h5tclose_f(mtid,error)
+  CALL check("h5tclose_f", error, total_error)
+
+  !  Close Compound Datatype 
+  CALL h5tclose_f(tid2, error)
+  CALL check("h5tclose_f", error, total_error)
+
+  ! Read dataset from disk 
+
+  f_ptr = C_LOC(rdata(1,1))
+  CALL H5Dread_f(dataset, tid1, f_ptr, error)
+  CALL check("H5Dread_f", error, total_error)
+
+  ! Compare data read in 
+  DO i = 1, SPACE1_DIM1
+     DO j = 1, ARRAY1_DIM1
+        IF(wdata(i,j)%i.NE.rdata(i,j)%i)THEN
+           PRINT*, 'ERROR: Wrong integer data is read back by H5Dread_f '
+           total_error = total_error + 1
+        ENDIF
+        IF(wdata(i,j)%f.NE.rdata(i,j)%f)THEN
+           PRINT*, 'ERROR: Wrong real data is read back by H5Dread_f '
+           total_error = total_error + 1
+        ENDIF
+     ENDDO
+  ENDDO
+
+  ! Close Datatype 
+  CALL h5tclose_f(tid1,error)
+  CALL check("h5tclose_f", error, total_error)
+
+  ! Close Dataset 
+  CALL h5dclose_f(dataset, error)
+  CALL check("h5dclose_f", error, total_error)
+
+  ! Close file 
+  CALL h5fclose_f(fid1,error)
+  CALL check("h5fclose_f", error, total_error)
+
+END SUBROUTINE test_array_compound_atomic
+!!$
+!!$!***************************************************************
+!!$!**
+!!$!**  test_array_compound_array(): Test basic array datatype code.
+!!$!**      Tests 1-D array of compound datatypes (with array fields)
+!!$!**
+!!$!***************************************************************
+!!$
+  SUBROUTINE test_array_compound_array(total_error)
+    
+    USE HDF5 
+    USE ISO_C_BINDING
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(INOUT) :: total_error
+
+    !  1-D array datatype 
+    INTEGER, PARAMETER :: ARRAY1_RANK= 1
+    INTEGER, PARAMETER :: ARRAY1_DIM1= 3
+    INTEGER, PARAMETER :: ARRAY2_DIM1= 5
+
+    INTEGER, PARAMETER :: SPACE1_RANK = 1
+    INTEGER, PARAMETER :: SPACE1_DIM1 = 4
+    CHARACTER(LEN=10), PARAMETER :: FILENAME = "tarray2.h5"
+
+    TYPE st_t_struct !  Typedef for compound datatype 
+       INTEGER :: i
+       REAL, DIMENSION(1:ARRAY2_DIM1) :: f
+       CHARACTER(LEN=2), DIMENSION(1:ARRAY2_DIM1) :: c
+    END TYPE st_t_struct
+    !  Information to write 
+    TYPE(st_t_struct), DIMENSION(1:SPACE1_DIM1,1:ARRAY1_DIM1), TARGET :: wdata
+    !  Information read in 
+    TYPE(st_t_struct), DIMENSION(1:SPACE1_DIM1,1:ARRAY1_DIM1), TARGET :: rdata
+
+
+    INTEGER(hid_t) :: fid1		!  HDF5 File IDs		
+    INTEGER(hid_t) :: dataset	!  Dataset ID			
+    integer(hid_t) :: sid1      !  Dataspace ID			
+    integer(hid_t) :: tid1      !  Array Datatype ID	
+    integer(hid_t) :: tid2      !  Compound Datatype ID	
+    integer(hid_t) :: tid3      !  Nested Array Datatype ID	
+    integer(hid_t) :: tid4      !  Nested Array Datatype ID	
+    INTEGER(HID_T) :: dt5_id      ! Memory datatype identifier 
+
+    INTEGER(HSIZE_T), DIMENSION(1) :: sdims1 = (/SPACE1_DIM1/)
+    INTEGER(HSIZE_T), DIMENSION(1) :: tdims1=(/ARRAY1_DIM1/)
+    INTEGER(HSIZE_T), DIMENSION(1) :: tdims2=(/ARRAY2_DIM1/)
+
+    INTEGER  ndims      ! Array rank for reading 
+
+    INTEGER(HSIZE_T), ALLOCATABLE, DIMENSION(:) :: rdims1 ! Array dimensions for reading 
+    INTEGER(HSIZE_T), ALLOCATABLE, DIMENSION(:) :: rdims ! Array dimensions for reading 
+
+    INTEGER :: nmemb ! Number of compound members 
+    CHARACTER(LEN=20) :: mname ! Name of compound field 
+    INTEGER(size_t) :: off   ! Offset of compound field 
+    INTEGER(size_t) :: offset   ! Offset of compound field 
+    INTEGER(hid_t) :: mtid   ! Datatype ID for field  
+    INTEGER(hid_t) :: mtid2   ! Datatype ID for field  
+    INTEGER(SIZE_T) :: type_sizei  ! Size of the integer datatype 
+    INTEGER(SIZE_T) :: type_sizer  ! Size of the real datatype 
+    INTEGER(SIZE_T) :: type_sizec  ! Size of the character datatype
+    INTEGER(SIZE_T) :: sizeof_compound ! total size of compound
+
+    INTEGER :: mclass     !  Datatype class for field 
+    INTEGER :: i,j,k      ! counting variables 
+
+    INTEGER :: error
+    CHARACTER(LEN=2) :: ichr2
+    INTEGER(SIZE_T) :: sizechar
+    INTEGER :: namelen
+    LOGICAL :: flag 
+    INTEGER(HID_T) :: atype_id       !String Attribute Datatype identifier
+    INTEGER(SIZE_T) :: attrlen    ! Length of the attribute string 
+
+    TYPE(c_ptr) :: f_ptr
+
+    !  Initialize array data to write 
+    DO i = 1, SPACE1_DIM1
+       DO j = 1, array1_DIM1
+          wdata(i,j)%i = i*10+j
+          DO k = 1, ARRAY2_DIM1
+             wdata(i,j)%f(k) = 10*i+j+.5
+             WRITE(ichr2,'(I2.2)') k
+             wdata(i,j)%c(k) = ichr2
+          ENDDO
+       ENDDO
+    ENDDO
+
+    !  Create file 
+    CALL h5fcreate_f(FILENAME,H5F_ACC_TRUNC_F,fid1,error)
+    CALL check("h5fcreate_f", error, total_error)   
+
+
+    !  Create dataspace for datasets 
+    CALL h5screate_simple_f(SPACE1_RANK, sdims1, sid1, error)
+    CALL check("h5screate_simple_f", error, total_error)
+
+    !  Create a compound datatype to refer to 
+    !
+    CALL h5tcreate_f(H5T_COMPOUND_F,  H5OFFSETOF(C_LOC(wdata(1,1)), C_LOC(wdata(2,1))), tid2, error)
+    CALL check("h5tcreate_f", error, total_error)
+
+    ! Insert integer field 
+    CALL h5tinsert_f(tid2, "i", H5OFFSETOF(C_LOC(wdata(1,1)),C_LOC(wdata(1,1)%i)), H5T_NATIVE_INTEGER, error)
+    CALL check("h5tinsert_f", error, total_error)
+
+    ! Create an array of floats datatype 
+    CALL h5tarray_create_f(H5T_NATIVE_REAL, ARRAY1_RANK, tdims2, tid3, error)
+    CALL check("h5tarray_create_f", error, total_error)
+    ! Insert float array field 
+
+    CALL h5tinsert_f(tid2, "f", H5OFFSETOF(C_LOC(wdata(1,1)),C_LOC(wdata(1,1)%f)), tid3, error)
+    CALL check("h5tinsert_f", error, total_error)
+
+    !
+    ! Create datatype for the String attribute.
+    !
+    CALL h5tcopy_f(H5T_NATIVE_CHARACTER, atype_id, error)
+    CALL check("h5tcopy_f",error,total_error)
+ 
+    attrlen = LEN(wdata(1,1)%c(1)) 
+    CALL h5tset_size_f(atype_id, attrlen, error)
+    CALL check("h5tset_size_f",error,total_error)    
+
+    ! Create an array of character datatype 
+    CALL h5tarray_create_f(atype_id, ARRAY1_RANK, tdims2, tid4, error)
+    CALL check("h5tarray_create_f", error, total_error)
+
+    ! Insert character array field 
+    CALL h5tinsert_f(tid2, "c", H5OFFSETOF(C_LOC(wdata(1,1)),C_LOC(wdata(1,1)%c(1))), tid4, error)
+    CALL check("h5tinsert2_f", error, total_error)
+
+    !  Close array of floats field datatype 
+    CALL h5tclose_f(tid3,error)
+    CALL check("h5tclose_f", error, total_error)
+
+    CALL h5tclose_f(tid4,error)
+    CALL check("h5tclose_f", error, total_error)
+
+    ! Create an array datatype to refer to 
+    CALL h5tarray_create_f(tid2, ARRAY1_RANK, tdims1, tid1, error)
+    CALL check("h5tarray_create_f", error, total_error)
+
+    ! Close compound datatype 
+    CALL h5tclose_f(tid2,error)
+    CALL check("h5tclose_f", error, total_error)
+
+    !  Create a dataset 
+    CALL h5dcreate_f(fid1,"Dataset1",tid1, sid1, dataset,error)
+    CALL check("h5dcreate_f", error, total_error)
+
+
+    ! Write dataset to disk 
+    f_ptr = C_LOC(wdata(1,1))
+    CALL h5dwrite_f(dataset, tid1, f_ptr, error )
+    CALL check("h5dwrite_f", error, total_error)
+
+    ! Close Dataset 
+    CALL h5dclose_f(dataset, error)
+    CALL check("h5dclose_f", error, total_error)
+
+    !  Close datatype 
+    CALL h5tclose_f(tid1,error)
+    CALL check("h5tclose_f", error, total_error)
+
+    ! Close disk dataspace 
+    CALL h5sclose_f(sid1,error)
+    CALL check("h5sclose_f", error, total_error)
+
+    ! Close file 
+    CALL h5fclose_f(fid1,error)
+    CALL check("h5fclose_f", error, total_error)
+
+    !  Re-open file 
+    CALL h5fopen_f (FILENAME, H5F_ACC_RDONLY_F, fid1, error)
+    CALL check("h5fopen_f", error, total_error)
+
+    ! Open the dataset 
+
+    CALL h5dopen_f(fid1, "Dataset1", dataset, error)
+    CALL check("h5dopen_f", error, total_error)
+    
+    !  Get the datatype 
+    CALL h5dget_type_f(dataset, tid1, error)
+    CALL check("h5dget_type_f", error, total_error)
+
+    !  Check the array rank 
+    CALL h5tget_array_ndims_f(tid1, ndims, error)
+    CALL check("h5tget_array_ndims_f", error, total_error)
+    CALL VERIFY("h5tget_array_ndims_f",ndims, ARRAY1_RANK, total_error)
+
+
+    ! Get the array dimensions 
+    ALLOCATE(rdims1(1:ndims))
+    CALL h5tget_array_dims_f(tid1, rdims1, error)
+    CALL check("h5tget_array_dims_f", error, total_error)
+
+    !  Check the array dimensions 
+    DO i = 1, ndims
+       CALL VERIFY("h5tget_array_dims_f", INT(rdims1(i)), INT(tdims1(i)), total_error)
+    ENDDO
+
+    !  Get the compound datatype 
+    CALL h5tget_super_f(tid1, tid2, error)
+    CALL check("h5tget_super_f", error, total_error)
+
+    !  Check the number of members 
+    CALL h5tget_nmembers_f(tid2, nmemb, error)
+    CALL check("h5tget_nmembers_f", error, total_error)
+    CALL VERIFY("h5tget_nmembers_f", nmemb, 3, total_error)
+
+    !  Check the 1st field's name 
+    CALL H5Tget_member_name_f(tid2, 0, mname, namelen,error)
+    CALL check("H5Tget_member_name_f", error, total_error)
+    CALL verifystring("H5Tget_member_name_f",mname(1:namelen),"i", total_error)
+
+    !  Check the 1st field's offset 
+
+    CALL H5Tget_member_offset_f(tid2, 0, off, error)
+    CALL check("H5Tget_member_offset_f", error, total_error)
+    CALL VERIFY("H5Tget_member_offset_f",INT(off),0, total_error) 
+
+    !  Check the 1st field's datatype 
+    CALL H5Tget_member_type_f(tid2, 0, mtid, error)
+    CALL check("H5Tget_member_type_f", error, total_error)
+
+    CALL H5Tequal_f(mtid, H5T_NATIVE_INTEGER, flag, error)
+    CALL check("H5Tequal_f", error, total_error) 
+    CALL VerifyLogical("H5Tequal_f", flag, .TRUE., total_error)
+
+    CALL h5tclose_f(mtid,error)
+    CALL check("h5tclose_f", error, total_error)
+
+    !  Check the 2nd field's name 
+    CALL H5Tget_member_name_f(tid2, 1, mname, namelen,error)
+    CALL check("H5Tget_member_name_f", error, total_error)
+    CALL verifystring("H5Tget_member_name_f",mname(1:namelen),"f", total_error)
+
+    !  Check the 2nd field's offset 
+    CALL H5Tget_member_offset_f(tid2, 1, off, error)
+    CALL check("H5Tget_member_offset_f", error, total_error)
+    CALL VERIFY("H5Tget_member_offset_f",INT(off),INT(H5OFFSETOF(C_LOC(wdata(1,1)),C_LOC(wdata(1,1)%f))), total_error) 
+
+    !  Check the 2nd field's datatype 
+    CALL H5Tget_member_type_f(tid2, 1, mtid, error)
+    CALL check("H5Tget_member_type_f", error, total_error)
+
+    !  Get the 2nd field's class 
+    CALL H5Tget_class_f(mtid, mclass, error)
+    CALL check("H5Tget_class_f", error, total_error)
+    CALL VERIFY("H5Tget_class_f",mclass, H5T_ARRAY_F, total_error)
+
+    !  Check the array rank 
+    CALL h5tget_array_ndims_f(mtid, ndims, error)
+    CALL check("h5tget_array_ndims_f", error, total_error)
+    CALL VERIFY("h5tget_array_ndims_f",ndims, ARRAY1_RANK, total_error)
+
+    !  Get the array dimensions 
+    CALL h5tget_array_dims_f(mtid, rdims1, error)
+    CALL check("h5tget_array_dims_f", error, total_error)
+
+    !  Check the array dimensions 
+    DO i = 1, ndims
+       CALL VERIFY("h5tget_array_dims_f", INT(rdims1(i)), INT(tdims2(i)), total_error)
+    ENDDO
+
+    !  Check the 3rd field's name 
+    CALL H5Tget_member_name_f(tid2, 2, mname, namelen,error)
+    CALL check("H5Tget_member_name_f", error, total_error)
+    CALL verifystring("H5Tget_member_name_f",mname(1:namelen),"c", total_error)
+
+    !  Check the 3rd field's offset 
+    CALL H5Tget_member_offset_f(tid2, 2, off, error)
+    CALL check("H5Tget_member_offset_f", error, total_error)
+    CALL VERIFY("H5Tget_member_offset_f",INT(off),&
+         INT(H5OFFSETOF(C_LOC(wdata(1,1)),C_LOC(wdata(1,1)%c(1)))), total_error) 
+
+    !  Check the 3rd field's datatype 
+    CALL H5Tget_member_type_f(tid2, 2, mtid2, error)
+    CALL check("H5Tget_member_type_f", error, total_error)
+
+    !  Get the 3rd field's class 
+    CALL H5Tget_class_f(mtid2, mclass, error)
+    CALL check("H5Tget_class_f", error, total_error)
+    CALL VERIFY("H5Tget_class_f",mclass, H5T_ARRAY_F, total_error)
+
+    !  Check the array rank 
+    CALL h5tget_array_ndims_f(mtid2, ndims, error)
+    CALL check("h5tget_array_ndims_f", error, total_error)
+    CALL VERIFY("h5tget_array_ndims_f",ndims, ARRAY1_RANK, total_error)
+
+    !  Get the array dimensions 
+    CALL h5tget_array_dims_f(mtid2, rdims1, error)
+    CALL check("h5tget_array_dims_f", error, total_error)
+
+    !  Check the array dimensions 
+    DO i = 1, ndims
+       CALL VERIFY("h5tget_array_dims_f", INT(rdims1(i)), INT(tdims2(i)), total_error)
+    ENDDO
+
+    !  Check the nested array's datatype 
+    CALL H5Tget_super_f(mtid, tid3, error)
+    CALL check("H5Tget_super_f", error, total_error)
+
+    CALL H5Tequal_f(tid3, H5T_NATIVE_REAL, flag, error)
+    CALL check("H5Tequal_f", error, total_error) 
+    CALL VerifyLogical("H5Tequal_f", flag, .TRUE., total_error)
+
+    !  Check the nested array's datatype 
+    CALL H5Tget_super_f(mtid2, tid3, error)
+    CALL check("H5Tget_super_f", error, total_error)
+
+    CALL H5Tequal_f(tid3, atype_id, flag, error)
+    CALL check("H5Tequal_f", error, total_error) 
+    CALL VerifyLogical("H5Tequal_f", flag, .TRUE., total_error)
+
+    !  Close the array's base type datatype 
+    CALL h5tclose_f(tid3, error)
+    CALL check("h5tclose_f", error, total_error)
+
+    !  Close the member datatype 
+    CALL h5tclose_f(mtid,error)
+    CALL check("h5tclose_f", error, total_error)
+
+    !  Close the member datatype 
+    CALL h5tclose_f(mtid2,error)
+    CALL check("h5tclose_f", error, total_error)
+
+    !  Close Compound Datatype 
+    CALL h5tclose_f(tid2,error)
+    CALL check("h5tclose_f", error, total_error)
+
+    !  READ dataset from disk 
+    
+    f_ptr = c_null_ptr
+    f_ptr = C_LOC(rdata(1,1))
+    CALL H5Dread_f(dataset, tid1, f_ptr, error)
+    CALL check("H5Dread_f", error, total_error)
+
+    !  Compare data read in 
+    DO i = 1, SPACE1_DIM1
+       DO j = 1, ARRAY1_DIM1
+          IF(wdata(i,j)%i.NE.rdata(i,j)%i)THEN
+             PRINT*, 'ERROR: Wrong integer data is read back by H5Dread_f '
+             total_error = total_error + 1
+          ENDIF
+          DO k = 1, ARRAY2_DIM1
+             IF(wdata(i,j)%f(k).NE.rdata(i,j)%f(k))THEN
+                PRINT*, 'ERROR: Wrong real array data is read back by H5Dread_f '
+                total_error = total_error + 1
+             ENDIF
+             IF(wdata(i,j)%c(k).NE.rdata(i,j)%c(k))THEN
+                PRINT*, 'ERROR: Wrong character array data is read back by H5Dread_f '
+                total_error = total_error + 1
+             ENDIF
+          ENDDO
+       ENDDO
+    ENDDO
+
+    !  Close Datatype 
+    CALL h5tclose_f(tid1,error)
+    CALL check("h5tclose_f", error, total_error)
+
+    !  Close Dataset 
+    CALL h5dclose_f(dataset, error)
+    CALL check("h5dclose_f", error, total_error)
+
+    !  Close file 
+    CALL h5fclose_f(fid1,error)
+    CALL check("h5fclose_f", error, total_error)
+  END SUBROUTINE test_array_compound_array
+!!$
+!!$!***************************************************************
+!!$!**
+!!$!**  test_array_bkg(): Test basic array datatype code.
+!!$!**      Tests reading compound datatype with array fields and
+!!$!**          writing partial fields.
+!!$!**
+!!$!***************************************************************
+!!$
+  SUBROUTINE test_array_bkg(total_error)
+    
+    USE HDF5 
+    USE ISO_C_BINDING
+    IMPLICIT NONE
+
+    INTEGER, PARAMETER :: r_k4 = SELECTED_REAL_KIND(5)
+    INTEGER, PARAMETER :: r_k8 = SELECTED_REAL_KIND(10)
+
+    INTEGER, INTENT(INOUT) :: total_error
+
+    INTEGER, PARAMETER :: LENGTH = 5
+    INTEGER, PARAMETER :: ALEN = 10
+    INTEGER, PARAMETER :: RANK = 1
+    INTEGER, PARAMETER :: NMAX = 100
+    CHARACTER(LEN=17), PARAMETER :: FIELDNAME = "ArrayofStructures"
+
+    INTEGER(hid_t) :: fid, array_dt
+    INTEGER(hid_t) :: space
+    INTEGER(hid_t) :: type
+    INTEGER(hid_t) :: dataset
+
+    INTEGER(hsize_t), DIMENSION(1:1) :: dim =(/LENGTH/)
+    INTEGER(hsize_t), DIMENSION(1:1) :: dima =(/ALEN/)
+
+    INTEGER :: i, j
+    INTEGER, DIMENSION(1:3) :: ndims = (/1,1,1/)
+
+    TYPE CmpField_struct
+       INTEGER, DIMENSION(1:ALEN) :: a
+       REAL(KIND=r_k4), DIMENSION(1:ALEN) :: b
+       REAL(KIND=r_k8), DIMENSION(1:ALEN) :: c
+    ENDTYPE CmpField_struct
+
+    TYPE(CmpField_struct), DIMENSION(1:LENGTH), TARGET :: cf
+    TYPE(CmpField_struct), DIMENSION(1:LENGTH), TARGET :: cfr
+    
+    TYPE CmpDTSinfo_struct
+       INTEGER :: nsubfields
+       CHARACTER(LEN=5), DIMENSION(1:nmax) :: name
+       INTEGER(size_t), DIMENSION(1:nmax) :: offset
+       INTEGER(hid_t), DIMENSION(1:nmax) :: datatype
+    END TYPE CmpDTSinfo_struct
+
+    TYPE(CmpDTSinfo_struct) :: dtsinfo
+
+    TYPE fld_t_struct
+       REAL(KIND=r_k4), DIMENSION(1:ALEN) :: b
+    END TYPE fld_t_struct
+ 
+    INTEGER(SIZE_T) :: type_sizei  ! Size of the integer datatype 
+    INTEGER(SIZE_T) :: type_sizer  ! Size of the real datatype 
+    INTEGER(SIZE_T) :: type_sized  ! Size of the double datatype
+    INTEGER(SIZE_T) :: sizeof_compound ! total size of compound
+
+    TYPE(fld_t_struct), DIMENSION(1:LENGTH), TARGET :: fld
+    TYPE(fld_t_struct), DIMENSION(1:LENGTH), TARGET :: fldr
+
+    CHARACTER(LEN=10), PARAMETER :: FILENAME = "tarray3.h5"
+
+    INTEGER(HSIZE_T), ALLOCATABLE, DIMENSION(:) :: rdims1 ! Array dimensions for reading 
+    INTEGER(HSIZE_T), ALLOCATABLE, DIMENSION(:) :: rdims ! Array dimensions for reading 
+
+    INTEGER :: error
+    TYPE(c_ptr) :: f_ptr
+    
+    TYPE(c_funptr) :: func
+
+!     Initialize the data 
+!     ------------------- 
+
+    DO i = 1, LENGTH
+       DO j = 1, ALEN
+          cf(i)%a(j) = 100*(i+1) + j
+          cf(i)%b(j) = (100.*(i+1) + 0.01*j)
+          cf(i)%c(j) = 100.*(i+1) + 0.02*j
+       ENDDO
+    ENDDO
+
+    ! Set the number of data members 
+    ! ------------------------------ 
+
+    dtsinfo%nsubfields = 3
+
+    ! Initialize the offsets  
+    ! ----------------------- 
+    CALL h5tget_size_f(H5T_NATIVE_INTEGER, type_sizei, error)
+    CALL check("h5tget_size_f", error, total_error)
+    IF(sizeof(cf(1)%b(1)).EQ.4)THEN
+       CALL h5tget_size_f(H5T_NATIVE_REAL_4, type_sizer, error)
+       CALL check("h5tget_size_f", error, total_error)
+    ELSE IF(sizeof(cf(1)%b(1)).EQ.8)THEN
+       CALL h5tget_size_f(H5T_NATIVE_REAL_8, type_sizer, error)
+       CALL check("h5tget_size_f", error, total_error)
+    ENDIF
+
+    CALL h5tget_size_f(H5T_NATIVE_DOUBLE, type_sized, error)
+    CALL check("h5tget_size_f", error, total_error)
+
+    dtsinfo%offset(1)   = H5OFFSETOF(C_LOC(cf(1)),C_LOC(cf(1)%a(1)))
+    dtsinfo%offset(2)   = H5OFFSETOF(C_LOC(cf(1)),C_LOC(cf(1)%b(1))) 
+    dtsinfo%offset(3)   = H5OFFSETOF(C_LOC(cf(1)),C_LOC(cf(1)%c(1)))
+
+
+    ! Initialize the data type IDs 
+    ! ---------------------------- 
+    dtsinfo%datatype(1) = H5T_NATIVE_INTEGER;
+    dtsinfo%datatype(2) = H5T_NATIVE_REAL_4;
+    dtsinfo%datatype(3) = H5T_NATIVE_REAL_8;
+
+
+    ! Initialize the names of data members 
+    ! ------------------------------------ 
+     
+    dtsinfo%name(1) = "One  "
+    dtsinfo%name(2) = "Two  "
+    dtsinfo%name(3) = "Three"
+       
+    ! Create file 
+    ! ----------- 
+    CALL h5fcreate_f(FILENAME,H5F_ACC_TRUNC_F,fid,error)
+    CALL check("h5fcreate_f", error, total_error)   
+
+
+    ! Create data space 
+    ! ----------------- 
+    CALL h5screate_simple_f(RANK, dim, space, error)
+    CALL check("h5screate_simple_f", error, total_error)
+
+
+    ! Create the memory data type 
+    ! --------------------------- 
+
+    CALL h5tcreate_f(H5T_COMPOUND_F, H5OFFSETOF(C_LOC(cf(1)), C_LOC(cf(2))), type, error)
+    CALL check("h5tcreate_f", error, total_error)
+
+    ! Add  members to the compound data type 
+    ! -------------------------------------- 
+
+    DO i = 1, dtsinfo%nsubfields
+       CALL h5tarray_create_f(dtsinfo%datatype(i), ndims(i), dima, array_dt, error)
+       CALL check("h5tarray_create_f", error, total_error)
+       CALL H5Tinsert_f(type, dtsinfo%name(i), dtsinfo%offset(i), array_dt, error)
+       CALL check("h5tinsert_f", error, total_error)
+
+       CALL h5tclose_f(array_dt,error)
+       CALL check("h5tclose_f", error, total_error)
+    ENDDO
+
+    ! Create the dataset 
+    ! ------------------ /
+    CALL h5dcreate_f(fid,FIELDNAME,type, space, dataset,error)
+    CALL check("h5dcreate_f", error, total_error)
+
+    ! Write data to the dataset 
+    ! ------------------------- 
+
+    ALLOCATE(rdims(1:2)) ! dummy not needed
+
+    f_ptr = C_LOC(cf(1))
+
+    CALL h5dwrite_f(dataset, type, f_ptr, error )
+    CALL check("h5dwrite_f", error, total_error)
+
+
+    ALLOCATE(rdims1(1:2)) ! dummy not needed
+    f_ptr = C_LOC(cfr(1))
+    CALL H5Dread_f(dataset, type, f_ptr, error)
+    CALL check("H5Dread_f", error, total_error)
+
+    ! Verify correct data 
+    ! ------------------- 
+    DO i = 1, LENGTH
+       DO j = 1, ALEN
+           IF( cf(i)%a(j) .NE. cfr(i)%a(j) )THEN
+             PRINT*, 'ERROR: Wrong integer data is read back by H5Dread_f '
+             total_error = total_error + 1
+          ENDIF
+          IF( cf(i)%b(j) .NE. cfr(i)%b(j) )THEN
+             PRINT*, 'ERROR: Wrong real data is read back by H5Dread_f '
+             total_error = total_error + 1
+          ENDIF
+          IF( cf(i)%c(j) .NE. cfr(i)%c(j) )THEN
+             PRINT*, 'ERROR: Wrong double data is read back by H5Dread_f '
+             total_error = total_error + 1
+          ENDIF
+       ENDDO
+    ENDDO
+
+
+    ! Release IDs 
+    ! ----------- 
+    CALL h5tclose_f(type,error)
+    CALL check("h5tclose_f", error, total_error)
+    CALL h5sclose_f(space,error)
+    CALL check("h5sclose_f", error, total_error)
+    CALL h5dclose_f(dataset, error)
+    CALL check("h5dclose_f", error, total_error)
+    CALL h5fclose_f(fid,error)
+    CALL check("h5fclose_f", error, total_error)
+
+    !****************************
+    ! Reopen the file and update 
+    !****************************
+
+    CALL h5fopen_f (FILENAME, H5F_ACC_RDWR_F, fid, error)
+    CALL check("h5fopen_f", error, total_error)
+
+    CALL h5dopen_f(fid, FIELDNAME, dataset, error)
+    CALL check("h5dopen_f", error, total_error)
+
+    sizeof_compound =  INT( type_sizer*ALEN, size_t)
+
+    CALL h5tcreate_f(H5T_COMPOUND_F, sizeof_compound , type, error)
+    CALL check("h5tcreate_f", error, total_error)
+
+    CALL h5tarray_create_f(H5T_NATIVE_REAL_4, 1, dima, array_dt, error)
+    CALL check("h5tarray_create_f", error, total_error)
+
+    CALL h5tinsert_f(TYPE, "Two", 0_size_t, array_dt, error)
+    CALL check("h5tinsert_f", error, total_error)
+
+    ! Initialize the data to overwrite 
+    ! -------------------------------- 
+    DO i = 1, LENGTH
+       DO j = 1, ALEN
+          fld(i)%b(j) = 1.313
+          cf(i)%b(j) = fld(i)%b(j)
+       ENDDO
+    ENDDO
+
+    f_ptr = C_LOC(fld(1))
+
+    CALL h5dwrite_f(dataset, TYPE, f_ptr, error )
+    CALL check("h5dwrite_f", error, total_error)
+
+
+    !  Read just the field changed 
+    
+    f_ptr = C_LOC(fldr(1))
+    CALL H5Dread_f(dataset, TYPE, f_ptr, error)
+    CALL check("H5Dread_f", error, total_error)
+
+    DO i = 1, LENGTH
+       DO j = 1, ALEN
+          IF( fld(i)%b(j) .NE. fldr(i)%b(j) )THEN
+             PRINT*, 'ERROR: Wrong real data is read back by H5Dread_f '
+             total_error = total_error + 1
+          ENDIF
+       ENDDO
+    ENDDO
+    CALL h5tclose_f(TYPE,error)
+    CALL check("h5tclose_f", error, total_error)
+    CALL h5tclose_f(array_dt,error)
+    CALL check("h5tclose_f", error, total_error)
+
+    CALL h5dget_type_f(dataset, type, error)
+    CALL check("h5dget_type_f", error, total_error)
+
+
+    !  Read the entire dataset again 
+
+    f_ptr = C_LOC(cfr(1))
+    CALL H5Dread_f(dataset, TYPE, f_ptr, error)
+    CALL check("H5Dread_f", error, total_error)
+
+
+    ! Verify correct data 
+    ! ------------------- 
+
+    DO i = 1, LENGTH
+       DO j = 1, ALEN
+           IF( cf(i)%a(j) .NE. cfr(i)%a(j) )THEN
+             PRINT*, 'ERROR: Wrong integer data is read back by H5Dread_f '
+             total_error = total_error + 1
+          ENDIF
+          IF( cf(i)%b(j) .NE. cfr(i)%b(j) )THEN
+             PRINT*, 'ERROR: Wrong real data is read back by H5Dread_f '
+             total_error = total_error + 1
+          ENDIF
+          IF( cf(i)%c(j) .NE. cfr(i)%c(j) )THEN
+             PRINT*, 'ERROR: Wrong double data is read back by H5Dread_f '
+             total_error = total_error + 1
+          ENDIF
+       ENDDO
+    ENDDO
+
+    CALL h5dclose_f(dataset, error)
+    CALL check("h5dclose_f", error, total_error)
+
+    CALL h5tclose_f(type,error)
+    CALL check("h5tclose_f", error, total_error)
+
+    CALL h5fclose_f(fid,error)
+    CALL check("h5fclose_f", error, total_error)
+
+!**************************************************
+! Reopen the file and print out all the data again 
+!**************************************************
+
+    CALL h5fopen_f (FILENAME, H5F_ACC_RDWR_F, fid, error)
+    CALL check("h5fopen_f", error, total_error)
+
+
+    CALL h5dopen_f(fid, FIELDNAME, dataset, error)
+    CALL check("h5dopen_f", error, total_error)
+
+
+    CALL h5dget_type_f(dataset, type, error)
+    CALL check("h5dget_type_f", error, total_error)
+
+
+    ! Reset the data to read in 
+    ! ------------------------- 
+
+    DO i = 1, LENGTH
+       cfr(i)%a(:) = 0
+       cfr(i)%b(:) = 0
+       cfr(i)%c(:) = 0
+    ENDDO
+
+    f_ptr = C_LOC(cfr(1))
+    CALL H5Dread_f(dataset, TYPE, f_ptr, error)
+    CALL check("H5Dread_f", error, total_error)
+
+    ! Verify correct data 
+    ! ------------------- 
+
+    DO i = 1, LENGTH
+       DO j = 1, ALEN
+           IF( cf(i)%a(j) .NE. cfr(i)%a(j) )THEN
+             PRINT*, 'ERROR: Wrong integer data is read back by H5Dread_f '
+             total_error = total_error + 1
+          ENDIF
+          IF( cf(i)%b(j) .NE. cfr(i)%b(j) )THEN
+             PRINT*, 'ERROR: Wrong real data is read back by H5Dread_f '
+             total_error = total_error + 1
+          ENDIF
+          IF( cf(i)%c(j) .NE. cfr(i)%c(j) )THEN
+             PRINT*, 'ERROR: Wrong double data is read back by H5Dread_f '
+             total_error = total_error + 1
+          ENDIF
+       ENDDO
+    ENDDO
+
+    CALL h5dclose_f(dataset, error)
+    CALL check("h5dclose_f", error, total_error)
+
+    CALL h5tclose_f(type,error)
+    CALL check("h5tclose_f", error, total_error)
+
+    CALL h5fclose_f(fid,error)
+    CALL check("h5fclose_f", error, total_error)
+
+  END SUBROUTINE test_array_bkg
+
+
+
+  SUBROUTINE test_h5kind_to_type(total_error)
+
+    USE ISO_C_BINDING
+    USE HDF5 ! This module contains all necessary modules
+
+    IMPLICIT NONE
+    
+    INTEGER, INTENT(INOUT) :: total_error
+    
+    INTEGER, PARAMETER :: int_kind_1 = SELECTED_INT_KIND(Fortran_INTEGER_1)  !should map to INTEGER*1 on most modern processors
+    INTEGER, PARAMETER :: int_kind_4 = SELECTED_INT_KIND(Fortran_INTEGER_2)  !should map to INTEGER*2 on most modern processors
+    INTEGER, PARAMETER :: int_kind_8 = SELECTED_INT_KIND(Fortran_INTEGER_4)  !should map to INTEGER*4 on most modern processors
+    INTEGER, PARAMETER :: int_kind_16 = SELECTED_INT_KIND(Fortran_INTEGER_8) !should map to INTEGER*8 on most modern processors
+    
+    INTEGER, PARAMETER :: real_kind_7 = SELECTED_REAL_KIND(Fortran_REAL_4) !should map to REAL*4 on most modern processors
+    INTEGER, PARAMETER :: real_kind_15 = SELECTED_REAL_KIND(Fortran_REAL_8) !should map to REAL*8 on most modern processors
+    
+    CHARACTER(LEN=12), PARAMETER :: filename = "dsetf_F03.h5" ! File name
+    CHARACTER(LEN=5), PARAMETER :: dsetname1 = "dset1"     ! Dataset name
+    CHARACTER(LEN=5), PARAMETER :: dsetname2 = "dset2"     ! Dataset name
+    CHARACTER(LEN=5), PARAMETER :: dsetname4 = "dset4"     ! Dataset name
+    CHARACTER(LEN=5), PARAMETER :: dsetname8 = "dset8"     ! Dataset name
+    CHARACTER(LEN=6), PARAMETER :: dsetnamer = "dsetr"     ! Dataset name
+    CHARACTER(LEN=6), PARAMETER :: dsetnamer4 = "dsetr4"     ! Dataset name
+    CHARACTER(LEN=6), PARAMETER :: dsetnamer8 = "dsetr8"     ! Dataset name
+    
+    INTEGER(HID_T) :: file_id       ! File identifier 
+    INTEGER(HID_T) :: dset_id1      ! Dataset identifier  
+    INTEGER(HID_T) :: dset_id4      ! Dataset identifier   
+    INTEGER(HID_T) :: dset_id8      ! Dataset identifier  
+    INTEGER(HID_T) :: dset_id16     ! Dataset identifier     
+    INTEGER(HID_T) :: dset_idr       ! Dataset identifier 
+    INTEGER(HID_T) :: dset_idr4      ! Dataset identifier   
+    INTEGER(HID_T) :: dset_idr8      ! Dataset identifier 
+    
+    INTEGER :: error ! Error flag
+    INTEGER :: i, j
+    
+! Data buffers:
+
+    INTEGER, DIMENSION(1:4) :: dset_data
+
+    INTEGER(int_kind_1), DIMENSION(1:4), TARGET :: dset_data_i1, data_out_i1
+    INTEGER(int_kind_4), DIMENSION(1:4), TARGET :: dset_data_i4, data_out_i4
+    INTEGER(int_kind_8), DIMENSION(1:4), TARGET :: dset_data_i8, data_out_i8
+    INTEGER(int_kind_16), DIMENSION(1:4), TARGET :: dset_data_i16, data_out_i16
+
+    REAL, DIMENSION(1:4), TARGET :: dset_data_r, data_out_r
+    REAL(real_kind_7), DIMENSION(1:4), TARGET :: dset_data_r7, data_out_r7
+    REAL(real_kind_15), DIMENSION(1:4), TARGET :: dset_data_r15, data_out_r15
+    
+    INTEGER(HSIZE_T), DIMENSION(1:1) :: data_dims = (/4/) 
+    INTEGER(HID_T) :: dspace_id     ! Dataspace identifier
+    
+    TYPE(C_PTR) :: f_ptr
+    INTEGER(hid_t) :: datatype         ! Common datatype ID 
+
+    !
+    ! Initialize the dset_data array.
+    !
+    DO i = 1, 4
+       dset_data_i1(i)  = i
+       dset_data_i4(i)  = i
+       dset_data_i8(i)  = i
+       dset_data_i16(i) = i
+
+       dset_data_r(i) = (i)*100.
+       dset_data_r7(i) = (i)*100.
+       dset_data_r15(i) = (i)*1000.
+       
+    END DO
+
+    CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file_id, error)
+    CALL check("h5fcreate_f",error, total_error)
+  !
+  ! Create dataspaces for datasets
+  !
+    CALL h5screate_simple_f(1, data_dims , dspace_id, error)
+    CALL check("h5screate_simple_f",error, total_error)
+  !
+  ! Create the dataset.
+  !
+    CALL H5Dcreate_f(file_id, dsetname1, h5kind_to_type(int_kind_1,H5_INTEGER_KIND),  dspace_id, dset_id1, error)
+    CALL check("H5Dcreate_f",error, total_error)
+    CALL H5Dcreate_f(file_id, dsetname2, h5kind_to_type(int_kind_4,H5_INTEGER_KIND),  dspace_id, dset_id4, error)
+    CALL check("H5Dcreate_f",error, total_error)
+    CALL H5Dcreate_f(file_id, dsetname4, h5kind_to_type(int_kind_8,H5_INTEGER_KIND),  dspace_id, dset_id8, error)
+    CALL check("H5Dcreate_f",error, total_error)
+    CALL H5Dcreate_f(file_id, dsetname8, h5kind_to_type(int_kind_16,H5_INTEGER_KIND), dspace_id, dset_id16, error)
+    CALL check("H5Dcreate_f",error, total_error)
+    
+    CALL H5Dcreate_f(file_id, dsetnamer, H5T_NATIVE_REAL, dspace_id, dset_idr, error)
+    CALL check("H5Dcreate_f",error, total_error)
+    CALL H5Dcreate_f(file_id, dsetnamer4, h5kind_to_type(real_kind_7,H5_REAL_KIND),  dspace_id, dset_idr4, error)
+    CALL check("H5Dcreate_f",error, total_error)
+    CALL H5Dcreate_f(file_id, dsetnamer8, h5kind_to_type(real_kind_15,H5_REAL_KIND), dspace_id, dset_idr8, error)
+    CALL check("H5Dcreate_f",error, total_error)
+
+  !
+  ! Write the dataset.
+  !
+    f_ptr = C_LOC(dset_data_i1(1))
+    CALL h5dwrite_f(dset_id1, h5kind_to_type(int_kind_1,H5_INTEGER_KIND), f_ptr, error)
+    CALL check("H5Dwrite_f",error, total_error)
+    f_ptr = C_LOC(dset_data_i4(1))
+    CALL h5dwrite_f(dset_id4, h5kind_to_type(int_kind_4,H5_INTEGER_KIND), f_ptr, error)
+    CALL check("H5Dwrite_f",error, total_error)
+    f_ptr = C_LOC(dset_data_i8(1))
+    CALL h5dwrite_f(dset_id8, h5kind_to_type(int_kind_8,H5_INTEGER_KIND), f_ptr, error)
+    CALL check("H5Dwrite_f",error, total_error)
+    f_ptr = C_LOC(dset_data_i16(1))
+    CALL h5dwrite_f(dset_id16, h5kind_to_type(int_kind_16,H5_INTEGER_KIND), f_ptr, error)
+    CALL check("H5Dwrite_f",error, total_error)
+    f_ptr = C_LOC(dset_data_r(1))
+    CALL h5dwrite_f(dset_idr, H5T_NATIVE_REAL, f_ptr, error)
+    CALL check("H5Dwrite_f",error, total_error)
+    f_ptr = C_LOC(dset_data_r7(1))
+    CALL h5dwrite_f(dset_idr4, h5kind_to_type(real_kind_7,H5_REAL_KIND), f_ptr, error)
+    CALL check("H5Dwrite_f",error, total_error)
+    f_ptr = C_LOC(dset_data_r15(1))
+    CALL h5dwrite_f(dset_idr8, h5kind_to_type(real_kind_15,H5_REAL_KIND), f_ptr, error)
+    CALL check("H5Dwrite_f",error, total_error)
+  !
+  ! Close the file
+  !
+    CALL h5fclose_f(file_id, error)
+    CALL check("h5fclose_f",error, total_error)
+
+  ! Open the file
+
+    CALL h5fopen_f(filename, H5F_ACC_RDONLY_F, file_id, error)
+    CALL check("h5fopen_f",error, total_error)
+  !
+  ! Read the dataset.
+  !
+  ! Read data back into an integer size that is larger then the original size used for 
+  ! writing the data
+    f_ptr = C_LOC(data_out_i1)
+    CALL h5dread_f(dset_id1, h5kind_to_type(int_kind_1,H5_INTEGER_KIND), f_ptr,  error)
+    CALL check("h5dread_f",error, total_error)
+    f_ptr = C_LOC(data_out_i4)
+    CALL h5dread_f(dset_id4, h5kind_to_type(int_kind_4,H5_INTEGER_KIND), f_ptr,  error)
+    CALL check("h5dread_f",error, total_error)
+    f_ptr = C_LOC(data_out_i8)
+    CALL h5dread_f(dset_id8, h5kind_to_type(int_kind_8,H5_INTEGER_KIND), f_ptr,  error)
+    CALL check("h5dread_f",error, total_error)
+    f_ptr = C_LOC(data_out_i16)
+    CALL h5dread_f(dset_id16, h5kind_to_type(int_kind_16,H5_INTEGER_KIND), f_ptr,  error)
+    CALL check("h5dread_f",error, total_error)
+    f_ptr = C_LOC(data_out_r)
+    CALL h5dread_f(dset_idr, H5T_NATIVE_REAL, f_ptr,  error)
+    CALL check("h5dread_f",error, total_error)
+    f_ptr = C_LOC(data_out_r7)
+    CALL h5dread_f(dset_idr4, h5kind_to_type(real_kind_7,H5_REAL_KIND), f_ptr,  error)
+    CALL check("h5dread_f",error, total_error)
+    f_ptr = C_LOC(data_out_r15)
+    CALL h5dread_f(dset_idr8, h5kind_to_type(real_kind_15,H5_REAL_KIND), f_ptr,  error)
+    CALL check("h5dread_f",error, total_error)
+    
+    DO i = 1, 4
+       
+       CALL verify_Fortran_INTEGER_4("h5kind_to_type1",INT(dset_data_i1(i),int_kind_8),INT(data_out_i1(i),int_kind_8),total_error)
+       CALL verify_Fortran_INTEGER_4("h5kind_to_type2",INT(dset_data_i4(i),int_kind_8),INT(data_out_i4(i),int_kind_8),total_error)
+       CALL verify_Fortran_INTEGER_4("h5kind_to_type3",INT(dset_data_i8(i),int_kind_8),INT(data_out_i8(i),int_kind_8),total_error)
+       CALL verify_Fortran_INTEGER_4("h5kind_to_type4",INT(dset_data_i16(i),int_kind_8),INT(data_out_i16(i),int_kind_8),total_error)
+
+       CALL verify_real_kind_7("h5kind_to_type5",REAL(dset_data_r(i),real_kind_7),REAL(data_out_r(i),real_kind_7),total_error)
+       CALL verify_real_kind_7("h5kind_to_type6",REAL(dset_data_r7(i),real_kind_7),REAL(data_out_r7(i),real_kind_7),total_error)
+       CALL verify_real_kind_7("h5kind_to_type7",REAL(dset_data_r15(i),real_kind_7),REAL(data_out_r15(i),real_kind_7),total_error)
+
+    END DO
+
+  !
+  ! Close the dataset.
+  !
+    CALL h5dclose_f(dset_id1, error)
+    CALL check("h5dclose_f",error, total_error)
+    CALL h5dclose_f(dset_id4, error)
+    CALL check("h5dclose_f",error, total_error)
+    CALL h5dclose_f(dset_id8, error)
+    CALL check("h5dclose_f",error, total_error)
+    CALL h5dclose_f(dset_id16, error)
+    CALL check("h5dclose_f",error, total_error)
+    CALL h5dclose_f(dset_idr4, error)
+    CALL check("h5dclose_f",error, total_error)
+    CALL h5dclose_f(dset_idr8, error)
+    CALL check("h5dclose_f",error, total_error)
+  !
+  ! Close the file.
+  !
+    CALL h5fclose_f(file_id, error)
+    CALL check("h5fclose_f",error, total_error)
+
+END SUBROUTINE test_h5kind_to_type
+
+!************************************************************
+!
+!  This test reads and writes array datatypes
+!  to a dataset.  The test first writes integers arrays of
+!  dimension ADIM0xADIM1 to a dataset with a dataspace of
+!  DIM0, then closes the  file.  Next, it reopens the file,
+!  reads back the data.
+!
+!************************************************************
+SUBROUTINE t_array(total_error)
+
+  USE HDF5
+  USE ISO_C_BINDING
+  
+  IMPLICIT NONE
+    
+  INTEGER, INTENT(INOUT) :: total_error
+
+  CHARACTER(LEN=19), PARAMETER :: filename  = "t_array_F03.h5"
+  CHARACTER(LEN=3) , PARAMETER :: dataset   = "DS1"
+  INTEGER          , PARAMETER :: dim0      = 4
+  INTEGER          , PARAMETER :: adim0     = 3
+  INTEGER          , PARAMETER :: adim1     = 5
+  INTEGER(HID_T)  :: file, filetype, memtype, space, dset ! Handles
+  INTEGER :: hdferr
+  INTEGER(HSIZE_T), DIMENSION(1:1)   :: dims = (/dim0/)
+  INTEGER(HSIZE_T), DIMENSION(1:2)   :: adims = (/adim0, adim1/)
+  INTEGER(HSIZE_T), DIMENSION(1:3)   :: bdims = (/dim0, adim0, adim1/)
+  INTEGER(HSIZE_T), DIMENSION(1:2)   :: maxdims
+  INTEGER, DIMENSION(1:dim0, 1:adim0, 1:adim1), TARGET :: wdata ! Write buffer 
+  INTEGER, DIMENSION(:,:,:), ALLOCATABLE, TARGET :: rdata    ! Read buffer
+  INTEGER :: i, j, k
+  TYPE(C_PTR) :: f_ptr
+  INTEGER :: error ! Error flag
+
+  !
+  ! Initialize data.  i is the element in the dataspace, j and k the
+  ! elements within the array datatype.
+  !
+  DO i = 1, dim0
+     DO j = 1, adim0
+        DO k = 1, adim1
+           wdata(i,j,k) = (i-1)*(j-1)-(j-1)*(k-1)+(i-1)*(k-1)
+        ENDDO
+     ENDDO
+  ENDDO
+  !
+  ! Create a new file using the default properties.
+  !
+  CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file, error)
+  CALL check("h5fcreate_f",error, error)
+  !
+  ! Create array datatypes for file and memory.
+  !
+  CALL H5Tarray_create_f(INT(H5T_STD_I64LE, HID_T), 2, adims, filetype, error)
+  CALL check("H5Tarray_create_f",error, total_error)
+  CALL H5Tarray_create_f(H5T_NATIVE_INTEGER, 2, adims, memtype, error)
+  CALL check("H5Tarray_create_f",error, total_error)
+  !
+  ! Create dataspace.  Setting maximum size to be the current size.
+  !
+  CALL h5screate_simple_f(1, dims, space, error)
+  CALL check("h5screate_simple_f",error, total_error)
+  !
+  ! Create the dataset and write the array data to it.
+  !
+  CALL h5dcreate_f(file, dataset, filetype, space, dset, error)
+  CALL check("h5dcreate_f",error, total_error)
+  f_ptr = C_LOC(wdata)
+  CALL h5dwrite_f(dset, memtype, f_ptr, error)
+  CALL check("h5dwrite_f",error, total_error)
+  !
+  ! Close and release resources.
+  !
+  CALL H5Dclose_f(dset, error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL H5Sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  CALL H5Tclose_f(filetype, error)
+  CALL check("h5tclose_f",error, total_error)
+  CALL H5Tclose_f(memtype, error)
+  CALL check("h5tclose_f",error, total_error)
+  CALL H5Fclose_f(file, error)
+  CALL check("h5fclose_f",error, total_error)
+  !
+  ! Now we begin the read section of this example. 
+  !
+  ! Open file, dataset, and attribute.
+  !
+  CALL h5fopen_f(filename, H5F_ACC_RDONLY_F, file, error)
+  CALL check("h5fopen_f",error, total_error)
+  CALL h5dopen_f(file, dataset, dset, error)
+  CALL check("h5dopen_f",error, total_error)
+  !
+  ! Get the datatype and its dimensions.
+  !
+  CALL h5dget_type_f(dset, filetype, error)
+  CALL check("h5dget_type_f",error, error)
+  CALL H5Tget_array_dims_f(filetype, adims, error)
+  CALL check("h5dget_type_f",error, total_error)
+  CALL VERIFY("H5Tget_array_dims_f", INT(adims(1)), adim0, total_error)
+  CALL VERIFY("H5Tget_array_dims_f", INT(adims(2)), adim1, total_error)
+  !
+  ! Get dataspace and allocate memory for read buffer.  This is a
+  ! three dimensional attribute when the array datatype is included.
+  !
+  CALL H5Dget_space_f(dset, space, error)
+  CALL check("H5Dget_space_f",error, error)
+  CALL H5Sget_simple_extent_dims_f(space, dims, maxdims, error)
+  CALL check("H5Sget_simple_extent_dims_f",error, total_error)
+  CALL VERIFY("H5Sget_simple_extent_dims_f", INT(dims(1)), dim0, total_error)
+
+  ALLOCATE(rdata(1:dims(1),1:adims(1),1:adims(2)))
+  !
+  ! Create the memory datatype.
+  ! 
+  CALL H5Tarray_create_f(H5T_NATIVE_INTEGER, 2, adims, memtype, error)
+  CALL check("H5Tarray_create_f",error, total_error)
+  !
+  ! Read the data.
+  !
+
+  f_ptr = C_LOC(rdata)
+  CALL H5Dread_f(dset, memtype, f_ptr, error)
+  CALL check("H5Dread_f",error, total_error)
+  !
+  ! Output the data to the screen.
+  !
+  i_loop: DO i = 1, dims(1)
+             DO j=1, adim0
+                DO k = 1, adim1
+                   CALL VERIFY("H5Sget_simple_extent_dims_f",  rdata(i,j,k), wdata(i,j,k), total_error)
+                   IF(total_error.NE.0) EXIT i_loop
+                ENDDO
+             ENDDO
+          ENDDO i_loop
+  !
+  ! Close and release resources.
+  !
+  DEALLOCATE(rdata)
+  CALL H5Dclose_f(dset, error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL H5Sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  CALL H5Tclose_f(filetype, error)
+  CALL check("h5tclose_f",error, total_error)
+  CALL H5Tclose_f(memtype, error)
+  CALL check("h5tclose_f",error, total_error)
+  CALL H5Fclose_f(file, error)
+  CALL check("h5fclose_f",error, total_error)
+
+END SUBROUTINE t_array
+
+SUBROUTINE t_enum(total_error)
+
+  USE HDF5
+  USE ISO_C_BINDING
+
+  IMPLICIT NONE
+
+  INTEGER, INTENT(INOUT) :: total_error
+
+  CHARACTER(LEN=19), PARAMETER :: filename  = "t_enum_F03.h5"
+  CHARACTER(LEN=3) , PARAMETER :: dataset   = "DS1"
+  INTEGER          , PARAMETER :: dim0      = 4
+  INTEGER          , PARAMETER :: dim1      = 7
+  INTEGER(HID_T)               :: F_BASET  ! File base type
+  INTEGER(HID_T)               :: M_BASET  ! Memory base type
+  INTEGER(SIZE_T)  , PARAMETER :: NAME_BUF_SIZE = 16
+
+! Enumerated type
+  INTEGER, PARAMETER :: SOLID=0, LIQUID=1, GAS=2, PLASMA=3
+
+  INTEGER(HID_T) :: file, filetype, memtype, space, dset ! Handles
+
+  INTEGER(hsize_t),   DIMENSION(1:2) :: dims = (/dim0, dim1/)
+  INTEGER, DIMENSION(1:dim0, 1:dim1), TARGET :: wdata ! Write buffer
+  INTEGER, DIMENSION(:,:), ALLOCATABLE, TARGET :: rdata ! Read buffer
+  INTEGER, DIMENSION(1:1), TARGET :: val
+
+  CHARACTER(LEN=6), DIMENSION(1:4) :: &
+       names = (/"SOLID ", "LIQUID", "GAS   ", "PLASMA"/)
+  CHARACTER(LEN=NAME_BUF_SIZE) :: name
+  INTEGER(HSIZE_T), DIMENSION(1:2) :: maxdims
+  INTEGER :: i, j, idx
+  TYPE(C_PTR) :: f_ptr
+  INTEGER :: error ! Error flag
+  !
+  ! Initialize DATA.
+  !
+  F_BASET   = H5T_STD_I16BE      ! File base type
+  M_BASET   = H5T_NATIVE_INTEGER ! Memory base type
+  DO i = 1, dim0
+     DO j = 1, dim1 
+        wdata(i,j) = MOD( (j-1)*(i-1), PLASMA+1)
+     ENDDO
+  ENDDO
+  !
+  ! Create a new file using the default properties.
+  !
+  CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file, error)
+  CALL check("h5fcreate_f",error, total_error)
+  !
+  ! Create the enumerated datatypes for file and memory.  This
+  ! process is simplified IF native types are used for the file,
+  ! as only one type must be defined.
+  !
+  CALL h5tenum_create_f(F_BASET, filetype, error)
+  CALL check("h5tenum_create_f",error, total_error)
+  
+  CALL h5tenum_create_f(M_BASET, memtype, error)
+  CALL check("h5tenum_create_f",error, total_error)
+
+  DO i = SOLID, PLASMA
+     !
+     ! Insert enumerated value for memtype.
+     !
+     val(1) = i
+     CALL H5Tenum_insert_f(memtype, TRIM(names(i+1)), val(1), error)
+     CALL check("H5Tenum_insert_f", error, total_error)
+     !
+     ! Insert enumerated value for filetype.  We must first convert
+     ! the numerical value val to the base type of the destination.
+     !
+     f_ptr = C_LOC(val(1))
+     CALL H5Tconvert_f(M_BASET, F_BASET, INT(1,SIZE_T), f_ptr, error)
+     CALL check("H5Tconvert_f",error, total_error)
+     CALL H5Tenum_insert_f(filetype, TRIM(names(i+1)), val(1), error)
+     CALL check("H5Tenum_insert_f",error, total_error)
+  ENDDO
+  !
+  ! Create dataspace.  Setting maximum size to be the current size.
+  !
+  CALL h5screate_simple_f(2, dims, space, total_error)
+  CALL check("h5screate_simple_f",error, total_error)
+  !
+  ! Create the dataset and write the enumerated data to it.
+  ! 
+  CALL h5dcreate_f(file, dataset, filetype, space, dset, error)
+  CALL check("h5dcreate_f",error, total_error)
+  f_ptr = C_LOC(wdata(1,1))
+  CALL h5dwrite_f(dset, memtype, f_ptr, error)
+  CALL check("h5dwrite_f",error, total_error)
+  !
+  ! Close and release resources.
+  !
+  CALL h5dclose_f(dset , error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL h5sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  CALL h5tclose_f(filetype, error)
+  CALL check("h5tclose_f",error, total_error)
+  CALL h5fclose_f(file , error)
+  CALL check("h5fclose_f",error, total_error)
+
+  !
+  ! Now we begin the read section of this example.
+  !
+  ! Open file and dataset.
+  !
+  CALL h5fopen_f(filename, H5F_ACC_RDONLY_F, file, error)
+  CALL check("h5fopen_f",error, total_error)
+  CALL h5dopen_f (file, dataset, dset, error)
+  CALL check("h5dopen_f",error, total_error)
+  CALL h5dopen_f(file, dataset, dset, error)
+  CALL check("h5dopen_f",error, total_error)
+  !
+  ! Get dataspace and allocate memory for read buffer.
+  !
+  CALL h5dget_space_f(dset,space, error)
+  CALL check("H5Dget_space_f",error, total_error)
+  CALL h5sget_simple_extent_dims_f(space, dims, maxdims, error)
+  CALL check("H5Sget_simple_extent_dims_f",error, total_error)
+  CALL VERIFY("H5Sget_simple_extent_dims_f", INT(dims(1)), dim0, total_error)
+  CALL VERIFY("H5Sget_simple_extent_dims_f", INT(dims(2)), dim1, total_error)
+
+  ALLOCATE(rdata(1:dims(1),1:dims(2)))
+
+  !
+  ! Read the data.
+  !
+  f_ptr = C_LOC(rdata(1,1))
+  CALL h5dread_f(dset, memtype, f_ptr, error)
+  CALL check("H5Dread_f",error, total_error)
+
+  !
+  ! Output the data to the screen.
+  !
+  i_loop: DO i = 1, dims(1)
+             DO j = 1, dims(2)
+                !
+                ! Get the name of the enumeration member.
+                !
+                CALL h5tenum_nameof_f( memtype, rdata(i,j), NAME_BUF_SIZE, name, error)
+                CALL check("h5tenum_nameof_f",error, total_error)
+                idx = MOD( (j-1)*(i-1), PLASMA+1 ) + 1
+                CALL verifystring("h5tenum_nameof_f",TRIM(name),TRIM(names(idx)), total_error)
+                IF(total_error.NE.0) EXIT i_loop
+             ENDDO
+          ENDDO i_loop
+  !
+  ! Close and release resources.
+  !
+  DEALLOCATE(rdata)
+  CALL h5dclose_f(dset , error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL h5sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  CALL h5tclose_f(memtype, error)
+  CALL check("h5tclose_f",error, total_error)
+  CALL h5fclose_f(file , error)
+  CALL check("h5fclose_f",error, total_error)
+  
+END SUBROUTINE t_enum
+
+SUBROUTINE t_bit(total_error)
+
+  USE HDF5
+  USE ISO_C_BINDING
+
+  IMPLICIT NONE
+
+  INTEGER, INTENT(INOUT) :: total_error
+
+  CHARACTER(LEN=20), PARAMETER :: filename  = "t_bit_F03.h5"
+  CHARACTER(LEN=3) , PARAMETER :: dataset   = "DS1"
+  INTEGER          , PARAMETER :: dim0      = 4
+  INTEGER          , PARAMETER :: dim1      = 7
+
+  INTEGER(HID_T)  :: file, space, dset ! Handles
+  INTEGER(HSIZE_T), DIMENSION(1:2)   :: dims = (/dim0, dim1/)
+  INTEGER(HSIZE_T), DIMENSION(1:2)   :: maxdims
+  INTEGER(C_SIGNED_CHAR), DIMENSION(1:dim0, 1:dim1), TARGET :: wdata              ! Write buffer 
+  INTEGER(C_SIGNED_CHAR), DIMENSION(:,:), ALLOCATABLE, TARGET :: rdata    ! Read buffer
+  INTEGER :: A, B, C, D
+  INTEGER :: Aw, Bw, Cw, Dw
+  INTEGER :: i, j
+  INTEGER, PARAMETER :: hex =  Z'00000003'
+  TYPE(C_PTR) :: f_ptr
+  INTEGER :: error     ! Error flag
+  !
+  ! Initialize data.  We will manually pack 4 2-bit integers into
+  ! each unsigned char data element.
+  !
+  DO i = 0, dim0-1
+     DO j = 0, dim1-1
+        wdata(i+1,j+1) = 0
+        wdata(i+1,j+1) = IOR( wdata(i+1,j+1), INT(IAND(i * j - j, hex),C_SIGNED_CHAR) )   ! Field "A"
+        wdata(i+1,j+1) = IOR( wdata(i+1,j+1), INT(ISHFT(IAND(i,hex),2),C_SIGNED_CHAR) )   ! Field "B"
+        wdata(i+1,j+1) = IOR( wdata(i+1,j+1), INT(ISHFT(IAND(j,hex),4),C_SIGNED_CHAR) )   ! Field "C"
+        wdata(i+1,j+1) = IOR( wdata(i+1,j+1), INT(ISHFT(IAND(i+j,hex),6),C_SIGNED_CHAR) ) ! Field "D"
+     ENDDO
+  ENDDO
+  !
+  ! Create a new file using the default properties.
+  !
+  CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file, error)
+  CALL check("h5fcreate_f",error, total_error)
+  !
+  ! Create dataspace.  Setting maximum size to be the current size.
+  !
+  CALL h5screate_simple_f(2, dims, space, error)
+  CALL check("h5screate_simple_f",error, total_error)
+  !
+  ! Create the dataset and write the bitfield data to it.
+  !
+  CALL H5Dcreate_f(file, dataset, H5T_STD_B8BE, space, dset, error)
+  CALL check("h5dcreate_f",error, total_error)
+  f_ptr = C_LOC(wdata(1,1))
+  CALL H5Dwrite_f(dset, H5T_NATIVE_B8, f_ptr, error)
+  CALL check("h5dwrite_f",error, total_error)
+  !
+  ! Close and release resources.
+  !
+  CALL H5Dclose_f(dset, error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL H5Sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  CALL H5Fclose_f(file, error)
+  CALL check("h5fclose_f",error, total_error)
+  !
+  ! Now we begin the read section of this example. 
+  !
+  ! Open file, dataset.
+  !
+  CALL h5fopen_f(filename, H5F_ACC_RDONLY_F, file, error)
+  CALL check("h5fopen_f",error, total_error)
+  CALL h5dopen_f(file, dataset, dset, error)
+  CALL check("h5dopen_f",error, total_error)
+  !
+  ! Get dataspace and allocate memory for read buffer.
+  !
+  CALL H5Dget_space_f(dset, space, error)
+  CALL check("H5Dget_space_f",error, total_error)
+  CALL H5Sget_simple_extent_dims_f(space, dims, maxdims, error)
+  CALL check("H5Sget_simple_extent_dims_f",error, total_error)
+  CALL VERIFY("H5Sget_simple_extent_dims_f", INT(dims(1)), dim0, total_error)
+  CALL VERIFY("H5Sget_simple_extent_dims_f", INT(dims(2)), dim1, total_error)
+  ALLOCATE(rdata(1:dims(1),1:dims(2)))
+  !
+  ! Read the data.
+  !
+  f_ptr = C_LOC(rdata)
+  CALL H5Dread_f(dset,  H5T_NATIVE_B8, f_ptr, error)
+  CALL check("H5Dread_f",error, total_error)
+  !
+  ! Output the data to the screen.
+  !
+  i_loop: DO i = 1, dims(1)
+            DO j = 1, dims(2)
+               A = IAND(rdata(i,j), INT(hex,C_SIGNED_CHAR)) ! Retrieve field "A"
+               B = IAND(ISHFT(rdata(i,j),-2), INT(hex,C_SIGNED_CHAR)) ! Retrieve field "B"
+               C = IAND(ISHFT(rdata(i,j),-4), INT(hex,C_SIGNED_CHAR)) ! Retrieve field "C"
+               D = IAND(ISHFT(rdata(i,j),-6), INT(hex,C_SIGNED_CHAR)) ! Retrieve field "D"
+               
+               Aw = IAND(wdata(i,j), INT(hex,C_SIGNED_CHAR)) 
+               Bw = IAND(ISHFT(wdata(i,j),-2), INT(hex,C_SIGNED_CHAR))
+               Cw = IAND(ISHFT(wdata(i,j),-4), INT(hex,C_SIGNED_CHAR))
+               Dw = IAND(ISHFT(wdata(i,j),-6), INT(hex,C_SIGNED_CHAR))
+
+               CALL VERIFY("bitfield", A, Aw, total_error)
+               CALL VERIFY("bitfield", B, Bw, total_error)
+               CALL VERIFY("bitfield", C, Cw, total_error)
+               CALL VERIFY("bitfield", D, Dw, total_error)
+               IF(total_error.NE.0) EXIT i_loop
+            ENDDO
+         ENDDO i_loop
+  !
+  ! Close and release resources.
+  !
+  DEALLOCATE(rdata)
+  CALL H5Dclose_f(dset, error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL H5Sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  CALL H5Fclose_f(file, error)
+  CALL check("h5fclose_f",error, total_error)
+
+END SUBROUTINE t_bit
+
+SUBROUTINE t_opaque(total_error)
+
+  USE HDF5
+  USE ISO_C_BINDING
+
+  IMPLICIT NONE
+
+  INTEGER, INTENT(INOUT) :: total_error
+  CHARACTER(LEN=20), PARAMETER :: filename  = "t_opaque_F03.h5"
+  CHARACTER(LEN=3) , PARAMETER :: dataset   = "DS1"
+  INTEGER          , PARAMETER :: dim0      = 4
+  INTEGER(SIZE_T)  , PARAMETER :: size      = 7
+  INTEGER(HID_T)  :: file, space, dtype, dset ! Handles
+  INTEGER(size_t) :: len
+  INTEGER(hsize_t),   DIMENSION(1:1) :: dims = (/DIM0/)
+
+  CHARACTER(LEN=size), DIMENSION(1:dim0), TARGET :: wdata ! Write buffer
+  CHARACTER(LEN=size), DIMENSION(:), ALLOCATABLE, TARGET :: rdata ! Read buffer
+  CHARACTER(LEN=size-1) :: str = "OPAQUE"
+  
+  CHARACTER(LEN=14) :: tag_sm    ! Test reading obaque tag into 
+  CHARACTER(LEN=15) :: tag_exact ! buffers that are: to small, exact
+  CHARACTER(LEN=17) :: tag_big   ! and to big.
+
+  INTEGER :: taglen
+  INTEGER(HSIZE_T), DIMENSION(1:1) :: maxdims
+  INTEGER :: i
+  CHARACTER(LEN=1) :: ichr
+  TYPE(C_PTR) :: f_ptr
+  INTEGER :: error
+  !
+  ! Initialize data.
+  !
+  DO i = 1, dim0
+     WRITE(ichr,'(I1)') i-1 
+     wdata(i) = str//ichr
+  ENDDO
+  !
+  ! Create a new file using the default properties.
+  !
+  CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file, error)
+  CALL check("h5fcreate_f",error, total_error)
+  !
+  ! Create opaque datatype and set the tag to something appropriate.
+  ! For this example we will write and view the data as a character
+  ! array.
+  !
+  CALL h5tcreate_f(h5T_OPAQUE_F, size, dtype, error)
+  CALL check("h5tcreate_f",error, total_error)
+  CALL h5tset_tag_f(dtype,"Character array",error)
+  CALL check("h5tset_tag_f",error, total_error)
+  !
+  ! Create dataspace.  Setting maximum size to be the current size.
+  !
+  CALL h5screate_simple_f(1, dims, space, error)
+  CALL check("h5screate_simple_f",error, total_error)
+  !
+  ! Create the dataset and write the opaque data to it.
+  !
+  CALL h5dcreate_f(file, dataset, dtype, space, dset, error)
+  CALL check("h5dcreate_f",error, total_error)
+  f_ptr = C_LOC(wdata(1))
+  CALL h5dwrite_f(dset, dtype, f_ptr, error)
+  CALL check("h5dwrite_f",error, total_error)
+  !
+  ! Close and release resources.
+  !
+  CALL H5Dclose_f(dset, error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL H5Sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  CALL H5Tclose_f(dtype, error)
+  CALL check("h5tclose_f",error, total_error)
+  CALL H5Fclose_f(file, error)
+  CALL check("h5fclose_f",error, total_error)
+  !
+  ! Now we begin the read section of this example.
+  !
+  ! Open file and dataset.
+  !
+  CALL h5fopen_f(filename, H5F_ACC_RDONLY_F, file, error)
+  CALL check("h5fopen_f",error, total_error)
+  CALL h5dopen_f(file, dataset, dset, error)
+  CALL check("h5dopen_f",error, total_error)
+  !
+  ! Get datatype and properties for the datatype.
+  !
+  CALL h5dget_type_f(dset, dtype, error)
+  CALL check("h5dget_type_f",error, total_error)
+  CALL h5tget_size_f(dtype, len, error)
+  CALL check("h5tget_size_f",error, total_error)
+
+  ! Next tests should return 
+  ! opaque_tag = tag = "Character array" and the actual length = 15
+  
+  ! Test reading into a string that is to small
+  CALL h5tget_tag_f(dtype, tag_sm, taglen, error)
+  CALL check("h5tget_tag_f",error, total_error)
+  CALL VERIFY("h5tget_tag_f", taglen, 15, total_error)
+  CALL verifystring("h5tget_tag_f",tag_sm,"Character arra", total_error)
+  
+  ! Test reading into a string that is exact
+  CALL h5tget_tag_f(dtype, tag_exact, taglen, error)
+  CALL check("h5tget_tag_f",error, total_error)
+  CALL VERIFY("h5tget_tag_f", taglen, 15, total_error)
+  CALL verifystring("h5tget_tag_f",tag_exact,"Character array", total_error)
+
+  ! Test reading into a string that is to big
+  CALL h5tget_tag_f(dtype, tag_big, taglen, error)
+  CALL check("h5tget_tag_f",error, total_error)
+  CALL VERIFY("h5tget_tag_f", taglen, 15, total_error)
+  CALL verifystring("h5tget_tag_f",tag_big,"Character array  ", total_error)
+  
+  !
+  ! Get dataspace and allocate memory for read buffer.
+  !
+  CALL h5dget_space_f(dset, space, error)
+  CALL check("H5Dget_space_f",error, total_error)
+  CALL h5sget_simple_extent_dims_f(space, dims, maxdims, error)
+  CALL check("H5Sget_simple_extent_dims_f",error, total_error)
+  CALL VERIFY("H5Sget_simple_extent_dims_f", INT(dims(1)), dim0, total_error)
+  ALLOCATE(rdata(1:dims(1)))
+  !
+  ! Read the data.
+  !
+  f_ptr = C_LOC(rdata(1))
+  CALL h5dread_f(dset, dtype, f_ptr, error)
+  CALL check("H5Dread_f",error, total_error)
+  !
+  DO i = 1, dims(1)
+     CALL verifystring("t_opaque",TRIM(rdata(i)),TRIM(wdata(i)), total_error)
+  ENDDO
+  !
+  ! Close and release resources.
+  !
+  DEALLOCATE(rdata)
+  CALL H5Dclose_f(dset, error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL H5Sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  CALL H5Tclose_f(dtype, error)
+  CALL check("h5tclose_f",error, total_error)
+  CALL H5Fclose_f(file, error)
+  CALL check("h5fclose_f",error, total_error)
+  
+END SUBROUTINE t_opaque
+
+SUBROUTINE t_objref(total_error)
+
+  USE HDF5
+  USE ISO_C_BINDING
+
+  IMPLICIT NONE
+
+  INTEGER, INTENT(INOUT) :: total_error
+  CHARACTER(LEN=20), PARAMETER :: filename  = "t_objref_F03.h5"
+  CHARACTER(LEN=3) , PARAMETER :: dataset   = "DS1"
+  INTEGER          , PARAMETER :: dim0      = 2
+
+  INTEGER(HID_T)  :: file, space, dset, obj ! Handles
+  INTEGER :: error
+
+  INTEGER(hsize_t),   DIMENSION(1:1) :: dims = (/dim0/)
+  TYPE(hobj_ref_t_f), DIMENSION(1:dim0), TARGET :: wdata ! Write buffer
+  TYPE(hobj_ref_t_f), DIMENSION(:), ALLOCATABLE, TARGET :: rdata ! Read buffer
+  INTEGER :: objtype
+  INTEGER(SIZE_T) :: name_size
+  CHARACTER(LEN=80) :: name
+  INTEGER(HSIZE_T), DIMENSION(1:1) :: maxdims
+  INTEGER :: i
+  TYPE(C_PTR) :: f_ptr
+  !
+  ! Create a new file using the default properties.
+  !
+  CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file, error)
+  CALL check("h5fcreate_f",error, total_error)
+  !
+  ! Create a dataset with a null dataspace.
+  !
+  CALL h5screate_f(H5S_NULL_F,space,error)
+  CALL check("h5screate_f",error, total_error)
+  CALL h5dcreate_f(file, "DS2", H5T_STD_I32LE, space, obj, error)
+  CALL check("h5dcreate_f",error, total_error)
+  !
+  CALL h5dclose_f(obj  , error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL h5sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  !
+  ! Create a group.
+  !
+  CALL h5gcreate_f(file, "G1", obj, error)
+  CALL check("h5gcreate_f",error, total_error)
+  CALL h5gclose_f(obj, error)
+  CALL check("h5gclose_f",error, total_error)
+  !
+  ! Create references to the previously created objects. note, space_id
+  ! is not needed for object references.
+  !
+  f_ptr = C_LOC(wdata(1))
+  CALL H5Rcreate_f(file, "G1", H5R_OBJECT_F, f_ptr, error)
+  CALL check("H5Rcreate_f",error, total_error)
+  f_ptr = C_LOC(wdata(2))
+  CALL H5Rcreate_f(file, "DS2", H5R_OBJECT_F, f_ptr, error)
+  CALL check("H5Rcreate_f",error, total_error)
+  !
+  ! Create dataspace.  Setting maximum size to be the current size.
+  !
+  CALL h5screate_simple_f(1, dims, space, error)
+  CALL check("h5screate_simple_f",error, total_error)
+  !
+  ! Create the dataset and write the object references to it.
+  !
+  CALL h5dcreate_f(file, dataset, H5T_STD_REF_OBJ, space, dset, error)
+  CALL check("h5dcreate_f",error, total_error)
+  
+  f_ptr = C_LOC(wdata(1))
+  CALL h5dwrite_f(dset, H5T_STD_REF_OBJ, f_ptr, error)
+  CALL check("h5dwrite_f",error, total_error)
+  !
+  ! Close and release resources.
+  !
+  CALL h5dclose_f(dset , error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL h5sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  CALL h5fclose_f(file , error)
+  CALL check("h5fclose_f",error, total_error)
+  !
+  ! Now we begin the read section of this example.
+  !
+  ! Open file and dataset.
+  !
+  CALL h5fopen_f(filename, H5F_ACC_RDONLY_F, file, error)
+  CALL check("h5fopen_f",error, total_error)
+  CALL h5dopen_f(file, dataset, dset, error)
+  CALL check("h5dopen_f",error, total_error)
+  !
+  ! Get dataspace and allocate memory for read buffer.
+  !
+  CALL h5dget_space_f(dset, space, error)
+  CALL check("H5Dget_space_f",error, total_error)
+  CALL h5sget_simple_extent_dims_f(space, dims, maxdims, error)
+  CALL check("H5Sget_simple_extent_dims_f",error, total_error)
+  CALL VERIFY("H5Sget_simple_extent_dims_f", INT(dims(1)), dim0, total_error)
+
+  ALLOCATE(rdata(1:maxdims(1)))
+  !
+  ! Read the data.
+  !
+  f_ptr = C_LOC(rdata(1))
+  CALL h5dread_f( dset, H5T_STD_REF_OBJ, f_ptr, error)
+  CALL check("H5Dread_f",error, total_error)
+  !
+  ! Output the data to the screen.
+  !
+  DO i = 1, maxdims(1)
+     !
+     ! Open the referenced object, get its name and type.
+     !
+     f_ptr = C_LOC(rdata(i))
+     CALL H5Rdereference_f(dset, H5R_OBJECT_F, f_ptr, obj, error)
+     CALL check("H5Rdereference_f",error, total_error)
+     CALL H5Rget_obj_type_f(dset, H5R_OBJECT_F, f_ptr, objtype, error)
+     CALL check("H5Rget_obj_type_f",error, total_error)
+     !
+     ! Get the length of the name and name
+     !
+     name(:) = ' ' ! initialize string to blanks
+     CALL H5Iget_name_f(obj, name, 80_size_t, name_size, error)
+     CALL check("H5Iget_name_f",error, total_error)
+     !
+     ! Print the object type and close the object.
+     !
+     IF(objtype.EQ.H5G_GROUP_F)THEN
+        CALL verifystring("t_objref", name(1:name_size),"/G1", total_error)
+     ELSE IF(objtype.EQ.H5G_DATASET_F)THEN
+        CALL verifystring("t_objref", name(1:name_size),"/DS2", total_error)
+     ELSE
+        total_error = total_error + 1
+     ENDIF
+     CALL h5oclose_f(obj, error)
+     CALL check("h5oclose_f",error, total_error)
+
+  END DO
+  !
+  ! Close and release resources.
+  !
+  DEALLOCATE(rdata)
+  CALL h5dclose_f(dset , error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL h5sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  CALL h5fclose_f(file , error)
+  CALL check("h5fclose_f",error, total_error)
+
+END SUBROUTINE t_objref
+
+
+SUBROUTINE t_regref(total_error)
+
+  USE HDF5
+  USE ISO_C_BINDING
+
+  IMPLICIT NONE
+
+  INTEGER, INTENT(INOUT) :: total_error
+  CHARACTER(LEN=22), PARAMETER :: filename  = "t_regref_F03.h5"
+  CHARACTER(LEN=3) , PARAMETER :: dataset   = "DS1"
+  CHARACTER(LEN=3) , PARAMETER :: dataset2  = "DS2"
+  INTEGER          , PARAMETER :: dim0      = 2
+  INTEGER          , PARAMETER :: ds2dim0   = 16
+  INTEGER          , PARAMETER :: ds2dim1   = 3
+
+  INTEGER(HID_T)  :: file, memspace, space, dset, dset2 ! Handles
+  INTEGER :: error
+
+  INTEGER(HSIZE_T), DIMENSION(1:1)   :: dims = (/dim0/)
+  INTEGER(HSIZE_T), DIMENSION(1:1)   :: dims3 
+  INTEGER(HSIZE_T), DIMENSION(1:2)   :: dims2 = (/ds2dim0,ds2dim1/)
+
+  INTEGER(HSIZE_T), DIMENSION(1:2,1:4) :: coords = RESHAPE((/2,1,12,3,1,2,5,3/),(/2,4/))
+  
+  INTEGER(HSIZE_T), DIMENSION(1:2) :: start=(/0,0/),stride=(/11,2/),count=(/2,2/), BLOCK=(/3,1/)
+
+  INTEGER(HSIZE_T), DIMENSION(1:1) :: maxdims
+  INTEGER(hssize_t) :: npoints
+  TYPE(hdset_reg_ref_t_f), DIMENSION(1:dim0), TARGET :: wdata ! Write buffer
+  TYPE(hdset_reg_ref_t_f), DIMENSION(:), ALLOCATABLE, TARGET :: rdata ! Read buffer
+
+  INTEGER(size_t) :: size
+  CHARACTER(LEN=1), DIMENSION(1:ds2dim0,1:ds2dim1), TARGET :: wdata2
+
+  CHARACTER(LEN=80),DIMENSION(1:1), TARGET :: rdata2
+  CHARACTER(LEN=80) :: name
+  INTEGER :: i
+  TYPE(C_PTR) :: f_ptr
+  CHARACTER(LEN=ds2dim0) :: chrvar
+  CHARACTER(LEN=20), DIMENSION(1:2) :: chrref_correct
+
+  chrvar = "The quick brown "
+  READ(chrvar,'(16A1)') wdata2(1:16,1)
+  chrvar = "fox jumps over  "
+  READ(chrvar,'(16A1)') wdata2(1:16,2)
+  chrvar = "the 5 lazy dogs "
+  READ(chrvar,'(16A1)') wdata2(1:16,3)
+
+  chrref_correct(1) = 'hdf5'
+  chrref_correct(2) = 'Therowthedog'
+
+  !
+  ! Create a new file using the default properties.
+  !
+  CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file, error)
+  CALL check("h5fcreate_f",error, total_error)
+  !
+  ! Create a dataset with character data.
+  !
+  CALL h5screate_simple_f(2, dims2, space, error)
+  CALL check("h5screate_simple_f",error, total_error)
+  CALL h5dcreate_f(file,dataset2, H5T_STD_I8LE, space, dset2, error)
+  CALL check("h5dcreate_f",error, total_error)
+  f_ptr = C_LOC(wdata2(1,1))
+  CALL h5dwrite_f(dset2, H5T_NATIVE_INTEGER_1, f_ptr, error)
+  CALL check("h5dwrite_f",error, total_error)
+  !
+  ! Create reference to a list of elements in dset2.
+  !
+  CALL h5sselect_elements_f(space, H5S_SELECT_SET_F, 2, INT(4,size_t), coords, error)
+  CALL check("h5sselect_elements_f",error, total_error)
+  f_ptr = C_LOC(wdata(1))
+  CALL h5rcreate_f(file, DATASET2, H5R_DATASET_REGION_F, f_ptr, error, space)
+  CALL check("h5rcreate_f",error, total_error)
+  !
+  ! Create reference to a hyperslab in dset2, close dataspace.
+  !
+  CALL h5sselect_hyperslab_f (space, H5S_SELECT_SET_F, start, count, error, stride, block)
+  CALL check("h5sselect_hyperslab_f",error, total_error)
+  f_ptr = C_LOC(wdata(2))
+  CALL h5rcreate_f(file, DATASET2, H5R_DATASET_REGION_F, f_ptr, error, space)
+  CALL check("h5rcreate_f",error, total_error)
+
+  CALL h5sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  !
+  ! Create dataspace.  Setting maximum size to the current size.
+  !
+  CALL h5screate_simple_f(1, dims, space, error)
+  CALL check("h5screate_simple_f",error, total_error)
+
+  !
+  ! Create the dataset and write the region references to it.
+  !
+  CALL h5dcreate_f(file, dataset, H5T_STD_REF_DSETREG, space, dset, error)
+  CALL check("h5dcreate_f",error, total_error)
+  f_ptr = C_LOC(wdata(1))
+  CALL h5dwrite_f(dset, H5T_STD_REF_DSETREG, f_ptr, error)
+  CALL check("h5dwrite_f",error, total_error)
+  !
+  ! Close and release resources.
+  !
+  CALL h5dclose_f(dset , error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL h5dclose_f(dset2, error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL h5sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  CALL h5fclose_f(file , error)
+  CALL check("h5fclose_f",error, total_error)
+
+  !
+  ! Now we begin the read section of this example.
+  !
+  !
+  ! Open file and dataset.
+  !
+  CALL h5fopen_f(filename, H5F_ACC_RDONLY_F, file, error)
+  CALL check("h5fopen_f",error, total_error)
+  CALL h5dopen_f(file, dataset, dset, error)
+  CALL check("h5dopen_f",error, total_error)
+  !
+  ! Get dataspace and allocate memory for read buffer.
+  !
+  CALL h5dget_space_f(dset, space, error)
+  CALL check("H5Dget_space_f",error, total_error)
+  CALL h5sget_simple_extent_dims_f(space, dims, maxdims, error)
+  CALL check("H5Sget_simple_extent_dims_f",error, total_error)
+  CALL VERIFY("H5Sget_simple_extent_dims_f", INT(dims(1)), dim0, total_error)
+  ALLOCATE(rdata(1:dims(1)))
+  CALL h5sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  !
+  ! Read the data.
+  !
+  f_ptr = C_LOC(rdata(1))
+  CALL h5dread_f( dset, H5T_STD_REF_DSETREG, f_ptr, error)
+  CALL check("H5Dread_f",error, total_error)
+  !
+  ! Output the data to the screen.
+  !
+  DO i = 1, dims(1)
+     
+     !
+     ! Open the referenced object, retrieve its region as a
+     ! dataspace selection.
+     !
+     CALL H5Rdereference_f(dset, rdata(i), dset2, error)
+     CALL check("H5Rdereference_f",error, total_error)
+     
+     CALL H5Rget_region_f(dset, rdata(i), space, error)
+     CALL check("H5Rget_region_f",error, total_error)
+  
+     !
+     ! Get the object's name
+     !
+     name(:) = ' ' ! initialize string to blanks
+     CALL H5Iget_name_f(dset2, name, 80_size_t, size, error)
+     CALL check("H5Iget_name_f",error, total_error)
+     CALL VERIFY("H5Iget_name_f", INT(size), LEN_TRIM(name), total_error)
+     CALL verifystring("H5Iget_name_f",name(1:size),TRIM(name), total_error)
+     !
+     ! Allocate space for the read buffer.
+     !
+     CALL H5Sget_select_npoints_f(space, npoints, error)
+     CALL check("H5Sget_select_npoints_f",error, total_error)
+     CALL VERIFY("H5Sget_select_npoints_f", INT(npoints), LEN_TRIM(chrref_correct(i)), total_error)
+     
+     dims3(1) = npoints
+     !
+     ! Read the dataset region.
+     !
+     CALL h5screate_simple_f(1, dims3, memspace, error)
+     CALL check("h5screate_simple_f",error, total_error)
+
+     f_ptr = C_LOC(rdata2(1))
+     CALL h5dread_f( dset2, H5T_NATIVE_INTEGER_1, f_ptr, error, memspace, space)
+     CALL check("H5Dread_f",error, total_error)
+     CALL verifystring("h5dread_f",rdata2(1)(1:npoints),TRIM(chrref_correct(i)), total_error)
+
+     CALL H5Sclose_f(space, error)
+     CALL check("h5sclose_f",error, total_error)
+     CALL H5Sclose_f(memspace, error)
+     CALL check("h5sclose_f",error, total_error)
+     CALL H5Dclose_f(dset2, error)
+     CALL check("h5dclose_f",error, total_error)
+
+  END DO
+  !
+  ! Close and release resources.
+  !
+  DEALLOCATE(rdata)
+  CALL H5Dclose_f(dset, error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL H5Fclose_f(file, error)
+  CALL check("h5fclose_f",error, total_error)
+
+END SUBROUTINE t_regref
+
+SUBROUTINE t_vlen(total_error)
+
+  USE HDF5
+  USE ISO_C_BINDING
+
+  IMPLICIT NONE
+
+  INTEGER, INTENT(INOUT) :: total_error
+  CHARACTER(LEN=18), PARAMETER :: filename  = "t_vlen_F03.h5"
+  CHARACTER(LEN=3) , PARAMETER :: dataset   = "DS1"
+  INTEGER, PARAMETER :: LEN0 = 3
+  INTEGER, PARAMETER :: LEN1 = 12
+  INTEGER :: dim0
+
+  INTEGER(HID_T)  :: file, filetype, memtype, space, dset ! Handles
+  INTEGER :: error
+  INTEGER(HSIZE_T), DIMENSION(1:2)   :: maxdims
+  INTEGER :: i, j
+
+  ! vl data
+  TYPE vl
+     INTEGER, DIMENSION(:), POINTER :: DATA
+  END TYPE vl
+  TYPE(vl), DIMENSION(:), ALLOCATABLE, TARGET :: ptr
+
+
+  TYPE(hvl_t), DIMENSION(1:2), TARGET :: wdata ! Array of vlen structures
+  TYPE(hvl_t), DIMENSION(1:2), TARGET :: rdata ! Pointer to vlen structures
+
+  INTEGER(hsize_t), DIMENSION(1:1) :: dims = (/2/)
+  INTEGER, DIMENSION(:), POINTER :: ptr_r 
+  TYPE(C_PTR) :: f_ptr
+  
+  !
+  ! Initialize variable-length data.  wdata(1) is a countdown of
+  ! length LEN0, wdata(2) is a Fibonacci sequence of length LEN1.
+  !
+  wdata(1)%len = LEN0
+  wdata(2)%len = LEN1
+
+  ALLOCATE( ptr(1:2) )
+  ALLOCATE( ptr(1)%data(1:wdata(1)%len) )
+  ALLOCATE( ptr(2)%data(1:wdata(2)%len) )
+
+  DO i=1, wdata(1)%len
+     ptr(1)%data(i) = wdata(1)%len - i + 1 ! 3 2 1
+  ENDDO
+  wdata(1)%p = C_LOC(ptr(1)%data(1))
+
+  ptr(2)%data(1:2) = 1
+  DO i = 3, wdata(2)%len
+     ptr(2)%data(i) = ptr(2)%data(i-1) + ptr(2)%data(i-2) ! (1 1 2 3 5 8 etc.)
+  ENDDO
+  wdata(2)%p = C_LOC(ptr(2)%data(1))
+
+  !
+  ! Create a new file using the default properties.
+  !
+  CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file, error)
+  CALL check("h5fcreate_f",error, total_error)
+  !
+  ! Create variable-length datatype for file and memory.
+  !
+  CALL H5Tvlen_create_f(H5T_STD_I32LE, filetype, error)
+  CALL check("H5Tvlen_create_f",error, total_error)
+  CALL H5Tvlen_create_f(H5T_NATIVE_INTEGER, memtype, error)
+  CALL check("H5Tvlen_create_f",error, total_error)
+  !
+  ! Create dataspace.
+  !
+  CALL h5screate_simple_f(1, dims, space, error)
+  CALL check("h5screate_simple_f",error, total_error)
+  !
+  ! Create the dataset and write the variable-length data to it.
+  !
+  CALL H5Dcreate_f(file, dataset, filetype, space, dset, error)
+  CALL check("h5dcreate_f",error, total_error)
+ 
+  f_ptr = C_LOC(wdata(1))
+  CALL h5dwrite_f(dset, memtype, f_ptr, error)
+  CALL check("h5dwrite_f",error, total_error)
+  !
+  ! Close and release resources.  Note the use of H5Dvlen_reclaim
+  ! removes the need to manually deallocate the previously allocated
+  ! data.
+  !
+
+  CALL h5dclose_f(dset , error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL h5sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  CALL H5Tclose_f(filetype, error)
+  CALL check("h5tclose_f",error, total_error)
+  CALL H5Tclose_f(memtype, error)
+  CALL check("h5tclose_f",error, total_error)
+  CALL h5fclose_f(file , error)
+  CALL check("h5fclose_f",error, total_error)
+
+  !
+  ! Now we begin the read section of this example.
+
+  !
+  ! Open file and dataset.
+  !
+  CALL h5fopen_f(filename, H5F_ACC_RDONLY_F, file, error)
+  CALL check("h5fopen_f",error, total_error)
+  CALL h5dopen_f(file, dataset, dset, error)
+  CALL check("h5dopen_f",error, total_error)
+
+  !
+  ! Get dataspace and allocate memory for array of vlen structures.
+  ! This does not actually allocate memory for the vlen data, that
+  ! will be done by the library.
+  !
+  CALL H5Dget_space_f(dset, space, error)
+  CALL check("H5Dget_space_f",error, total_error)
+  dim0 = dims(1)
+  CALL H5Sget_simple_extent_dims_f(space, dims, maxdims, error) 
+  CALL check("H5Sget_simple_extent_dims_f",error, total_error)
+  CALL VERIFY("H5Sget_simple_extent_dims_f", INT(dims(1)), dim0, total_error)
+
+  !
+  ! Create the memory datatype.
+  !
+  CALL H5Tvlen_create_f(H5T_NATIVE_INTEGER, memtype, error) 
+  CALL check("H5Tvlen_create_f",error, total_error)
+
+  !
+  ! Read the data.
+  !
+  f_ptr = C_LOC(rdata(1))
+  CALL H5Dread_f(dset, memtype, f_ptr, error)
+  CALL check("H5Dread_f",error, total_error)
+
+  DO i = 1, dims(1)
+     CALL c_f_pointer(rdata(i)%p, ptr_r, [rdata(i)%len] )
+     DO j = 1, rdata(i)%len
+        CALL VERIFY("t_vlen", ptr_r(j), ptr(i)%data(j), total_error)
+     ENDDO
+  ENDDO
+  !
+  ! Close and release resources.
+  !
+  DEALLOCATE(ptr)
+  CALL h5dvlen_reclaim_f(memtype, space, H5P_DEFAULT_F, f_ptr, error)
+  CALL h5dclose_f(dset, error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL h5sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  CALL H5Tclose_f(memtype, error)
+  CALL check("h5tclose_f",error, total_error)
+  CALL h5fclose_f(file, error)
+  CALL check("h5fclose_f",error, total_error)
+
+END SUBROUTINE t_vlen
+
+
+SUBROUTINE t_vlstring(total_error)
+
+  USE HDF5
+  USE ISO_C_BINDING
+
+  IMPLICIT NONE
+
+  INTEGER, INTENT(INOUT) :: total_error
+
+  CHARACTER(LEN=18), PARAMETER :: filename  = "t_vlstring.h5"
+  CHARACTER(LEN=3) , PARAMETER :: dataset   = "DS1"
+
+  INTEGER(SIZE_T), PARAMETER :: dim0      = 4
+  INTEGER(SIZE_T), PARAMETER :: sdim      = 7
+  INTEGER(HID_T)  :: file, filetype, space, dset ! Handles
+  INTEGER :: error
+  INTEGER(HSIZE_T), DIMENSION(1:1) :: dims = (/dim0/)
+  INTEGER(HSIZE_T), DIMENSION(1:2) :: maxdims
+  
+  CHARACTER(LEN=sdim), DIMENSION(1:dim0), TARGET :: &
+       wdata = (/"Parting", "is such", "sweet  ", "sorrow."/) ! Write buffer
+  CHARACTER(LEN=sdim), DIMENSION(:), ALLOCATABLE :: rdata ! Read buffer
+  INTEGER(HSIZE_T), DIMENSION(2) :: data_dims = (/sdim,dim0/)
+  INTEGER(SIZE_T), DIMENSION(4) :: str_len = (/7,7,5,7/)
+  INTEGER :: i
+
+  !
+  ! Create a new file using the default properties.
+  !
+  CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file, error)
+  CALL check("h5fcreate_f",error, total_error)
+  !
+  ! Create file and memory datatypes.  For this example we will save
+  ! the strings as C variable length strings, H5T_STRING is defined
+  ! as a variable length string.
+  !
+  CALL H5Tcopy_f(H5T_STRING, filetype, error)
+  CALL check("H5Tcopy_f",error, total_error)
+  CALL H5Tset_strpad_f(filetype, H5T_STR_NULLPAD_F, error)
+  CALL check("H5Tset_strpad_f",error, total_error)
+  !
+  ! Create dataspace.
+  !
+  CALL h5screate_simple_f(1, dims, space, error)
+  CALL check("h5screate_simple_f",error, total_error)
+  !
+  ! Create the dataset and write the variable-length string data to
+  ! it.
+  !
+  CALL h5dcreate_f(file, dataset, filetype, space, dset, error)
+  CALL check("h5dcreate_f",error, total_error)
+
+  CALL h5dwrite_vl_f(dset, filetype, wdata, data_dims, str_len, error, space)
+  CALL check("h5dwrite_vl_f",error, total_error)
+
+  !
+  ! Close and release resources.
+  !
+  CALL h5dclose_f(dset , error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL h5sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  CALL H5Tclose_f(filetype, error)
+  CALL check("h5tclose_f",error, total_error)
+  CALL h5fclose_f(file , error)
+  CALL check("h5fclose_f",error, total_error)
+
+  !
+  ! Now we begin the read section of this example.
+  !
+  !
+  ! Open file and dataset.
+  !
+  CALL h5fopen_f(filename, H5F_ACC_RDONLY_F, file, error)
+  CALL check("h5fopen_f",error, total_error)
+  CALL h5dopen_f(file, dataset, dset, error)
+  CALL check("h5dopen_f",error, total_error)
+  !
+  ! Get the datatype.
+  !
+  CALL H5Dget_type_f(dset, filetype, error)
+  CALL check("H5Dget_type_f",error, total_error)
+  !
+  ! Get dataspace and allocate memory for read buffer.
+  !
+  CALL H5Dget_space_f(dset, space, error)
+  CALL check("H5Dget_space_f",error, total_error)
+  CALL H5Sget_simple_extent_dims_f(space, dims, maxdims, error) 
+  CALL check("H5Sget_simple_extent_dims_f",error, total_error)
+  CALL VERIFY("H5Sget_simple_extent_dims_f", INT(dims(1)), INT(dim0), total_error)
+
+  ALLOCATE(rdata(1:dims(1)))
+
+  !
+  ! Read the data.
+  !
+  CALL h5dread_vl_f(dset, filetype, rdata, data_dims, str_len, error, space)
+  CALL check("H5Dread_vl_f",error, total_error)
+
+  !
+  ! Output the data to the screen.
+  !
+  DO i = 1, dims(1)
+     CALL verifystring("h5dopen_f",TRIM(rdata(i)),TRIM(wdata(i)) , total_error)
+  END DO
+
+  DEALLOCATE(rdata)
+  CALL h5dclose_f(dset, error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL h5sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  CALL H5Tclose_f(filetype, error)
+  CALL check("h5tclose_f",error, total_error)
+  CALL h5fclose_f(file , error)
+  CALL check("h5fclose_f",error, total_error)
+
+END SUBROUTINE t_vlstring
+
+SUBROUTINE t_vlstring_readwrite(total_error)
+
+! test writing and reading vl string using h5dread_f and h5dwrite_f, C_LOC and C_F_POINTER
+
+  USE HDF5
+  USE ISO_C_BINDING
+
+  IMPLICIT NONE
+
+  INTEGER, INTENT(INOUT) :: total_error
+
+  CHARACTER(LEN=19), PARAMETER :: filename  = "t_vlstringrw_F03.h5"
+  CHARACTER(LEN=3) , PARAMETER :: dataset   = "DS1"
+  CHARACTER(LEN=3) , PARAMETER :: dataset2D = "DS2"
+
+  INTEGER(HSIZE_T) , PARAMETER :: dim0 = 4
+  INTEGER(HSIZE_T) , PARAMETER :: dim1 = 2
+  INTEGER(SIZE_T)  , PARAMETER :: sdim = 7
+  INTEGER(HID_T)               :: file, filetype, space, dset ! Handles
+  INTEGER(HSIZE_T), DIMENSION(1:1) :: dims = (/dim0/)
+  INTEGER(HSIZE_T), DIMENSION(1:2) :: dims2D = (/dim1,dim0/)
+  INTEGER(HSIZE_T), DIMENSION(1:2) :: maxdims
+  
+  TYPE(C_PTR), DIMENSION(1:dim0), TARGET :: wdata
+  CHARACTER(len=7, KIND=c_char), DIMENSION(1:1), TARGET :: A = "123456"//C_NULL_CHAR
+  CHARACTER(len=5, KIND=c_char), DIMENSION(1:1), TARGET :: B = "7890"//C_NULL_CHAR
+  CHARACTER(len=4, KIND=c_char), DIMENSION(1:1), TARGET :: C = "abc"//C_NULL_CHAR
+  CHARACTER(len=3, KIND=c_char), DIMENSION(1:1), TARGET :: D = "df"//C_NULL_CHAR
+
+  TYPE(C_PTR), DIMENSION(1:dim1,1:dim0), TARGET :: wdata2D
+  
+  CHARACTER(len=7, KIND=c_char), DIMENSION(1:1), TARGET :: A11 = "A(1,1)"//C_NULL_CHAR
+  CHARACTER(len=4, KIND=c_char), DIMENSION(1:1), TARGET :: A12 = "A12"//C_NULL_CHAR
+  CHARACTER(len=5, KIND=c_char), DIMENSION(1:1), TARGET :: A13 = "A_13"//C_NULL_CHAR
+  CHARACTER(len=8, KIND=c_char), DIMENSION(1:1), TARGET :: A14 = "A_{1,4}"//C_NULL_CHAR
+  CHARACTER(len=8, KIND=c_char), DIMENSION(1:1), TARGET :: A21 = "A_{2,1}"//C_NULL_CHAR
+  CHARACTER(len=5, KIND=c_char), DIMENSION(1:1), TARGET :: A22 = "A_22"//C_NULL_CHAR
+  CHARACTER(len=4, KIND=c_char), DIMENSION(1:1), TARGET :: A23 = "A23"//C_NULL_CHAR
+  CHARACTER(len=7, KIND=c_char), DIMENSION(1:1), TARGET :: A24 = "A(2,4)"//C_NULL_CHAR
+
+  TYPE(C_PTR), DIMENSION(:), ALLOCATABLE, TARGET :: rdata ! Read buffer
+  TYPE(C_PTR), DIMENSION(:,:), ALLOCATABLE, TARGET :: rdata2D ! Read 2D buffer
+  CHARACTER(len=8, kind=c_char), POINTER :: data ! A pointer to a Fortran string
+  CHARACTER(len=8, kind=c_char), DIMENSION(1:4) :: data_w ! A pointer to a Fortran string
+  CHARACTER(len=8, kind=c_char), DIMENSION(1:dim1,1:dim0) :: data2D_w ! A pointer to a Fortran string
+  TYPE(C_PTR) :: f_ptr
+  INTEGER :: i, j, len
+  INTEGER :: error
+
+  ! Initialize array of C pointers
+
+  wdata(1) = C_LOC(A(1))
+  wdata(2) = C_LOC(B(1))
+  wdata(3) = C_LOC(C(1))
+  wdata(4) = C_LOC(D(1))
+
+  data_w(1) = A(1)
+  data_w(2) = B(1)
+  data_w(3) = C(1)
+  data_w(4) = D(1)
+
+  wdata2D(1,1) = C_LOC(A11(1))
+  wdata2D(1,2) = C_LOC(A12(1))
+  wdata2D(1,3) = C_LOC(A13(1))
+  wdata2D(1,4) = C_LOC(A14(1))
+  wdata2D(2,1) = C_LOC(A21(1))
+  wdata2D(2,2) = C_LOC(A22(1))
+  wdata2D(2,3) = C_LOC(A23(1))
+  wdata2D(2,4) = C_LOC(A24(1))
+
+  data2D_w(1,1) = A11(1)
+  data2D_w(1,2) = A12(1)
+  data2D_w(1,3) = A13(1)
+  data2D_w(1,4) = A14(1)
+  data2D_w(2,1) = A21(1)
+  data2D_w(2,2) = A22(1)
+  data2D_w(2,3) = A23(1)
+  data2D_w(2,4) = A24(1)
+
+  !
+  ! Create a new file using the default properties.
+  !
+  CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file, error)
+  CALL check("h5fcreate_f",error, total_error)
+  !
+  ! Create file and memory datatypes.  For this test we will save
+  ! the strings as C variable length strings, H5T_STRING is defined
+  ! as a variable length string.
+  !
+  CALL H5Tcopy_f(H5T_STRING, filetype, error)
+  CALL check("H5Tcopy_f",error, total_error)
+  !
+  ! Create dataspace.
+  !
+  CALL h5screate_simple_f(1, dims, space, error)
+  CALL check("h5screate_simple_f",error, total_error)
+  !
+  ! Create the dataset and write the variable-length string data to
+  ! it.
+  !
+  CALL h5dcreate_f(file, dataset, filetype, space, dset, error)
+  CALL check("h5dcreate_f",error, total_error)
+
+  f_ptr = C_LOC(wdata(1))
+  CALL h5dwrite_f(dset, filetype, f_ptr, error)
+  CALL check("h5dwrite_f",error, total_error)
+
+  !
+  ! Close and release resources.
+  !
+  CALL h5dclose_f(dset , error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL h5sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+
+  !
+  ! Create dataspace.
+  !
+  CALL h5screate_simple_f(2, dims2D, space, error)
+  CALL check("h5screate_simple_f",error, total_error)
+  !
+  ! Create the dataset and write the variable-length string data to
+  ! it.
+  !
+  CALL h5dcreate_f(file, dataset2D, filetype, space, dset, error)
+  CALL check("h5dcreate_f",error, total_error)
+
+  f_ptr = C_LOC(wdata2D(1,1))
+  CALL h5dwrite_f(dset, filetype, f_ptr, error)
+  CALL check("h5dwrite_f",error, total_error)
+
+  !
+  ! Close and release resources.
+  !
+  CALL h5dclose_f(dset , error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL h5sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+
+  CALL H5Tclose_f(filetype, error)
+  CALL check("h5tclose_f",error, total_error)
+  CALL h5fclose_f(file , error)
+  CALL check("h5fclose_f",error, total_error)
+
+  !
+  ! Now we begin the read section of this test.
+  !
+  !
+  ! Open file and dataset.
+  !
+  CALL h5fopen_f(filename, H5F_ACC_RDONLY_F, file, error)
+  CALL check("h5fopen_f",error, total_error)
+  CALL h5dopen_f(file, dataset, dset, error)
+  CALL check("h5dopen_f",error, total_error)
+  !
+  ! Get the datatype.
+  !
+  CALL H5Dget_type_f(dset, filetype, error)
+  CALL check("H5Dget_type_f",error, total_error)
+  !
+  ! Get dataspace and allocate memory for read buffer.
+  !
+  CALL H5Dget_space_f(dset, space, error)
+  CALL check("H5Dget_space_f",error, total_error)
+
+  CALL H5Sget_simple_extent_dims_f(space, dims, maxdims, error) 
+  CALL check("H5Sget_simple_extent_dims_f",error, total_error)
+  ALLOCATE(rdata(1:dims(1)))
+  !
+  ! Read the data.
+  !
+  
+  f_ptr = C_LOC(rdata(1))
+  CALL h5dread_f(dset, H5T_STRING, f_ptr, error)
+  CALL check("H5Dread_f",error, total_error)
+
+  !
+  ! Check the data.
+  !
+  DO i = 1, dims(1)
+     CALL C_F_POINTER(rdata(i), data)
+     len = 0
+     DO
+        IF(DATA(len+1:len+1).EQ.C_NULL_CHAR.OR.len.GE.8) EXIT
+        len = len + 1
+     ENDDO
+     CALL verifystring("h5dread_f",data(1:len), data_w(i)(1:len), total_error)
+  END DO
+
+  DEALLOCATE(rdata)
+  CALL h5dclose_f(dset , error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL h5sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  !
+  ! Test reading in 2D dataset
+  !
+  CALL h5dopen_f(file, dataset2D, dset, error)
+  CALL check("h5dopen_f",error, total_error)
+  !
+  ! Get the datatype.
+  !
+  CALL H5Dget_type_f(dset, filetype, error)
+  CALL check("H5Dget_type_f",error, total_error)
+  !
+  ! Get dataspace and allocate memory for read buffer.
+  !
+  CALL H5Dget_space_f(dset, space, error)
+  CALL check("H5Dget_space_f",error, total_error)
+
+
+  CALL H5Sget_simple_extent_dims_f(space, dims2D, maxdims, error) 
+  CALL check("H5Sget_simple_extent_dims_f",error, total_error)
+  ALLOCATE(rdata2D(1:dims2D(1),1:dims2D(2)))
+
+  !
+  ! Read the data.
+  !
+  
+  f_ptr = C_LOC(rdata2D(1,1))
+  CALL h5dread_f(dset, H5T_STRING, f_ptr, error)
+  CALL check("H5Dread_f",error, total_error)
+
+  !
+  ! Check the data.
+  !
+  DO i = 1, dims2D(1)
+     DO j = 1, dims2D(2)
+        CALL C_F_POINTER(rdata2D(i,j), DATA)
+        len = 0
+        DO
+           IF(DATA(len+1:len+1).EQ.C_NULL_CHAR.OR.len.GE.8) EXIT
+           len = len + 1
+        ENDDO
+        CALL verifystring("h5dread_f",DATA(1:len), data2D_w(i,j)(1:len), total_error)
+     ENDDO
+  END DO
+
+  DEALLOCATE(rdata2D)
+  CALL h5dclose_f(dset , error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL h5sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+
+  CALL H5Tclose_f(filetype, error)
+  CALL check("h5tclose_f",error, total_error)
+  CALL h5fclose_f(file , error)
+  CALL check("h5fclose_f",error, total_error)
+
+END SUBROUTINE t_vlstring_readwrite
+
+
+SUBROUTINE t_string(total_error)
+
+  USE HDF5
+  USE ISO_C_BINDING
+
+  IMPLICIT NONE
+
+  INTEGER, INTENT(INOUT) :: total_error
+
+  CHARACTER(LEN=20), PARAMETER :: filename  = "t_string_F03.h5"
+  CHARACTER(LEN=3) , PARAMETER :: dataset   = "DS1"
+  INTEGER          , PARAMETER :: dim0      = 4
+  INTEGER(SIZE_T)  , PARAMETER :: sdim      = 8
+
+  INTEGER(HID_T)  :: file, filetype, memtype, space, dset ! Handles
+  INTEGER :: error
+
+  INTEGER(HSIZE_T), DIMENSION(1:1) :: dims = (/dim0/)
+  INTEGER(HSIZE_T), DIMENSION(1:1) :: maxdims
+
+  CHARACTER(LEN=sdim), DIMENSION(1:dim0), TARGET :: &
+       wdata = (/"Parting", "is such", "sweet  ", "sorrow."/)
+  CHARACTER(LEN=sdim), DIMENSION(:), ALLOCATABLE, TARGET :: rdata
+  INTEGER :: i
+  INTEGER(SIZE_T) :: size
+  TYPE(C_PTR) :: f_ptr
+  !
+  ! Create a new file using the default properties.
+  !
+  CALL h5fcreate_f(filename, H5F_ACC_TRUNC_F, file, error)
+  CALL check("h5fcreate_f",error, total_error)
+  !
+  ! Create file datatypes.  For this example we will save
+  ! the strings as FORTRAN strings
+  !
+  CALL H5Tcopy_f(H5T_FORTRAN_S1, filetype, error)
+  CALL check("H5Tcopy_f",error, total_error)
+  CALL H5Tset_size_f(filetype, sdim, error)
+  CALL check("H5Tset_size_f",error, total_error)
+  !
+  ! Create dataspace.
+  !
+  CALL h5screate_simple_f(1, dims, space, error)
+  CALL check("h5screate_simple_f",error, total_error)
+  !
+  ! Create the dataset and write the string data to it.
+  !
+  CALL h5dcreate_f(file, dataset, filetype, space, dset, error)
+  CALL check("h5dcreate_f",error, total_error)
+
+  f_ptr = C_LOC(wdata(1)(1:1))
+  CALL H5Dwrite_f(dset, filetype, f_ptr, error)
+  CALL check("H5Dwrite_f",error, total_error)
+  !
+  ! Close and release resources.
+  !
+  CALL h5dclose_f(dset , error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL h5sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  CALL H5Tclose_f(filetype, error)
+  CALL check("h5tclose_f",error, total_error)
+  CALL h5fclose_f(file , error)
+  CALL check("h5fclose_f",error, total_error)
+  !
+  ! Now we begin the read section of this example.
+  !
+  ! Open file and dataset.
+  !
+  CALL h5fopen_f(filename, H5F_ACC_RDONLY_F, file, error)
+  CALL check("h5fopen_f",error, total_error)
+  CALL h5dopen_f(file, dataset, dset, error)
+  CALL check("h5dopen_f",error, total_error)
+  !
+  ! Get the datatype and its size.
+  !
+  CALL H5Dget_type_f(dset, filetype, error)
+  CALL check("H5Dget_type_f",error, total_error)
+  CALL H5Tget_size_f(filetype, size, error)
+  CALL check("H5Tget_size_f",error, total_error)
+  CALL VERIFY("H5Tget_size_f", size, sdim, total_error)
+  !
+  ! Get dataspace.
+  !
+  CALL H5Dget_space_f(dset, space, error)
+  CALL check("H5Dget_space_f",error, total_error)
+  CALL H5Sget_simple_extent_dims_f(space, dims, maxdims, error) 
+  CALL check("H5Sget_simple_extent_dims_f",error, total_error)
+  CALL VERIFY("H5Sget_simple_extent_dims_f", INT(dims(1)), dim0, total_error)
+
+  ALLOCATE(rdata(1:dims(1)))
+  !
+  ! Create the memory datatype.
+  !
+  CALL H5Tcopy_f(H5T_FORTRAN_S1, memtype, error) 
+  CALL check("H5Tcopy_f",error, total_error)
+  CALL H5Tset_size_f(memtype, sdim, error) 
+  CALL check("H5Tset_size_f",error, total_error)
+  !
+  ! Read the data.
+  !
+  f_ptr = C_LOC(rdata(1)(1:1))
+  CALL H5Dread_f(dset, memtype, f_ptr, error, space)
+  CALL check("H5Dread_f",error, total_error)
+
+  DO i = 1, dims(1)
+     CALL verifystring("h5dread_f",TRIM(rdata(i)),TRIM(wdata(i)) , total_error)
+  END DO
+
+  DEALLOCATE(rdata)
+
+  !
+  ! Close and release resources.
+  !
+  CALL H5Dclose_f(dset, error)
+  CALL check("h5dclose_f",error, total_error)
+  CALL H5Sclose_f(space, error)
+  CALL check("h5sclose_f",error, total_error)
+  CALL H5Tclose_f(memtype, error)
+  CALL check("h5tclose_f",error, total_error)
+  CALL H5Fclose_f(file, error)
+  CALL check("h5fclose_f",error, total_error)
+
+
+END SUBROUTINE t_string
+
+
diff --git a/fortran/test/tH5VL.f90 b/fortran/test/tH5VL.f90
index 3afd025..85feb2b 100644
--- a/fortran/test/tH5VL.f90
+++ b/fortran/test/tH5VL.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/tH5VL.f90
+!
+! NAME
+!  tH5VL.f90
+!
+! FUNCTION
+!  Basic testing of Fortran Variable_length datatypes APIs.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,12 +22,11 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! CONTAINS SUBROUTINES
+!  vl_test_integer, vl_test_real, vl_test_string 
 !
-!
-!    Testing Variable_length datatypes
-!
-!
-!
+!*****
+
         SUBROUTINE vl_test_integer(cleanup, total_error)
         USE HDF5 ! This module contains all necessary modules
 
@@ -105,7 +113,8 @@
               CALL check("h5dwrite_int_f", error, total_error)
 
 
-          !
+
+          !   
           ! End access to the dataset and release resources used by it.
           !
           CALL h5dclose_f(dset_id, error)
@@ -154,7 +163,6 @@
               endif
               enddo
 
-
           !
           CALL h5dclose_f(dset_id, error)
               CALL check("h5dclose_f", error, total_error)
diff --git a/fortran/test/tH5Z.f90 b/fortran/test/tH5Z.f90
index 6262528..cd6a343 100644
--- a/fortran/test/tH5Z.f90
+++ b/fortran/test/tH5Z.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/tH5Z.f90
+!
+! NAME
+!  tH5Z.f90
+!
+! FUNCTION
+!  Basic testing of Fortran H5Z szip APIs.
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,6 +22,11 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! CONTAINS SUBROUTINES
+!  filters_test, szip_test
+!
+!*****
+
     SUBROUTINE filters_test(cleanup, total_error)
 
 !   This subroutine tests following functionalities: h5zfilter_avail_f, h5zunregister_f
diff --git a/fortran/test/tf.f90 b/fortran/test/tf.f90
index 51c9410..d5c32c8 100644
--- a/fortran/test/tf.f90
+++ b/fortran/test/tf.f90
@@ -1,3 +1,12 @@
+!****h* root/fortran/test/tf.f90
+!
+! NAME
+!  tf.f90
+!
+! FUNCTION
+!  Contains subroutines which are needed in all the hdf5 fortran tests
+!
+! COPYRIGHT
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !   Copyright by The HDF Group.                                               *
 !   Copyright by the Board of Trustees of the University of Illinois.         *
@@ -13,12 +22,29 @@
 !   access to either file, you may request a copy from help at hdfgroup.org.     *
 ! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
 !
+! CONTAINS SUBROUTINES
+!  write_test_status, check, verify, verifyLogical, verifyString, h5_fixname_f,
+!  h5_cleanup_f, h5_exit_f, h5_env_nocleanup_f
 !
-!
-!    This file contains subroutines which are used in
-!    all the hdf5 fortran tests
-!
+!*****
 
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: verify_real
+!DEC$endif
+SUBROUTINE verify_real_kind_7(string,value,correct_value,total_error)
+  USE HDF5
+	  
+  INTEGER, PARAMETER :: real_kind_7 = SELECTED_REAL_KIND(Fortran_REAL_4) !should map to REAL*4 on most modern processors
+  CHARACTER(LEN=*) :: string
+  REAL(real_kind_7) :: value, correct_value
+  INTEGER :: total_error
+  IF (value .NE. correct_value) THEN
+     total_error=total_error+1
+     WRITE(*,*) "ERROR: INCORRECT REAL VALIDATION ", string
+  ENDIF
+  RETURN
+END SUBROUTINE verify_real_kind_7
 
 !This definition is needed for Windows DLLs
 !DEC$if defined(BUILD_HDF5_DLL)
@@ -77,7 +103,7 @@ END SUBROUTINE check
 !DEC$if defined(BUILD_HDF5_DLL)
 !DEC$attributes dllexport :: verify
 !DEC$endif
-SUBROUTINE VERIFY(string,value,correct_value,total_error)
+SUBROUTINE verify(string,value,correct_value,total_error)
   CHARACTER(LEN=*) :: string
   INTEGER :: value, correct_value, total_error
   IF (value .NE. correct_value) THEN
@@ -89,6 +115,25 @@ END SUBROUTINE verify
 
 !This definition is needed for Windows DLLs
 !DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: verify
+!DEC$endif
+SUBROUTINE verify_Fortran_INTEGER_4(string,value,correct_value,total_error)
+  USE HDF5
+  INTEGER, PARAMETER :: int_kind_8 = SELECTED_INT_KIND(Fortran_INTEGER_4)  ! should map to INTEGER*4 on most modern processors	
+  CHARACTER(LEN=*) :: string
+  INTEGER(int_kind_8) :: value, correct_value, total_error
+  IF (value .NE. correct_value) THEN
+     total_error=total_error+1
+     WRITE(*,*) "ERROR: INCORRECT VALIDATION ", string
+  ENDIF
+  RETURN
+END SUBROUTINE verify_Fortran_INTEGER_4
+
+
+
+
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
 !DEC$attributes dllexport :: verifyLogical
 !DEC$endif
 SUBROUTINE verifyLogical(string,value,correct_value,total_error)
@@ -106,16 +151,16 @@ END SUBROUTINE verifyLogical
 !DEC$if defined(BUILD_HDF5_DLL)
 !DEC$attributes dllexport :: verifyString
 !DEC$endif
-SUBROUTINE verifyString(string, value,correct_value,total_error)
-  CHARACTER(LEN=*) :: string
-  CHARACTER(LEN=*) :: value, correct_value
+SUBROUTINE verifystring(string, value,correct_value,total_error)
+  CHARACTER*(*) :: string
+  CHARACTER*(*) :: value, correct_value
   INTEGER :: total_error
   IF (TRIM(value) .NE. TRIM(correct_value)) THEN
      total_error = total_error + 1
      WRITE(*,*) "ERROR: INCORRECT VALIDATION ", string
   ENDIF
   RETURN
-END SUBROUTINE verifyString
+END SUBROUTINE verifystring
 
 
 !----------------------------------------------------------------------
diff --git a/fortran/testpar/Makefile.in b/fortran/testpar/Makefile.in
index f83a758..272fc45 100644
--- a/fortran/testpar/Makefile.in
+++ b/fortran/testpar/Makefile.in
@@ -177,6 +177,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -197,10 +198,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -244,7 +247,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/hl/Makefile.in b/hl/Makefile.in
index 268c023..6f7b51c 100644
--- a/hl/Makefile.in
+++ b/hl/Makefile.in
@@ -182,6 +182,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -202,10 +203,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -249,7 +252,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/hl/c++/Makefile.in b/hl/c++/Makefile.in
index 7fc5436..a629463 100644
--- a/hl/c++/Makefile.in
+++ b/hl/c++/Makefile.in
@@ -178,6 +178,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -198,10 +199,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -245,7 +248,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/hl/c++/examples/Makefile.in b/hl/c++/examples/Makefile.in
index ed3f1e7..f6612b8 100644
--- a/hl/c++/examples/Makefile.in
+++ b/hl/c++/examples/Makefile.in
@@ -144,6 +144,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -164,10 +165,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -211,7 +214,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/hl/c++/src/Makefile.in b/hl/c++/src/Makefile.in
index eed8271..e46f1c9 100644
--- a/hl/c++/src/Makefile.in
+++ b/hl/c++/src/Makefile.in
@@ -201,6 +201,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -221,10 +222,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -268,7 +271,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
@@ -419,7 +421,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
 # Add libtool shared library version numbers to the HDF5 library
 # See libtool versioning documentation online.
 LT_VERS_INTERFACE = 7
-LT_VERS_REVISION = 1
+LT_VERS_REVISION = 2
 LT_VERS_AGE = 0
 
 # Include src directory
diff --git a/hl/c++/test/Makefile.in b/hl/c++/test/Makefile.in
index a4efa8f..4c84e4c 100644
--- a/hl/c++/test/Makefile.in
+++ b/hl/c++/test/Makefile.in
@@ -174,6 +174,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -194,10 +195,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -241,7 +244,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/hl/examples/CMakeLists.txt b/hl/examples/CMakeLists.txt
index 28672b6..f60ae9e 100644
--- a/hl/examples/CMakeLists.txt
+++ b/hl/examples/CMakeLists.txt
@@ -52,6 +52,10 @@ FOREACH (example ${examples})
 ENDFOREACH (example ${examples})
 
 IF (BUILD_TESTING)
+  SET_TESTS_PROPERTIES (hl_ex_ex_lite2 PROPERTIES DEPENDS hl_ex_ex_lite1)
+ENDIF (BUILD_TESTING)
+
+IF (BUILD_TESTING)
   SET (HDF5_TEST_FILES
       image24pixel.txt
       image8.txt
diff --git a/hl/examples/Makefile.in b/hl/examples/Makefile.in
index dc7133c..72b6f40 100644
--- a/hl/examples/Makefile.in
+++ b/hl/examples/Makefile.in
@@ -144,6 +144,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -164,10 +165,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -211,7 +214,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/hl/fortran/Makefile.in b/hl/fortran/Makefile.in
index de20146..19d6b62 100644
--- a/hl/fortran/Makefile.in
+++ b/hl/fortran/Makefile.in
@@ -182,6 +182,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -202,10 +203,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -249,7 +252,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/hl/fortran/examples/CMakeLists.txt b/hl/fortran/examples/CMakeLists.txt
index 50fa1ea..7b97bd3 100644
--- a/hl/fortran/examples/CMakeLists.txt
+++ b/hl/fortran/examples/CMakeLists.txt
@@ -12,6 +12,7 @@ INCLUDE_DIRECTORIES (
 
 SET (examples
     exlite
+    ex_ds1
 )
 
 FOREACH (example ${examples})
diff --git a/hl/fortran/examples/Makefile.am b/hl/fortran/examples/Makefile.am
index 2b35205..4286fe3 100644
--- a/hl/fortran/examples/Makefile.am
+++ b/hl/fortran/examples/Makefile.am
@@ -31,13 +31,14 @@ endif
 # be run.
 # We don't tell automake about these programs so that it doesn't try to
 # compile them with the regular fortran compiler.
-TEST_PROG=exlite
+TEST_PROG=exlite ex_ds1
 
 # List files to be installed here
-INSTALL_FILES= exlite.f90
+INSTALL_FILES= exlite.f90 ex_ds1.f90
 INSTALL_SCRIPT_FILES = run-hlfortran-ex.sh
 
-# Mark this directory as part of the Fortran API
+# Mark this directory as part of the Fortran API (this affects output
+# from tests in conclude.am)
 FORTRAN_API=yes
 
 # Tell automake how to build examples using h5fc
diff --git a/hl/fortran/examples/Makefile.in b/hl/fortran/examples/Makefile.in
index 80fbb23..ab576b1 100644
--- a/hl/fortran/examples/Makefile.in
+++ b/hl/fortran/examples/Makefile.in
@@ -145,6 +145,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -165,10 +166,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -212,7 +215,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
@@ -368,13 +370,14 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog *.h5
 # be run.
 # We don't tell automake about these programs so that it doesn't try to
 # compile them with the regular fortran compiler.
-TEST_PROG = exlite
+TEST_PROG = exlite ex_ds1
 
 # List files to be installed here
-INSTALL_FILES = exlite.f90
+INSTALL_FILES = exlite.f90 ex_ds1.f90
 INSTALL_SCRIPT_FILES = run-hlfortran-ex.sh
 
-# Mark this directory as part of the Fortran API
+# Mark this directory as part of the Fortran API (this affects output
+# from tests in conclude.am)
 FORTRAN_API = yes
 
 # Tell automake how to install examples
diff --git a/hl/fortran/examples/ex_ds1.f90 b/hl/fortran/examples/ex_ds1.f90
new file mode 100644
index 0000000..377a641
--- /dev/null
+++ b/hl/fortran/examples/ex_ds1.f90
@@ -0,0 +1,192 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+! * Copyright by The HDF Group.                                               *
+! * Copyright by the Board of Trustees of the University of Illinois.         *
+! * All rights reserved.                                                      *
+! *                                                                           *
+! * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+! * terms governing use, modification, and redistribution, is contained in    *
+! * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+! * of the source code distribution tree; Copyright.html can be found at the  *
+! * root level of an installed copy of the electronic HDF5 document set and   *
+! * is linked from the top-level documents page.  It can also be found at     *
+! * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+! * access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+PROGRAM example_ds
+
+  USE HDF5
+  USE H5LT
+  USE H5DS
+
+  IMPLICIT NONE
+
+  INTEGER, PARAMETER :: RANK      = 2 ! rank of DATA dataset 
+  INTEGER, PARAMETER :: DIM_DATA  = 12
+  INTEGER, PARAMETER :: DIM1_SIZE = 3
+  INTEGER, PARAMETER :: DIM2_SIZE = 4
+  INTEGER, PARAMETER :: DIM1      = 1
+  INTEGER, PARAMETER :: DIM2      = 2
+
+  CHARACTER(LEN=6), PARAMETER :: DSET_NAME = "MYDATA"
+  CHARACTER(LEN=5), PARAMETER :: DS_1_NAME = "Xaxis"
+  CHARACTER(LEN=5), PARAMETER :: DS_2_NAME = "Yaxis"
+
+
+  INTEGER(hid_t) :: fid    ! file ID
+  INTEGER(hid_t) :: did    ! dataset ID
+  INTEGER(hid_t) :: dsid   ! DS dataset ID
+  INTEGER :: rankds = 1    ! rank of DS dataset 
+  INTEGER(hsize_t), DIMENSION(1:rank) ::  dims  = (/DIM2_SIZE,DIM1_SIZE/) ! size of data dataset 
+  INTEGER, DIMENSION(1:DIM_DATA) :: buf = (/1,2,3,4,5,6,7,8,9,10,11,12/)  ! data of data dataset 
+  INTEGER(hsize_t), DIMENSION(1:1) ::  s1_dim  = (/DIM1_SIZE/)  ! size of DS 1 dataset 
+  INTEGER(hsize_t), DIMENSION(1:1) ::  s2_dim  = (/DIM2_SIZE/)  ! size of DS 2 dataset 
+  REAL, DIMENSION(1:DIM1_SIZE) :: s1_wbuf = (/10,20,30/)     ! data of DS 1 dataset 
+  REAL, DIMENSION(1:DIM2_SIZE) :: s2_wbuf = (/10,20,50,100/) ! data of DS 2 dataset 
+  INTEGER :: err
+  INTEGER :: num_scales
+  INTEGER(size_t) :: name_len
+  CHARACTER(LEN=80) :: name
+  INTEGER(size_t) :: label_len
+  CHARACTER(LEN=80) :: label
+  LOGICAL :: is_attached, is_scale
+
+  !
+  ! Initialize FORTRAN predefined datatypes.
+  !
+  CALL h5open_f(err)
+
+  ! create a file using default properties
+  CALL H5Fcreate_f("ex_ds1.h5",H5F_ACC_TRUNC_F, fid, err)
+
+  ! make a dataset 
+  CALL H5LTmake_dataset_int_f(fid, DSET_NAME, rank,dims,buf, err)
+
+  ! make a DS dataset for the first dimension
+  CALL H5LTmake_dataset_float_f(fid,DS_1_NAME,rankds,s1_dim,s1_wbuf,err)
+
+  ! make a DS dataset for the second dimension
+  CALL H5LTmake_dataset_float_f(fid,DS_2_NAME,rankds,s2_dim,s2_wbuf,err)
+
+  !-------------------------------------------------------------------------
+  ! attach the DS_1_NAME dimension scale to DSET_NAME at dimension 1
+  ! and then detach it.
+  !-------------------------------------------------------------------------
+ 
+  ! get the dataset id for DSET_NAME
+  CALL H5Dopen_f(fid, DSET_NAME, did, err)
+
+  ! get the DS dataset id
+  CALL H5Dopen_f(fid, DS_1_NAME, dsid, err)
+
+  WRITE(*,'(/,5A,I0)') &
+       "Attach Dimension Scale """,TRIM(DS_1_NAME),'" to "', TRIM(DSET_NAME), '" at dimension ', DIM1
+
+  ! attach the DS_1_NAME dimension scale to DSET_NAME at dimension index 1
+  CALL H5DSattach_scale_f(did, dsid, DIM1, err)
+
+  ! Test if dimension Scale Attached 
+  CALL H5DSis_attached_f(did, dsid, DIM1, is_attached, err)
+  WRITE(*,'(/,5X 3(A,1X),I0,A,L1)') 'Is',TRIM(DS_1_NAME),&
+       'attached to dimension',DIM1,' ... ',is_attached
+  
+
+  ! Check to see how many Dimension Scales are attached
+
+  CALL H5DSget_num_scales_f(did, DIM1, num_scales, err)
+
+  WRITE(*,'(5X,A,I0)') 'Total number of Dimension Scales Attached ... ', num_scales
+
+  ! Detach scale
+  CALL H5DSdetach_scale_f(did, dsid, DIM1, err)
+  WRITE(*,'(/,5A,I0)') &
+       "Detach Dimension Scale """,TRIM(DS_1_NAME),'" from "', TRIM(DSET_NAME), '" at dimension ', DIM1
+
+  ! Check to see if a dimension scale is attached, should be .false.
+  CALL H5DSis_attached_f(did, dsid, DIM1, is_attached, err)
+  WRITE(*,'(/,5X,3(A,1X),I0,A,L1)') 'Is',TRIM(DS_1_NAME),&
+       'attached to dimension',DIM1,' ... ',is_attached
+  
+  !-------------------------------------------------------------------------
+  ! set the DS_1_NAME dimension scale to DSET_NAME at dimension 1
+  !-------------------------------------------------------------------------
+ 
+  WRITE(*,'(/,5A,I0)') &
+       'Set Dimension Scale "', TRIM(DS_1_NAME), '" to "', TRIM(DSET_NAME), '" at dimension ', DIM1
+
+  CALL H5DSset_scale_f(dsid, err, "Set X")
+
+  ! Test if Dimension Scale
+
+  CALL H5DSis_scale_f(dsid, is_scale, err)
+
+  ! Get scale name
+
+  name_len = 25
+  name = ''
+  CALL H5DSget_scale_name_f(dsid, name, name_len, err)
+
+  WRITE(*,'(/,5X,A,A)') 'The Dimension Scale name is ... ', name(1:name_len) 
+
+  ! Setting Dimension Scale Label
+
+  WRITE(*,'(/,A,I0)') "Setting Dimension Scale label ""X"" for dimension ", DIM1 
+
+  CALL H5DSset_label_f(did, DIM1, "X", err)
+
+  label_len = 25
+  label = ''
+  CALL H5DSget_label_f(did, DIM1, label, label_len, err)
+
+  WRITE(*,'(/,5X,A,I0,2A)') 'Dimension Scale Label for dimension ', DIM1, ' is ... ', label(1:label_len)
+
+  ! close DS id
+  CALL H5Dclose_f(dsid, err)
+  
+  !-------------------------------------------------------------------------
+  ! attach the DS_2_NAME dimension scale to DSET_NAME
+  !-------------------------------------------------------------------------
+ 
+  ! get the DS dataset id
+  CALL H5Dopen_f(fid, DS_2_NAME, dsid, err)
+
+  ! attach the DS_2_NAME dimension scale to DSET_NAME as the 2nd dimension (index 2)
+
+  WRITE(*,'(/,5A,I0)') &
+       'Set Dimension Scale "', TRIM(DS_2_NAME), '" to "', TRIM(DSET_NAME), '" at dimension ', DIM2
+
+  CALL H5DSattach_scale_f(did, dsid, DIM2, err)
+
+  CALL H5DSis_attached_f(did, dsid, DIM2, is_attached, err)
+
+  CALL H5DSset_scale_f(dsid, err, "Set Y")
+
+  ! Get scale name
+  name_len = 25
+  name = ''
+  CALL H5DSget_scale_name_f(dsid, name(1:name_len), name_len, err)
+
+  WRITE(*,'(/,5X,A,A)') 'The Dimension Scale name is ... ', name(1:name_len) 
+
+
+  ! Setting Dimension Scale Label
+
+  WRITE(*,'(/,A,I0)') "Setting Dimension Scale label ""Y"" for dimension ", DIM2
+
+  CALL H5DSset_label_f(did, DIM2, "Y", err)
+
+  ! Get Label
+
+  label_len = 25
+  label = ''
+  CALL H5DSget_label_f(did, DIM2, label, label_len, err)
+  
+  WRITE(*,'(/,5X,A,I0,2A,/)') 'Dimension Scale Label for dimension ', DIM2, ' is ... ', label(1:label_len)
+
+ ! close DS id
+  CALL H5Dclose_f(dsid, err)
+
+ ! close file 
+  CALL H5Fclose_f(fid, err)
+
+END PROGRAM example_ds
+
diff --git a/hl/fortran/src/CMakeLists.txt b/hl/fortran/src/CMakeLists.txt
index e55fcd4..c8c602b 100644
--- a/hl/fortran/src/CMakeLists.txt
+++ b/hl/fortran/src/CMakeLists.txt
@@ -15,6 +15,7 @@ INCLUDE_DIRECTORIES (
 # hl_f90CStub lib
 #-----------------------------------------------------------------------------
 SET (HDF5_HL_F90_C_SRCS
+    ${HDF5_HL_F90_SRC_SOURCE_DIR}/H5DSfc.c
     ${HDF5_HL_F90_SRC_SOURCE_DIR}/H5LTfc.c
     ${HDF5_HL_F90_SRC_SOURCE_DIR}/H5IMfc.c
     ${HDF5_HL_F90_SRC_SOURCE_DIR}/H5IMcc.c
@@ -34,6 +35,7 @@ H5_SET_LIB_OPTIONS (${HDF5_HL_F90_C_LIB_TARGET} ${HDF5_HL_F90_C_LIB_NAME} ${LIB_
 # Fortran Modules
 #-----------------------------------------------------------------------------
 SET (HDF5_HL_F90_F_SRCS
+    ${HDF5_HL_F90_SRC_SOURCE_DIR}/H5DSff.f90
     ${HDF5_HL_F90_SRC_SOURCE_DIR}/H5TBff.f90
     ${HDF5_HL_F90_SRC_SOURCE_DIR}/H5LTff.f90
     ${HDF5_HL_F90_SRC_SOURCE_DIR}/H5IMff.f90
@@ -44,9 +46,9 @@ SET (SHARED_LINK_FLAGS " ")
 IF (BUILD_SHARED_LIBS)
   IF (WIN32 AND NOT CYGWIN)
     SET_PROPERTY (TARGET ${HDF5_HL_F90_LIB_TARGET} 
-	    APPEND PROPERTY COMPILE_DEFINITIONS 
-		    BUILD_HDF5_DLL
-	)
+      APPEND PROPERTY COMPILE_DEFINITIONS 
+        BUILD_HDF5_DLL
+  )
     IF (MSVC)
       SET (SHARED_LINK_FLAGS "/DLL")
     ENDIF (MSVC)
@@ -55,7 +57,7 @@ ENDIF (BUILD_SHARED_LIBS)
 IF (WIN32 AND NOT CYGWIN)
   SET_PROPERTY (TARGET ${HDF5_HL_F90_LIB_TARGET} 
       APPEND PROPERTY COMPILE_DEFINITIONS 
-  	    HDF5F90_WINDOWS
+        HDF5F90_WINDOWS
   )
 ENDIF (WIN32 AND NOT CYGWIN)
 TARGET_FORTRAN_WIN_PROPERTIES (${HDF5_HL_F90_LIB_TARGET} ${SHARED_LINK_FLAGS})
diff --git a/hl/fortran/src/H5DSfc.c b/hl/fortran/src/H5DSfc.c
new file mode 100755
index 0000000..6816347
--- /dev/null
+++ b/hl/fortran/src/H5DSfc.c
@@ -0,0 +1,377 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+* Copyright by The HDF Group.                                               *
+* Copyright by the Board of Trustees of the University of Illinois.         *
+* All rights reserved.                                                      *
+*                                                                           *
+* This file is part of HDF5.  The full HDF5 copyright notice, including     *
+* terms governing use, modification, and redistribution, is contained in    *
+* the files COPYING and Copyright.html.  COPYING can be found at the root   *
+* of the source code distribution tree; Copyright.html can be found at the  *
+* root level of an installed copy of the electronic HDF5 document set and   *
+* is linked from the top-level documents page.  It can also be found at     *
+* http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+* access to either file, you may request a copy from help at hdfgroup.org.     *
+* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/* This files contains C stubs for H5D Fortran APIs */
+
+#include "H5DSprivate.h"
+#include "H5LTf90proto.h"
+#include "H5Eprivate.h"
+
+/*-------------------------------------------------------------------------
+* Function: h5dsset_scale_c
+*
+* Purpose: Calls H5DSset_scale
+*
+* Return: Success: 0, Failure: -1
+*
+* Programmer: M. Scot Breitenfeld
+*
+* Date: April 17, 2011
+*
+* Comments:
+*
+*-------------------------------------------------------------------------
+*/
+int_f
+nh5dsset_scale_c(hid_t_f *dsid, _fcd dimname, int_f *dimnamelen) 
+{
+  char *c_dimname = NULL;
+  int_f ret_value = 0;
+  
+  /*
+   * convert FORTRAN name to C name
+   */
+  
+  if(*dimnamelen != 0)
+    if(NULL == (c_dimname = (char *)HD5f2cstring(dimname, (size_t)*dimnamelen)))
+      HGOTO_DONE(FAIL)
+
+   /*
+    * call H5DSset_scale function.
+    */
+
+   if(H5DSset_scale( (hid_t)*dsid, c_dimname) < 0)
+     HGOTO_DONE(FAIL)
+
+   done:
+     if(c_dimname)
+       HDfree(c_dimname);
+
+  return ret_value;
+
+} /* end nh5dsset_scale_c() */
+
+
+/*-------------------------------------------------------------------------
+* Function: H5DSattach_scale_c
+*
+* Purpose: Calls H5DSattach_scale
+*
+* Return: Success: 0, Failure: -1
+*
+* Programmer: M. Scot Breitenfeld
+*
+* Date: April 17, 2011
+*
+* Comments:
+*
+*-------------------------------------------------------------------------
+*/
+int_f
+nh5dsattach_scale_c( hid_t_f *did, hid_t_f *dsid, int_f *idx) 
+{
+  int_f ret_value = 0;
+  
+  /*
+   * call H5DSset_scale function.
+   */
+  
+  if(H5DSattach_scale( (hid_t)*did, (hid_t)*dsid, (unsigned)*idx ) < 0)
+    HGOTO_DONE(FAIL)
+      
+  done:
+    return ret_value;
+
+} /* end nh5dsattach_scale_c() */
+
+
+/*-------------------------------------------------------------------------
+* Function: H5DSdetach_scale_c
+*
+* Purpose: Calls H5DSdetach_scale
+*
+* Return: Success: 0, Failure: -1
+*
+* Programmer: M. Scot Breitenfeld
+*
+* Date: April 17, 2011
+*
+* Comments:
+*
+*-------------------------------------------------------------------------
+*/
+int_f
+nh5dsdetach_scale_c( hid_t_f *did, hid_t_f *dsid, int_f *idx) 
+{
+  int_f ret_value = 0;
+  
+  /*
+   * call H5DSset_scale function.
+   */
+  
+  if(H5DSdetach_scale( (hid_t)*did, (hid_t)*dsid, (unsigned)*idx ) < 0)
+    HGOTO_DONE(FAIL)
+      
+  done:
+    return ret_value;
+
+} /* end nh5dsdetach_scale_c() */
+
+
+/*-------------------------------------------------------------------------
+* Function: H5DSis_attached_c
+*
+* Purpose: Calls H5DSis_attached
+*
+* Return: Success: 0, Failure: -1
+*
+* Programmer: M. Scot Breitenfeld
+*
+* Date: April 17, 2011
+*
+* Comments:
+*
+*-------------------------------------------------------------------------
+*/
+int_f
+nh5dsis_attached_c( hid_t_f *did, hid_t_f *dsid, int_f *idx, int_f *is_attached) 
+{
+  int_f ret_value = 0;
+  htri_t c_is_attached;
+  
+  /*
+   * call H5DSis_attached function.
+   */
+
+  if((c_is_attached = H5DSis_attached( (hid_t)*did, (hid_t)*dsid, (unsigned)*idx )) < 0)
+    HGOTO_DONE(FAIL)
+
+  *is_attached = (int_f)c_is_attached;
+      
+  done:
+      return ret_value;
+
+} /* end nh5dsis_attached_c() */
+
+/*-------------------------------------------------------------------------
+* Function: H5DSis_scale_c
+*
+* Purpose: Calls H5DSis_scale
+*
+* Return: Success: 0, Failure: -1
+*
+* Programmer: M. Scot Breitenfeld
+*
+* Date: April 18, 2011
+*
+* Comments:
+*
+*-------------------------------------------------------------------------
+*/
+int_f
+nh5dsis_scale_c( hid_t_f *did, int_f *is_scale) 
+{
+  int_f ret_value = 0;
+  htri_t c_is_scale;
+  
+  /*
+   * call H5DSis_scale function.
+   */
+  
+  if((c_is_scale=H5DSis_scale( (hid_t)*did )) < 0)
+    HGOTO_DONE(FAIL)
+
+  *is_scale = (int_f)c_is_scale;
+      
+  done:
+    return ret_value;
+
+} /* end nh5dsis_scale_c() */
+
+
+/*-------------------------------------------------------------------------
+* Function: h5dsset_label_c
+*
+* Purpose: Calls H5DSset_label
+*
+* Return: Success: 0, Failure: -1
+*
+* Programmer: M. Scot Breitenfeld
+*
+* Date: April 18, 2011
+*
+* Comments:
+*
+*-------------------------------------------------------------------------
+*/
+int_f
+nh5dsset_label_c(hid_t_f *did, int_f *idx, _fcd label, int_f *labellen) 
+{
+  char *c_label = NULL;
+  int_f ret_value = 0;
+  
+  /*
+   * convert FORTRAN name to C name
+   */
+  
+  if(NULL == (c_label = (char *)HD5f2cstring(label, (size_t)*labellen)))
+    HGOTO_DONE(FAIL)
+
+  /*
+   * call H5DSset_label function.
+   */
+
+  if(H5DSset_label( (hid_t)*did, (unsigned)*idx, c_label) < 0)
+    HGOTO_DONE(FAIL)
+
+  done:
+     if(c_label)
+       HDfree(c_label);
+
+  return ret_value;
+
+} /* end nh5dsset_label_c() */
+
+/*-------------------------------------------------------------------------
+* Function: h5dsget_label_c
+*
+* Purpose: Calls H5DSget_label
+*
+* Return: Success: 0, Failure: -1
+*
+* Programmer: M. Scot Breitenfeld
+*
+* Date: April 18, 2011
+*
+* Comments:
+*
+*-------------------------------------------------------------------------
+*/
+int_f
+nh5dsget_label_c(hid_t_f *did, int_f *idx, _fcd label, size_t_f *size) 
+{
+  char *c_label = NULL;
+  ssize_t size_c = -1;
+  int_f ret_value = 0;
+
+  /*
+   * Allocate buffer to hold label
+   */
+  if ((c_label = HDmalloc((size_t)*size + 1)) == NULL)
+    HGOTO_DONE(FAIL);
+
+  /*
+   * call H5DSget_label function.
+   */
+      
+  if( (size_c = (size_t_f)H5DSget_label( (hid_t)*did, (unsigned)*idx, c_label, (size_t)*size+1)) < 0)
+    HGOTO_DONE(FAIL)
+
+  /*
+   * Convert C name to FORTRAN and place it in the given buffer
+   */
+      
+  HD5packFstring(c_label, _fcdtocp(label), (size_t)*size+1);
+
+done:
+     *size = (size_t_f)size_c; /* Don't subtract '1'  because H5DSget_label doesn't include the 
+				* trailing NULL in the length calculation, Ref. HDFFV-7596 */
+     if(c_label) HDfree(c_label);
+     return ret_value;
+
+} /* end nh5dsget_label_c() */
+
+/*-------------------------------------------------------------------------
+* Function: h5dsget_scale_name_c
+*
+* Purpose: Calls H5DSget_scale_name
+*
+* Return: Success: 0, Failure: -1
+*
+* Programmer: M. Scot Breitenfeld
+*
+* Date: April 18, 2011
+*
+* Comments:
+*
+*-------------------------------------------------------------------------
+*/
+int_f
+nh5dsget_scale_name_c(hid_t_f *did, _fcd name, size_t_f *size) 
+{
+  char *c_scale_name = NULL;
+  ssize_t size_c = -1;
+  int_f ret_value = 0;
+
+  /*
+   * Allocate buffer to hold name
+   */
+  if ((c_scale_name = HDmalloc((size_t)*size + 1)) == NULL)
+    HGOTO_DONE(FAIL);
+
+  /*
+   * call H5DSget_scale_name function.
+   */
+      
+  if( (size_c = (size_t_f)H5DSget_scale_name( (hid_t)*did, c_scale_name, (size_t)*size+1)) < 0)
+    HGOTO_DONE(FAIL)
+
+  /*
+   * Convert C name to FORTRAN and place it in the given buffer
+   */
+  if(size_c != 0) {
+    HD5packFstring(c_scale_name, _fcdtocp(name), (size_t)*size+1);
+    *size = (size_t_f)size_c-1; /* (-1) because we don't include the NULL ending in the length*/
+  } else {
+    *size = (size_t_f)size_c;   /* if NULL then no name was found */
+  }
+
+done:
+  if(c_scale_name) HDfree(c_scale_name);
+  return ret_value;
+
+} /* end nh5dsget_scale_name_c() */
+
+/*-------------------------------------------------------------------------
+* Function: H5DSget_num_scales_c
+*
+* Purpose: Calls H5DSget_num_scales
+*
+* Return: Success: 0, Failure: -1
+*
+* Programmer: M. Scot Breitenfeld
+*
+* Date: April 18, 2011
+*
+* Comments:
+*
+*-------------------------------------------------------------------------
+*/
+int_f
+nh5dsget_num_scales_c( hid_t_f *did, int_f *idx, int_f *num_scales) 
+{
+  int_f ret_value = 0;
+  
+  /*
+   * call H5DSset_scale function.
+   */
+  
+  if( (*num_scales = (int_f)H5DSget_num_scales( (hid_t)*did, (unsigned)*idx)) < 0)
+    HGOTO_DONE(FAIL)
+      
+  done:
+    return ret_value;
+
+} /* end nh5dsget_num_scales_c() */
diff --git a/hl/fortran/src/H5DSff.f90 b/hl/fortran/src/H5DSff.f90
new file mode 100755
index 0000000..c3ec587
--- /dev/null
+++ b/hl/fortran/src/H5DSff.f90
@@ -0,0 +1,536 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!   Copyright by The HDF Group.                                               *
+!   Copyright by the Board of Trustees of the University of Illinois.         *
+!   All rights reserved.                                                      *
+!                                                                             *
+!   This file is part of HDF5.  The full HDF5 copyright notice, including     *
+!   terms governing use, modification, and redistribution, is contained in    *
+!   the files COPYING and Copyright.html.  COPYING can be found at the root   *
+!   of the source code distribution tree; Copyright.html can be found at the  *
+!   root level of an installed copy of the electronic HDF5 document set and   *
+!   is linked from the top-level documents page.  It can also be found at     *
+!   http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+!   access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+!
+! This file contains FORTRAN90 interfaces for H5DS functions
+!
+
+MODULE h5ds
+
+  USE h5fortran_types
+  USE hdf5
+
+CONTAINS
+
+
+!-------------------------------------------------------------------------
+! Function: H5DSset_scale_f
+!
+! Purpose: Convert dataset dsid to a dimension scale, with optional name, dimname. 
+!
+! Return: Success: 0, Failure: -1
+!
+! Programmer: M. Scot Breitenfeld
+!
+! Date: April 17, 2011
+!
+! Comments:
+!
+! Modifications:
+!
+!-------------------------------------------------------------------------
+
+  SUBROUTINE H5DSset_scale_f( dsid, errcode, dimname)
+
+    IMPLICIT NONE
+
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dsset_scale_f
+!DEC$endif
+!
+
+    INTEGER(hid_t),   INTENT(in) :: dsid               ! The dataset to be made a Dimension Scale
+    CHARACTER(LEN=*), INTENT(in), OPTIONAL :: dimname  ! The dimension name
+    INTEGER :: errcode                                 ! Error code
+
+    INTEGER:: dimname_len                              ! length of dimname (if present)
+
+    INTERFACE
+       INTEGER FUNCTION H5DSset_scale_c(dsid, dimname, dimname_len )
+
+         USE h5global
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DSSET_SCALE_C'::h5dsset_scale_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: dimname  
+         INTEGER(hid_t),   INTENT(in) :: dsid     ! The dataset to be made a Dimension Scale
+         CHARACTER(LEN=*), INTENT(in) :: dimname  ! The dimension name
+         INTEGER, INTENT(in) :: dimname_len
+       END FUNCTION H5DSset_scale_c
+    END INTERFACE
+
+    IF(PRESENT(dimname))THEN
+       dimname_len = LEN(dimname)
+       errcode = H5DSset_scale_c(dsid, dimname, dimname_len )
+    ELSE
+       errcode = H5DSset_scale_c(dsid, " ", 0 )
+    ENDIF
+
+  END SUBROUTINE H5DSset_scale_f
+
+!-------------------------------------------------------------------------
+! Function: H5DSattach_scale_f
+!
+! Purpose: Attach dimension scale dsid to dimension idx of dataset did.
+!
+! Return: Success: 0, Failure: -1
+!
+! Programmer: M. Scot Breitenfeld
+!
+! Date: April 17, 2011
+!
+! Comments:
+!
+! Modifications:
+!
+!-------------------------------------------------------------------------
+
+  SUBROUTINE H5DSattach_scale_f( did, dsid, idx, errcode)
+
+    IMPLICIT NONE
+
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dsattach_scale_f
+!DEC$endif
+!
+    INTEGER(hid_t), INTENT(in) :: did     ! the dataset
+    INTEGER(hid_t), INTENT(in) :: dsid    ! the scale to be attached 
+    INTEGER       , INTENT(in) :: idx     ! the dimension of did that dsid is associated with.
+    INTEGER                    :: errcode ! error code
+    INTEGER                    :: c_idx
+    
+    INTERFACE
+       INTEGER FUNCTION  H5DSattach_scale_c(did, dsid, idx )
+         
+         USE h5global
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DSATTACH_SCALE_C':: h5dsattach_scale_c
+         !DEC$ENDIF
+         INTEGER(hid_t), INTENT(in) :: did     ! the dataset
+         INTEGER(hid_t), INTENT(in) :: dsid    ! the scale to be attached 
+         INTEGER       , INTENT(in) :: idx     ! the dimension of did that dsid is associated with.
+       END FUNCTION H5DSattach_scale_c
+    END INTERFACE
+
+    c_idx = idx -1 ! account for C-dimensions starting at 0 
+    
+    errcode = H5DSattach_scale_c( did, dsid, c_idx)
+    
+  END SUBROUTINE H5DSattach_scale_f
+  
+!-------------------------------------------------------------------------
+! Function: H5DSdetach_scale_f
+!
+! Purpose: Detach dimension scale dsid from the dimension idx of Dataset did.
+!
+! Return: Success: 0, Failure: -1
+!
+! Programmer: M. Scot Breitenfeld
+!
+! Date: April 17, 2011
+!
+! Comments:
+!
+! Modifications:
+!
+!-------------------------------------------------------------------------
+
+  SUBROUTINE H5DSdetach_scale_f( did, dsid, idx, errcode)
+    
+    IMPLICIT NONE
+    
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dsdetach_scale_f
+!DEC$endif
+!
+    INTEGER(hid_t), INTENT(in) :: did     ! the dataset
+    INTEGER(hid_t), INTENT(in) :: dsid    ! the scale to be detached 
+    INTEGER       , INTENT(in) :: idx     ! the dimension of did to detach
+    INTEGER                    :: errcode ! error code
+    INTEGER                    :: c_idx
+    
+    INTERFACE
+       INTEGER FUNCTION  H5DSdetach_scale_c(did, dsid, idx )
+         
+         USE h5global
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DSDETACH_SCALE_C':: h5dsdetach_scale_c
+         !DEC$ENDIF
+         INTEGER(hid_t), INTENT(in) :: did     ! the dataset
+         INTEGER(hid_t), INTENT(in) :: dsid    ! the scale to be detached 
+         INTEGER       , INTENT(in) :: idx     ! the dimension of did to detach
+       END FUNCTION H5DSdetach_scale_c
+    END INTERFACE
+
+    c_idx = idx - 1 ! account for C-dimensions starting at 0 
+
+    errcode = H5DSdetach_scale_c( did, dsid, c_idx)
+    
+  END SUBROUTINE H5DSdetach_scale_f
+
+
+!-------------------------------------------------------------------------
+! Function: H5DSis_attached_f
+!
+! Purpose: Report if dimension scale dsid is currently attached to dimension idx of dataset did. 
+!
+! Return: Success: 0, Failure: -1
+!
+! Programmer: M. Scot Breitenfeld
+!
+! Date: April 17, 2011
+!
+! Comments:
+!
+! Modifications:
+!
+!-------------------------------------------------------------------------
+
+  SUBROUTINE H5DSis_attached_f( did, dsid, idx, is_attached, errcode)
+    
+    IMPLICIT NONE
+    
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dsis_attached_f
+!DEC$endif
+!
+    INTEGER(hid_t), INTENT(in)  :: did         ! the dataset
+    INTEGER(hid_t), INTENT(in)  :: dsid        ! the scale to be attached
+    INTEGER       , INTENT(in)  :: idx         ! the dimension of did that dsid is associated with
+    LOGICAL       , INTENT(out) :: is_attached ! logical: dimension scale dsid is currently attached to 
+                                               ! dimension idx of dataset did
+    INTEGER                     :: errcode     ! error code
+    INTEGER                     :: c_is_attached
+    INTEGER                     :: c_idx
+    
+    INTERFACE
+       INTEGER FUNCTION H5DSis_attached_c(did, dsid, idx, c_is_attached )
+         
+         USE h5global
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DSIS_ATTACHED_C':: h5dsis_attached_c
+         !DEC$ENDIF
+         INTEGER(hid_t), INTENT(in)  :: did         ! the dataset
+         INTEGER(hid_t), INTENT(in)  :: dsid        ! the scale to be detached 
+         INTEGER       , INTENT(in)  :: idx         ! the dimension of did to detach
+         INTEGER       , INTENT(out) :: c_is_attached ! dimension scale dsid is currently attached to 
+       END FUNCTION H5DSis_attached_c
+    END INTERFACE
+
+    c_idx = idx - 1 ! account for C-dimensions starting at 0 
+    
+    errcode = H5DSis_attached_c(did, dsid, c_idx, c_is_attached)
+
+    is_attached = .FALSE. ! default
+    IF(c_is_attached.GT.0)THEN
+       is_attached = .TRUE.
+    ELSE IF(errcode.LT.0)THEN
+       errcode = -1
+    ENDIF
+    
+  END SUBROUTINE H5DSis_attached_f
+
+!
+! H5DSiterate_scales: Impliment in  F2003
+!
+
+!-------------------------------------------------------------------------
+! Function: H5DSis_scale_f
+!
+! Purpose: Determines whether dset is a Dimension Scale. 
+!
+! Return: Success: 0, Failure: -1
+!
+! Programmer: M. Scot Breitenfeld
+!
+! Date: April 18, 2011
+!
+! Comments:
+!
+! Modifications:
+!
+!-------------------------------------------------------------------------
+
+  SUBROUTINE H5DSis_scale_f( did, is_scale, errcode)
+    
+    IMPLICIT NONE
+    
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dsis_scale_f
+!DEC$endif
+!
+    INTEGER(hid_t), INTENT(in)  :: did         ! the data set to query
+    LOGICAL       , INTENT(out) :: is_scale    ! logical:  
+                                               ! .TRUE. if did is a Dimension Scale
+    INTEGER                     :: errcode     ! error code
+    INTEGER                     :: c_is_scale
+    
+    INTERFACE
+       INTEGER FUNCTION  H5DSis_scale_c(did,c_is_scale)
+         
+         USE h5global
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DSIS_SCALE_C':: h5dsis_scale_c
+         !DEC$ENDIF
+         INTEGER(hid_t), INTENT(in) :: did     !  the data set to query
+         INTEGER, INTENT(out) :: c_is_scale
+       END FUNCTION H5DSis_scale_c
+    END INTERFACE
+    
+    errcode = H5DSis_scale_c(did, c_is_scale)
+
+    is_scale = .FALSE. ! default
+    IF(c_is_scale.GT.0)THEN
+       is_scale = .TRUE.
+    ELSE IF(errcode.LT.0)THEN
+       errcode = -1
+    ENDIF
+    
+  END SUBROUTINE H5DSis_scale_f
+
+!-------------------------------------------------------------------------
+! Function: H5DSset_label_f
+!
+! Purpose: Set label for the dimension idx of did to the value label
+!
+! Return: Success: 0, Failure: -1
+!
+! Programmer: M. Scot Breitenfeld
+!
+! Date: April 18, 2011
+!
+! Comments:
+!
+! Modifications:
+!
+!-------------------------------------------------------------------------
+
+  SUBROUTINE H5DSset_label_f( did, idx, label, errcode)
+
+    IMPLICIT NONE
+
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dsset_label_f
+!DEC$endif
+!
+
+    INTEGER(hid_t),   INTENT(in) :: did    ! The dataset
+    INTEGER       ,   INTENT(in) :: idx    ! The dimension
+    CHARACTER(LEN=*), INTENT(in) :: label  ! The label
+    INTEGER :: errcode                     ! Error code
+
+    INTEGER :: label_len  ! Length of label
+    INTEGER :: c_idx
+
+    INTERFACE
+       INTEGER FUNCTION H5DSset_label_c(did, idx, label, label_len)
+
+         USE h5global
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DSSET_LABEL_C'::h5dsset_label_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: label
+         INTEGER(hid_t),   INTENT(in) :: did        ! The dataset
+         INTEGER       ,   INTENT(in) :: idx        ! The dimension
+         CHARACTER(LEN=*), INTENT(in) :: label      ! The label
+         INTEGER,          INTENT(in) :: label_len  ! Length of label
+       END FUNCTION H5DSset_label_c
+    END INTERFACE
+
+    c_idx = idx - 1
+
+    label_len = LEN(label)
+    errcode = H5DSset_label_c(did, c_idx, label, label_len)
+
+  END SUBROUTINE H5DSset_label_f
+
+!-------------------------------------------------------------------------
+! Function: H5DSget_label_f
+!
+! Purpose: Read the label for dimension idx of did into buffer label. 
+!
+! Return: Success: 0, Failure: -1
+!
+! Programmer: M. Scot Breitenfeld
+!
+! Date: April 18, 2011
+!
+! Comments:
+!
+! Modifications:
+!
+!-------------------------------------------------------------------------
+
+  SUBROUTINE H5DSget_label_f( did, idx, label, size, errcode)
+
+    IMPLICIT NONE
+
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dsget_label_f
+!DEC$endif
+!
+
+    INTEGER(hid_t),   INTENT(in) :: did     ! The dataget
+    INTEGER       ,   INTENT(in) :: idx     ! The dimension
+    CHARACTER(LEN=*), INTENT(in) :: label   ! The label
+    INTEGER(size_t) , INTENT(inout) :: size ! The length of the label buffer
+    INTEGER :: errcode                      ! Error code
+    INTEGER :: c_idx
+
+    INTERFACE
+       INTEGER FUNCTION H5DSget_label_c(did, idx, label, size)
+
+         USE h5global
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DSGET_LABEL_C'::h5dsget_label_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: label
+         INTEGER(hid_t),   INTENT(in)    :: did        ! The dataget
+         INTEGER       ,   INTENT(in)    :: idx        ! The dimension
+         CHARACTER(LEN=*), INTENT(in)    :: label      ! The label
+         INTEGER(SIZE_T),  INTENT(inout) :: size       ! Length of label
+       END FUNCTION H5DSget_label_c
+    END INTERFACE
+
+    c_idx = idx - 1
+
+    errcode = H5DSget_label_c(did, c_idx, label, size)
+
+  END SUBROUTINE H5DSget_label_f
+
+
+!-------------------------------------------------------------------------
+! Function: H5DSget_scale_name_f
+!
+! Purpose: Read the name of scale did into buffer name.
+!
+! Return: Success: 0, Failure: -1
+!
+! Programmer: M. Scot Breitenfeld
+!
+! Date: April 18, 2011
+!
+! Comments:
+!
+! Modifications:
+!
+!-------------------------------------------------------------------------
+
+  SUBROUTINE H5DSget_scale_name_f(did, name, size, errcode)
+
+    IMPLICIT NONE
+
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dsget_scale_name_f
+!DEC$endif
+!
+
+    INTEGER(hid_t),   INTENT(in) :: did     ! The dataget
+    CHARACTER(LEN=*), INTENT(out) :: name   ! The name
+    INTEGER(size_t) , INTENT(inout) :: size ! The length of the name buffer
+    INTEGER :: errcode                      ! Error code
+
+    INTERFACE
+       INTEGER FUNCTION H5DSget_scale_name_c(did, name, size)
+
+         USE h5global
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DSGET_SCALE_NAME_C'::h5dsget_scale_name_c
+         !DEC$ENDIF
+         !DEC$ATTRIBUTES reference :: name
+         INTEGER(hid_t),   INTENT(in)    :: did       ! The dataget
+         CHARACTER(LEN=*), INTENT(out)   :: name      ! The name
+         INTEGER(SIZE_T),  INTENT(inout) :: size      ! Length of name
+       END FUNCTION H5DSget_scale_name_c
+    END INTERFACE
+
+    errcode = H5DSget_scale_name_c(did, name, size)
+
+  END SUBROUTINE H5DSget_scale_name_f
+
+!-------------------------------------------------------------------------
+! Function: H5DSget_num_scales_f
+!
+! Purpose: Determines how many Dimension Scales are attached to dimension idx of did
+!
+! Return: Success: 0, Failure: -1
+!
+! Programmer: M. Scot Breitenfeld
+!
+! Date: April 18, 2011
+!
+! Comments:
+!
+! Modifications:
+!
+!-------------------------------------------------------------------------
+
+  SUBROUTINE H5DSget_num_scales_f( did, idx, num_scales, errcode)
+
+    IMPLICIT NONE
+
+!
+!This definition is needed for Windows DLLs
+!DEC$if defined(BUILD_HDF5_DLL)
+!DEC$attributes dllexport :: h5dsget_num_scales_f
+!DEC$endif
+!
+    INTEGER(hid_t), INTENT(in)  :: did         ! the dataset
+    INTEGER       , INTENT(in)  :: idx         ! the dimension of did to query
+    INTEGER       , INTENT(out) :: num_scales  ! the number of Dimension Scales associated with did
+    INTEGER                     :: errcode     ! error code
+    INTEGER                     :: c_idx
+    
+    INTERFACE
+       INTEGER FUNCTION  H5DSget_num_scales_c(did, idx, num_scales)
+         
+         USE h5global
+         !DEC$IF DEFINED(HDF5F90_WINDOWS)
+         !DEC$ATTRIBUTES C,reference,decorate,alias:'H5DSGET_NUM_SCALES_C':: h5dsget_num_scales_c
+         !DEC$ENDIF
+         INTEGER(hid_t), INTENT(in)  :: did        ! the dataset
+         INTEGER       , INTENT(in)  :: idx        ! the dimension of did to query
+         INTEGER       , INTENT(out) :: num_scales ! the number of Dimension Scales associated with did
+       END FUNCTION H5DSget_num_scales_c
+    END INTERFACE
+    
+    c_idx = idx - 1
+    errcode = H5DSget_num_scales_c(did, c_idx, num_scales)
+    
+  END SUBROUTINE H5DSget_num_scales_f
+
+END MODULE h5ds
+
+
+
+
+
+
diff --git a/hl/fortran/src/H5LTf90proto.h b/hl/fortran/src/H5LTf90proto.h
index f2d8a10..eda8ed8 100755
--- a/hl/fortran/src/H5LTf90proto.h
+++ b/hl/fortran/src/H5LTf90proto.h
@@ -26,166 +26,222 @@
 H5_FCDLL char*  HD5f2cstring (_fcd fdesc, int len);
 H5_FCDLL void HD5packFstring (char *src, char *dest, size_t len);
 
+/*
+ *  Functions from H5DSfc.c
+ */
+
+#define nh5dsset_scale_c      H5_FC_FUNC_(h5dsset_scale_c, H5DSSET_SCALE_C)
+#define nh5dsattach_scale_c   H5_FC_FUNC_(h5dsattach_scale_c, H5DSATTACH_SCALE_C)
+#define nh5dsdetach_scale_c   H5_FC_FUNC_(h5dsdetach_scale_c, H5DSDETACH_SCALE_C)
+#define nh5dsis_attached_c    H5_FC_FUNC_(h5dsis_attached_c, H5DSIS_ATTACHED_C)
+#define nh5dsis_scale_c       H5_FC_FUNC_(h5dsis_scale_c, H5DSIS_SCALE_C)
+#define nh5dsset_label_c      H5_FC_FUNC_(h5dsset_label_c, H5DSSET_LABEL_C)
+#define nh5dsget_label_c      H5_FC_FUNC_(h5dsget_label_c, H5DSGET_LABEL_C)
+#define nh5dsget_scale_name_c H5_FC_FUNC_(h5dsget_scale_name_c,H5DSGET_SCALE_NAME_C)
+#define nh5dsget_num_scales_c H5_FC_FUNC_(h5dsget_num_scales_c,H5DSGET_NUM_SCALES_C)
+
 
 /*
-*  Functions from H5LTfc.c
-*/
-#   define nh5ltmake_dataset_c       H5_FC_FUNC_(h5ltmake_dataset_c, H5LTMAKE_DATASET_C)
-#   define nh5ltmake_dataset_int1_c  H5_FC_FUNC_(h5ltmake_dataset_int1_c, H5LTMAKE_DATASET_INT1_C)
-#   define nh5ltmake_dataset_int2_c  H5_FC_FUNC_(h5ltmake_dataset_int2_c, H5LTMAKE_DATASET_INT2_C)
-#   define nh5ltmake_dataset_int3_c  H5_FC_FUNC_(h5ltmake_dataset_int3_c, H5LTMAKE_DATASET_INT3_C)
-#   define nh5ltmake_dataset_int4_c  H5_FC_FUNC_(h5ltmake_dataset_int4_c, H5LTMAKE_DATASET_INT4_C)
-#   define nh5ltmake_dataset_int5_c  H5_FC_FUNC_(h5ltmake_dataset_int5_c, H5LTMAKE_DATASET_INT5_C)
-#   define nh5ltmake_dataset_int6_c  H5_FC_FUNC_(h5ltmake_dataset_int6_c, H5LTMAKE_DATASET_INT6_C)
-#   define nh5ltmake_dataset_int7_c  H5_FC_FUNC_(h5ltmake_dataset_int7_c, H5LTMAKE_DATASET_INT7_C)
-#   define nh5ltmake_dataset_fl1_c   H5_FC_FUNC_(h5ltmake_dataset_fl1_c, H5LTMAKE_DATASET_FL1_C)
-#   define nh5ltmake_dataset_fl2_c   H5_FC_FUNC_(h5ltmake_dataset_fl2_c, H5LTMAKE_DATASET_FL2_C)
-#   define nh5ltmake_dataset_fl3_c   H5_FC_FUNC_(h5ltmake_dataset_fl3_c, H5LTMAKE_DATASET_FL3_C)
-#   define nh5ltmake_dataset_fl4_c   H5_FC_FUNC_(h5ltmake_dataset_fl4_c, H5LTMAKE_DATASET_FL4_C)
-#   define nh5ltmake_dataset_fl5_c   H5_FC_FUNC_(h5ltmake_dataset_fl5_c, H5LTMAKE_DATASET_FL5_C)
-#   define nh5ltmake_dataset_fl6_c   H5_FC_FUNC_(h5ltmake_dataset_fl6_c, H5LTMAKE_DATASET_FL6_C)
-#   define nh5ltmake_dataset_fl7_c   H5_FC_FUNC_(h5ltmake_dataset_fl7_c, H5LTMAKE_DATASET_FL7_C)
-#   define nh5ltmake_dataset_dl1_c   H5_FC_FUNC_(h5ltmake_dataset_dl1_c, H5LTMAKE_DATASET_DL1_C)
-#   define nh5ltmake_dataset_dl2_c   H5_FC_FUNC_(h5ltmake_dataset_dl2_c, H5LTMAKE_DATASET_DL2_C)
-#   define nh5ltmake_dataset_dl3_c   H5_FC_FUNC_(h5ltmake_dataset_dl3_c, H5LTMAKE_DATASET_DL3_C)
-#   define nh5ltmake_dataset_dl4_c   H5_FC_FUNC_(h5ltmake_dataset_dl4_c, H5LTMAKE_DATASET_DL4_C)
-#   define nh5ltmake_dataset_dl5_c   H5_FC_FUNC_(h5ltmake_dataset_dl5_c, H5LTMAKE_DATASET_DL5_C)
-#   define nh5ltmake_dataset_dl6_c   H5_FC_FUNC_(h5ltmake_dataset_dl6_c, H5LTMAKE_DATASET_DL6_C)
-#   define nh5ltmake_dataset_dl7_c   H5_FC_FUNC_(h5ltmake_dataset_dl7_c, H5LTMAKE_DATASET_DL7_C)
-#   define nh5ltmake_dataset_nint1_c H5_FC_FUNC_(h5ltmake_dataset_nint1_c, H5LTMAKE_DATASET_NINT1_C)
-#   define nh5ltmake_dataset_nint2_c H5_FC_FUNC_(h5ltmake_dataset_nint2_c, H5LTMAKE_DATASET_NINT2_C)
-#   define nh5ltmake_dataset_nint3_c H5_FC_FUNC_(h5ltmake_dataset_nint3_c, H5LTMAKE_DATASET_NINT3_C)
-#   define nh5ltmake_dataset_nint4_c H5_FC_FUNC_(h5ltmake_dataset_nint4_c, H5LTMAKE_DATASET_NINT4_C)
-#   define nh5ltmake_dataset_nint5_c H5_FC_FUNC_(h5ltmake_dataset_nint5_c, H5LTMAKE_DATASET_NINT5_C)
-#   define nh5ltmake_dataset_nint6_c H5_FC_FUNC_(h5ltmake_dataset_nint6_c, H5LTMAKE_DATASET_NINT6_C)
-#   define nh5ltmake_dataset_nint7_c H5_FC_FUNC_(h5ltmake_dataset_nint7_c, H5LTMAKE_DATASET_NINT7_C)
-#   define nh5ltmake_dataset_nfl1_c  H5_FC_FUNC_(h5ltmake_dataset_nfl1_c, H5LTMAKE_DATASET_NFL1_C)
-#   define nh5ltmake_dataset_nfl2_c  H5_FC_FUNC_(h5ltmake_dataset_nfl2_c, H5LTMAKE_DATASET_NFL2_C)
-#   define nh5ltmake_dataset_nfl3_c  H5_FC_FUNC_(h5ltmake_dataset_nfl3_c, H5LTMAKE_DATASET_NFL3_C)
-#   define nh5ltmake_dataset_nfl4_c  H5_FC_FUNC_(h5ltmake_dataset_nfl4_c, H5LTMAKE_DATASET_NFL4_C)
-#   define nh5ltmake_dataset_nfl5_c  H5_FC_FUNC_(h5ltmake_dataset_nfl5_c, H5LTMAKE_DATASET_NFL5_C)
-#   define nh5ltmake_dataset_nfl6_c  H5_FC_FUNC_(h5ltmake_dataset_nfl6_c, H5LTMAKE_DATASET_NFL6_C)
-#   define nh5ltmake_dataset_nfl7_c  H5_FC_FUNC_(h5ltmake_dataset_nfl7_c, H5LTMAKE_DATASET_NFL7_C)
-#   define nh5ltmake_dataset_ndl1_c  H5_FC_FUNC_(h5ltmake_dataset_ndl1_c, H5LTMAKE_DATASET_NDL1_C)
-#   define nh5ltmake_dataset_ndl2_c  H5_FC_FUNC_(h5ltmake_dataset_ndl2_c, H5LTMAKE_DATASET_NDL2_C)
-#   define nh5ltmake_dataset_ndl3_c  H5_FC_FUNC_(h5ltmake_dataset_ndl3_c, H5LTMAKE_DATASET_NDL3_C)
-#   define nh5ltmake_dataset_ndl4_c  H5_FC_FUNC_(h5ltmake_dataset_ndl4_c, H5LTMAKE_DATASET_NDL4_C)
-#   define nh5ltmake_dataset_ndl5_c  H5_FC_FUNC_(h5ltmake_dataset_ndl5_c, H5LTMAKE_DATASET_NDL5_C)
-#   define nh5ltmake_dataset_ndl6_c  H5_FC_FUNC_(h5ltmake_dataset_ndl6_c, H5LTMAKE_DATASET_NDL6_C)
-#   define nh5ltmake_dataset_ndl7_c  H5_FC_FUNC_(h5ltmake_dataset_ndl7_c, H5LTMAKE_DATASET_NDL7_C)
-#   define nh5ltread_dataset_c       H5_FC_FUNC_(h5ltread_dataset_c, H5LTREAD_DATASET_C)
-#   define nh5ltread_dataset_int1_c         H5_FC_FUNC_(h5ltread_dataset_int1_c, H5LTREAD_DATASET_INT1_C)
-#   define nh5ltread_dataset_int2_c         H5_FC_FUNC_(h5ltread_dataset_int2_c, H5LTREAD_DATASET_INT2_C)
-#   define nh5ltread_dataset_int3_c         H5_FC_FUNC_(h5ltread_dataset_int3_c, H5LTREAD_DATASET_INT3_C)
-#   define nh5ltread_dataset_int4_c         H5_FC_FUNC_(h5ltread_dataset_int4_c, H5LTREAD_DATASET_INT4_C)
-#   define nh5ltread_dataset_int5_c         H5_FC_FUNC_(h5ltread_dataset_int5_c, H5LTREAD_DATASET_INT5_C)
-#   define nh5ltread_dataset_int6_c         H5_FC_FUNC_(h5ltread_dataset_int6_c, H5LTREAD_DATASET_INT6_C)
-#   define nh5ltread_dataset_int7_c         H5_FC_FUNC_(h5ltread_dataset_int7_c, H5LTREAD_DATASET_INT7_C)
-#   define nh5ltread_dataset_fl1_c         H5_FC_FUNC_(h5ltread_dataset_fl1_c, H5LTREAD_DATASET_FL1_C)
-#   define nh5ltread_dataset_fl2_c         H5_FC_FUNC_(h5ltread_dataset_fl2_c, H5LTREAD_DATASET_FL2_C)
-#   define nh5ltread_dataset_fl3_c         H5_FC_FUNC_(h5ltread_dataset_fl3_c, H5LTREAD_DATASET_FL3_C)
-#   define nh5ltread_dataset_fl4_c         H5_FC_FUNC_(h5ltread_dataset_fl4_c, H5LTREAD_DATASET_FL4_C)
-#   define nh5ltread_dataset_fl5_c         H5_FC_FUNC_(h5ltread_dataset_fl5_c, H5LTREAD_DATASET_FL5_C)
-#   define nh5ltread_dataset_fl6_c         H5_FC_FUNC_(h5ltread_dataset_fl6_c, H5LTREAD_DATASET_FL6_C)
-#   define nh5ltread_dataset_fl7_c         H5_FC_FUNC_(h5ltread_dataset_fl7_c, H5LTREAD_DATASET_FL7_C)
-#   define nh5ltread_dataset_dl1_c         H5_FC_FUNC_(h5ltread_dataset_dl1_c, H5LTREAD_DATASET_DL1_C)
-#   define nh5ltread_dataset_dl2_c         H5_FC_FUNC_(h5ltread_dataset_dl2_c, H5LTREAD_DATASET_DL2_C)
-#   define nh5ltread_dataset_dl3_c         H5_FC_FUNC_(h5ltread_dataset_dl3_c, H5LTREAD_DATASET_DL3_C)
-#   define nh5ltread_dataset_dl4_c         H5_FC_FUNC_(h5ltread_dataset_dl4_c, H5LTREAD_DATASET_DL4_C)
-#   define nh5ltread_dataset_dl5_c         H5_FC_FUNC_(h5ltread_dataset_dl5_c, H5LTREAD_DATASET_DL5_C)
-#   define nh5ltread_dataset_dl6_c         H5_FC_FUNC_(h5ltread_dataset_dl6_c, H5LTREAD_DATASET_DL6_C)
-#   define nh5ltread_dataset_dl7_c         H5_FC_FUNC_(h5ltread_dataset_dl7_c, H5LTREAD_DATASET_DL7_C)
-#   define nh5ltread_dataset_nint1_c         H5_FC_FUNC_(h5ltread_dataset_nint1_c, H5LTREAD_DATASET_NINT1_C)
-#   define nh5ltread_dataset_nint2_c         H5_FC_FUNC_(h5ltread_dataset_nint2_c, H5LTREAD_DATASET_NINT2_C)
-#   define nh5ltread_dataset_nint3_c         H5_FC_FUNC_(h5ltread_dataset_nint3_c, H5LTREAD_DATASET_NINT3_C)
-#   define nh5ltread_dataset_nint4_c         H5_FC_FUNC_(h5ltread_dataset_nint4_c, H5LTREAD_DATASET_NINT4_C)
-#   define nh5ltread_dataset_nint5_c         H5_FC_FUNC_(h5ltread_dataset_nint5_c, H5LTREAD_DATASET_NINT5_C)
-#   define nh5ltread_dataset_nint6_c         H5_FC_FUNC_(h5ltread_dataset_nint6_c, H5LTREAD_DATASET_NINT6_C)
-#   define nh5ltread_dataset_nint7_c         H5_FC_FUNC_(h5ltread_dataset_nint7_c, H5LTREAD_DATASET_NINT7_C)
-#   define nh5ltread_dataset_nfl1_c         H5_FC_FUNC_(h5ltread_dataset_nfl1_c, H5LTREAD_DATASET_NFL1_C)
-#   define nh5ltread_dataset_nfl2_c         H5_FC_FUNC_(h5ltread_dataset_nfl2_c, H5LTREAD_DATASET_NFL2_C)
-#   define nh5ltread_dataset_nfl3_c         H5_FC_FUNC_(h5ltread_dataset_nfl3_c, H5LTREAD_DATASET_NFL3_C)
-#   define nh5ltread_dataset_nfl4_c         H5_FC_FUNC_(h5ltread_dataset_nfl4_c, H5LTREAD_DATASET_NFL4_C)
-#   define nh5ltread_dataset_nfl5_c         H5_FC_FUNC_(h5ltread_dataset_nfl5_c, H5LTREAD_DATASET_NFL5_C)
-#   define nh5ltread_dataset_nfl6_c         H5_FC_FUNC_(h5ltread_dataset_nfl6_c, H5LTREAD_DATASET_NFL6_C)
-#   define nh5ltread_dataset_nfl7_c         H5_FC_FUNC_(h5ltread_dataset_nfl7_c, H5LTREAD_DATASET_NFL7_C)
-#   define nh5ltread_dataset_ndl1_c         H5_FC_FUNC_(h5ltread_dataset_ndl1_c, H5LTREAD_DATASET_NDL1_C)
-#   define nh5ltread_dataset_ndl2_c         H5_FC_FUNC_(h5ltread_dataset_ndl2_c, H5LTREAD_DATASET_NDL2_C)
-#   define nh5ltread_dataset_ndl3_c         H5_FC_FUNC_(h5ltread_dataset_ndl3_c, H5LTREAD_DATASET_NDL3_C)
-#   define nh5ltread_dataset_ndl4_c         H5_FC_FUNC_(h5ltread_dataset_ndl4_c, H5LTREAD_DATASET_NDL4_C)
-#   define nh5ltread_dataset_ndl5_c         H5_FC_FUNC_(h5ltread_dataset_ndl5_c, H5LTREAD_DATASET_NDL5_C)
-#   define nh5ltread_dataset_ndl6_c         H5_FC_FUNC_(h5ltread_dataset_ndl6_c, H5LTREAD_DATASET_NDL6_C)
-#   define nh5ltread_dataset_ndl7_c         H5_FC_FUNC_(h5ltread_dataset_ndl7_c, H5LTREAD_DATASET_NDL7_C)
-#   define nh5ltmake_dataset_string_c  H5_FC_FUNC_(h5ltmake_dataset_string_c, H5LTMAKE_DATASET_STRING_C)
-#   define nh5ltread_dataset_string_c  H5_FC_FUNC_(h5ltread_dataset_string_c, H5LTREAD_DATASET_STRING_C)
-
-#   define nh5ltset_attribute_int_c    H5_FC_FUNC_(h5ltset_attribute_int_c, H5LTSET_ATTRIBUTE_INT_C)
-#   define nh5ltset_attribute_float_c  H5_FC_FUNC_(h5ltset_attribute_float_c, H5LTSET_ATTRIBUTE_FLOAT_C)
-#   define nh5ltset_attribute_double_c H5_FC_FUNC_(h5ltset_attribute_double_c, H5LTSET_ATTRIBUTE_DOUBLE_C)
-#   define nh5ltset_attribute_string_c H5_FC_FUNC_(h5ltset_attribute_string_c, H5LTSET_ATTRIBUTE_STRING_C)
-
-#   define nh5ltget_attribute_int_c    H5_FC_FUNC_(h5ltget_attribute_int_c, H5LTGET_ATTRIBUTE_INT_C)
-#   define nh5ltget_attribute_float_c  H5_FC_FUNC_(h5ltget_attribute_float_c, H5LTGET_ATTRIBUTE_FLOAT_C)
-#   define nh5ltget_attribute_double_c H5_FC_FUNC_(h5ltget_attribute_double_c, H5LTGET_ATTRIBUTE_DOUBLE_C)
-#   define nh5ltget_attribute_string_c H5_FC_FUNC_(h5ltget_attribute_string_c, H5LTGET_ATTRIBUTE_STRING_C)
-
-#   define nh5ltget_dataset_ndims_c    H5_FC_FUNC_(h5ltget_dataset_ndims_c, H5LTGET_DATASET_NDIMS_C)
-#   define nh5ltfind_dataset_c         H5_FC_FUNC_(h5ltfind_dataset_c, H5LTFIND_DATASET_C)
-#   define nh5ltget_dataset_info_c     H5_FC_FUNC_(h5ltget_dataset_info_c, H5LTGET_DATASET_INFO_C)
-
-#   define nh5ltget_attribute_ndims_c  H5_FC_FUNC_(h5ltget_attribute_ndims_c, H5LTGET_ATTRIBUTE_NDIMS_C)
-#   define nh5ltget_attribute_info_c   H5_FC_FUNC_(h5ltget_attribute_info_c, H5LTGET_ATTRIBUTE_INFO_C)
+ *  Functions from H5LTfc.c
+ */
+#define nh5ltmake_dataset_c       H5_FC_FUNC_(h5ltmake_dataset_c, H5LTMAKE_DATASET_C)
+#define nh5ltmake_dataset_int1_c  H5_FC_FUNC_(h5ltmake_dataset_int1_c, H5LTMAKE_DATASET_INT1_C)
+#define nh5ltmake_dataset_int2_c  H5_FC_FUNC_(h5ltmake_dataset_int2_c, H5LTMAKE_DATASET_INT2_C)
+#define nh5ltmake_dataset_int3_c  H5_FC_FUNC_(h5ltmake_dataset_int3_c, H5LTMAKE_DATASET_INT3_C)
+#define nh5ltmake_dataset_int4_c  H5_FC_FUNC_(h5ltmake_dataset_int4_c, H5LTMAKE_DATASET_INT4_C)
+#define nh5ltmake_dataset_int5_c  H5_FC_FUNC_(h5ltmake_dataset_int5_c, H5LTMAKE_DATASET_INT5_C)
+#define nh5ltmake_dataset_int6_c  H5_FC_FUNC_(h5ltmake_dataset_int6_c, H5LTMAKE_DATASET_INT6_C)
+#define nh5ltmake_dataset_int7_c  H5_FC_FUNC_(h5ltmake_dataset_int7_c, H5LTMAKE_DATASET_INT7_C)
+#define nh5ltmake_dataset_fl1_c   H5_FC_FUNC_(h5ltmake_dataset_fl1_c, H5LTMAKE_DATASET_FL1_C)
+#define nh5ltmake_dataset_fl2_c   H5_FC_FUNC_(h5ltmake_dataset_fl2_c, H5LTMAKE_DATASET_FL2_C)
+#define nh5ltmake_dataset_fl3_c   H5_FC_FUNC_(h5ltmake_dataset_fl3_c, H5LTMAKE_DATASET_FL3_C)
+#define nh5ltmake_dataset_fl4_c   H5_FC_FUNC_(h5ltmake_dataset_fl4_c, H5LTMAKE_DATASET_FL4_C)
+#define nh5ltmake_dataset_fl5_c   H5_FC_FUNC_(h5ltmake_dataset_fl5_c, H5LTMAKE_DATASET_FL5_C)
+#define nh5ltmake_dataset_fl6_c   H5_FC_FUNC_(h5ltmake_dataset_fl6_c, H5LTMAKE_DATASET_FL6_C)
+#define nh5ltmake_dataset_fl7_c   H5_FC_FUNC_(h5ltmake_dataset_fl7_c, H5LTMAKE_DATASET_FL7_C)
+#define nh5ltmake_dataset_dl1_c   H5_FC_FUNC_(h5ltmake_dataset_dl1_c, H5LTMAKE_DATASET_DL1_C)
+#define nh5ltmake_dataset_dl2_c   H5_FC_FUNC_(h5ltmake_dataset_dl2_c, H5LTMAKE_DATASET_DL2_C)
+#define nh5ltmake_dataset_dl3_c   H5_FC_FUNC_(h5ltmake_dataset_dl3_c, H5LTMAKE_DATASET_DL3_C)
+#define nh5ltmake_dataset_dl4_c   H5_FC_FUNC_(h5ltmake_dataset_dl4_c, H5LTMAKE_DATASET_DL4_C)
+#define nh5ltmake_dataset_dl5_c   H5_FC_FUNC_(h5ltmake_dataset_dl5_c, H5LTMAKE_DATASET_DL5_C)
+#define nh5ltmake_dataset_dl6_c   H5_FC_FUNC_(h5ltmake_dataset_dl6_c, H5LTMAKE_DATASET_DL6_C)
+#define nh5ltmake_dataset_dl7_c   H5_FC_FUNC_(h5ltmake_dataset_dl7_c, H5LTMAKE_DATASET_DL7_C)
+#define nh5ltmake_dataset_nint1_c H5_FC_FUNC_(h5ltmake_dataset_nint1_c, H5LTMAKE_DATASET_NINT1_C)
+#define nh5ltmake_dataset_nint2_c H5_FC_FUNC_(h5ltmake_dataset_nint2_c, H5LTMAKE_DATASET_NINT2_C)
+#define nh5ltmake_dataset_nint3_c H5_FC_FUNC_(h5ltmake_dataset_nint3_c, H5LTMAKE_DATASET_NINT3_C)
+#define nh5ltmake_dataset_nint4_c H5_FC_FUNC_(h5ltmake_dataset_nint4_c, H5LTMAKE_DATASET_NINT4_C)
+#define nh5ltmake_dataset_nint5_c H5_FC_FUNC_(h5ltmake_dataset_nint5_c, H5LTMAKE_DATASET_NINT5_C)
+#define nh5ltmake_dataset_nint6_c H5_FC_FUNC_(h5ltmake_dataset_nint6_c, H5LTMAKE_DATASET_NINT6_C)
+#define nh5ltmake_dataset_nint7_c H5_FC_FUNC_(h5ltmake_dataset_nint7_c, H5LTMAKE_DATASET_NINT7_C)
+#define nh5ltmake_dataset_nfl1_c  H5_FC_FUNC_(h5ltmake_dataset_nfl1_c, H5LTMAKE_DATASET_NFL1_C)
+#define nh5ltmake_dataset_nfl2_c  H5_FC_FUNC_(h5ltmake_dataset_nfl2_c, H5LTMAKE_DATASET_NFL2_C)
+#define nh5ltmake_dataset_nfl3_c  H5_FC_FUNC_(h5ltmake_dataset_nfl3_c, H5LTMAKE_DATASET_NFL3_C)
+#define nh5ltmake_dataset_nfl4_c  H5_FC_FUNC_(h5ltmake_dataset_nfl4_c, H5LTMAKE_DATASET_NFL4_C)
+#define nh5ltmake_dataset_nfl5_c  H5_FC_FUNC_(h5ltmake_dataset_nfl5_c, H5LTMAKE_DATASET_NFL5_C)
+#define nh5ltmake_dataset_nfl6_c  H5_FC_FUNC_(h5ltmake_dataset_nfl6_c, H5LTMAKE_DATASET_NFL6_C)
+#define nh5ltmake_dataset_nfl7_c  H5_FC_FUNC_(h5ltmake_dataset_nfl7_c, H5LTMAKE_DATASET_NFL7_C)
+#define nh5ltmake_dataset_ndl1_c  H5_FC_FUNC_(h5ltmake_dataset_ndl1_c, H5LTMAKE_DATASET_NDL1_C)
+#define nh5ltmake_dataset_ndl2_c  H5_FC_FUNC_(h5ltmake_dataset_ndl2_c, H5LTMAKE_DATASET_NDL2_C)
+#define nh5ltmake_dataset_ndl3_c  H5_FC_FUNC_(h5ltmake_dataset_ndl3_c, H5LTMAKE_DATASET_NDL3_C)
+#define nh5ltmake_dataset_ndl4_c  H5_FC_FUNC_(h5ltmake_dataset_ndl4_c, H5LTMAKE_DATASET_NDL4_C)
+#define nh5ltmake_dataset_ndl5_c  H5_FC_FUNC_(h5ltmake_dataset_ndl5_c, H5LTMAKE_DATASET_NDL5_C)
+#define nh5ltmake_dataset_ndl6_c  H5_FC_FUNC_(h5ltmake_dataset_ndl6_c, H5LTMAKE_DATASET_NDL6_C)
+#define nh5ltmake_dataset_ndl7_c  H5_FC_FUNC_(h5ltmake_dataset_ndl7_c, H5LTMAKE_DATASET_NDL7_C)
+#define nh5ltread_dataset_c       H5_FC_FUNC_(h5ltread_dataset_c, H5LTREAD_DATASET_C)
+#define nh5ltread_dataset_int1_c         H5_FC_FUNC_(h5ltread_dataset_int1_c, H5LTREAD_DATASET_INT1_C)
+#define nh5ltread_dataset_int2_c         H5_FC_FUNC_(h5ltread_dataset_int2_c, H5LTREAD_DATASET_INT2_C)
+#define nh5ltread_dataset_int3_c         H5_FC_FUNC_(h5ltread_dataset_int3_c, H5LTREAD_DATASET_INT3_C)
+#define nh5ltread_dataset_int4_c         H5_FC_FUNC_(h5ltread_dataset_int4_c, H5LTREAD_DATASET_INT4_C)
+#define nh5ltread_dataset_int5_c         H5_FC_FUNC_(h5ltread_dataset_int5_c, H5LTREAD_DATASET_INT5_C)
+#define nh5ltread_dataset_int6_c         H5_FC_FUNC_(h5ltread_dataset_int6_c, H5LTREAD_DATASET_INT6_C)
+#define nh5ltread_dataset_int7_c         H5_FC_FUNC_(h5ltread_dataset_int7_c, H5LTREAD_DATASET_INT7_C)
+#define nh5ltread_dataset_fl1_c         H5_FC_FUNC_(h5ltread_dataset_fl1_c, H5LTREAD_DATASET_FL1_C)
+#define nh5ltread_dataset_fl2_c         H5_FC_FUNC_(h5ltread_dataset_fl2_c, H5LTREAD_DATASET_FL2_C)
+#define nh5ltread_dataset_fl3_c         H5_FC_FUNC_(h5ltread_dataset_fl3_c, H5LTREAD_DATASET_FL3_C)
+#define nh5ltread_dataset_fl4_c         H5_FC_FUNC_(h5ltread_dataset_fl4_c, H5LTREAD_DATASET_FL4_C)
+#define nh5ltread_dataset_fl5_c         H5_FC_FUNC_(h5ltread_dataset_fl5_c, H5LTREAD_DATASET_FL5_C)
+#define nh5ltread_dataset_fl6_c         H5_FC_FUNC_(h5ltread_dataset_fl6_c, H5LTREAD_DATASET_FL6_C)
+#define nh5ltread_dataset_fl7_c         H5_FC_FUNC_(h5ltread_dataset_fl7_c, H5LTREAD_DATASET_FL7_C)
+#define nh5ltread_dataset_dl1_c         H5_FC_FUNC_(h5ltread_dataset_dl1_c, H5LTREAD_DATASET_DL1_C)
+#define nh5ltread_dataset_dl2_c         H5_FC_FUNC_(h5ltread_dataset_dl2_c, H5LTREAD_DATASET_DL2_C)
+#define nh5ltread_dataset_dl3_c         H5_FC_FUNC_(h5ltread_dataset_dl3_c, H5LTREAD_DATASET_DL3_C)
+#define nh5ltread_dataset_dl4_c         H5_FC_FUNC_(h5ltread_dataset_dl4_c, H5LTREAD_DATASET_DL4_C)
+#define nh5ltread_dataset_dl5_c         H5_FC_FUNC_(h5ltread_dataset_dl5_c, H5LTREAD_DATASET_DL5_C)
+#define nh5ltread_dataset_dl6_c         H5_FC_FUNC_(h5ltread_dataset_dl6_c, H5LTREAD_DATASET_DL6_C)
+#define nh5ltread_dataset_dl7_c         H5_FC_FUNC_(h5ltread_dataset_dl7_c, H5LTREAD_DATASET_DL7_C)
+#define nh5ltread_dataset_nint1_c         H5_FC_FUNC_(h5ltread_dataset_nint1_c, H5LTREAD_DATASET_NINT1_C)
+#define nh5ltread_dataset_nint2_c         H5_FC_FUNC_(h5ltread_dataset_nint2_c, H5LTREAD_DATASET_NINT2_C)
+#define nh5ltread_dataset_nint3_c         H5_FC_FUNC_(h5ltread_dataset_nint3_c, H5LTREAD_DATASET_NINT3_C)
+#define nh5ltread_dataset_nint4_c         H5_FC_FUNC_(h5ltread_dataset_nint4_c, H5LTREAD_DATASET_NINT4_C)
+#define nh5ltread_dataset_nint5_c         H5_FC_FUNC_(h5ltread_dataset_nint5_c, H5LTREAD_DATASET_NINT5_C)
+#define nh5ltread_dataset_nint6_c         H5_FC_FUNC_(h5ltread_dataset_nint6_c, H5LTREAD_DATASET_NINT6_C)
+#define nh5ltread_dataset_nint7_c         H5_FC_FUNC_(h5ltread_dataset_nint7_c, H5LTREAD_DATASET_NINT7_C)
+#define nh5ltread_dataset_nfl1_c         H5_FC_FUNC_(h5ltread_dataset_nfl1_c, H5LTREAD_DATASET_NFL1_C)
+#define nh5ltread_dataset_nfl2_c         H5_FC_FUNC_(h5ltread_dataset_nfl2_c, H5LTREAD_DATASET_NFL2_C)
+#define nh5ltread_dataset_nfl3_c         H5_FC_FUNC_(h5ltread_dataset_nfl3_c, H5LTREAD_DATASET_NFL3_C)
+#define nh5ltread_dataset_nfl4_c         H5_FC_FUNC_(h5ltread_dataset_nfl4_c, H5LTREAD_DATASET_NFL4_C)
+#define nh5ltread_dataset_nfl5_c         H5_FC_FUNC_(h5ltread_dataset_nfl5_c, H5LTREAD_DATASET_NFL5_C)
+#define nh5ltread_dataset_nfl6_c         H5_FC_FUNC_(h5ltread_dataset_nfl6_c, H5LTREAD_DATASET_NFL6_C)
+#define nh5ltread_dataset_nfl7_c         H5_FC_FUNC_(h5ltread_dataset_nfl7_c, H5LTREAD_DATASET_NFL7_C)
+#define nh5ltread_dataset_ndl1_c         H5_FC_FUNC_(h5ltread_dataset_ndl1_c, H5LTREAD_DATASET_NDL1_C)
+#define nh5ltread_dataset_ndl2_c         H5_FC_FUNC_(h5ltread_dataset_ndl2_c, H5LTREAD_DATASET_NDL2_C)
+#define nh5ltread_dataset_ndl3_c         H5_FC_FUNC_(h5ltread_dataset_ndl3_c, H5LTREAD_DATASET_NDL3_C)
+#define nh5ltread_dataset_ndl4_c         H5_FC_FUNC_(h5ltread_dataset_ndl4_c, H5LTREAD_DATASET_NDL4_C)
+#define nh5ltread_dataset_ndl5_c         H5_FC_FUNC_(h5ltread_dataset_ndl5_c, H5LTREAD_DATASET_NDL5_C)
+#define nh5ltread_dataset_ndl6_c         H5_FC_FUNC_(h5ltread_dataset_ndl6_c, H5LTREAD_DATASET_NDL6_C)
+#define nh5ltread_dataset_ndl7_c         H5_FC_FUNC_(h5ltread_dataset_ndl7_c, H5LTREAD_DATASET_NDL7_C)
+#define nh5ltmake_dataset_string_c  H5_FC_FUNC_(h5ltmake_dataset_string_c, H5LTMAKE_DATASET_STRING_C)
+#define nh5ltread_dataset_string_c  H5_FC_FUNC_(h5ltread_dataset_string_c, H5LTREAD_DATASET_STRING_C)
+
+#define nh5ltset_attribute_int_c    H5_FC_FUNC_(h5ltset_attribute_int_c, H5LTSET_ATTRIBUTE_INT_C)
+#define nh5ltset_attribute_float_c  H5_FC_FUNC_(h5ltset_attribute_float_c, H5LTSET_ATTRIBUTE_FLOAT_C)
+#define nh5ltset_attribute_double_c H5_FC_FUNC_(h5ltset_attribute_double_c, H5LTSET_ATTRIBUTE_DOUBLE_C)
+#define nh5ltset_attribute_string_c H5_FC_FUNC_(h5ltset_attribute_string_c, H5LTSET_ATTRIBUTE_STRING_C)
+
+#define nh5ltget_attribute_int_c    H5_FC_FUNC_(h5ltget_attribute_int_c, H5LTGET_ATTRIBUTE_INT_C)
+#define nh5ltget_attribute_float_c  H5_FC_FUNC_(h5ltget_attribute_float_c, H5LTGET_ATTRIBUTE_FLOAT_C)
+#define nh5ltget_attribute_double_c H5_FC_FUNC_(h5ltget_attribute_double_c, H5LTGET_ATTRIBUTE_DOUBLE_C)
+#define nh5ltget_attribute_string_c H5_FC_FUNC_(h5ltget_attribute_string_c, H5LTGET_ATTRIBUTE_STRING_C)
+
+#define nh5ltget_dataset_ndims_c    H5_FC_FUNC_(h5ltget_dataset_ndims_c, H5LTGET_DATASET_NDIMS_C)
+#define nh5ltfind_dataset_c         H5_FC_FUNC_(h5ltfind_dataset_c, H5LTFIND_DATASET_C)
+#define nh5ltget_dataset_info_c     H5_FC_FUNC_(h5ltget_dataset_info_c, H5LTGET_DATASET_INFO_C)
+
+#define nh5ltget_attribute_ndims_c  H5_FC_FUNC_(h5ltget_attribute_ndims_c, H5LTGET_ATTRIBUTE_NDIMS_C)
+#define nh5ltget_attribute_info_c   H5_FC_FUNC_(h5ltget_attribute_info_c, H5LTGET_ATTRIBUTE_INFO_C)
 
 /*-------------------------------------------------------------------------
 * Image
 *-------------------------------------------------------------------------
 */
-#   define nh5immake_image_8bit_c      H5_FC_FUNC_(h5immake_image_8bit_c, H5IMMAKE_IMAGE_8BIT_C)
-#   define nh5immake_image_24bit_c     H5_FC_FUNC_(h5immake_image_24bit_c, H5IMMAKE_IMAGE_24BIT_C)
-#   define nh5imread_image_c           H5_FC_FUNC_(h5imread_image_c, H5IMREAD_IMAGE_C)
-#   define nh5imget_image_info_c       H5_FC_FUNC_(h5imget_image_info_c, H5IMGET_IMAGE_INFO_C)
-#   define nh5imis_image_c             H5_FC_FUNC_(h5imis_image_c, H5IMIS_IMAGE_C)
-#   define nh5immake_palette_c         H5_FC_FUNC_(h5immake_palette_c, H5IMMAKE_PALETTE_C)
-#   define nh5imlink_palette_c         H5_FC_FUNC_(h5imlink_palette_c, H5IMLINK_PALETTE_C)
-#   define nh5imunlink_palette_c       H5_FC_FUNC_(h5imunlink_palette_c, H5IMUNLINK_PALETTE_C)
-#   define nh5imget_npalettes_c        H5_FC_FUNC_(h5imget_npalettes_c, H5IMGET_NPALETTES_C)
-#   define nh5imget_palette_info_c     H5_FC_FUNC_(h5imget_palette_info_c, H5IMGET_PALETTE_INFO_C)
-#   define nh5imget_palette_c          H5_FC_FUNC_(h5imget_palette_c, H5IMGET_PALETTE_C)
-#   define nh5imis_palette_c           H5_FC_FUNC_(h5imis_palette_c, H5IMIS_PALETTE_C)
+#define nh5immake_image_8bit_c      H5_FC_FUNC_(h5immake_image_8bit_c, H5IMMAKE_IMAGE_8BIT_C)
+#define nh5immake_image_24bit_c     H5_FC_FUNC_(h5immake_image_24bit_c, H5IMMAKE_IMAGE_24BIT_C)
+#define nh5imread_image_c           H5_FC_FUNC_(h5imread_image_c, H5IMREAD_IMAGE_C)
+#define nh5imget_image_info_c       H5_FC_FUNC_(h5imget_image_info_c, H5IMGET_IMAGE_INFO_C)
+#define nh5imis_image_c             H5_FC_FUNC_(h5imis_image_c, H5IMIS_IMAGE_C)
+#define nh5immake_palette_c         H5_FC_FUNC_(h5immake_palette_c, H5IMMAKE_PALETTE_C)
+#define nh5imlink_palette_c         H5_FC_FUNC_(h5imlink_palette_c, H5IMLINK_PALETTE_C)
+#define nh5imunlink_palette_c       H5_FC_FUNC_(h5imunlink_palette_c, H5IMUNLINK_PALETTE_C)
+#define nh5imget_npalettes_c        H5_FC_FUNC_(h5imget_npalettes_c, H5IMGET_NPALETTES_C)
+#define nh5imget_palette_info_c     H5_FC_FUNC_(h5imget_palette_info_c, H5IMGET_PALETTE_INFO_C)
+#define nh5imget_palette_c          H5_FC_FUNC_(h5imget_palette_c, H5IMGET_PALETTE_C)
+#define nh5imis_palette_c           H5_FC_FUNC_(h5imis_palette_c, H5IMIS_PALETTE_C)
 
 /*-------------------------------------------------------------------------
 * Table
 *-------------------------------------------------------------------------
 */
-#   define nh5tbmake_table_c           H5_FC_FUNC_(h5tbmake_table_c, H5TBMAKE_TABLE_C)
-#   define nh5tbwrite_field_name_c     H5_FC_FUNC_(h5tbwrite_field_name_c, H5TBWRITE_FIELD_NAME_C)
-#   define nh5tbwrite_field_name_int_c    H5_FC_FUNC_(h5tbwrite_field_name_int_c, H5TBWRITE_FIELD_NAME_INT_C)
-#   define nh5tbwrite_field_name_fl_c     H5_FC_FUNC_(h5tbwrite_field_name_fl_c, H5TBWRITE_FIELD_NAME_FL_C)
-#   define nh5tbwrite_field_name_dl_c     H5_FC_FUNC_(h5tbwrite_field_name_dl_c, H5TBWRITE_FIELD_NAME_DL_C)
-#   define nh5tbwrite_field_name_st_c     H5_FC_FUNC_(h5tbwrite_field_name_st_c, H5TBWRITE_FIELD_NAME_ST_C)
-#   define nh5tbread_field_name_c      H5_FC_FUNC_(h5tbread_field_name_c, H5TBREAD_FIELD_NAME_C)
-#   define nh5tbread_field_name_int_c     H5_FC_FUNC_(h5tbread_field_name_int_c, H5TBREAD_FIELD_NAME_INT_C)
-#   define nh5tbread_field_name_fl_c      H5_FC_FUNC_(h5tbread_field_name_fl_c, H5TBREAD_FIELD_NAME_FL_C)
-#   define nh5tbread_field_name_dl_c      H5_FC_FUNC_(h5tbread_field_name_dl_c, H5TBREAD_FIELD_NAME_DL_C)
-#   define nh5tbread_field_name_st_c      H5_FC_FUNC_(h5tbread_field_name_st_c, H5TBREAD_FIELD_NAME_ST_C)
-#   define nh5tbwrite_field_index_c    H5_FC_FUNC_(h5tbwrite_field_index_c, H5TBWRITE_FIELD_INDEX_C)
-#   define nh5tbwrite_field_index_int_c   H5_FC_FUNC_(h5tbwrite_field_index_int_c, H5TBWRITE_FIELD_INDEX_INT_C)
-#   define nh5tbwrite_field_index_fl_c    H5_FC_FUNC_(h5tbwrite_field_index_fl_c, H5TBWRITE_FIELD_INDEX_FL_C)
-#   define nh5tbwrite_field_index_dl_c    H5_FC_FUNC_(h5tbwrite_field_index_dl_c, H5TBWRITE_FIELD_INDEX_DL_C)
-#   define nh5tbwrite_field_index_st_c    H5_FC_FUNC_(h5tbwrite_field_index_st_c, H5TBWRITE_FIELD_INDEX_ST_C)
-#   define nh5tbread_field_index_c     H5_FC_FUNC_(h5tbread_field_index_c, H5TBREAD_FIELD_INDEX_C)
-#   define nh5tbread_field_index_int_c    H5_FC_FUNC_(h5tbread_field_index_int_c, H5TBREAD_FIELD_INDEX_INT_C)
-#   define nh5tbread_field_index_fl_c     H5_FC_FUNC_(h5tbread_field_index_fl_c, H5TBREAD_FIELD_INDEX_FL_C)
-#   define nh5tbread_field_index_dl_c     H5_FC_FUNC_(h5tbread_field_index_dl_c, H5TBREAD_FIELD_INDEX_DL_C)
-#   define nh5tbread_field_index_st_c     H5_FC_FUNC_(h5tbread_field_index_st_c, H5TBREAD_FIELD_INDEX_ST_C)
-#   define nh5tbinsert_field_c         H5_FC_FUNC_(h5tbinsert_field_c, H5TBINSERT_FIELD_C)
-#   define nh5tbinsert_field_int_c        H5_FC_FUNC_(h5tbinsert_field_int_c, H5TBINSERT_FIELD_INT_C)
-#   define nh5tbinsert_field_fl_c         H5_FC_FUNC_(h5tbinsert_field_fl_c, H5TBINSERT_FIELD_FL_C)
-#   define nh5tbinsert_field_dl_c         H5_FC_FUNC_(h5tbinsert_field_dl_c, H5TBINSERT_FIELD_DL_C)
-#   define nh5tbinsert_field_st_c         H5_FC_FUNC_(h5tbinsert_field_st_c, H5TBINSERT_FIELD_ST_C)
-#   define nh5tbdelete_field_c         H5_FC_FUNC_(h5tbdelete_field_c, H5TBDELETE_FIELD_C)
-#   define nh5tbget_table_info_c       H5_FC_FUNC_(h5tbget_table_info_c, H5TBGET_TABLE_INFO_C)
-#   define nh5tbget_field_info_c       H5_FC_FUNC_(h5tbget_field_info_c, H5TBGET_FIELD_INFO_C)
+#define nh5tbmake_table_c           H5_FC_FUNC_(h5tbmake_table_c, H5TBMAKE_TABLE_C)
+#define nh5tbwrite_field_name_c     H5_FC_FUNC_(h5tbwrite_field_name_c, H5TBWRITE_FIELD_NAME_C)
+#define nh5tbwrite_field_name_int_c    H5_FC_FUNC_(h5tbwrite_field_name_int_c, H5TBWRITE_FIELD_NAME_INT_C)
+#define nh5tbwrite_field_name_fl_c     H5_FC_FUNC_(h5tbwrite_field_name_fl_c, H5TBWRITE_FIELD_NAME_FL_C)
+#define nh5tbwrite_field_name_dl_c     H5_FC_FUNC_(h5tbwrite_field_name_dl_c, H5TBWRITE_FIELD_NAME_DL_C)
+#define nh5tbwrite_field_name_st_c     H5_FC_FUNC_(h5tbwrite_field_name_st_c, H5TBWRITE_FIELD_NAME_ST_C)
+#define nh5tbread_field_name_c      H5_FC_FUNC_(h5tbread_field_name_c, H5TBREAD_FIELD_NAME_C)
+#define nh5tbread_field_name_int_c     H5_FC_FUNC_(h5tbread_field_name_int_c, H5TBREAD_FIELD_NAME_INT_C)
+#define nh5tbread_field_name_fl_c      H5_FC_FUNC_(h5tbread_field_name_fl_c, H5TBREAD_FIELD_NAME_FL_C)
+#define nh5tbread_field_name_dl_c      H5_FC_FUNC_(h5tbread_field_name_dl_c, H5TBREAD_FIELD_NAME_DL_C)
+#define nh5tbread_field_name_st_c      H5_FC_FUNC_(h5tbread_field_name_st_c, H5TBREAD_FIELD_NAME_ST_C)
+#define nh5tbwrite_field_index_c    H5_FC_FUNC_(h5tbwrite_field_index_c, H5TBWRITE_FIELD_INDEX_C)
+#define nh5tbwrite_field_index_int_c   H5_FC_FUNC_(h5tbwrite_field_index_int_c, H5TBWRITE_FIELD_INDEX_INT_C)
+#define nh5tbwrite_field_index_fl_c    H5_FC_FUNC_(h5tbwrite_field_index_fl_c, H5TBWRITE_FIELD_INDEX_FL_C)
+#define nh5tbwrite_field_index_dl_c    H5_FC_FUNC_(h5tbwrite_field_index_dl_c, H5TBWRITE_FIELD_INDEX_DL_C)
+#define nh5tbwrite_field_index_st_c    H5_FC_FUNC_(h5tbwrite_field_index_st_c, H5TBWRITE_FIELD_INDEX_ST_C)
+#define nh5tbread_field_index_c     H5_FC_FUNC_(h5tbread_field_index_c, H5TBREAD_FIELD_INDEX_C)
+#define nh5tbread_field_index_int_c    H5_FC_FUNC_(h5tbread_field_index_int_c, H5TBREAD_FIELD_INDEX_INT_C)
+#define nh5tbread_field_index_fl_c     H5_FC_FUNC_(h5tbread_field_index_fl_c, H5TBREAD_FIELD_INDEX_FL_C)
+#define nh5tbread_field_index_dl_c     H5_FC_FUNC_(h5tbread_field_index_dl_c, H5TBREAD_FIELD_INDEX_DL_C)
+#define nh5tbread_field_index_st_c     H5_FC_FUNC_(h5tbread_field_index_st_c, H5TBREAD_FIELD_INDEX_ST_C)
+#define nh5tbinsert_field_c         H5_FC_FUNC_(h5tbinsert_field_c, H5TBINSERT_FIELD_C)
+#define nh5tbinsert_field_int_c        H5_FC_FUNC_(h5tbinsert_field_int_c, H5TBINSERT_FIELD_INT_C)
+#define nh5tbinsert_field_fl_c         H5_FC_FUNC_(h5tbinsert_field_fl_c, H5TBINSERT_FIELD_FL_C)
+#define nh5tbinsert_field_dl_c         H5_FC_FUNC_(h5tbinsert_field_dl_c, H5TBINSERT_FIELD_DL_C)
+#define nh5tbinsert_field_st_c         H5_FC_FUNC_(h5tbinsert_field_st_c, H5TBINSERT_FIELD_ST_C)
+#define nh5tbdelete_field_c         H5_FC_FUNC_(h5tbdelete_field_c, H5TBDELETE_FIELD_C)
+#define nh5tbget_table_info_c       H5_FC_FUNC_(h5tbget_table_info_c, H5TBGET_TABLE_INFO_C)
+#define nh5tbget_field_info_c       H5_FC_FUNC_(h5tbget_field_info_c, H5TBGET_FIELD_INFO_C)
+
+HDF5_HL_F90CSTUBDLL
+int_f
+nh5dsset_scale_c(hid_t_f *dsid, _fcd dimname, int_f *dimnamelen);
+
+HDF5_HL_F90CSTUBDLL
+int_f
+nh5dsattach_scale_c( hid_t_f *did, hid_t_f *dsid, int_f *idx);
+
+HDF5_HL_F90CSTUBDLL
+int_f
+nh5dsattach_scale_c( hid_t_f *did, hid_t_f *dsid, int_f *idx);
+
+HDF5_HL_F90CSTUBDLL
+int_f
+nh5dsdetach_scale_c( hid_t_f *did, hid_t_f *dsid, int_f *idx);
+
+HDF5_HL_F90CSTUBDLL
+int_f
+nh5dsis_attached_c( hid_t_f *did, hid_t_f *dsid, int_f *idx, int_f *c_is_attached);
+
+HDF5_HL_F90CSTUBDLL
+int_f
+nh5dsget_label_c(hid_t_f *did, int_f *idx, _fcd label, size_t_f *size);
+
+HDF5_HL_F90CSTUBDLL
+int_f
+nh5dsis_scale_c(hid_t_f *did, int_f *is_scale);
+
+
+HDF5_HL_F90CSTUBDLL
+int_f
+nh5dsset_label_c(hid_t_f *did, int_f *idx, _fcd label, int_f *labellen);
+
+HDF5_HL_F90CSTUBDLL
+int_f
+nh5dsget_scale_name_c(hid_t_f *did, _fcd label, size_t_f *size);
+
+HDF5_HL_F90CSTUBDLL
+int_f
+nh5dsget_num_scales_c( hid_t_f *did, int_f *idx, int_f *num_scales);
+
 
 HDF5_HL_F90CSTUBDLL
 int_f
diff --git a/hl/fortran/src/Makefile.am b/hl/fortran/src/Makefile.am
index f872a63..9835196 100644
--- a/hl/fortran/src/Makefile.am
+++ b/hl/fortran/src/Makefile.am
@@ -46,8 +46,8 @@ endif
 #endif
 
 # List sources to include in the HDF5 HL Fortran library.
-libhdf5hl_fortran_la_SOURCES=H5LTfc.c  H5IMfc.c H5IMcc.c H5TBfc.c H5LTff.f90  \
-                H5IMff.f90 H5TBff.f90
+libhdf5hl_fortran_la_SOURCES=H5DSfc.c H5LTfc.c  H5IMfc.c H5IMcc.c H5TBfc.c \
+	H5DSff.f90 H5LTff.f90 H5IMff.f90 H5TBff.f90
 
 # HDF5 HL Fortran library depends on HDF5 HL Library and HDF5 Fortran Library.
 libhdf5hl_fortran_la_LIBADD=$(LIBH5_HL) $(LIBH5F)
@@ -79,6 +79,7 @@ uninstall-local:
 # determining this automagically (like we do with the C files). So, when
 # doing a parallel make, some modules could be made way before the
 # modules they depend upon are actually made. *sigh*
+H5DSff.lo:          $(srcdir)/H5DSff.f90
 H5LTff.lo:          $(srcdir)/H5LTff.f90
 H5IMff.lo:          $(srcdir)/H5IMff.f90
 H5TBff.lo:          $(srcdir)/H5TBff.f90
diff --git a/hl/fortran/src/Makefile.in b/hl/fortran/src/Makefile.in
index a8e27b3..d30bb54 100644
--- a/hl/fortran/src/Makefile.in
+++ b/hl/fortran/src/Makefile.in
@@ -94,8 +94,8 @@ am__base_list = \
 am__installdirs = "$(DESTDIR)$(libdir)"
 LTLIBRARIES = $(lib_LTLIBRARIES)
 libhdf5hl_fortran_la_DEPENDENCIES = $(LIBH5_HL) $(LIBH5F)
-am_libhdf5hl_fortran_la_OBJECTS = H5LTfc.lo H5IMfc.lo H5IMcc.lo \
-	H5TBfc.lo H5LTff.lo H5IMff.lo H5TBff.lo
+am_libhdf5hl_fortran_la_OBJECTS = H5DSfc.lo H5LTfc.lo H5IMfc.lo \
+	H5IMcc.lo H5TBfc.lo H5DSff.lo H5LTff.lo H5IMff.lo H5TBff.lo
 libhdf5hl_fortran_la_OBJECTS = $(am_libhdf5hl_fortran_la_OBJECTS)
 AM_V_lt = $(am__v_lt_$(V))
 am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
@@ -216,6 +216,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -236,10 +237,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -283,7 +286,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
@@ -434,7 +436,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
 # Add libtool shared library version numbers to the HDF5 library
 # See libtool versioning documentation online.
 LT_VERS_INTERFACE = 7
-LT_VERS_REVISION = 1
+LT_VERS_REVISION = 2
 LT_VERS_AGE = 0
 INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/hl/src -I$(top_builddir)/hl/src \
          -I$(top_srcdir)/fortran/src -I$(top_builddir)/fortran/src
@@ -452,8 +454,8 @@ libhdf5hl_fortran_la_LDFLAGS = -version-info $(LT_VERS_INTERFACE):$(LT_VERS_REVI
 #endif
 
 # List sources to include in the HDF5 HL Fortran library.
-libhdf5hl_fortran_la_SOURCES = H5LTfc.c  H5IMfc.c H5IMcc.c H5TBfc.c H5LTff.f90  \
-                H5IMff.f90 H5TBff.f90
+libhdf5hl_fortran_la_SOURCES = H5DSfc.c H5LTfc.c  H5IMfc.c H5IMcc.c H5TBfc.c \
+	H5DSff.f90 H5LTff.f90 H5IMff.f90 H5TBff.f90
 
 
 # HDF5 HL Fortran library depends on HDF5 HL Library and HDF5 Fortran Library.
@@ -548,6 +550,7 @@ mostlyclean-compile:
 distclean-compile:
 	-rm -f *.tab.c
 
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5DSfc.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5IMcc.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5IMfc.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5LTfc.Plo at am__quote@
@@ -852,6 +855,7 @@ uninstall-local:
 # determining this automagically (like we do with the C files). So, when
 # doing a parallel make, some modules could be made way before the
 # modules they depend upon are actually made. *sigh*
+H5DSff.lo:          $(srcdir)/H5DSff.f90
 H5LTff.lo:          $(srcdir)/H5LTff.f90
 H5IMff.lo:          $(srcdir)/H5IMff.f90
 H5TBff.lo:          $(srcdir)/H5TBff.f90
diff --git a/hl/fortran/test/CMakeLists.txt b/hl/fortran/test/CMakeLists.txt
index 0a91b85..470aab9 100644
--- a/hl/fortran/test/CMakeLists.txt
+++ b/hl/fortran/test/CMakeLists.txt
@@ -20,6 +20,15 @@ ADD_TEST (
         f1tab.h5
 )
 
+#-- Adding test for hl_f90_tstds
+ADD_EXECUTABLE (hl_f90_tstds tstds.f90)
+TARGET_NAMING (hl_f90_tstds ${LIB_TYPE})
+TARGET_FORTRAN_WIN_PROPERTIES (hl_f90_tstds "")
+TARGET_LINK_LIBRARIES (hl_f90_tstds ${HDF5_HL_F90_LIB_TARGET} ${HDF5_F90_LIB_TARGET})
+SET_TARGET_PROPERTIES (hl_f90_tstds PROPERTIES LINKER_LANGUAGE Fortran)
+
+ADD_TEST (NAME hl_f90_tstds COMMAND $<TARGET_FILE:hl_f90_tstds>)
+
 #-- Adding test for hl_f90_tstlite
 ADD_EXECUTABLE (hl_f90_tstlite tstlite.f90)
 TARGET_NAMING (hl_f90_tstlite ${LIB_TYPE})
diff --git a/hl/fortran/test/Makefile.am b/hl/fortran/test/Makefile.am
index 83081e3..cd281b7 100644
--- a/hl/fortran/test/Makefile.am
+++ b/hl/fortran/test/Makefile.am
@@ -33,20 +33,22 @@ else
 endif
 
 # Our main target, the test programs
-TEST_PROG=tstlite tstimage tsttable
+TEST_PROG=tstds tstlite tstimage tsttable
 check_PROGRAMS=$(TEST_PROG)
 
 LDADD= $(LIBH5F_HL) $(LIBH5F) $(LIBH5_HL)  $(LIBHDF5)
 
 # Source files for the programs
+tstds_SOURCES=tstds.f90
 tstlite_SOURCES=tstlite.f90
 tstimage_SOURCES=tstimage.f90
 tsttable_SOURCES=tsttable.f90
 
 # Temporary files.
-CHECK_CLEANFILES+=dsetf[1-4].h5 f1img.h5 f1tab.h5
+CHECK_CLEANFILES+=dsetf[1-4].h5 f1img.h5 f1tab.h5 tstds.h5
 
-# Mark this directory as part of the Fortran API
+# Mark this directory as part of the Fortran API (this affects output
+# from tests in conclude.am)
 FORTRAN_API=yes
 
 include $(top_srcdir)/config/conclude.am
diff --git a/hl/fortran/test/Makefile.in b/hl/fortran/test/Makefile.in
index 1e9634f..707a32d 100644
--- a/hl/fortran/test/Makefile.in
+++ b/hl/fortran/test/Makefile.in
@@ -69,14 +69,19 @@ mkinstalldirs = $(SHELL) $(top_srcdir)/bin/mkinstalldirs
 CONFIG_HEADER = $(top_builddir)/src/H5config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
-am__EXEEXT_1 = tstlite$(EXEEXT) tstimage$(EXEEXT) tsttable$(EXEEXT)
+am__EXEEXT_1 = tstds$(EXEEXT) tstlite$(EXEEXT) tstimage$(EXEEXT) \
+	tsttable$(EXEEXT)
+am_tstds_OBJECTS = tstds.$(OBJEXT)
+tstds_OBJECTS = $(am_tstds_OBJECTS)
+tstds_LDADD = $(LDADD)
+tstds_DEPENDENCIES = $(LIBH5F_HL) $(LIBH5F) $(LIBH5_HL) $(LIBHDF5)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
 am_tstimage_OBJECTS = tstimage.$(OBJEXT)
 tstimage_OBJECTS = $(am_tstimage_OBJECTS)
 tstimage_LDADD = $(LDADD)
 tstimage_DEPENDENCIES = $(LIBH5F_HL) $(LIBH5F) $(LIBH5_HL) $(LIBHDF5)
-AM_V_lt = $(am__v_lt_$(V))
-am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
-am__v_lt_0 = --silent
 am_tstlite_OBJECTS = tstlite.$(OBJEXT)
 tstlite_OBJECTS = $(am_tstlite_OBJECTS)
 tstlite_LDADD = $(LDADD)
@@ -105,8 +110,9 @@ am__v_FCLD_0 = @echo "  FCLD  " $@;
 AM_V_GEN = $(am__v_GEN_$(V))
 am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
 am__v_GEN_0 = @echo "  GEN   " $@;
-SOURCES = $(tstimage_SOURCES) $(tstlite_SOURCES) $(tsttable_SOURCES)
-DIST_SOURCES = $(tstimage_SOURCES) $(tstlite_SOURCES) \
+SOURCES = $(tstds_SOURCES) $(tstimage_SOURCES) $(tstlite_SOURCES) \
+	$(tsttable_SOURCES)
+DIST_SOURCES = $(tstds_SOURCES) $(tstimage_SOURCES) $(tstlite_SOURCES) \
 	$(tsttable_SOURCES)
 ETAGS = etags
 CTAGS = ctags
@@ -182,6 +188,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -202,10 +209,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -249,7 +258,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
@@ -398,18 +406,20 @@ TRACE = perl $(top_srcdir)/bin/trace
 
 # Temporary files.
 CHECK_CLEANFILES = *.chkexe *.chklog *.clog dsetf[1-4].h5 f1img.h5 \
-	f1tab.h5
+	f1tab.h5 tstds.h5
 
 # Our main target, the test programs
-TEST_PROG = tstlite tstimage tsttable
+TEST_PROG = tstds tstlite tstimage tsttable
 LDADD = $(LIBH5F_HL) $(LIBH5F) $(LIBH5_HL)  $(LIBHDF5)
 
 # Source files for the programs
+tstds_SOURCES = tstds.f90
 tstlite_SOURCES = tstlite.f90
 tstimage_SOURCES = tstimage.f90
 tsttable_SOURCES = tsttable.f90
 
-# Mark this directory as part of the Fortran API
+# Mark this directory as part of the Fortran API (this affects output
+# from tests in conclude.am)
 FORTRAN_API = yes
 
 # Automake needs to be taught how to build lib, progs, and tests targets.
@@ -470,6 +480,9 @@ clean-checkPROGRAMS:
 	list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
 	echo " rm -f" $$list; \
 	rm -f $$list
+tstds$(EXEEXT): $(tstds_OBJECTS) $(tstds_DEPENDENCIES) 
+	@rm -f tstds$(EXEEXT)
+	$(AM_V_FCLD)$(FCLINK) $(tstds_OBJECTS) $(tstds_LDADD) $(LIBS)
 tstimage$(EXEEXT): $(tstimage_OBJECTS) $(tstimage_DEPENDENCIES) 
 	@rm -f tstimage$(EXEEXT)
 	$(AM_V_FCLD)$(FCLINK) $(tstimage_OBJECTS) $(tstimage_LDADD) $(LIBS)
diff --git a/hl/fortran/test/tstds.f90 b/hl/fortran/test/tstds.f90
new file mode 100644
index 0000000..8817989
--- /dev/null
+++ b/hl/fortran/test/tstds.f90
@@ -0,0 +1,347 @@
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+! * Copyright by The HDF Group.                                               *
+! * Copyright by the Board of Trustees of the University of Illinois.         *
+! * All rights reserved.                                                      *
+! *                                                                           *
+! * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+! * terms governing use, modification, and redistribution, is contained in    *
+! * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+! * of the source code distribution tree; Copyright.html can be found at the  *
+! * root level of an installed copy of the electronic HDF5 document set and   *
+! * is linked from the top-level documents page.  It can also be found at     *
+! * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+! * access to either file, you may request a copy from help at hdfgroup.org.     *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+PROGRAM test_ds
+
+  IMPLICIT NONE
+
+  INTEGER :: err
+
+  CALL test_testds(err)
+
+  IF(err.LT.0)THEN
+     WRITE(*,'(5X,A)') "DIMENSION SCALES TEST *FAILED*"
+  ENDIF
+
+END PROGRAM test_ds
+
+SUBROUTINE test_testds(err)
+
+  USE HDF5
+  USE H5LT
+  USE H5DS
+
+  IMPLICIT NONE
+
+  INTEGER, PARAMETER :: RANK      = 2 ! rank of DATA dataset 
+  INTEGER, PARAMETER :: DIM_DATA  = 12
+  INTEGER, PARAMETER :: DIM1_SIZE = 3
+  INTEGER, PARAMETER :: DIM2_SIZE = 4
+  INTEGER, PARAMETER :: DIM1      = 1
+  INTEGER, PARAMETER :: DIM2      = 2
+  INTEGER, PARAMETER :: FAILED    = -1
+
+  CHARACTER(LEN=6), PARAMETER :: DSET_NAME = "Mydata"
+  CHARACTER(LEN=5), PARAMETER :: DS_1_NAME = "Yaxis"
+  CHARACTER(LEN=5), PARAMETER :: DS_1_NAME_A = "Yaxiz"
+  CHARACTER(LEN=5), PARAMETER :: DS_2_NAME = "Xaxis"
+
+
+  INTEGER(hid_t) :: fid    ! file ID
+  INTEGER(hid_t) :: did    ! dataset ID
+  INTEGER(hid_t) :: dsid   ! DS dataset ID
+  INTEGER :: rankds = 1    ! rank of DS dataset 
+  INTEGER(hsize_t), DIMENSION(1:rank) ::  dims  = (/DIM2_SIZE,DIM1_SIZE/) ! size of DATA dataset 
+  INTEGER, DIMENSION(1:DIM_DATA) :: buf = (/1,2,3,4,5,6,7,8,9,10,11,12/)  ! DATA of DATA dataset 
+  INTEGER(hsize_t), DIMENSION(1:1) ::  s1_dim  = (/DIM1_SIZE/)  ! size of DS 1 dataset 
+  INTEGER(hsize_t), DIMENSION(1:1) ::  s2_dim  = (/DIM2_SIZE/)  ! size of DS 2 dataset 
+  REAL, DIMENSION(1:DIM1_SIZE) ::   s1_wbuf = (/10,20,30/)     ! DATA of DS 1 dataset 
+  INTEGER, DIMENSION(1:DIM2_SIZE) :: s2_wbuf = (/10,20,50,100/) ! DATA of DS 2 dataset 
+  INTEGER :: err
+  INTEGER :: num_scales
+  INTEGER(size_t) :: name_len
+  CHARACTER(LEN=80) :: name
+  INTEGER(size_t) :: label_len
+  CHARACTER(LEN=80) :: label
+  LOGICAL :: is_attached, is_scale
+
+  !
+  ! Initialize FORTRAN predefined datatypes.
+  !
+  CALL h5open_f(err)
+  IF(err.LT.0) RETURN
+
+  ! create a file using default properties
+  CALL H5Fcreate_f("tstds.h5",H5F_ACC_TRUNC_F, fid, err)
+  IF(err.LT.0) RETURN
+
+  ! make a dataset 
+  CALL H5LTmake_dataset_int_f(fid,DSET_NAME,rank,dims,buf, err)
+  IF(err.LT.0) RETURN
+
+  ! make a DS dataset for the first dimension
+  CALL H5LTmake_dataset_float_f(fid,DS_1_NAME,rankds,s1_dim,s1_wbuf,err)
+  IF(err.LT.0) RETURN
+
+  ! make a DS dataset for the second dimension
+  CALL H5LTmake_dataset_int_f(fid,DS_2_NAME,rankds,s2_dim,s2_wbuf,err)
+  IF(err.LT.0) RETURN
+
+  !-------------------------------------------------------------------------
+  ! attach the DS_1_NAME dimension scale to DSET_NAME at dimension 1
+  !-------------------------------------------------------------------------
+ 
+  CALL test_begin(' Test Attaching Dimension Scale         ')
+
+  ! get the dataset id for DSET_NAME
+  CALL H5Dopen_f(fid, DSET_NAME, did, err)
+  IF(err.LT.0) RETURN
+
+  ! get the DS dataset id
+  CALL H5Dopen_f(fid, DS_1_NAME, dsid, err)
+  IF(err.LT.0) RETURN
+
+  ! check attaching to a non-existent dimension; should fail
+  CALL H5DSattach_scale_f(did, dsid, 20, err)
+  IF(err.NE.-1) THEN
+     err = FAILED ! should fail, mark as an error
+     CALL write_test_status(err)
+     RETURN
+  ENDIF
+
+  ! attach the DS_1_NAME dimension scale to DSET_NAME at dimension index 1
+  CALL H5DSattach_scale_f(did, dsid, DIM1, err)
+  IF(err.EQ.-1) THEN
+     CALL write_test_status(err)
+     RETURN
+  ENDIF
+  CALL write_test_status(err)
+
+  CALL test_begin(' Test If Dimension Scale Attached       ')
+
+  CALL H5DSis_attached_f(did, dsid, DIM1, is_attached, err)
+  IF(err.EQ.-1.OR..NOT.is_attached) THEN
+     err = FAILED
+     CALL write_test_status(err)
+     RETURN
+  ENDIF
+  CALL write_test_status(err)
+
+  ! Check to see how many Dimension Scales are attached
+
+  CALL test_begin(' Test Getting Number Dimension Scales   ')
+
+  CALL H5DSget_num_scales_f(did, DIM1, num_scales, err)
+  IF(err.LT.0.OR.num_scales.NE.1)THEN
+     err = FAILED
+     CALL write_test_status(err)
+     RETURN
+  ENDIF
+  CALL write_test_status(err)
+
+  CALL test_begin(' Test Detaching Dimension Scale         ')
+
+  ! Detach scale
+  CALL H5DSdetach_scale_f(did, dsid, DIM1, err)
+  IF(err.LT.0) RETURN
+
+  ! Check to see if a dimension scale is attached, should be .false.
+  CALL H5DSis_attached_f(did, dsid, DIM1, is_attached, err)
+  IF(err.LT.0.OR.is_attached)THEN
+     err = FAILED
+     CALL write_test_status(err)
+     RETURN
+  ENDIF
+  CALL write_test_status(err)
+  
+  !-------------------------------------------------------------------------
+  ! set the DS_1_NAME dimension scale to DSET_NAME at dimension 0
+  !-------------------------------------------------------------------------
+ 
+  CALL test_begin(' Test Setting Dimension Scale           ')
+
+  CALL H5DSset_scale_f(dsid, err, "Dimension Scale Set 1")
+  IF(err.LT.0.OR.is_attached)THEN
+     err = FAILED
+     CALL write_test_status(err)
+     RETURN
+  ENDIF
+  CALL write_test_status(err)
+
+  CALL test_begin(' Test If Dimension Scale                ')
+
+  CALL H5DSis_scale_f(dsid, is_scale, err)
+  IF(err.LT.0.OR..NOT.is_scale)THEN
+     err = FAILED
+     CALL write_test_status(err)
+     RETURN
+  ENDIF
+  CALL write_test_status(err)
+
+  ! Get scale name; test to large character buffer
+
+  CALL test_begin(' Test Getting Dimension Scale By Name   ')
+
+  name_len = 25
+  name = ''
+  CALL H5DSget_scale_name_f(dsid, name, name_len, err)
+  IF(err.LT.0.OR.name_len.NE.21.OR.TRIM(name).NE."Dimension Scale Set 1")THEN
+     err = FAILED
+     CALL write_test_status(err)
+     RETURN
+  ENDIF
+
+  ! Get scale name; test exact size character buffer
+  name_len = 21
+  name = ''
+  CALL H5DSget_scale_name_f(dsid, name(1:name_len), name_len, err)
+  IF(err.LT.0.OR.name_len.NE.21.OR.TRIM(name).NE."Dimension Scale Set 1")THEN
+     err = FAILED
+     CALL write_test_status(err)
+     RETURN
+  ENDIF
+
+  ! Get scale name; test to small character buffer
+  name_len = 5
+  name = ''
+  CALL H5DSget_scale_name_f(dsid, name(1:name_len), name_len, err)
+  IF(err.LT.0.OR.name_len.NE.21.OR.TRIM(name).NE."Dimen")THEN
+     err = FAILED
+     CALL write_test_status(err)
+     RETURN
+  ENDIF
+  
+  ! close DS id
+  CALL H5Dclose_f(dsid, err)
+  IF(err.LT.0) RETURN
+  
+  !-------------------------------------------------------------------------
+  ! attach the DS_2_NAME dimension scale to DSET_NAME
+  !-------------------------------------------------------------------------
+ 
+  ! get the DS dataset id
+  CALL H5Dopen_f(fid, DS_2_NAME, dsid, err)
+  IF(err.LT.0) RETURN
+
+  ! attach the DS_2_NAME dimension scale to DSET_NAME as the 2nd dimension (index 2)
+  CALL H5DSattach_scale_f(did, dsid, DIM2, err)
+  IF(err.LT.0) RETURN
+
+  CALL H5DSis_attached_f(did, dsid, DIM2, is_attached, err)
+  IF(err.LT.0) RETURN
+
+  ! test sending no Dimension Scale name
+
+  CALL H5DSset_scale_f(dsid, err)
+  IF(err.LT.0)THEN
+     CALL write_test_status(err)
+     RETURN
+  ENDIF
+
+  CALL H5DSis_scale_f(dsid, is_scale, err)
+  IF(err.LT.0.OR..NOT.is_scale)THEN
+     err = FAILED
+     CALL write_test_status(err)
+     RETURN
+  ENDIF
+
+  ! Get scale name when there is no scale name
+  name_len = 5
+  name = ''
+  CALL H5DSget_scale_name_f(dsid, name(1:name_len), name_len, err)
+  IF(err.LT.0.OR.name_len.NE.0)THEN ! name_len is 0 if no name is found
+     err = FAILED
+     CALL write_test_status(err)
+     RETURN
+  ENDIF
+
+  CALL write_test_status(err)
+
+  CALL test_begin(' Test Setting Dimension Scale Label     ')
+
+  CALL H5DSset_label_f(did, DIM2, "Label12", err)
+  IF(err.LT.0)THEN
+     CALL write_test_status(err)
+     RETURN
+  ENDIF
+
+  ! Test label where character length is to small
+  
+  label_len = 5
+  label = ''
+  CALL H5DSget_label_f(did, DIM2, label(1:label_len), label_len, err)
+  IF(err.LT.0.OR.label(1:5).NE."Label".OR.label_len.NE.7)THEN
+     err = FAILED
+     CALL write_test_status(err)
+     RETURN
+  ENDIF
+
+  ! Test label where character length is exact
+
+  label_len = 7
+  label = ''
+  CALL H5DSget_label_f(did, DIM2, label(1:label_len), label_len, err)
+  IF(err.LT.0.OR.label(1:label_len).NE."Label12".OR.label_len.NE.7)THEN
+     err = FAILED
+     CALL write_test_status(err)
+     RETURN
+  ENDIF
+
+  ! Test label where character length is to big
+
+  label_len = 25
+  label = ''
+  CALL H5DSget_label_f(did, DIM2, label, label_len, err)
+  IF(err.LT.0.OR.label(1:label_len).NE."Label12".OR.label_len.NE.7)THEN
+     err = FAILED
+     CALL write_test_status(err)
+     RETURN
+  ENDIF
+  CALL write_test_status(err)
+
+ ! close DS id
+  CALL H5Dclose_f(dsid, err)
+  IF(err.LT.0) RETURN
+
+ ! close file 
+  CALL H5Fclose_f(fid, err)
+  IF(err.LT.0) RETURN
+
+END SUBROUTINE test_testds
+
+!-------------------------------------------------------------------------
+! test_begin
+!-------------------------------------------------------------------------
+
+SUBROUTINE test_begin(string)
+  CHARACTER(LEN=*), INTENT(IN) :: string
+  WRITE(*, fmt = '(A)', advance = 'no') ADJUSTL(string)
+END SUBROUTINE test_begin
+
+!-------------------------------------------------------------------------
+! passed/failed
+!-------------------------------------------------------------------------
+SUBROUTINE write_test_status( test_result)
+
+! Writes the results of the tests
+
+  IMPLICIT NONE
+
+  INTEGER, INTENT(IN) :: test_result  ! negative,   failed
+                                      ! 0       ,   passed
+
+! Controls the output style for reporting test results
+
+  CHARACTER(LEN=8) :: error_string
+  CHARACTER(LEN=8), PARAMETER :: success = ' PASSED '
+  CHARACTER(LEN=8), PARAMETER :: failure = '*FAILED*'
+
+  error_string = failure
+  IF (test_result .EQ.  0) THEN
+     error_string = success
+  ENDIF
+  
+  WRITE(*, fmt = '(T34, A)') error_string
+
+END SUBROUTINE write_test_status
diff --git a/hl/fortran/test/tstimage.f90 b/hl/fortran/test/tstimage.f90
old mode 100755
new mode 100644
diff --git a/hl/fortran/test/tsttable.f90 b/hl/fortran/test/tsttable.f90
old mode 100755
new mode 100644
index 8191693..66ec5c6
--- a/hl/fortran/test/tsttable.f90
+++ b/hl/fortran/test/tsttable.f90
@@ -39,14 +39,14 @@ SUBROUTINE test_table1()
   CHARACTER(len=8), PARAMETER :: filename = "f1tab.h5"   ! File name
   CHARACTER(LEN=5), PARAMETER :: dsetname1 = "dset1"     ! Dataset name
   INTEGER(HID_T) :: file_id                              ! File identifier
-  INTEGER(HSIZE_T), PARAMETER :: nfields  = 4;           ! nfields
-  INTEGER(HSIZE_T), PARAMETER :: nrecords = 5;           ! nrecords
+  INTEGER(HSIZE_T), PARAMETER :: nfields  = 4            ! nfields
+  INTEGER(HSIZE_T), PARAMETER :: nrecords = 5            ! nrecords
   CHARACTER(LEN=10),DIMENSION(1:nfields) :: field_names  ! field names
   INTEGER(SIZE_T),  DIMENSION(1:nfields) :: field_offset ! field offset
   INTEGER(HID_T),   DIMENSION(1:nfields) :: field_types  ! field types
   INTEGER(HSIZE_T), PARAMETER  :: chunk_size = 5         ! chunk size
   INTEGER, PARAMETER :: compress = 0                     ! compress
-  INTEGER            :: errcode                          ! Error flag
+  INTEGER            :: errcode = 0                      ! Error flag
   INTEGER            :: i                                ! general purpose integer
   INTEGER(SIZE_T)    :: type_size                        ! Size of the datatype
   INTEGER(SIZE_T)    :: type_sizec                       ! Size of the character datatype
@@ -69,8 +69,8 @@ SUBROUTINE test_table1()
   CHARACTER(LEN=9), DIMENSION(1:nfields) :: field_namesr  ! field names
   INTEGER(SIZE_T),  DIMENSION(1:nfields) :: field_offsetr ! field offset
   INTEGER(SIZE_T),  DIMENSION(1:nfields) :: field_sizesr  ! field sizes
-  INTEGER(SIZE_T)  :: type_sizeout                        ! size of the datatype
-  INTEGER :: maxlen                                       ! max chararter length of a field name
+  INTEGER(SIZE_T)  :: type_sizeout = 0                    ! size of the datatype
+  INTEGER :: maxlen = 0                                   ! max chararter length of a field name
 
 
   !
@@ -376,7 +376,6 @@ SUBROUTINE test_table1()
 
   CALL passed()
 
-
   !-------------------------------------------------------------------------
   ! Get information about fields
   !-------------------------------------------------------------------------
diff --git a/hl/src/CMakeLists.txt b/hl/src/CMakeLists.txt
index 11f6273..c60dda1 100644
--- a/hl/src/CMakeLists.txt
+++ b/hl/src/CMakeLists.txt
@@ -34,7 +34,6 @@ SET (HL_HEADERS
 )
 
 ADD_LIBRARY (${HDF5_HL_LIB_TARGET} ${LIB_TYPE} ${HL_SRCS} ${HL_HEADERS})
-SET_TARGET_PROPERTIES(${HDF5_HL_LIB_TARGET} PROPERTIES DEFINE_SYMBOL ${HDF5_HL_LIB_CORENAME}_EXPORTS)
 TARGET_LINK_LIBRARIES (${HDF5_HL_LIB_TARGET} ${HDF5_LIB_TARGET})
 SET_GLOBAL_VARIABLE (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_HL_LIB_TARGET}")
 H5_SET_LIB_OPTIONS (${HDF5_HL_LIB_TARGET} ${HDF5_HL_LIB_NAME} ${LIB_TYPE})
diff --git a/hl/src/H5DS.c b/hl/src/H5DS.c
index 432a725..4bc4bc4 100644
--- a/hl/src/H5DS.c
+++ b/hl/src/H5DS.c
@@ -813,10 +813,8 @@ herr_t H5DSdetach_scale(hid_t did,
 
             /* same object, reset. we want to detach only for this DIM */
             if(did_oi.fileno == tmp_oi.fileno && did_oi.addr == tmp_oi.addr) {
-                /* if we found not the last one, copy the last one to replace 
-                   the one which is found */
-                if(i < nelmts-1)
-                    dsbuf[ii] = dsbuf[nelmts-1];
+                /* copy the last one to replace the one which is found */
+                dsbuf[ii] = dsbuf[nelmts-1];
                 nelmts--;
                 found_dset=1;
                 break;
@@ -1619,6 +1617,8 @@ out:
 * Comments:
 *
 * Modifications:
+*     JIRA HDFFV-7673: Added a check to see if the label name exists, 
+*     if not then returns zero. July 30, 2011. MSB
 *
 *-------------------------------------------------------------------------
 */
@@ -1631,7 +1631,7 @@ ssize_t H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size)
     int        rank;         /* rank of dataset */
     char       **buf = NULL; /* buffer to store in the attribute */
     H5I_type_t it;           /* ID type */
-    size_t     nbytes;
+    size_t     nbytes = 0;
     size_t     copy_len;
     int        i;
 
@@ -1687,6 +1687,7 @@ ssize_t H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size)
     if ((aid = H5Aopen(did, DIMENSION_LABELS, H5P_DEFAULT)) < 0)
         goto out;
 
+
     if ((tid = H5Aget_type(aid)) < 0)
         goto out;
 
@@ -1700,26 +1701,30 @@ ssize_t H5DSget_label(hid_t did, unsigned int idx, char *label, size_t size)
     if (H5Aread(aid, tid, buf) < 0)
         goto out;
 
-    /* get the real string length */
-    nbytes = strlen(buf[idx]);
+    /* do only if the label name exists for the dimension */
+    if (buf[idx] != NULL)
+    {
+        /* get the real string length */
+        nbytes = strlen(buf[idx]);
 
-    /* compute the string length which will fit into the user's buffer */
-    copy_len = MIN(size-1, nbytes);
+	/* compute the string length which will fit into the user's buffer */
+	copy_len = MIN(size-1, nbytes);
 
-    /* copy all/some of the name */
-    if (label)
-    {
-        memcpy(label, buf[idx], copy_len);
+	/* copy all/some of the name */
+	if (label)
+	  {
+	    memcpy(label, buf[idx], copy_len);
+	    
+	    /* terminate the string */
+	    label[copy_len] = '\0';
+	  }
 
-        /* terminate the string */
-        label[copy_len] = '\0';
     }
-
     /* free all the ptr's from the H5Aread() */
     for (i = 0; i < rank; i++)
     {
         if (buf[i])
-            free(buf[i]);
+	  free(buf[i]);
     }
 
     /* close */
diff --git a/hl/src/H5LT.c b/hl/src/H5LT.c
index 22bb97f..1cc1017 100644
--- a/hl/src/H5LT.c
+++ b/hl/src/H5LT.c
@@ -18,16 +18,17 @@
 #include <assert.h>
 #include <stdio.h>
 #include "H5LTprivate.h"
-
+#include "H5private.h"
 
 /* For Lex and Yacc */
 #define         COL             3
 #define         LIMIT           512
 #define         INCREMENT       1024
+#define         TMP_LEN         256
 #define         MAX(a,b)        (((a)>(b)) ? (a) : (b))
 int  input_len;
 char *myinput;
-int  indent = 0;
+size_t  indent = 0;
 
 
 
@@ -1572,9 +1573,6 @@ out:
 
 }
 
-
-
-
 /*-------------------------------------------------------------------------
 * Function: H5LTtext_to_dtype
 *
@@ -1621,6 +1619,47 @@ out:
 }
 
 /*-------------------------------------------------------------------------
+* Function:    realloc_and_append
+*
+* Purpose:     Expand the buffer and append a string to it.
+*
+* Return:      void
+*
+* Programmer:  Raymond Lu, songyulu at hdfgroup.org
+*
+* Date:        29 September 2011
+*
+* Modifications:
+*
+*-------------------------------------------------------------------------
+*/
+static char* 
+realloc_and_append(hbool_t _no_user_buf, size_t *len, char *buf, char *str_to_add)
+{
+    if(_no_user_buf) {
+        /* If the buffer isn't big enough, reallocate it.  Otherwise, go to do strcat. */
+        if(str_to_add && ((ssize_t)(*len - (strlen(buf) + strlen(str_to_add) + 1)) < LIMIT)) {
+            *len += ((strlen(buf) + strlen(str_to_add) + 1) / INCREMENT + 1) * INCREMENT;
+            buf = (char*)realloc(buf, *len);
+        } else if(!str_to_add && ((ssize_t)(*len - strlen(buf) - 1) < LIMIT)) {
+            *len += INCREMENT;
+            buf = (char*)realloc(buf, *len);
+        }
+    }
+
+    if(!buf)
+        goto out;
+
+    if(str_to_add)
+        strcat(buf, str_to_add);
+
+    return buf;
+
+out:
+    return NULL;
+}
+
+/*-------------------------------------------------------------------------
 * Function:    indentation
 *
 * Purpose:     Print spaces for indentation
@@ -1635,16 +1674,24 @@ out:
 *
 *-------------------------------------------------------------------------
 */
-static void
-indentation(int x, char* str)
+static char*
+indentation(size_t x, char* str, hbool_t no_u_buf, size_t *s_len)
 {
+    char        tmp_str[TMP_LEN];
+
     if (x < 80) {
-        while (x-- > 0)
-            strcat(str, " ");
-    } else {
-        strcat(str, "error: the indentation exceeds the number of cols.");
-        exit(1);
-    }
+        memset(tmp_str, ' ', x);
+        tmp_str[x]='\0';
+    } else
+        HDsnprintf(tmp_str, TMP_LEN, "error: the indentation exceeds the number of cols.");
+
+    if(!(str = realloc_and_append(no_u_buf, s_len, str, tmp_str)))
+        goto out;
+
+    return str;
+
+out:
+    return NULL;
 }
 
 /*-------------------------------------------------------------------------
@@ -1659,21 +1706,20 @@ indentation(int x, char* str)
 * Modifications:
 *
 *-----------------------------------------------------------------------*/
-static herr_t
-print_enum(hid_t type, char* str, int indt)
+static char*
+print_enum(hid_t type, char* str, size_t *str_len, hbool_t no_ubuf, size_t indt)
 {
     char           **name = NULL;   /*member names                   */
     unsigned char   *value = NULL;  /*value array                    */
     unsigned char   *copy = NULL;   /*a pointer to value array       */
     int              nmembs;        /*number of members              */
-    char             tmp_str[256];
+    char             tmp_str[TMP_LEN];
     int              nchars;        /*number of output characters    */
     hid_t            super = -1;    /*enum base integer type         */
     hid_t            native = -1;   /*native integer data type       */
     size_t           super_size;    /*enum base type size            */
     size_t           dst_size;      /*destination value type size    */
     int              i;
-    herr_t           ret = SUCCEED;
 
     if((nmembs = H5Tget_nmembers(type))==0)
         goto out;
@@ -1718,27 +1764,28 @@ print_enum(hid_t type, char* str, int indt)
 
     /* Print members */
     for (i = 0; i < nmembs; i++) {
-        indentation(indt + COL, str);
-        nchars = sprintf(tmp_str, "\"%s\"", name[i]);
-        strcat(str, tmp_str);
-        sprintf(tmp_str, "%*s   ", MAX(0, 16 - nchars), "");
-        strcat(str, tmp_str);
-
-        if (H5T_SGN_NONE == H5Tget_sign(native)) {
-            /*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size"
-            *strangely, unless use another pointer "copy".*/
-            copy = value+i*dst_size;
-            sprintf(tmp_str,"%u", *((unsigned int*)((void *)copy)));
-            strcat(str, tmp_str);
-        } else {
-            /*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size"
-            *strangely, unless use another pointer "copy".*/
-            copy = value+i*dst_size;
-            sprintf(tmp_str,"%d", *((int*)((void *)copy)));
-            strcat(str, tmp_str);
-        }
+        if(!(str = indentation(indt + COL, str, no_ubuf, str_len)))
+            goto out;
+        nchars = HDsnprintf(tmp_str, TMP_LEN, "\"%s\"", name[i]);
+        if(!(str = realloc_and_append(no_ubuf, str_len, str, tmp_str)))
+            goto out;
+        HDsnprintf(tmp_str, TMP_LEN, "%*s   ", MAX(0, 16 - nchars), "");
+        if(!(str = realloc_and_append(no_ubuf, str_len, str, tmp_str)))
+            goto out;
+
+        /*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size"
+         *strangely, unless use another pointer "copy".*/
+        copy = value+i*dst_size;
+        if (H5T_SGN_NONE == H5Tget_sign(native))
+            HDsnprintf(tmp_str, TMP_LEN, "%u", *((unsigned int*)((void *)copy)));
+        else
+            HDsnprintf(tmp_str, TMP_LEN, "%d", *((int*)((void *)copy)));
+        if(!(str = realloc_and_append(no_ubuf, str_len, str, tmp_str)))
+            goto out;
 
-        strcat(str, ";\n");
+        HDsnprintf(tmp_str, TMP_LEN, ";\n");
+        if(!(str = realloc_and_append(no_ubuf, str_len, str, tmp_str)))
+            goto out;
     }
 
     /* Release resources */
@@ -1749,13 +1796,13 @@ print_enum(hid_t type, char* str, int indt)
     free(value);
     H5Tclose(super);
 
-    return ret;
+    return str;
 
 out:
 
     if(0 == nmembs) {
-        sprintf(tmp_str, "\n%*s <empty>", indt + 4, "");
-        strcat(str, tmp_str);
+        HDsnprintf(tmp_str, TMP_LEN, "\n%*s <empty>", indt + 4, "");
+        str = realloc_and_append(no_ubuf, str_len, str, tmp_str);
     } /* end if */
 
     /* Release resources */
@@ -1772,7 +1819,7 @@ out:
     if(super >= 0)
         H5Tclose(super);
 
-    return FAIL;
+    return NULL;
 }
 
 /*-------------------------------------------------------------------------
@@ -1796,7 +1843,7 @@ herr_t H5LTdtype_to_text(hid_t dtype, char *str, H5LT_lang_t lang_type, size_t *
 {
     size_t      str_len = INCREMENT;
     char        *text_str;
-    herr_t      ret = -1;
+    herr_t      ret = SUCCEED;
 
     if(lang_type <= H5LT_LANG_ERR || lang_type >= H5LT_NO_LANG)
         goto out;
@@ -1804,12 +1851,14 @@ herr_t H5LTdtype_to_text(hid_t dtype, char *str, H5LT_lang_t lang_type, size_t *
     if(len && !str) {
         text_str = (char*)calloc(str_len, sizeof(char));
         text_str[0]='\0';
-        if((ret = H5LT_dtype_to_text(dtype, &text_str, lang_type, &str_len, 1)) < 0)
+        if(!(text_str = H5LT_dtype_to_text(dtype, text_str, lang_type, &str_len, 1)))
             goto out;
         *len = strlen(text_str) + 1;
-        free(text_str);
+        if(text_str)
+            free(text_str);
+        text_str = NULL;
     } else if(len && str) {
-        if((ret = H5LT_dtype_to_text(dtype, &str, lang_type, len, 0)) < 0)
+        if(!(H5LT_dtype_to_text(dtype, str, lang_type, len, 0)))
             goto out;
         str[*len-1] = '\0';
     }
@@ -1837,26 +1886,18 @@ out:
 *
 *-------------------------------------------------------------------------
 */
-herr_t H5LT_dtype_to_text(hid_t dtype, char **dt_str, H5LT_lang_t lang, size_t *slen,
+char* H5LT_dtype_to_text(hid_t dtype, char *dt_str, H5LT_lang_t lang, size_t *slen,
                           hbool_t no_user_buf)
 {
     H5T_class_t tcls;
-    char        tmp_str[256];
-    char        *tmp;
+    char        tmp_str[TMP_LEN];
     int         i;
-    herr_t      ret = SUCCEED;
-
-    if(no_user_buf && ((*slen - strlen(*dt_str)) < LIMIT)) {
-        *slen += INCREMENT;
-        tmp = (char*)realloc(*dt_str, *slen);
-        if(tmp != *dt_str) {
-            free(*dt_str);
-            *dt_str = tmp;
-        }
-    }
 
+    if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, NULL)))
+        goto out;
+    
     if(lang != H5LT_DDL) {
-        sprintf(*dt_str, "only DDL is supported for now");
+        HDsnprintf(dt_str, *slen, "only DDL is supported for now");
         goto out;
     }
 
@@ -1866,81 +1907,81 @@ herr_t H5LT_dtype_to_text(hid_t dtype, char **dt_str, H5LT_lang_t lang, size_t *
     switch (tcls) {
         case H5T_INTEGER:
             if (H5Tequal(dtype, H5T_STD_I8BE)) {
-                sprintf(*dt_str, "H5T_STD_I8BE");
+                HDsnprintf(dt_str, *slen, "H5T_STD_I8BE");
             } else if (H5Tequal(dtype, H5T_STD_I8LE)) {
-                sprintf(*dt_str, "H5T_STD_I8LE");
+                HDsnprintf(dt_str, *slen, "H5T_STD_I8LE");
             } else if (H5Tequal(dtype, H5T_STD_I16BE)) {
-                sprintf(*dt_str, "H5T_STD_I16BE");
+                HDsnprintf(dt_str, *slen, "H5T_STD_I16BE");
             } else if (H5Tequal(dtype, H5T_STD_I16LE)) {
-                sprintf(*dt_str, "H5T_STD_I16LE");
+                HDsnprintf(dt_str, *slen, "H5T_STD_I16LE");
             } else if (H5Tequal(dtype, H5T_STD_I32BE)) {
-                sprintf(*dt_str, "H5T_STD_I32BE");
+                HDsnprintf(dt_str, *slen, "H5T_STD_I32BE");
             } else if (H5Tequal(dtype, H5T_STD_I32LE)) {
-                sprintf(*dt_str, "H5T_STD_I32LE");
+                HDsnprintf(dt_str, *slen, "H5T_STD_I32LE");
             } else if (H5Tequal(dtype, H5T_STD_I64BE)) {
-                sprintf(*dt_str, "H5T_STD_I64BE");
+                HDsnprintf(dt_str, *slen, "H5T_STD_I64BE");
             } else if (H5Tequal(dtype, H5T_STD_I64LE)) {
-                sprintf(*dt_str, "H5T_STD_I64LE");
+                HDsnprintf(dt_str, *slen, "H5T_STD_I64LE");
             } else if (H5Tequal(dtype, H5T_STD_U8BE)) {
-                sprintf(*dt_str, "H5T_STD_U8BE");
+                HDsnprintf(dt_str, *slen, "H5T_STD_U8BE");
             } else if (H5Tequal(dtype, H5T_STD_U8LE)) {
-                sprintf(*dt_str, "H5T_STD_U8LE");
+                HDsnprintf(dt_str, *slen, "H5T_STD_U8LE");
             } else if (H5Tequal(dtype, H5T_STD_U16BE)) {
-                sprintf(*dt_str, "H5T_STD_U16BE");
+                HDsnprintf(dt_str, *slen, "H5T_STD_U16BE");
             } else if (H5Tequal(dtype, H5T_STD_U16LE)) {
-                sprintf(*dt_str, "H5T_STD_U16LE");
+                HDsnprintf(dt_str, *slen, "H5T_STD_U16LE");
             } else if (H5Tequal(dtype, H5T_STD_U32BE)) {
-                sprintf(*dt_str, "H5T_STD_U32BE");
+                HDsnprintf(dt_str, *slen, "H5T_STD_U32BE");
             } else if (H5Tequal(dtype, H5T_STD_U32LE)) {
-                sprintf(*dt_str, "H5T_STD_U32LE");
+                HDsnprintf(dt_str, *slen, "H5T_STD_U32LE");
             } else if (H5Tequal(dtype, H5T_STD_U64BE)) {
-                sprintf(*dt_str, "H5T_STD_U64BE");
+                HDsnprintf(dt_str, *slen, "H5T_STD_U64BE");
             } else if (H5Tequal(dtype, H5T_STD_U64LE)) {
-                sprintf(*dt_str, "H5T_STD_U64LE");
+                HDsnprintf(dt_str, *slen, "H5T_STD_U64LE");
             } else if (H5Tequal(dtype, H5T_NATIVE_SCHAR)) {
-                sprintf(*dt_str, "H5T_NATIVE_SCHAR");
+                HDsnprintf(dt_str, *slen, "H5T_NATIVE_SCHAR");
             } else if (H5Tequal(dtype, H5T_NATIVE_UCHAR)) {
-                sprintf(*dt_str, "H5T_NATIVE_UCHAR");
+                HDsnprintf(dt_str, *slen, "H5T_NATIVE_UCHAR");
             } else if (H5Tequal(dtype, H5T_NATIVE_SHORT)) {
-                sprintf(*dt_str, "H5T_NATIVE_SHORT");
+                HDsnprintf(dt_str, *slen, "H5T_NATIVE_SHORT");
             } else if (H5Tequal(dtype, H5T_NATIVE_USHORT)) {
-                sprintf(*dt_str, "H5T_NATIVE_USHORT");
+                HDsnprintf(dt_str, *slen, "H5T_NATIVE_USHORT");
             } else if (H5Tequal(dtype, H5T_NATIVE_INT)) {
-                sprintf(*dt_str, "H5T_NATIVE_INT");
+                HDsnprintf(dt_str, *slen, "H5T_NATIVE_INT");
             } else if (H5Tequal(dtype, H5T_NATIVE_UINT)) {
-                sprintf(*dt_str, "H5T_NATIVE_UINT");
+                HDsnprintf(dt_str, *slen, "H5T_NATIVE_UINT");
             } else if (H5Tequal(dtype, H5T_NATIVE_LONG)) {
-                sprintf(*dt_str, "H5T_NATIVE_LONG");
+                HDsnprintf(dt_str, *slen, "H5T_NATIVE_LONG");
             } else if (H5Tequal(dtype, H5T_NATIVE_ULONG)) {
-                sprintf(*dt_str, "H5T_NATIVE_ULONG");
+                HDsnprintf(dt_str, *slen, "H5T_NATIVE_ULONG");
             } else if (H5Tequal(dtype, H5T_NATIVE_LLONG)) {
-                sprintf(*dt_str, "H5T_NATIVE_LLONG");
+                HDsnprintf(dt_str, *slen, "H5T_NATIVE_LLONG");
             } else if (H5Tequal(dtype, H5T_NATIVE_ULLONG)) {
-                sprintf(*dt_str, "H5T_NATIVE_ULLONG");
+                HDsnprintf(dt_str, *slen, "H5T_NATIVE_ULLONG");
             } else {
-                sprintf(*dt_str, "undefined integer");
+                HDsnprintf(dt_str, *slen, "undefined integer");
             }
 
             break;
         case H5T_FLOAT:
             if (H5Tequal(dtype, H5T_IEEE_F32BE)) {
-                sprintf(*dt_str, "H5T_IEEE_F32BE");
+                HDsnprintf(dt_str, *slen, "H5T_IEEE_F32BE");
             } else if (H5Tequal(dtype, H5T_IEEE_F32LE)) {
-                sprintf(*dt_str, "H5T_IEEE_F32LE");
+                HDsnprintf(dt_str, *slen, "H5T_IEEE_F32LE");
             } else if (H5Tequal(dtype, H5T_IEEE_F64BE)) {
-                sprintf(*dt_str, "H5T_IEEE_F64BE");
+                HDsnprintf(dt_str, *slen, "H5T_IEEE_F64BE");
             } else if (H5Tequal(dtype, H5T_IEEE_F64LE)) {
-                sprintf(*dt_str, "H5T_IEEE_F64LE");
+                HDsnprintf(dt_str, *slen, "H5T_IEEE_F64LE");
             } else if (H5Tequal(dtype, H5T_NATIVE_FLOAT)) {
-                sprintf(*dt_str, "H5T_NATIVE_FLOAT");
+                HDsnprintf(dt_str, *slen, "H5T_NATIVE_FLOAT");
             } else if (H5Tequal(dtype, H5T_NATIVE_DOUBLE)) {
-                sprintf(*dt_str, "H5T_NATIVE_DOUBLE");
+                HDsnprintf(dt_str, *slen, "H5T_NATIVE_DOUBLE");
 #if H5_SIZEOF_LONG_DOUBLE !=0
             } else if (H5Tequal(dtype, H5T_NATIVE_LDOUBLE)) {
-                sprintf(*dt_str, "H5T_NATIVE_LDOUBLE");
+                HDsnprintf(dt_str, *slen, "H5T_NATIVE_LDOUBLE");
 #endif
             } else {
-                sprintf(*dt_str, "undefined float");
+                HDsnprintf(dt_str, *slen, "undefined float");
             }
 
             break;
@@ -1969,38 +2010,47 @@ herr_t H5LT_dtype_to_text(hid_t dtype, char **dt_str, H5LT_lang_t lang, size_t *
                     goto out;
 
                 /* Print lead-in */
-                sprintf(*dt_str, "H5T_STRING {\n");
+                HDsnprintf(dt_str, *slen, "H5T_STRING {\n");
                 indent += COL;
 
-                indentation(indent + COL, *dt_str);
+                if(!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen)))
+                    goto out;
 
                 if(is_vlstr)
-                    strcat(*dt_str, "STRSIZE H5T_VARIABLE;\n");
-                else {
-                    sprintf(tmp_str, "STRSIZE %d;\n", (int)size);
-                    strcat(*dt_str, tmp_str);
-                }
+                    HDsnprintf(tmp_str, TMP_LEN, "STRSIZE H5T_VARIABLE;\n");
+                else
+                    HDsnprintf(tmp_str, TMP_LEN, "STRSIZE %d;\n", (int)size);
 
-                indentation(indent + COL, *dt_str);
+                if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                    goto out;
+
+                if(!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen)))
+                    goto out;
 
                 if (str_pad == H5T_STR_NULLTERM)
-                    strcat(*dt_str, "STRPAD H5T_STR_NULLTERM;\n");
+                    HDsnprintf(tmp_str, TMP_LEN, "STRPAD H5T_STR_NULLTERM;\n");
                 else if (str_pad == H5T_STR_NULLPAD)
-                    strcat(*dt_str, "STRPAD H5T_STR_NULLPAD;\n");
+                    HDsnprintf(tmp_str, TMP_LEN, "STRPAD H5T_STR_NULLPAD;\n");
                 else if (str_pad == H5T_STR_SPACEPAD)
-                    strcat(*dt_str, "STRPAD H5T_STR_SPACEPAD;\n");
+                    HDsnprintf(tmp_str, TMP_LEN, "STRPAD H5T_STR_SPACEPAD;\n");
                 else
-                    strcat(*dt_str, "STRPAD H5T_STR_ERROR;\n");
+                    HDsnprintf(tmp_str, TMP_LEN, "STRPAD H5T_STR_ERROR;\n");
 
-                indentation(indent + COL, *dt_str);
+                if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                    goto out;
+
+                if(!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen)))
+                    goto out;
 
                 if (cset == H5T_CSET_ASCII)
-                    strcat(*dt_str, "CSET H5T_CSET_ASCII;\n");
+                    HDsnprintf(tmp_str, TMP_LEN, "CSET H5T_CSET_ASCII;\n");
                 else if (cset == H5T_CSET_UTF8)
-                    strcat(*dt_str, "CSET H5T_CSET_UTF8;\n");
+                    HDsnprintf(tmp_str, TMP_LEN, "CSET H5T_CSET_UTF8;\n");
                 else
-                    strcat(*dt_str, "CSET unknown;\n");
+                    HDsnprintf(tmp_str, TMP_LEN, "CSET unknown;\n");
 
+                if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                    goto out;
 
                 /* Reproduce a C type string */
                 if((str_type = H5Tcopy(H5T_C_S1)) < 0)
@@ -2017,11 +2067,14 @@ herr_t H5LT_dtype_to_text(hid_t dtype, char **dt_str, H5LT_lang_t lang, size_t *
                 if(H5Tset_strpad(str_type, str_pad) < 0)
                     goto out;
 
-                indentation(indent + COL, *dt_str);
+                if(!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen)))
+                    goto out;
 
                 /* Check C variable-length string first. Are the two types equal? */
                 if (H5Tequal(tmp_type, str_type)) {
-                    strcat(*dt_str, "CTYPE H5T_C_S1;\n");
+                    HDsnprintf(tmp_str, TMP_LEN, "CTYPE H5T_C_S1;\n");
+                    if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                        goto out;
                     goto next;
                 }
 
@@ -2037,7 +2090,9 @@ herr_t H5LT_dtype_to_text(hid_t dtype, char **dt_str, H5LT_lang_t lang, size_t *
                 }
 
                 if (H5Tequal(tmp_type, str_type)) {
-                    strcat(*dt_str, "H5T_C_S1;\n");
+                    HDsnprintf(tmp_str, TMP_LEN, "CTYPE H5T_C_S1;\n");
+                    if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                        goto out;
                     goto next;
                 }
 
@@ -2056,7 +2111,9 @@ herr_t H5LT_dtype_to_text(hid_t dtype, char **dt_str, H5LT_lang_t lang, size_t *
 
                 /* Are the two types equal? */
                 if (H5Tequal(tmp_type, str_type)) {
-                    strcat(*dt_str, "CTYPE H5T_FORTRAN_S1;\n");
+                    HDsnprintf(tmp_str, TMP_LEN, "CTYPE H5T_FORTRAN_S1;\n");
+                    if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                        goto out;
                     goto next;
                 }
 
@@ -2073,12 +2130,16 @@ herr_t H5LT_dtype_to_text(hid_t dtype, char **dt_str, H5LT_lang_t lang, size_t *
 
                 /* Are the two types equal? */
                 if (H5Tequal(tmp_type, str_type)) {
-                    strcat(*dt_str, "CTYPE H5T_FORTRAN_S1;\n");
+                    HDsnprintf(tmp_str, TMP_LEN, "CTYPE H5T_FORTRAN_S1;\n");
+                    if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                        goto out;
                     goto next;
                 }
 
                 /* Type doesn't match any of above. */
-                strcat(*dt_str, "CTYPE unknown_one_character_type;\n ");
+                HDsnprintf(tmp_str, TMP_LEN, "CTYPE unknown_one_character_type;\n");
+                if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                    goto out;
 
 next:
                 H5Tclose(str_type);
@@ -2086,36 +2147,48 @@ next:
 
                 /* Print closing */
                 indent -= COL;
-                indentation(indent + COL, *dt_str);
-                strcat(*dt_str, "}");
+                if(!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen)))
+                    goto out;
+                HDsnprintf(tmp_str, TMP_LEN, "}");
+                if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                    goto out;
 
                 break;
             }
         case H5T_OPAQUE:
             {
-            char *tag;
+            char *tag = NULL;
 
             /* Print lead-in */
-            sprintf(*dt_str, "H5T_OPAQUE {\n");
+            HDsnprintf(dt_str, *slen, "H5T_OPAQUE {\n");
             indent += COL;
 
-            indentation(indent + COL, *dt_str);
-            sprintf(tmp_str, "OPQ_SIZE %lu;\n", (unsigned long)H5Tget_size(dtype));
-            strcat(*dt_str, tmp_str);
+            if(!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen)))
+                goto out;
+            HDsnprintf(tmp_str, TMP_LEN, "OPQ_SIZE %lu;\n", (unsigned long)H5Tget_size(dtype));
+            if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                goto out;
 
-            indentation(indent + COL, *dt_str);
+            if(!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen)))
+                goto out;
             tag = H5Tget_tag(dtype);
             if(tag) {
-                sprintf(tmp_str, "OPQ_TAG \"%s\";\n", tag);
-                free(tag);
+                HDsnprintf(tmp_str, TMP_LEN, "OPQ_TAG \"%s\";\n", tag);
+                if(tag)
+                    free(tag);
+                tag = NULL;
             } else
-                sprintf(tmp_str, "OPQ_TAG \"\";\n");
-            strcat(*dt_str, tmp_str);
+                HDsnprintf(tmp_str, TMP_LEN, "OPQ_TAG \"\";\n");
+            if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                goto out;
 
             /* Print closing */
             indent -= COL;
-            indentation(indent + COL, *dt_str);
-            strcat(*dt_str, "}");
+            if(!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen)))
+                goto out;
+            HDsnprintf(tmp_str, TMP_LEN, "}");
+            if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                goto out;
 
             break;
             }
@@ -2123,12 +2196,13 @@ next:
             {
                 hid_t super;
                 size_t super_len;
-                char* stmp;
+                char* stmp = NULL;
 
                 /* Print lead-in */
-                sprintf(*dt_str, "H5T_ENUM {\n");
+                HDsnprintf(dt_str, *slen, "H5T_ENUM {\n");
                 indent += COL;
-                indentation(indent + COL, *dt_str);
+                if(!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen)))
+                    goto out;
 
                 if((super = H5Tget_super(dtype)) < 0)
                     goto out;
@@ -2136,19 +2210,29 @@ next:
                     goto out;
                 stmp = (char*)calloc(super_len, sizeof(char));
                 if(H5LTdtype_to_text(super, stmp, lang, &super_len) < 0)
+                     goto out;
+                if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, stmp)))
+                    goto out;
+
+                if(stmp)
+                    free(stmp);
+                stmp = NULL;
+
+                HDsnprintf(tmp_str, TMP_LEN, ";\n");
+                if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
                     goto out;
-                strcat(*dt_str, stmp);
-                free(stmp);
-                strcat(*dt_str, ";\n");
                 H5Tclose(super);
 
-                if(print_enum(dtype, *dt_str, indent) < 0)
+                if(!(dt_str = print_enum(dtype, dt_str, slen, no_user_buf, indent)))
                     goto out;
 
                 /* Print closing */
                 indent -= COL;
-                indentation(indent + COL, *dt_str);
-                strcat(*dt_str, "}");
+                if(!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen)))
+                    goto out;
+                HDsnprintf(tmp_str, TMP_LEN, "}");
+                if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                    goto out;
 
                 break;
             }
@@ -2156,12 +2240,13 @@ next:
             {
                 hid_t super;
                 size_t super_len;
-                char* stmp;
+                char* stmp = NULL;
 
                 /* Print lead-in */
-                sprintf(*dt_str, "H5T_VLEN {\n");
+                HDsnprintf(dt_str, *slen, "H5T_VLEN {\n");
                 indent += COL;
-                indentation(indent + COL, *dt_str);
+                if(!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen)))
+                    goto out;
 
                 if((super = H5Tget_super(dtype)) < 0)
                     goto out;
@@ -2170,15 +2255,24 @@ next:
                 stmp = (char*)calloc(super_len, sizeof(char));
                 if(H5LTdtype_to_text(super, stmp, lang, &super_len) < 0)
                     goto out;
-                strcat(*dt_str, stmp);
-                free(stmp);
-                strcat(*dt_str, "\n");
+                if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, stmp)))
+                    goto out;
+
+                if(stmp)
+                    free(stmp);
+                stmp = NULL;
+                HDsnprintf(tmp_str, TMP_LEN, "\n");
+                if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                    goto out;
                 H5Tclose(super);
 
                 /* Print closing */
                 indent -= COL;
-                indentation(indent + COL, *dt_str);
-                strcat(*dt_str, "}");
+                if(!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen)))
+                    goto out;
+                HDsnprintf(tmp_str, TMP_LEN, "}");
+                if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                    goto out;
 
                 break;
             }
@@ -2186,14 +2280,15 @@ next:
             {
                 hid_t       super;
                 size_t      super_len;
-                char*       stmp;
+                char*       stmp = NULL;
                 hsize_t     dims[H5S_MAX_RANK];
                 int         ndims;
 
                 /* Print lead-in */
-                sprintf(*dt_str, "H5T_ARRAY {\n");
+                HDsnprintf(dt_str, *slen, "H5T_ARRAY {\n");
                 indent += COL;
-                indentation(indent + COL, *dt_str);
+                if(!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen)))
+                    goto out;
 
                 /* Get array information */
                 if((ndims = H5Tget_array_ndims(dtype)) < 0)
@@ -2203,10 +2298,13 @@ next:
 
                 /* Print array dimensions */
                 for (i = 0; i < ndims; i++) {
-                    sprintf(tmp_str, "[%d]", (int) dims[i]);
-                    strcat(*dt_str, tmp_str);
+                    HDsnprintf(tmp_str, TMP_LEN, "[%d]", (int) dims[i]);
+                    if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                        goto out;
                 }
-                strcat(*dt_str, " ");
+                HDsnprintf(tmp_str, TMP_LEN, " ");
+                if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                        goto out;
 
                 if((super = H5Tget_super(dtype)) < 0)
                     goto out;
@@ -2215,32 +2313,40 @@ next:
                 stmp = (char*)calloc(super_len, sizeof(char));
                 if(H5LTdtype_to_text(super, stmp, lang, &super_len) < 0)
                     goto out;
-                strcat(*dt_str, stmp);
-                free(stmp);
-                strcat(*dt_str, "\n");
+                if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, stmp)))
+                        goto out;
+                if(stmp)
+                    free(stmp);
+                stmp = NULL;
+                HDsnprintf(tmp_str, TMP_LEN, "\n");
+                if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                        goto out;
                 H5Tclose(super);
 
                 /* Print closing */
                 indent -= COL;
-                indentation(indent + COL, *dt_str);
-                strcat(*dt_str, "}");
+                if(!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen)))
+                    goto out;
+                HDsnprintf(tmp_str, TMP_LEN, "}");
+                if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                        goto out;
 
                 break;
             }
         case H5T_COMPOUND:
             {
-                char       *mname;
+                char       *mname = NULL;
                 hid_t       mtype;
                 size_t      moffset;
                 H5T_class_t mclass;
                 size_t      mlen;
-                char*       mtmp;
+                char*       mtmp = NULL;
                 int         nmembs;
 
                 if((nmembs = H5Tget_nmembers(dtype)) < 0)
                     goto out;
 
-                sprintf(*dt_str, "H5T_COMPOUND {\n");
+                HDsnprintf(dt_str, *slen, "H5T_COMPOUND {\n");
                 indent += COL;
 
                 for (i = 0; i < nmembs; i++) {
@@ -2249,7 +2355,8 @@ next:
                     if((mtype = H5Tget_member_type(dtype, (unsigned)i)) < 0)
                         goto out;
                     moffset = H5Tget_member_offset(dtype, (unsigned)i);
-                    indentation(indent + COL, *dt_str);
+                    if(!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen)))
+                        goto out;
 
                     if((mclass = H5Tget_class(mtype)) < 0)
                         goto out;
@@ -2261,47 +2368,53 @@ next:
                     mtmp = (char*)calloc(mlen, sizeof(char));
                     if(H5LTdtype_to_text(mtype, mtmp, lang, &mlen) < 0)
                         goto out;
-                    strcat(*dt_str, mtmp);
-                    free(mtmp);
+                    if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, mtmp)))
+                        goto out;
+                    if(mtmp)
+                        free(mtmp);
+                    mtmp = NULL;
 
                     if (H5T_COMPOUND == mclass)
                         indent -= COL;
 
-                    sprintf(tmp_str, " \"%s\"", mname);
-                    strcat(*dt_str, tmp_str);
-                    free(mname);
+                    HDsnprintf(tmp_str, TMP_LEN, " \"%s\"", mname);
+                    if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                        goto out;
+                    if(mname)
+                        free(mname);
+                    mname = NULL;
 
-                    sprintf(tmp_str, " : %lu;\n", (unsigned long)moffset);
-                    strcat(*dt_str, tmp_str);
+                    HDsnprintf(tmp_str, TMP_LEN, " : %lu;\n", (unsigned long)moffset);
+                    if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                        goto out;
                 }
 
                 /* Print closing */
                 indent -= COL;
-                indentation(indent + COL, *dt_str);
-                strcat(*dt_str, "}");
+                if(!(dt_str = indentation(indent + COL, dt_str, no_user_buf, slen)))
+                    goto out;
+                HDsnprintf(tmp_str, TMP_LEN, "}");
+                if(!(dt_str = realloc_and_append(no_user_buf, slen, dt_str, tmp_str)))
+                        goto out;
 
                 break;
             }
         case H5T_TIME:
-            sprintf(*dt_str, "H5T_TIME: not yet implemented");
+            HDsnprintf(dt_str, *slen, "H5T_TIME: not yet implemented");
             break;
         case H5T_BITFIELD:
-            sprintf(*dt_str, "H5T_BITFIELD: not yet implemented");
+            HDsnprintf(dt_str, *slen, "H5T_BITFIELD: not yet implemented");
             break;
         default:
-            sprintf(*dt_str, "unknown data type");
+            HDsnprintf(dt_str, *slen, "unknown data type");
     }
 
-    return ret;
+    return dt_str;
 
 out:
-    return FAIL;
+    return NULL;
 }
 
-
-
-
-
 /*-------------------------------------------------------------------------
 *
 * Get attribute functions
diff --git a/hl/src/H5LTprivate.h b/hl/src/H5LTprivate.h
index c51ee7c..69616b1 100644
--- a/hl/src/H5LTprivate.h
+++ b/hl/src/H5LTprivate.h
@@ -45,7 +45,7 @@ H5_HLDLL herr_t  H5LT_set_attribute_string( hid_t dset_id,
 H5_HLDLL herr_t  H5LT_find_attribute( hid_t loc_id, const char *name );
 
 
-H5_HLDLL herr_t  H5LT_dtype_to_text(hid_t dtype, char **dt_str, H5LT_lang_t lang,
+H5_HLDLL char* H5LT_dtype_to_text(hid_t dtype, char *dt_str, H5LT_lang_t lang,
                                     size_t *slen, hbool_t no_user_buf);
 
 
diff --git a/hl/src/Makefile.in b/hl/src/Makefile.in
index b68457b..413087d 100644
--- a/hl/src/Makefile.in
+++ b/hl/src/Makefile.in
@@ -200,6 +200,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -220,10 +221,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -267,7 +270,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
@@ -418,7 +420,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
 # Add libtool shared library version numbers to the HDF5 library
 # See libtool versioning documentation online.
 LT_VERS_INTERFACE = 7
-LT_VERS_REVISION = 1
+LT_VERS_REVISION = 2
 LT_VERS_AGE = 0
 
 # This library is our main target.
diff --git a/hl/test/Makefile.in b/hl/test/Makefile.in
index c69e0f7..6aa5a2a 100644
--- a/hl/test/Makefile.in
+++ b/hl/test/Makefile.in
@@ -204,6 +204,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -224,10 +225,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -271,7 +274,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/hl/test/test_ds.c b/hl/test/test_ds.c
index a13dbcd..1bf268e 100644
--- a/hl/test/test_ds.c
+++ b/hl/test/test_ds.c
@@ -81,8 +81,9 @@ static int test_types(void);
 static int test_iterators(void);
 static int test_data(void);
 static int read_data( const char* fname, int ndims, hsize_t *dims, float **buf );
+static int test_attach_detach(void);
 
-
+#define RANK1         1
 #define RANK          2
 #define DIM_DATA      12
 #define DIM1_SIZE     3
@@ -136,7 +137,8 @@ static int read_data( const char* fname, int ndims, hsize_t *dims, float **buf )
 #define FILE5          "test_ds7.h5"
 #define FILE6          "test_ds8.h5"
 #define FILE7          "test_ds9.h5"
- 
+#define FILE8          "test_ds10.h5"
+
 #define DIMENSION_LIST "DIMENSION_LIST"
 #define REFERENCE_LIST "REFERENCE_LIST"
 
@@ -174,7 +176,7 @@ int main(void)
     nerrors += test_foreign_scaleattached(FOREIGN_FILE1) < 0  ? 1 : 0;
     nerrors += test_foreign_scaleattached(FOREIGN_FILE2) < 0  ? 1 : 0;
     nerrors += test_detachscales() < 0  ? 1 : 0;
-
+    nerrors += test_attach_detach() < 0  ? 1 : 0;
 /*  the following tests have not been rewritten to match those above */
     nerrors += test_simple() < 0  ?1:0;
     nerrors += test_errors() < 0  ?1:0;
@@ -2916,6 +2918,11 @@ static int test_simple(void)
         goto out;
     if(H5DSset_label(did,DIM0,DIM0_LABEL) < 0)
         goto out;
+
+    /* check getting a label which does not exist */
+    if(H5DSget_label(did,DIM1,dim1_label,sizeof(dim1_label)) != 0)
+        goto out;
+
     if(H5DSset_label(did,DIM1,DIM1_LABEL) < 0)
         goto out;
     if(H5DSget_label(did,DIM0,dim0_label,sizeof(dim0_label)) < 0)
@@ -4867,4 +4874,242 @@ out:
     H5_FAILED();
     return FAIL;
 }
+/*-------------------------------------------------------------------------
+ * Test attaching and detaching in different order
+ * Checks condition reported in Bug HDFFV-7605
+ *-------------------------------------------------------------------------
+ */
+
+static int test_attach_detach(void)
+{
+    hid_t          fid;                                              /* file ID */
+    hid_t          gid;                                              /* group ID */
+    hid_t          sid;                                              /* dataspace ID */
+    hid_t          dcpl_id;                                          /* dataset creation property */
+    hid_t          dsid = -1;                                        /* DS dataset ID */
+    hid_t          var1_id, var2_id, var3_id;                        /* DS component name */
+    hsize_t        dims[RANK1] = {DIM1};
+
+    TESTING2("permutations of attaching and detaching");
+
+    if((fid = H5Fcreate(FILE8, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+      goto out;
+
+    if((gid = H5Gopen2(fid, "/", H5P_DEFAULT)) < 0)
+      goto out;
+
+    /* Create dimension scale. */
+
+    if((dcpl_id = H5Pcreate(H5P_DATASET_CREATE)) < 0)
+      goto out;
+    
+    if((sid = H5Screate_simple(1, dims, dims)) < 0) 
+      goto out;
+
+    if((dsid = H5Dcreate2(gid, DS_3_NAME, H5T_IEEE_F32BE, sid,
+			   H5P_DEFAULT, dcpl_id, H5P_DEFAULT)) < 0)
+      goto out;
+
+    if(H5Sclose(sid) < 0) 
+      goto out;
+    if(H5Pclose(dcpl_id) < 0) 
+      goto out;
+
+    if(H5DSset_scale(dsid, DS_3_NAME) < 0) 
+      goto out;
+
+    /* Create a variable that uses this dimension scale. */
+
+    if((sid = H5Screate_simple(DIM1, dims, dims)) < 0) 
+      goto out;
+
+    if((var1_id = H5Dcreate2(gid, DS_31_NAME, H5T_NATIVE_FLOAT, sid,
+			      H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) 
+      goto out;
+
+    if(H5Sclose(sid) < 0) 
+      goto out;
+
+    if(H5DSattach_scale(var1_id, dsid, 0) < 0) 
+      goto out;
+
+    /* Create another variable that uses this dimension scale. */
+    if((dcpl_id = H5Pcreate(H5P_DATASET_CREATE)) < 0) 
+      goto out;
+
+    if(H5Pset_attr_creation_order(dcpl_id, H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED) < 0) 
+      goto out;
+
+    if((sid = H5Screate_simple(DIM1, dims, dims)) < 0) 
+      goto out;
+
+    if((var2_id = H5Dcreate2(gid, DS_32_NAME, H5T_NATIVE_FLOAT, sid,
+			     H5P_DEFAULT, H5P_DEFAULT,H5P_DEFAULT)) < 0) 
+      goto out;
 
+    if(H5Pclose(dcpl_id) < 0) 
+      goto out;
+
+    if(H5Sclose(sid) < 0) 
+      goto out;
+
+    /* Create 3rd variable that uses this dimension scale. */
+    if((dcpl_id = H5Pcreate(H5P_DATASET_CREATE)) < 0) 
+      goto out;
+
+    if(H5Pset_attr_creation_order(dcpl_id, H5P_CRT_ORDER_TRACKED | H5P_CRT_ORDER_INDEXED) < 0) 
+      goto out;
+
+    if((sid = H5Screate_simple(DIM1, dims, dims)) < 0) 
+      goto out;
+
+    if((var3_id = H5Dcreate2(gid, DS_33_NAME, H5T_NATIVE_FLOAT, sid,
+			     H5P_DEFAULT, H5P_DEFAULT,H5P_DEFAULT)) < 0) 
+      goto out;
+
+    if(H5Pclose(dcpl_id) < 0) 
+      goto out;
+
+    if(H5Sclose(sid) < 0) 
+      goto out;
+    
+    /* Attached var2 scale */
+    if(H5DSattach_scale(var2_id, dsid, 0) < 0) 
+      goto out;
+
+    /* Detach the var2 scale */
+    if(H5DSdetach_scale(var2_id, dsid, 0) < 0) 
+      goto out;
+
+    /* Check if in correct state of detached and attached */
+    if(H5DSis_attached(var1_id, dsid, 0) == 0) /* should still be attached */
+      goto out;
+    if(H5DSis_attached(var2_id, dsid, 0) != 0) /* should not be attached */
+      goto out;
+
+    /* Detach the var1 scale */
+    if(H5DSdetach_scale(var1_id, dsid, 0) < 0) 
+      goto out;
+
+    /* Check if in correct state of detached and attached */
+    if(H5DSis_attached(var1_id, dsid, 0) != 0) /* should not be attached */
+      goto out;
+    if(H5DSis_attached(var2_id, dsid, 0) != 0) /* should not be attached */
+      goto out;
+
+    /* Attach the DS again and remove them in the opposite order */
+
+    if(H5DSattach_scale(var1_id, dsid, 0) < 0) 
+      goto out;
+
+    if(H5DSattach_scale(var2_id, dsid, 0) < 0) 
+      goto out;
+
+    /* Detach the var1 scale */
+    if(H5DSdetach_scale(var1_id, dsid, 0) < 0)
+      goto out;
+
+    /* Check if in correct state of detached and attached */
+
+    if(H5DSis_attached(var1_id, dsid, 0) != 0) /* should not be attached */
+      goto out;
+    if(H5DSis_attached(var2_id, dsid, 0) == 0) /* should still be attached */
+      goto out;
+
+    /* Detach the var2 scale */
+    if(H5DSdetach_scale(var2_id, dsid, 0) < 0)
+      goto out;
+
+    /* Check if in correct state of detached and attached */
+    if(H5DSis_attached(var1_id, dsid, 0) != 0) /* should not be attached */
+      goto out;
+    if(H5DSis_attached(var2_id, dsid, 0) != 0) /* should not be attached */
+      goto out;
+
+    /***************************************************
+     * Attach Three DS and remove the middle one first
+     *****************************************************/
+
+    if(H5DSattach_scale(var1_id, dsid, 0) < 0) 
+      goto out;
+
+    if(H5DSattach_scale(var2_id, dsid, 0) < 0) 
+      goto out;
+
+    if(H5DSattach_scale(var3_id, dsid, 0) < 0) 
+      goto out;
+
+
+    /* Detach the var2 scale */
+    if(H5DSdetach_scale(var2_id, dsid, 0) < 0)
+      goto out;
+
+    /* Check if in correct state of detached and attached */
+
+    if(H5DSis_attached(var1_id, dsid, 0) == 0) /* should still be attached */
+      goto out;
+    if(H5DSis_attached(var2_id, dsid, 0) != 0) /* should not be attached */
+      goto out;
+    if(H5DSis_attached(var3_id, dsid, 0) == 0) /* should still be attached */
+      goto out;
+
+    /* Detach the var3 scale */
+    if(H5DSdetach_scale(var3_id, dsid, 0) < 0)
+      goto out;
+
+    /* Check if in correct state of detached and attached */
+    if(H5DSis_attached(var1_id, dsid, 0) == 0) /* should still be attached */
+      goto out;
+    if(H5DSis_attached(var2_id, dsid, 0) != 0) /* should not be attached */
+      goto out;
+    if(H5DSis_attached(var3_id, dsid, 0) != 0) /* should not be attached */
+      goto out;
+
+    /* Detach the var1 scale */
+    if(H5DSdetach_scale(var1_id, dsid, 0) < 0)
+      goto out;
+
+    /* Check if in correct state of detached and attached */
+    if(H5DSis_attached(var1_id, dsid, 0) != 0) /* should not be attached */
+      goto out;
+    if(H5DSis_attached(var2_id, dsid, 0) != 0) /* should not be attached */
+      goto out;
+    if(H5DSis_attached(var3_id, dsid, 0) != 0) /* should not be attached */
+      goto out;
+
+    /*-------------------------------------------------------------------------
+    * close
+    *-------------------------------------------------------------------------
+    */
+
+    if(H5Dclose(var1_id) < 0) 
+      goto out;
+    if(H5Dclose(var2_id) < 0) 
+      goto out;
+    if(H5Dclose(var3_id) < 0) 
+      goto out;
+    if(H5Dclose(dsid) < 0) 
+      goto out;
+    if(H5Gclose(gid) < 0) 
+      goto out;
+    if(H5Fclose(fid) < 0)
+      goto out;
+
+    PASSED();
+
+    return 0;
+
+    /* error zone */
+out:
+    H5E_BEGIN_TRY
+    {
+	H5Dclose(var1_id);
+	H5Dclose(var2_id);
+	H5Dclose(var3_id);
+        H5Dclose(dsid);
+        H5Gclose(gid);
+        H5Fclose(fid);
+    } H5E_END_TRY;
+    H5_FAILED();
+    return FAIL;
+}
diff --git a/hl/test/test_lite.c b/hl/test/test_lite.c
index 533cc24..d5382eb 100644
--- a/hl/test/test_lite.c
+++ b/hl/test/test_lite.c
@@ -1373,16 +1373,16 @@ static int test_variables(void)
 
     if(H5Tis_variable_str(dtype))
         goto out;
-
+    
     if(H5Tclose(dtype)<0)
         goto out;
-
+    
     if((dtype = H5LTtext_to_dtype("H5T_VLEN { H5T_VLEN { H5T_STD_I32BE } }", H5LT_DDL))<0)
         goto out;
-
+    
     if(H5Tis_variable_str(dtype))
         goto out;
-
+    
     if(H5LTdtype_to_text(dtype, NULL, H5LT_DDL, &str_len)<0)
         goto out;
     dt_str = (char*)calloc(str_len, sizeof(char));
@@ -1393,10 +1393,10 @@ static int test_variables(void)
         goto out;
     }
     free(dt_str);
-
+    
     if(H5Tclose(dtype)<0)
         goto out;
-
+    
     PASSED();
     return 0;
 
@@ -1527,6 +1527,111 @@ out:
 }
 
 /*-------------------------------------------------------------------------
+* subroutine for test_text_dtype(): test_compound_bug(). Test case for 
+* issue 7701.
+*-------------------------------------------------------------------------
+*/
+static int test_compound_bug(void)
+{
+    hid_t       dtype;
+    H5T_class_t type_class;
+    int         nmembs;
+    char*       memb_name = NULL;
+    char*       dt_str;
+    size_t      str_len;
+    char text[] = "H5T_COMPOUND { H5T_STD_I32LE \"state_________________________________________________________________________________\"; H5T_STD_I32LE \"desc_________________________________________________________________________________________\"; H5T_VLEN { H5T_COMPOUND { H5T_ENUM { H5T_STD_I16LE; \"ZERO\" 0; \"ONE\" 1; \"TWO\" 2;  \"THREE\" 3; } \"type____\"; H5T_STD_I32LE \"sub_______________________________________________________________________________________________________________\"; H5T_STRING { STRSIZE H5T_VARIABLE; STRPAD H5T_STR_SPACEPAD; CSET H5T_CSET_ASCII; CTYPE H5T_C_S1; } \"sub_desc\"; H5T_STD_I32LE \"final___________________________________________________________________________________________________\"; } } \"sub\"; }";
+    char text2[] =
+     "H5T_COMPOUND {\n"
+     "  H5T_STD_I16LE \"state___________________________"
+         "__________________________________________________"
+         "____\" : 0;\n"
+     "  H5T_STD_I16LE \"desc____________________________"
+         "__________________________________________________"
+         "___________\" : 2;\n"
+     "  H5T_VLEN { H5T_COMPOUND {\n"
+     "    H5T_ENUM { H5T_STD_I16LE; \"ZERO\" 0; \"ONE\" "
+         "1; \"TWO\" 2;  \"THREE\" 3; } \"type____\" : 0;\n"
+     "    H5T_STD_I32LE \"sub___________________________"
+         "__________________________________________________"
+         "__________________________________1\" : 4;\n"
+     "    H5T_STRING { STRSIZE H5T_VARIABLE; STRPAD H5T_"
+         "STR_SPACEPAD; CSET H5T_CSET_ASCII; CTYPE H5T_C_S1;"
+         " } \"sub_desc\" : 8;\n"
+     "    H5T_STD_I32LE \"final_________________________"
+         "__________________________________________________"
+         "________________________\" : 16;\n"
+     "  } } \"sub\" : 8;\n"
+     "}\n";
+
+    TESTING3("        text for compound type of bug fix");
+
+    if((dtype = H5LTtext_to_dtype(text, H5LT_DDL))<0)
+        goto out;
+
+    if((type_class = H5Tget_class(dtype))<0)
+        goto out;
+    if(type_class != H5T_COMPOUND)
+        goto out;
+
+    if((memb_name = H5Tget_member_name(dtype, 2)) == NULL)
+        goto out;
+    if(strcmp(memb_name, "sub"))
+        goto out;
+    free(memb_name);
+
+    if(H5LTdtype_to_text(dtype, NULL, H5LT_DDL, &str_len)<0)
+        goto out;
+
+    dt_str = (char*)calloc(str_len, sizeof(char));
+    if(H5LTdtype_to_text(dtype, dt_str, H5LT_DDL, &str_len)<0)
+        goto out;
+    free(dt_str);
+
+    if(H5Tclose(dtype)<0)
+        goto out;
+
+
+    /* Test similar datatype in another format */
+    if((dtype = H5LTtext_to_dtype(text2, H5LT_DDL))<0)
+        goto out;
+
+    if((type_class = H5Tget_class(dtype))<0)
+        goto out;
+    if(type_class != H5T_COMPOUND)
+        goto out;
+
+    if((nmembs = H5Tget_nmembers(dtype))<0)
+        goto out;
+    if(nmembs != 3)
+        goto out;
+
+    if((memb_name = H5Tget_member_name(dtype, 1)) == NULL)
+        goto out;
+    if(strcmp(memb_name, "desc_________________________________________________________________________________________"))
+        goto out;
+    free(memb_name);
+
+    if(H5LTdtype_to_text(dtype, NULL, H5LT_DDL, &str_len)<0)
+        goto out;
+
+    dt_str = (char*)calloc(str_len, sizeof(char));
+    if(H5LTdtype_to_text(dtype, dt_str, H5LT_DDL, &str_len)<0)
+        goto out;
+
+    free(dt_str);
+
+    if(H5Tclose(dtype)<0)
+        goto out;
+
+    PASSED();
+    return 0;
+
+out:
+    H5_FAILED();
+    return -1;
+}
+
+/*-------------------------------------------------------------------------
 * subroutine for test_text_dtype(): test_complicated_compound().
 *-------------------------------------------------------------------------
 */
@@ -1643,6 +1748,9 @@ static int test_text_dtype(void)
     if(test_compounds()<0)
         goto out;
 
+    if(test_compound_bug()<0)
+        goto out;
+
     if(test_complicated_compound()<0)
         goto out;
 
diff --git a/hl/tools/Makefile.in b/hl/tools/Makefile.in
index d7157e8..dae4008 100644
--- a/hl/tools/Makefile.in
+++ b/hl/tools/Makefile.in
@@ -179,6 +179,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -199,10 +200,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -246,7 +249,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/hl/tools/gif2h5/Makefile.in b/hl/tools/gif2h5/Makefile.in
index 3058a33..c857fed 100644
--- a/hl/tools/gif2h5/Makefile.in
+++ b/hl/tools/gif2h5/Makefile.in
@@ -189,6 +189,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -209,10 +210,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -256,7 +259,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/perform/CMakeLists.txt b/perform/CMakeLists.txt
index 15db402..95ffd30 100644
--- a/perform/CMakeLists.txt
+++ b/perform/CMakeLists.txt
@@ -110,12 +110,14 @@ IF (H5_HAVE_PARALLEL)
   TARGET_LINK_LIBRARIES (benchpar ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET} ${HDF5_TEST_LIB_TARGET})
 
   #-- Adding test for mpi-perf
-  SET (mpi-perf_SRCS
-      ${HDF5_PERFORM_SOURCE_DIR}/mpi-perf.c
-  )
-  ADD_EXECUTABLE (mpi-perf ${mpi-perf_SRCS})
-  TARGET_NAMING (mpi-perf ${LIB_TYPE})
-  TARGET_LINK_LIBRARIES (mpi-perf ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET} ${HDF5_TEST_LIB_TARGET})
+  IF (NOT WIN32)
+    SET (mpi-perf_SRCS
+        ${HDF5_PERFORM_SOURCE_DIR}/mpi-perf.c
+    )
+    ADD_EXECUTABLE (mpi-perf ${mpi-perf_SRCS})
+    TARGET_NAMING (mpi-perf ${LIB_TYPE})
+    TARGET_LINK_LIBRARIES (mpi-perf ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET} ${HDF5_TEST_LIB_TARGET})
+  ENDIF (NOT WIN32)
 ENDIF (H5_HAVE_PARALLEL)
 
 
@@ -138,7 +140,7 @@ ADD_CUSTOM_COMMAND (
 
 # Remove any output file left over from previous test run
 ADD_TEST (
-    NAME h5perform-clear-objects
+    NAME PERFORM_h5perform-clear-objects
     COMMAND    ${CMAKE_COMMAND}
         -E remove 
         chunk.h5
@@ -151,31 +153,33 @@ ADD_TEST (
         x-gnuplot
 )
 
-ADD_TEST (NAME h5perf_serial COMMAND $<TARGET_FILE:h5perf_serial>)
+ADD_TEST (NAME PERFORM_h5perf_serial COMMAND $<TARGET_FILE:h5perf_serial>)
 
 IF (HDF5_BUILD_PERFORM_STANDALONE)
-  ADD_TEST (NAME h5perf_serial_alone COMMAND $<TARGET_FILE:h5perf_serial_alone>)
+  ADD_TEST (NAME PERFORM_h5perf_serial_alone COMMAND $<TARGET_FILE:h5perf_serial_alone>)
 ENDIF (HDF5_BUILD_PERFORM_STANDALONE)
 
-ADD_TEST (NAME chunk COMMAND $<TARGET_FILE:chunk>)
+ADD_TEST (NAME PERFORM_chunk COMMAND $<TARGET_FILE:chunk>)
 
-ADD_TEST (NAME iopipe COMMAND $<TARGET_FILE:iopipe>)
+ADD_TEST (NAME PERFORM_iopipe COMMAND $<TARGET_FILE:iopipe>)
 
-ADD_TEST (NAME overhead COMMAND $<TARGET_FILE:overhead>)
+ADD_TEST (NAME PERFORM_overhead COMMAND $<TARGET_FILE:overhead>)
 
-ADD_TEST (NAME perf_meta COMMAND $<TARGET_FILE:perf_meta>)
+ADD_TEST (NAME PERFORM_perf_meta COMMAND $<TARGET_FILE:perf_meta>)
 
-ADD_TEST (NAME zip_perf_help COMMAND $<TARGET_FILE:zip_perf> "-h")
-ADD_TEST (NAME zip_perf COMMAND $<TARGET_FILE:zip_perf> tfilters.h5)
+ADD_TEST (NAME PERFORM_zip_perf_help COMMAND $<TARGET_FILE:zip_perf> "-h")
+ADD_TEST (NAME PERFORM_zip_perf COMMAND $<TARGET_FILE:zip_perf> tfilters.h5)
 
 IF (H5_HAVE_PARALLEL)
-  ADD_TEST (NAME h5perf COMMAND ${MPIEXEC} ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_POSTFLAGS} $<TARGET_FILE:h5perf>)
+  ADD_TEST (NAME PERFORM_h5perf COMMAND ${MPIEXEC} ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_POSTFLAGS} $<TARGET_FILE:h5perf>)
 
   IF (HDF5_BUILD_PERFORM_STANDALONE)
-    ADD_TEST (NAME h5perf_alone COMMAND ${MPIEXEC} ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_POSTFLAGS} $<TARGET_FILE:h5perf_alone>)
+    ADD_TEST (NAME PERFORM_h5perf_alone COMMAND ${MPIEXEC} ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_POSTFLAGS} $<TARGET_FILE:h5perf_alone>)
   ENDIF (HDF5_BUILD_PERFORM_STANDALONE)
 
-  ADD_TEST (NAME benchpar COMMAND ${MPIEXEC} ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_POSTFLAGS} $<TARGET_FILE:benchpar>)
+#  ADD_TEST (NAME PERFORM_benchpar COMMAND ${MPIEXEC} ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_POSTFLAGS} $<TARGET_FILE:benchpar>)
 
-  ADD_TEST (NAME mpi-perf COMMAND ${MPIEXEC} ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_POSTFLAGS} $<TARGET_FILE:mpi-perf>)
+  IF (NOT WIN32)
+    ADD_TEST (NAME PERFORM_mpi-perf COMMAND ${MPIEXEC} ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_POSTFLAGS} $<TARGET_FILE:mpi-perf>)
+  ENDIF (NOT WIN32)
 ENDIF (H5_HAVE_PARALLEL)
diff --git a/perform/Makefile.in b/perform/Makefile.in
index 5d6f89e..39739a4 100644
--- a/perform/Makefile.in
+++ b/perform/Makefile.in
@@ -224,6 +224,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -244,10 +245,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -291,7 +294,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/perform/benchpar.c b/perform/benchpar.c
index 035e9d6..24146e4 100644
--- a/perform/benchpar.c
+++ b/perform/benchpar.c
@@ -13,7 +13,9 @@
  * access to either file, you may request a copy from help at hdfgroup.org.     *
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
+#ifdef H5_HAVE_UNISTD_H
 #include <unistd.h>
+#endif
 #include <stdlib.h>
 #include <assert.h>
 #include <math.h>
@@ -23,6 +25,11 @@
 #include "hdf5.h"
 
 /* Local macros */
+#ifdef H5_HAVE_VISUAL_STUDIO
+#define HDgetlogin()           Wgetlogin()
+#else /* H5_HAVE_VISUAL_STUDIO */
+#define HDgetlogin()            getlogin()
+#endif /* H5_HAVE_VISUAL_STUDIO */
 
 /*
  * HDF Boolean type.
@@ -115,13 +122,13 @@ static hid_t create_fapl(MPI_Comm comm, MPI_Info info, int acc_type )
 
     /* set parallel access with communicator, using MPI-I/O driver */
     if (acc_type == FACC_MPIO) {
-	ret = H5Pset_fapl_mpio(fapl, comm, info);
+    ret = H5Pset_fapl_mpio(fapl, comm, info);
         assert(ret>=0);
     } /* end if */
 
     /* set parallel access with communicator, using MPI-posix driver */
     if (acc_type == FACC_MPIPOSIX) {
-	ret = H5Pset_fapl_mpiposix(fapl, comm, use_gpfs);
+      ret = H5Pset_fapl_mpiposix(fapl, comm, use_gpfs);
         assert(ret>=0);
     } /* end if */
 
@@ -312,7 +319,7 @@ int main(int argc, char *argv[])
         char *login;    /* Pointer to login name */
 
         /* Get the login name for this user */
-        login=getlogin();
+        login=HDgetlogin();
         if(login==NULL)
             login=DEFAULT_USERNAME;
 
diff --git a/perform/iopipe.c b/perform/iopipe.c
index c72e3aa..85063fa 100644
--- a/perform/iopipe.c
+++ b/perform/iopipe.c
@@ -28,34 +28,34 @@
 #endif
 
 
-#define RAW_FILE_NAME	"iopipe.raw"
-#define HDF5_FILE_NAME	"iopipe.h5"
-#define HEADING		"%-16s"
-#define PROGRESS	'='
+#define RAW_FILE_NAME  "iopipe.raw"
+#define HDF5_FILE_NAME  "iopipe.h5"
+#define HEADING    "%-16s"
+#define PROGRESS  '='
 
 #if 0
 /* Normal testing */
-#define REQUEST_SIZE_X	4579
-#define REQUEST_SIZE_Y	4579
-#define NREAD_REQUESTS	45
-#define NWRITE_REQUESTS	45
+#define REQUEST_SIZE_X  4579
+#define REQUEST_SIZE_Y  4579
+#define NREAD_REQUESTS  45
+#define NWRITE_REQUESTS  45
 #else
 /* Speedy testing */
-#define REQUEST_SIZE_X	1000
-#define REQUEST_SIZE_Y	1000
-#define NREAD_REQUESTS	45
-#define NWRITE_REQUESTS	45
+#define REQUEST_SIZE_X  1000
+#define REQUEST_SIZE_Y  1000
+#define NREAD_REQUESTS  45
+#define NWRITE_REQUESTS  45
 #endif
 
 
 /*-------------------------------------------------------------------------
- * Function:	print_stats
+ * Function:  print_stats
  *
- * Purpose:	Prints statistics
+ * Purpose:  Prints statistics
  *
- * Return:	void
+ * Return:  void
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, March 12, 1998
  *
  * Modifications:
@@ -65,63 +65,63 @@
 #ifdef H5_HAVE_GETRUSAGE
 static void
 print_stats (const char *prefix,
-	     struct rusage *r_start, struct rusage *r_stop,
-	     struct timeval *t_start, struct timeval *t_stop,
-	     size_t nbytes)
+       struct rusage *r_start, struct rusage *r_stop,
+       struct timeval *t_start, struct timeval *t_stop,
+       size_t nbytes)
 #else /* H5_HAVE_GETRUSAGE */
 static void
 print_stats (const char *prefix,
-	     struct timeval *r_start, struct timeval *r_stop,
-	     struct timeval *t_start, struct timeval *t_stop,
-	     size_t nbytes)
+       struct timeval *r_start, struct timeval *r_stop,
+       struct timeval *t_start, struct timeval *t_stop,
+       size_t nbytes)
 #endif /* H5_HAVE_GETRUSAGE */
 {
-    double	e_time, bw;
+    double  e_time, bw;
 #ifdef H5_HAVE_GETRUSAGE
-    double	u_time, s_time;
+    double  u_time, s_time;
 
     u_time = ((double)(r_stop->ru_utime.tv_sec)+
-	      (double)(r_stop->ru_utime.tv_usec)/1000000.0) -
-	     ((double)(r_start->ru_utime.tv_sec)+
-	      (double)(r_start->ru_utime.tv_usec)/1000000.0);
+        (double)(r_stop->ru_utime.tv_usec)/1000000.0) -
+       ((double)(r_start->ru_utime.tv_sec)+
+        (double)(r_start->ru_utime.tv_usec)/1000000.0);
 
     s_time = ((double)(r_stop->ru_stime.tv_sec)+
-	      (double)(r_stop->ru_stime.tv_usec)/1000000.0) -
-	     ((double)(r_start->ru_stime.tv_sec)+
-	      (double)(r_start->ru_stime.tv_usec)/1000000.0);
+        (double)(r_stop->ru_stime.tv_usec)/1000000.0) -
+       ((double)(r_start->ru_stime.tv_sec)+
+        (double)(r_start->ru_stime.tv_usec)/1000000.0);
 #endif
 #ifndef H5_HAVE_SYS_TIMEB
     e_time = ((double)(t_stop->tv_sec)+
-	      (double)(t_stop->tv_usec)/1000000.0) -
-	     ((double)(t_start->tv_sec)+
-	      (double)(t_start->tv_usec)/1000000.0);
+        (double)(t_stop->tv_usec)/1000000.0) -
+       ((double)(t_start->tv_sec)+
+        (double)(t_start->tv_usec)/1000000.0);
 #else
     e_time = ((double)(t_stop->tv_sec)+
-	      (double)(t_stop->tv_usec)/1000.0) -
-	     ((double)(t_start->tv_sec)+
-	      (double)(t_start->tv_usec)/1000.0);
+        (double)(t_stop->tv_usec)/1000.0) -
+       ((double)(t_start->tv_sec)+
+        (double)(t_start->tv_usec)/1000.0);
 #endif
     bw = (double)nbytes / e_time;
 
 #ifdef H5_HAVE_GETRUSAGE
     printf (HEADING "%1.2fuser %1.2fsystem %1.2felapsed %1.2fMB/s\n",
-	    prefix, u_time, s_time, e_time, bw/(1024*1024));
+      prefix, u_time, s_time, e_time, bw/(1024*1024));
 #else
     printf (HEADING "%1.2felapsed %1.2fMB/s\n",
-	    prefix, e_time, bw/(1024*1024));
+      prefix, e_time, bw/(1024*1024));
 #endif
 
 }
 
 
 /*-------------------------------------------------------------------------
- * Function:	synchronize
+ * Function:  synchronize
  *
  * Purpose:
  *
- * Return:	void
+ * Return:  void
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, March 12, 1998
  *
  * Modifications:
@@ -132,7 +132,7 @@ static void
 synchronize (void)
 {
 #ifdef H5_HAVE_SYSTEM
-#if defined(_WIN32) && ! defined(__CYGWIN__)
+#if defined(H5_HAVE_WIN32_API) && ! defined(__CYGWIN__)
     _flushall();
 #else
     HDsystem("sync");
@@ -143,15 +143,15 @@ synchronize (void)
 
 
 /*-------------------------------------------------------------------------
- * Function:	main
+ * Function:  main
  *
  * Purpose:
  *
- * Return:	Success:
+ * Return:  Success:
  *
- *		Failure:
+ *    Failure:
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, March 12, 1998
  *
  * Modifications:
@@ -161,29 +161,29 @@ synchronize (void)
 int
 main (void)
 {
-    static hsize_t	size[2] = {REQUEST_SIZE_X, REQUEST_SIZE_Y};
-    static unsigned	nread = NREAD_REQUESTS, nwrite = NWRITE_REQUESTS;
+    static hsize_t  size[2] = {REQUEST_SIZE_X, REQUEST_SIZE_Y};
+    static unsigned  nread = NREAD_REQUESTS, nwrite = NWRITE_REQUESTS;
 
-    unsigned char	*the_data = NULL;
-    hid_t		file, dset, file_space = -1;
-    herr_t		status;
+    unsigned char  *the_data = NULL;
+    hid_t    file, dset, file_space = -1;
+    herr_t    status;
 #ifdef H5_HAVE_GETRUSAGE
-    struct rusage	r_start, r_stop;
+    struct rusage  r_start, r_stop;
 #else
     struct timeval r_start, r_stop;
 #endif
-    struct timeval	t_start, t_stop;
-    int			fd;
-    unsigned		u;
-    hssize_t		n;
-    off_t		offset;
-    hsize_t		start[2];
-    hsize_t		count[2];
+    struct timeval  t_start, t_stop;
+    int      fd;
+    unsigned    u;
+    hssize_t    n;
+    off_t    offset;
+    hsize_t    start[2];
+    hsize_t    count[2];
 
 
 #ifdef H5_HAVE_SYS_TIMEB
-	struct _timeb *tbstart = malloc(sizeof(struct _timeb));
-	struct _timeb *tbstop = malloc(sizeof(struct _timeb));
+  struct _timeb *tbstart = malloc(sizeof(struct _timeb));
+  struct _timeb *tbstop = malloc(sizeof(struct _timeb));
 #endif
     /*
      * The extra cast in the following statement is a bug workaround for the
@@ -191,7 +191,7 @@ main (void)
      * 1998-11-06 ptl
      */
     printf ("I/O request size is %1.1fMB\n",
-	    (double)(hssize_t)(size[0]*size[1])/1024.0*1024);
+      (double)(hssize_t)(size[0]*size[1])/1024.0*1024);
 
     /* Open the files */
     file = H5Fcreate (HDF5_FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
@@ -218,14 +218,14 @@ main (void)
     HDgettimeofday(&t_start, NULL);
 #else
 #ifdef H5_HAVE_SYS_TIMEB
-	_ftime(tbstart);
+  _ftime(tbstart);
 #endif
 #endif
     fprintf (stderr, HEADING, "fill raw");
     for(u = 0; u < nwrite; u++) {
-	putc (PROGRESS, stderr);
-	HDfflush(stderr);
-	HDmemset(the_data, 0xAA, (size_t)(size[0]*size[1]));
+  putc (PROGRESS, stderr);
+  HDfflush(stderr);
+  HDmemset(the_data, 0xAA, (size_t)(size[0]*size[1]));
     }
 #ifdef H5_HAVE_GETRUSAGE
     HDgetrusage(RUSAGE_SELF, &r_stop);
@@ -234,17 +234,17 @@ main (void)
     HDgettimeofday(&t_stop, NULL);
 #else
 #ifdef H5_HAVE_SYS_TIMEB
-	_ftime(tbstop);
-	t_start.tv_sec = tbstart->time;
-	t_start.tv_usec = tbstart->millitm;
-	t_stop.tv_sec = tbstop->time;
-	t_stop.tv_usec = tbstop->millitm;
+  _ftime(tbstop);
+  t_start.tv_sec = tbstart->time;
+  t_start.tv_usec = tbstart->millitm;
+  t_stop.tv_sec = tbstop->time;
+  t_stop.tv_usec = tbstop->millitm;
 #endif
 #endif
     putc ('\n', stderr);
     print_stats ("fill raw",
-		 &r_start, &r_stop, &t_start, &t_stop,
-		 (size_t)(nread*size[0]*size[1]));
+     &r_start, &r_stop, &t_start, &t_stop,
+     (size_t)(nread*size[0]*size[1]));
 
 
     /* Fill hdf5 */
@@ -256,16 +256,16 @@ main (void)
     HDgettimeofday(&t_start, NULL);
 #else
 #ifdef H5_HAVE_SYS_TIMEB
-	_ftime(tbstart);
+  _ftime(tbstart);
 #endif
 #endif
     fprintf (stderr, HEADING, "fill hdf5");
     for(u = 0; u < nread; u++) {
-	putc (PROGRESS, stderr);
-	HDfflush(stderr);
-	status = H5Dread (dset, H5T_NATIVE_UCHAR, file_space, file_space,
-			  H5P_DEFAULT, the_data);
-	assert (status>=0);
+  putc (PROGRESS, stderr);
+  HDfflush(stderr);
+  status = H5Dread (dset, H5T_NATIVE_UCHAR, file_space, file_space,
+        H5P_DEFAULT, the_data);
+  assert (status>=0);
     }
 #ifdef H5_HAVE_GETRUSAGE
     HDgetrusage(RUSAGE_SELF, &r_stop);
@@ -274,17 +274,17 @@ main (void)
     HDgettimeofday(&t_stop, NULL);
 #else
 #ifdef H5_HAVE_SYS_TIMEB
-	_ftime(tbstop);
-	t_start.tv_sec = tbstart->time;
-	t_start.tv_usec = tbstart->millitm;
-	t_stop.tv_sec = tbstop->time;
-	t_stop.tv_usec = tbstop->millitm;
+  _ftime(tbstop);
+  t_start.tv_sec = tbstart->time;
+  t_start.tv_usec = tbstart->millitm;
+  t_stop.tv_sec = tbstop->time;
+  t_stop.tv_usec = tbstop->millitm;
 #endif
 #endif
     putc ('\n', stderr);
     print_stats ("fill hdf5",
-		 &r_start, &r_stop, &t_start, &t_stop,
-		 (size_t)(nread*size[0]*size[1]));
+     &r_start, &r_stop, &t_start, &t_stop,
+     (size_t)(nread*size[0]*size[1]));
 
     /* Write the raw dataset */
     synchronize ();
@@ -295,17 +295,17 @@ main (void)
     HDgettimeofday(&t_start, NULL);
 #else
 #ifdef H5_HAVE_SYS_TIMEB
-	_ftime(tbstart);
+  _ftime(tbstart);
 #endif
 #endif
     fprintf (stderr, HEADING, "out raw");
     for(u = 0; u < nwrite; u++) {
-	putc (PROGRESS, stderr);
-	HDfflush(stderr);
-	offset = HDlseek (fd, (off_t)0, SEEK_SET);
-	assert (0==offset);
-	n = HDwrite (fd, the_data, (size_t)(size[0]*size[1]));
-	assert (n>=0 && (size_t)n==size[0]*size[1]);
+  putc (PROGRESS, stderr);
+  HDfflush(stderr);
+  offset = HDlseek (fd, (off_t)0, SEEK_SET);
+  assert (0==offset);
+  n = HDwrite (fd, the_data, (size_t)(size[0]*size[1]));
+  assert (n>=0 && (size_t)n==size[0]*size[1]);
     }
 #ifdef H5_HAVE_GETRUSAGE
     HDgetrusage(RUSAGE_SELF, &r_stop);
@@ -314,17 +314,17 @@ main (void)
     HDgettimeofday(&t_stop, NULL);
 #else
 #ifdef H5_HAVE_SYS_TIMEB
-	_ftime(tbstop);
-	t_start.tv_sec = tbstart->time;
-	t_start.tv_usec = tbstart->millitm;
-	t_stop.tv_sec = tbstop->time;
-	t_stop.tv_usec = tbstop->millitm;
+  _ftime(tbstop);
+  t_start.tv_sec = tbstart->time;
+  t_start.tv_usec = tbstart->millitm;
+  t_stop.tv_sec = tbstop->time;
+  t_stop.tv_usec = tbstop->millitm;
 #endif
 #endif
     putc ('\n', stderr);
     print_stats ("out raw",
-		 &r_start, &r_stop, &t_start, &t_stop,
-		 (size_t)(nread*size[0]*size[1]));
+     &r_start, &r_stop, &t_start, &t_stop,
+     (size_t)(nread*size[0]*size[1]));
 
     /* Write the hdf5 dataset */
     synchronize ();
@@ -335,16 +335,16 @@ main (void)
     HDgettimeofday(&t_start, NULL);
 #else
 #ifdef H5_HAVE_SYS_TIMEB
-	_ftime(tbstart);
+  _ftime(tbstart);
 #endif
 #endif
     fprintf (stderr, HEADING, "out hdf5");
     for(u = 0; u < nwrite; u++) {
-	putc (PROGRESS, stderr);
-	HDfflush(stderr);
-	status = H5Dwrite (dset, H5T_NATIVE_UCHAR, H5S_ALL, H5S_ALL,
-			   H5P_DEFAULT, the_data);
-	assert (status>=0);
+  putc (PROGRESS, stderr);
+  HDfflush(stderr);
+  status = H5Dwrite (dset, H5T_NATIVE_UCHAR, H5S_ALL, H5S_ALL,
+         H5P_DEFAULT, the_data);
+  assert (status>=0);
     }
 #ifdef H5_HAVE_GETRUSAGE
     HDgetrusage(RUSAGE_SELF, &r_stop);
@@ -353,17 +353,17 @@ main (void)
     HDgettimeofday(&t_stop, NULL);
 #else
 #ifdef H5_HAVE_SYS_TIMEB
-	_ftime(tbstop);
-	t_start.tv_sec = tbstart->time;
-	t_start.tv_usec = tbstart->millitm;
-	t_stop.tv_sec = tbstop->time;
-	t_stop.tv_usec = tbstop->millitm;
+  _ftime(tbstop);
+  t_start.tv_sec = tbstart->time;
+  t_start.tv_usec = tbstart->millitm;
+  t_stop.tv_sec = tbstop->time;
+  t_stop.tv_usec = tbstop->millitm;
 #endif
 #endif
     putc ('\n', stderr);
     print_stats ("out hdf5",
-		 &r_start, &r_stop, &t_start, &t_stop,
-		 (size_t)(nread*size[0]*size[1]));
+     &r_start, &r_stop, &t_start, &t_stop,
+     (size_t)(nread*size[0]*size[1]));
 
     /* Read the raw dataset */
     synchronize ();
@@ -374,17 +374,17 @@ main (void)
     HDgettimeofday(&t_start, NULL);
 #else
 #ifdef H5_HAVE_SYS_TIMEB
-	_ftime(tbstart);
+  _ftime(tbstart);
 #endif
 #endif
     fprintf (stderr, HEADING, "in raw");
     for(u = 0; u < nread; u++) {
-	putc (PROGRESS, stderr);
-	HDfflush(stderr);
-	offset = HDlseek (fd, (off_t)0, SEEK_SET);
-	assert (0==offset);
-	n = HDread (fd, the_data, (size_t)(size[0]*size[1]));
-	assert (n>=0 && (size_t)n==size[0]*size[1]);
+  putc (PROGRESS, stderr);
+  HDfflush(stderr);
+  offset = HDlseek (fd, (off_t)0, SEEK_SET);
+  assert (0==offset);
+  n = HDread (fd, the_data, (size_t)(size[0]*size[1]));
+  assert (n>=0 && (size_t)n==size[0]*size[1]);
     }
 #ifdef H5_HAVE_GETRUSAGE
     HDgetrusage(RUSAGE_SELF, &r_stop);
@@ -393,17 +393,17 @@ main (void)
     HDgettimeofday(&t_stop, NULL);
 #else
 #ifdef H5_HAVE_SYS_TIMEB
-	_ftime(tbstop);
-	t_start.tv_sec = tbstart->time;
-	t_start.tv_usec = tbstart->millitm;
-	t_stop.tv_sec = tbstop->time;
-	t_stop.tv_usec = tbstop->millitm;
+  _ftime(tbstop);
+  t_start.tv_sec = tbstart->time;
+  t_start.tv_usec = tbstart->millitm;
+  t_stop.tv_sec = tbstop->time;
+  t_stop.tv_usec = tbstop->millitm;
 #endif
 #endif
     putc ('\n', stderr);
     print_stats ("in raw",
-		 &r_start, &r_stop, &t_start, &t_stop,
-		 (size_t)(nread*size[0]*size[1]));
+     &r_start, &r_stop, &t_start, &t_stop,
+     (size_t)(nread*size[0]*size[1]));
 
 
     /* Read the hdf5 dataset */
@@ -415,16 +415,16 @@ main (void)
     HDgettimeofday(&t_start, NULL);
 #else
 #ifdef H5_HAVE_SYS_TIMEB
-	_ftime(tbstart);
+  _ftime(tbstart);
 #endif
 #endif
     fprintf (stderr, HEADING, "in hdf5");
     for(u = 0; u < nread; u++) {
-	putc (PROGRESS, stderr);
-	HDfflush(stderr);
-	status = H5Dread (dset, H5T_NATIVE_UCHAR, file_space, file_space,
-			  H5P_DEFAULT, the_data);
-	assert (status>=0);
+  putc (PROGRESS, stderr);
+  HDfflush(stderr);
+  status = H5Dread (dset, H5T_NATIVE_UCHAR, file_space, file_space,
+        H5P_DEFAULT, the_data);
+  assert (status>=0);
     }
 #ifdef H5_HAVE_GETRUSAGE
     HDgetrusage(RUSAGE_SELF, &r_stop);
@@ -433,17 +433,17 @@ main (void)
     HDgettimeofday(&t_stop, NULL);
 #else
 #ifdef H5_HAVE_SYS_TIMEB
-	_ftime(tbstop);
-	t_start.tv_sec = tbstart->time;
-	t_start.tv_usec = tbstart->millitm;
-	t_stop.tv_sec = tbstop->time;
-	t_stop.tv_usec = tbstop->millitm;
+  _ftime(tbstop);
+  t_start.tv_sec = tbstart->time;
+  t_start.tv_usec = tbstart->millitm;
+  t_stop.tv_sec = tbstop->time;
+  t_stop.tv_usec = tbstop->millitm;
 #endif
 #endif
     putc ('\n', stderr);
     print_stats ("in hdf5",
-		 &r_start, &r_stop, &t_start, &t_stop,
-		 (size_t)(nread*size[0]*size[1]));
+     &r_start, &r_stop, &t_start, &t_stop,
+     (size_t)(nread*size[0]*size[1]));
 
     /* Read hyperslab */
     assert (size[0]>20 && size[1]>20);
@@ -459,16 +459,16 @@ main (void)
     HDgettimeofday(&t_start, NULL);
 #else
 #ifdef H5_HAVE_SYS_TIMEB
-	_ftime(tbstart);
+  _ftime(tbstart);
 #endif
 #endif
     fprintf (stderr, HEADING, "in hdf5 partial");
     for(u = 0; u < nread; u++) {
-	putc (PROGRESS, stderr);
-	HDfflush(stderr);
-	status = H5Dread (dset, H5T_NATIVE_UCHAR, file_space, file_space,
-			  H5P_DEFAULT, the_data);
-	assert (status>=0);
+  putc (PROGRESS, stderr);
+  HDfflush(stderr);
+  status = H5Dread (dset, H5T_NATIVE_UCHAR, file_space, file_space,
+        H5P_DEFAULT, the_data);
+  assert (status>=0);
     }
 #ifdef H5_HAVE_GETRUSAGE
     HDgetrusage(RUSAGE_SELF, &r_stop);
@@ -477,17 +477,17 @@ main (void)
     HDgettimeofday(&t_stop, NULL);
 #else
 #ifdef H5_HAVE_SYS_TIMEB
-	_ftime(tbstop);
-	t_start.tv_sec = tbstart->time;
-	t_start.tv_usec = tbstart->millitm;
-	t_stop.tv_sec = tbstop->time;
-	t_stop.tv_usec = tbstop->millitm;
+  _ftime(tbstop);
+  t_start.tv_sec = tbstart->time;
+  t_start.tv_usec = tbstart->millitm;
+  t_stop.tv_sec = tbstop->time;
+  t_stop.tv_usec = tbstop->millitm;
 #endif
 #endif
     putc('\n', stderr);
     print_stats("in hdf5 partial",
-		 &r_start, &r_stop, &t_start, &t_stop,
-		 (size_t)(nread*count[0]*count[1]));
+     &r_start, &r_stop, &t_start, &t_stop,
+     (size_t)(nread*count[0]*count[1]));
 
 
 
diff --git a/perform/mpi-perf.c b/perform/mpi-perf.c
index c0fe794..a09d672 100644
--- a/perform/mpi-perf.c
+++ b/perform/mpi-perf.c
@@ -55,10 +55,19 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <fcntl.h>
+#ifdef H5_HAVE_UNISTD_H
 #include <unistd.h>
+#endif
 #include <errno.h>
 #include <string.h>
-#include <sys/time.h>
+#if defined(H5_TIME_WITH_SYS_TIME)
+#   include <sys/time.h>
+#   include <time.h>
+#elif defined(H5_HAVE_SYS_TIME_H)
+#   include <sys/time.h>
+#else
+#   include <time.h>
+#endif
 #include <mpi.h>
 #ifndef MPI_FILE_NULL           /*MPIO may be defined in mpi.h already       */
 #   include <mpio.h>
@@ -299,7 +308,7 @@ die_jar_jar_die:
 #if H5_HAVE_SETENV
 /* no setenv or unsetenv */
     /* clear the environment variable if it was set earlier */
-    if	(opt_pvfstab_set){
+    if  (opt_pvfstab_set){
             unsetenv("PVFSTAB_FILE");
     }
 #endif
diff --git a/perform/overhead.c b/perform/overhead.c
index cfd96b8..0b40721 100644
--- a/perform/overhead.c
+++ b/perform/overhead.c
@@ -17,7 +17,7 @@
  * Programmer:  Robb Matzke <matzke at llnl.gov>
  *              Monday, September 28, 1998
  *
- * Purpose:	Creates a chunked dataset and measures the storage overhead.
+ * Purpose:  Creates a chunked dataset and measures the storage overhead.
  */
 
 /* See H5private.h for how to include headers */
@@ -54,12 +54,12 @@
 #   define UNUSED __attribute__((unused))
 #endif
 
-#define FILE_NAME_1	"overhead.h5"
+#define FILE_NAME_1  "overhead.h5"
 #ifndef FALSE
-#define FALSE		0
+#define FALSE    0
 #endif /* FALSE */
 #ifndef TRUE
-#define TRUE		1
+#define TRUE    1
 #endif /* TRUE */
 
 typedef enum fill_t {
@@ -73,13 +73,13 @@ typedef enum fill_t {
 
 
 /*-------------------------------------------------------------------------
- * Function:	usage
+ * Function:  usage
  *
- * Purpose:	Prints a usage message and exits.
+ * Purpose:  Prints a usage message and exits.
  *
- * Return:	never returns
+ * Return:  never returns
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Wednesday, September 30, 1998
  *
  * Modifications:
@@ -90,7 +90,7 @@ static void
 usage(const char *prog)
 {
     fprintf(stderr, "usage: %s [STYLE|cache] [LEFT [MIDDLE [RIGHT]]]\n",
-	    prog);
+      prog);
     fprintf(stderr, "\
     STYLE is the order that the dataset is filled and should be one of:\n\
         forward   --  Fill the dataset from lowest address to highest\n\
@@ -124,13 +124,13 @@ usage(const char *prog)
 
 
 /*-------------------------------------------------------------------------
- * Function:	cleanup
+ * Function:  cleanup
  *
- * Purpose:	Removes test files
+ * Purpose:  Removes test files
  *
- * Return:	void
+ * Return:  void
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, June  4, 1998
  *
  * Modifications:
@@ -141,22 +141,22 @@ static void
 cleanup (void)
 {
     if (!getenv ("HDF5_NOCLEANUP")) {
-	remove (FILE_NAME_1);
+  remove (FILE_NAME_1);
     }
 }
 
 
 /*-------------------------------------------------------------------------
- * Function:	display_error_cb
+ * Function:  display_error_cb
  *
- * Purpose:	Displays the error stack after printing "*FAILED*".
+ * Purpose:  Displays the error stack after printing "*FAILED*".
  *
- * Return:	Success:	0
+ * Return:  Success:  0
  *
- *		Failure:	-1
+ *    Failure:  -1
  *
- * Programmer:	Robb Matzke
- *		Wednesday, March  4, 1998
+ * Programmer:  Robb Matzke
+ *    Wednesday, March  4, 1998
  *
  * Modifications:
  *
@@ -173,15 +173,15 @@ display_error_cb (hid_t estack, void UNUSED *client_data)
 
 
 /*-------------------------------------------------------------------------
- * Function:	test
+ * Function:  test
  *
- * Purpose:	The guts of the test
+ * Purpose:  The guts of the test
  *
- * Return:	Success:	0
+ * Return:  Success:  0
  *
- *		Failure:	number of errors
+ *    Failure:  number of errors
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Wednesday, September 30, 1998
  *
  * Modifications:
@@ -192,25 +192,24 @@ static int
 test(fill_t fill_style, const double splits[],
      hbool_t verbose, hbool_t use_rdcc)
 {
-    hid_t	file = (-1), fapl = (-1), dcpl = (-1), xfer = (-1), mspace = (-1), fspace = (-1), dset = (-1);
-    hsize_t	ch_size[1] = {1};		/*chunk size		*/
-    hsize_t	cur_size[1] = {1000};		/*current dataset size	*/
-    hsize_t	max_size[1] = {H5S_UNLIMITED};	/*maximum dataset size	*/
-    hsize_t	hs_start[1];			/*hyperslab start offset*/
-    hsize_t	hs_count[1] = {1};		/*hyperslab nelmts	*/
-    int		fd = (-1);			/*h5 file direct	*/
-    static int	*had = NULL;			/*for random filling	*/
-    const char	*sname=NULL;			/*fill style nam	*/
-    int		mdc_nelmts;			/*num meta objs to cache*/
-    hsize_t	i;
-    int		j;
-    h5_stat_t	sb;
+    hid_t  file = (-1), fapl = (-1), dcpl = (-1), xfer = (-1), mspace = (-1), fspace = (-1), dset = (-1);
+    hsize_t  ch_size[1] = {1};    /*chunk size    */
+    hsize_t  cur_size[1] = {1000};    /*current dataset size  */
+    hsize_t  max_size[1] = {H5S_UNLIMITED};  /*maximum dataset size  */
+    hsize_t  hs_start[1];      /*hyperslab start offset*/
+    hsize_t  hs_count[1] = {1};    /*hyperslab nelmts  */
+    int    fd = (-1);      /*h5 file direct  */
+    int  *had = NULL;      /*for random filling  */
+    const char  *sname=NULL;      /*fill style nam  */
+    int    mdc_nelmts;      /*num meta objs to cache*/
+    hsize_t  i;
+    int    j;
+    h5_stat_t  sb;
 
-    if(!had) had = calloc((size_t)cur_size[0], sizeof(int));
     if((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0) goto error;
     if(!use_rdcc) {
-	if(H5Pget_cache(fapl, &mdc_nelmts, NULL, NULL, NULL) < 0) goto error;
-	if(H5Pset_cache(fapl, mdc_nelmts, 0, 0, 0.0) < 0) goto error;
+        if(H5Pget_cache(fapl, &mdc_nelmts, NULL, NULL, NULL) < 0) goto error;
+        if(H5Pset_cache(fapl, mdc_nelmts, 0, 0, 0.0) < 0) goto error;
     }
     if((file = H5Fcreate(FILE_NAME_1, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) goto error;
     if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) goto error;
@@ -220,60 +219,66 @@ test(fill_t fill_style, const double splits[],
     if((fspace = H5Screate_simple(1, cur_size, max_size)) < 0) goto error;
     if((mspace = H5Screate_simple(1, ch_size, ch_size)) < 0) goto error;
     if((dset = H5Dcreate2(file, "chunked", H5T_NATIVE_INT,
-		    fspace, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) goto error;
+        fspace, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) goto error;
     if ((fd=HDopen(FILE_NAME_1, O_RDONLY, 0666)) < 0) goto error;
 
+    if(FILL_RANDOM==fill_style) 
+        had = calloc((size_t)cur_size[0], sizeof(int));
+    
     for (i=1; i<=cur_size[0]; i++) {
 
-	/* Decide which chunk to write to */
-	switch (fill_style) {
-	case FILL_FORWARD:
-	    hs_start[0] = i-1;
-	    break;
-	case FILL_REVERSE:
-	    hs_start[0] = cur_size[0]-i;
-	    break;
-	case FILL_INWARD:
-	    hs_start[0] = i%2 ? i/2 : cur_size[0]-i/2;
-	    break;
-	case FILL_OUTWARD:
-	    j = (int)(cur_size[0]-i)+1;
-	    hs_start[0] = j%2 ? j/2 : (hssize_t)cur_size[0]-j/2;
-	    break;
-	case FILL_RANDOM:
-	    for (j=HDrand()%(int)cur_size[0]; had[j]; j=(j+1)%(int)cur_size[0]) /*void*/;
-	    hs_start[0] = j;
-	    had[j] = 1;
-	    break;
-	case FILL_ALL:
-	    abort();
-	}
-
-	/* Write the chunk */
-	if (H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_start, NULL,
-				hs_count, NULL) < 0) goto error;
-	if (H5Dwrite(dset, H5T_NATIVE_INT, mspace, fspace, xfer, &i) < 0) {
-	    goto error;
-	}
-
-
-	/* Determine overhead */
-	if (verbose) {
-	    if (H5Fflush(file, H5F_SCOPE_LOCAL) < 0) goto error;
-	    if (HDfstat(fd, &sb) < 0) goto error;
-	    /*
-	     * The extra cast in the following statement is a bug workaround
-	     * for the Win32 version 5.0 compiler.
-	     * 1998-11-06 ptl
-	     */
-	    printf("%4lu %8.3f ***\n",
-		   (unsigned long)i,
-		   (double)(hssize_t)(sb.st_size-i*sizeof(int))/(hssize_t)i);
-	}
-
-
+        /* Decide which chunk to write to */
+        switch (fill_style) {
+        case FILL_FORWARD:
+            hs_start[0] = i-1;
+            break;
+        case FILL_REVERSE:
+            hs_start[0] = cur_size[0]-i;
+            break;
+        case FILL_INWARD:
+            hs_start[0] = i%2 ? i/2 : cur_size[0]-i/2;
+            break;
+        case FILL_OUTWARD:
+            j = (int)(cur_size[0]-i)+1;
+            hs_start[0] = j%2 ? j/2 : (hssize_t)cur_size[0]-j/2;
+            break;
+        case FILL_RANDOM:
+            for (j=HDrand()%(int)cur_size[0]; had[j]; j=(j+1)%(int)cur_size[0])
+                /*void*/;
+            hs_start[0] = j;
+            had[j] = 1;
+            break;
+        case FILL_ALL:
+            abort();
+        }
+
+        /* Write the chunk */
+        if (H5Sselect_hyperslab(fspace, H5S_SELECT_SET, hs_start, NULL,
+                hs_count, NULL) < 0) goto error;
+        if (H5Dwrite(dset, H5T_NATIVE_INT, mspace, fspace, xfer, &i) < 0) {
+            goto error;
+        }
+
+        /* Determine overhead */
+        if (verbose) {
+            if (H5Fflush(file, H5F_SCOPE_LOCAL) < 0) goto error;
+            if (HDfstat(fd, &sb) < 0) goto error;
+            /*
+             * The extra cast in the following statement is a bug workaround
+             * for the Win32 version 5.0 compiler.
+             * 1998-11-06 ptl
+             */
+            printf("%4lu %8.3f ***\n",
+                    (unsigned long)i,
+                    (double)(hssize_t)(sb.st_size-i*sizeof(int))/(hssize_t)i);
+        }
     }
 
+    if(had) {
+        free(had);
+        had = NULL;
+    } /* end if */
+
     H5Dclose(dset);
     H5Sclose(mspace);
     H5Sclose(fspace);
@@ -282,33 +287,31 @@ test(fill_t fill_style, const double splits[],
     H5Fclose(file);
 
     if (!verbose) {
-	switch (fill_style) {
-	case FILL_FORWARD:
-	    sname = "forward";
-	    break;
-	case FILL_REVERSE:
-	    sname = "reverse";
-	    break;
-	case FILL_INWARD:
-	    sname = "inward";
-	    break;
-	case FILL_OUTWARD:
-	    sname = "outward";
-	    break;
-	case FILL_RANDOM:
-	    sname = "random";
-	    break;
-	case FILL_ALL:
-	    abort();
-	}
-
-	if (HDfstat(fd, &sb) < 0) goto error;
-		printf("%-7s %8.3f\n", sname,
-	       (double)(hssize_t)(sb.st_size-cur_size[0]*sizeof(int))/
-	           (hssize_t)cur_size[0]);
+        switch (fill_style) {
+        case FILL_FORWARD:
+            sname = "forward";
+            break;
+        case FILL_REVERSE:
+            sname = "reverse";
+            break;
+        case FILL_INWARD:
+            sname = "inward";
+            break;
+        case FILL_OUTWARD:
+            sname = "outward";
+            break;
+        case FILL_RANDOM:
+            sname = "random";
+            break;
+        case FILL_ALL:
+            abort();
+        }
+
+        if (HDfstat(fd, &sb) < 0) goto error;
+        printf("%-7s %8.3f\n", sname,
+                (double)(hssize_t)(sb.st_size-cur_size[0]*sizeof(int))/
+                (hssize_t)cur_size[0]);
     }
-
-
     HDclose(fd);
 
     return 0;
@@ -320,22 +323,23 @@ test(fill_t fill_style, const double splits[],
     H5Pclose(dcpl);
     H5Pclose(xfer);
     H5Fclose(file);
-    free(had);
+    if(had)
+        free(had);
     HDclose(fd);
     return 1;
 }
 
 
 /*-------------------------------------------------------------------------
- * Function:	main
+ * Function:  main
  *
  * Purpose:
  *
- * Return:	Success:        zero
+ * Return:  Success:        zero
  *
- *		Failure:	non-zero
+ *    Failure:  non-zero
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Monday, September 28, 1998
  *
  * Modifications:
@@ -345,11 +349,11 @@ test(fill_t fill_style, const double splits[],
 int
 main(int argc, char *argv[])
 {
-    hid_t	xfer;
-    fill_t	fill_style = FILL_ALL;
-    hbool_t	use_cache = FALSE;
-    double	splits[3];
-    int		i, j, nerrors=0;
+    hid_t  xfer;
+    fill_t  fill_style = FILL_ALL;
+    hbool_t  use_cache = FALSE;
+    double  splits[3];
+    int    i, j, nerrors=0;
 
     /* Default split ratios */
     H5Eset_auto2(H5E_DEFAULT, display_error_cb, NULL);
@@ -360,36 +364,37 @@ main(int argc, char *argv[])
 
     /* Parse command-line options */
     for(i = 1, j = 0; i < argc; i++) {
-	if (!strcmp(argv[i], "forward")) {
-	    fill_style = FILL_FORWARD;
-	} else if (!strcmp(argv[i], "reverse")) {
-	    fill_style = FILL_REVERSE;
-	} else if (!strcmp(argv[i], "inward")) {
-	    fill_style = FILL_INWARD;
-	} else if (!strcmp(argv[i], "outward")) {
-	    fill_style = FILL_OUTWARD;
-	} else if (!strcmp(argv[i], "random")) {
-	    fill_style = FILL_RANDOM;
-	} else if (!strcmp(argv[i], "cache")) {
-	    use_cache = TRUE;
-	} else if (j<3 && (isdigit(argv[i][0]) || '.'==argv[i][0])) {
-	    splits[j++] = strtod(argv[i], NULL);
-	} else {
-	    usage(argv[0]);
-	}
+        if (!strcmp(argv[i], "forward")) {
+            fill_style = FILL_FORWARD;
+        } else if (!strcmp(argv[i], "reverse")) {
+            fill_style = FILL_REVERSE;
+        } else if (!strcmp(argv[i], "inward")) {
+            fill_style = FILL_INWARD;
+        } else if (!strcmp(argv[i], "outward")) {
+            fill_style = FILL_OUTWARD;
+        } else if (!strcmp(argv[i], "random")) {
+            fill_style = FILL_RANDOM;
+        } else if (!strcmp(argv[i], "cache")) {
+            use_cache = TRUE;
+        } else if (j<3 && (isdigit(argv[i][0]) || '.'==argv[i][0])) {
+            splits[j++] = strtod(argv[i], NULL);
+        } else {
+            usage(argv[0]);
+        }
     }
 
     if (FILL_ALL==fill_style) {
-	printf("%-7s %8s\n", "Style", "Bytes/Chunk");
-	printf("%-7s %8s\n", "-----", "-----------");
-	nerrors += test(FILL_FORWARD, splits, FALSE, use_cache);
-	nerrors += test(FILL_REVERSE, splits, FALSE, use_cache);
-	nerrors += test(FILL_INWARD,  splits, FALSE, use_cache);
-	nerrors += test(FILL_OUTWARD, splits, FALSE, use_cache);
-	nerrors += test(FILL_RANDOM,  splits, FALSE, use_cache);
-    } else {
-	if (use_cache) usage(argv[0]);
-	nerrors += test(fill_style,   splits, TRUE, FALSE);
+        printf("%-7s %8s\n", "Style", "Bytes/Chunk");
+        printf("%-7s %8s\n", "-----", "-----------");
+        nerrors += test(FILL_FORWARD, splits, FALSE, use_cache);
+        nerrors += test(FILL_REVERSE, splits, FALSE, use_cache);
+        nerrors += test(FILL_INWARD,  splits, FALSE, use_cache);
+        nerrors += test(FILL_OUTWARD, splits, FALSE, use_cache);
+        nerrors += test(FILL_RANDOM,  splits, FALSE, use_cache);
+    } 
+    else {
+        if (use_cache) usage(argv[0]);
+        nerrors += test(fill_style,   splits, TRUE, FALSE);
     }
     if (nerrors>0) goto error;
     cleanup();
diff --git a/perform/perf.c b/perform/perf.c
index 92b85bc..f006afb 100644
--- a/perform/perf.c
+++ b/perform/perf.c
@@ -28,10 +28,19 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <fcntl.h>
+#ifdef H5_HAVE_UNISTD_H
 #include <unistd.h>
+#endif
 #include <errno.h>
 #include <string.h>
-#include <sys/time.h>
+#if defined(H5_TIME_WITH_SYS_TIME)
+#   include <sys/time.h>
+#   include <time.h>
+#elif defined(H5_HAVE_SYS_TIME_H)
+#   include <sys/time.h>
+#else
+#   include <time.h>
+#endif
 #include <mpi.h>
 #ifndef MPI_FILE_NULL           /*MPIO may be defined in mpi.h already       */
 #   include <mpio.h>
@@ -45,30 +54,30 @@
 #define H5FATAL 1
 #define VRFY(val, mesg, fatal) do {                                            \
     if (!val) {                                                                \
-	printf("Proc %d: ", mynod);					       \
+  	printf("Proc %d: ", mynod);                 \
         printf("*** Assertion failed (%s) at line %4d in %s\n",                \
-	    mesg, (int)__LINE__, __FILE__);     			       \
-	if (fatal){							       \
-	    fflush(stdout);						       \
-	    goto die_jar_jar_die;					       \
-	}								       \
+      mesg, (int)__LINE__, __FILE__);                  \
+  	if (fatal){                     \
+      fflush(stdout);                   \
+      goto die_jar_jar_die;                 \
+  	}                       \
     }                                                                          \
 } while(0)
 #define RANK 1
-hsize_t dims[RANK];   	/* dataset dim sizes */
+hsize_t dims[RANK];     /* dataset dim sizes */
 hsize_t block[RANK], stride[RANK], count[RANK];
 hssize_t start[RANK];
 hid_t fid;                  /* HDF5 file ID */
-hid_t acc_tpl;		/* File access templates */
-hid_t sid;   		/* Dataspace ID */
-hid_t file_dataspace;	/* File dataspace ID */
-hid_t mem_dataspace;	/* memory dataspace ID */
-hid_t dataset;		/* Dataset ID */
-hsize_t opt_alignment	= 1;
-hsize_t opt_threshold	= 1;
-int	opt_split_vfd	= 0;
-char	*meta_ext, *raw_ext;	/* holds the meta and raw file extension if */
-				/* opt_split_vfd is set */
+hid_t acc_tpl;    /* File access templates */
+hid_t sid;       /* Dataspace ID */
+hid_t file_dataspace;  /* File dataspace ID */
+hid_t mem_dataspace;  /* memory dataspace ID */
+hid_t dataset;    /* Dataset ID */
+hsize_t opt_alignment  = 1;
+hsize_t opt_threshold  = 1;
+int  opt_split_vfd  = 0;
+char  *meta_ext, *raw_ext;  /* holds the meta and raw file extension if */
+        /* opt_split_vfd is set */
 
 
 /* DEFAULT VALUES FOR OPTIONS */
@@ -105,7 +114,7 @@ int main(int argc, char **argv)
     MPI_File fh;
     MPI_Status status;
     int nchars;
-    herr_t ret;         	/* Generic return value */
+    herr_t ret;           /* Generic return value */
 
     /* startup MPI and determine the rank of this process */
     MPI_Init(&argc,&argv);
@@ -155,38 +164,38 @@ int main(int argc, char **argv)
 
     /* setup file access template with parallel IO access. */
     if (opt_split_vfd){
-	hid_t mpio_pl;
-
-	mpio_pl = H5Pcreate (H5P_FILE_ACCESS);
-	VRFY((acc_tpl >= 0), "", H5FATAL);
-	ret = H5Pset_fapl_mpio(mpio_pl, MPI_COMM_WORLD, MPI_INFO_NULL);
-	VRFY((ret >= 0), "", H5FATAL);
-
-	/* set optional allocation alignment */
-	if (opt_alignment*opt_threshold != 1){
-	    ret = H5Pset_alignment(acc_tpl, opt_threshold, opt_alignment );
-	    VRFY((ret >= 0), "H5Pset_alignment succeeded", !H5FATAL);
-	}
-
-	/* setup file access template */
-	acc_tpl = H5Pcreate (H5P_FILE_ACCESS);
-	VRFY((acc_tpl >= 0), "", H5FATAL);
-	ret = H5Pset_fapl_split(acc_tpl, meta_ext, mpio_pl, raw_ext, mpio_pl);
-	VRFY((ret >= 0), "H5Pset_fapl_split succeeded", H5FATAL);
-	ret = H5Pclose(mpio_pl);
-	VRFY((ret >= 0), "H5Pclose mpio_pl succeeded", H5FATAL);
+  	hid_t mpio_pl;
+
+  	mpio_pl = H5Pcreate (H5P_FILE_ACCESS);
+  	VRFY((acc_tpl >= 0), "", H5FATAL);
+  	ret = H5Pset_fapl_mpio(mpio_pl, MPI_COMM_WORLD, MPI_INFO_NULL);
+  	VRFY((ret >= 0), "", H5FATAL);
+
+  	/* set optional allocation alignment */
+  	if (opt_alignment*opt_threshold != 1){
+      	ret = H5Pset_alignment(acc_tpl, opt_threshold, opt_alignment );
+      	VRFY((ret >= 0), "H5Pset_alignment succeeded", !H5FATAL);
+  	}
+
+  	/* setup file access template */
+  	acc_tpl = H5Pcreate (H5P_FILE_ACCESS);
+  	VRFY((acc_tpl >= 0), "", H5FATAL);
+  	ret = H5Pset_fapl_split(acc_tpl, meta_ext, mpio_pl, raw_ext, mpio_pl);
+  	VRFY((ret >= 0), "H5Pset_fapl_split succeeded", H5FATAL);
+  	ret = H5Pclose(mpio_pl);
+  	VRFY((ret >= 0), "H5Pclose mpio_pl succeeded", H5FATAL);
     }else{
-	/* setup file access template */
-	acc_tpl = H5Pcreate (H5P_FILE_ACCESS);
-	VRFY((acc_tpl >= 0), "", H5FATAL);
-	ret = H5Pset_fapl_mpio(acc_tpl, MPI_COMM_WORLD, MPI_INFO_NULL);
-	VRFY((ret >= 0), "", H5FATAL);
-
-	/* set optional allocation alignment */
-	if (opt_alignment*opt_threshold != 1){
-	    ret = H5Pset_alignment(acc_tpl, opt_threshold, opt_alignment );
-	    VRFY((ret >= 0), "H5Pset_alignment succeeded", !H5FATAL);
-	}
+  	/* setup file access template */
+  	acc_tpl = H5Pcreate (H5P_FILE_ACCESS);
+  	VRFY((acc_tpl >= 0), "", H5FATAL);
+  	ret = H5Pset_fapl_mpio(acc_tpl, MPI_COMM_WORLD, MPI_INFO_NULL);
+  	VRFY((ret >= 0), "", H5FATAL);
+
+  	/* set optional allocation alignment */
+  	if (opt_alignment*opt_threshold != 1){
+  	    ret = H5Pset_alignment(acc_tpl, opt_threshold, opt_alignment );
+      	VRFY((ret >= 0), "H5Pset_alignment succeeded", !H5FATAL);
+  	}
     }
 
     /* create the parallel file */
@@ -198,7 +207,7 @@ int main(int argc, char **argv)
     sid = H5Screate_simple(RANK, dims, NULL);
     VRFY((sid >= 0), "H5Screate_simple succeeded", H5FATAL);
     dataset = H5Dcreate2(fid, "Dataset1", H5T_NATIVE_CHAR, sid,
-			H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+      		H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
     VRFY((dataset >= 0), "H5Dcreate2 succeeded", H5FATAL);
 
     /* create the memory dataspace and the file dataspace */
@@ -366,7 +375,7 @@ die_jar_jar_die:
 #if H5_HAVE_SETENV
 /* no setenv or unsetenv */
     /* clear the environment variable if it was set earlier */
-    if	(opt_pvfstab_set){
+    if  (opt_pvfstab_set){
             unsetenv("PVFSTAB_FILE");
     }
 #endif
diff --git a/perform/pio_engine.c b/perform/pio_engine.c
index 27606d0..511492b 100644
--- a/perform/pio_engine.c
+++ b/perform/pio_engine.c
@@ -22,7 +22,9 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <fcntl.h>
+#ifdef H5_HAVE_UNISTD_H
 #include <unistd.h>
+#endif
 #include <errno.h>
 
 #include "hdf5.h"
@@ -411,14 +413,14 @@ done:
     static char *
 pio_create_filename(iotype iot, const char *base_name, char *fullname, size_t size)
 {
-    const char *prefix, *suffix="";
+    const char *prefix, *suffix = "";
     char *ptr, last = '\0';
     size_t i, j;
 
     if (!base_name || !fullname || size < 1)
-    return NULL;
+        return NULL;
 
-    memset(fullname, 0, size);
+    HDmemset(fullname, 0, size);
 
     switch (iot) {
     case POSIXIO:
@@ -433,77 +435,81 @@ pio_create_filename(iotype iot, const char *base_name, char *fullname, size_t si
     }
 
     /* First use the environment variable and then try the constant */
-    prefix = getenv("HDF5_PARAPREFIX");
+    prefix = HDgetenv("HDF5_PARAPREFIX");
 
 #ifdef HDF5_PARAPREFIX
     if (!prefix)
-    prefix = HDF5_PARAPREFIX;
+        prefix = HDF5_PARAPREFIX;
 #endif  /* HDF5_PARAPREFIX */
 
     /* Prepend the prefix value to the base name */
     if (prefix && *prefix) {
-    /* If the prefix specifies the HDF5_PARAPREFIX directory, then
-     * default to using the "/tmp/$USER" or "/tmp/$LOGIN"
-     * directory instead. */
-    register char *user, *login, *subdir;
-
-    user = getenv("USER");
-    login = getenv("LOGIN");
-    subdir = (user ? user : login);
+        /* If the prefix specifies the HDF5_PARAPREFIX directory, then
+         * default to using the "/tmp/$USER" or "/tmp/$LOGIN"
+         * directory instead. */
+        register char *user, *login, *subdir;
 
-    if (subdir) {
-        for (i = 0; i < size && prefix[i]; i++)
-        fullname[i] = prefix[i];
+        user = HDgetenv("USER");
+        login = HDgetenv("LOGIN");
+        subdir = (user ? user : login);
 
-        fullname[i++] = '/';
+        if (subdir) {
+            for (i = 0; i < size && prefix[i]; i++)
+                fullname[i] = prefix[i];
 
-        for (j = 0; i < size && subdir[j]; i++, j++)
-        fullname[i] = subdir[j];
-    } else {
-        /* We didn't append the prefix yet */
-        strncpy(fullname, prefix, MIN(strlen(prefix), size));
-    }
+            fullname[i++] = '/';
 
-    if ((strlen(fullname) + strlen(base_name) + 1) < size) {
-        /* Append the base_name with a slash first. Multiple slashes are
-         * handled below. */
-        h5_stat_t buf;
-
-        if (HDstat(fullname, &buf) < 0)
-        /* The directory doesn't exist just yet */
-        if (mkdir(fullname, (mode_t)0755) < 0 && errno != EEXIST) {
-            /* We couldn't make the "/tmp/${USER,LOGIN}" subdirectory.
-             * Default to PREFIX's original prefix value. */
-            strcpy(fullname, prefix);
+            for (j = 0; i < size && subdir[j]; i++, j++)
+                fullname[i] = subdir[j];
+        }
+        else {
+            /* We didn't append the prefix yet */
+            HDstrncpy(fullname, prefix, MIN(HDstrlen(prefix), size));
         }
 
-        strcat(fullname, "/");
-        strcat(fullname, base_name);
-    } else {
+        if ((HDstrlen(fullname) + HDstrlen(base_name) + 1) < size) {
+            /* Append the base_name with a slash first. Multiple slashes are
+             * handled below. */
+            h5_stat_t buf;
+
+            if (HDstat(fullname, &buf) < 0)
+                /* The directory doesn't exist just yet */
+                if (HDmkdir(fullname, (mode_t) 0755) < 0 && errno != EEXIST) {
+                    /* We couldn't make the "/tmp/${USER,LOGIN}" subdirectory.
+                     * Default to PREFIX's original prefix value. */
+                    HDstrcpy(fullname, prefix);
+                }
+
+            HDstrcat(fullname, "/");
+            HDstrcat(fullname, base_name);
+        }
+        else {
+            /* Buffer is too small */
+            return NULL;
+        }
+    }
+    else if (HDstrlen(base_name) >= size) {
         /* Buffer is too small */
         return NULL;
     }
-    } else if (strlen(base_name) >= size) {
-    /* Buffer is too small */
-    return NULL;
-    } else {
-    strcpy(fullname, base_name);
+    else {
+        HDstrcpy(fullname, base_name);
     }
 
     /* Append a suffix */
     if (suffix) {
-    if (strlen(fullname) + strlen(suffix) >= size)
-        return NULL;
+        if (HDstrlen(fullname) + HDstrlen(suffix) >= size)
+            return NULL;
 
-    strcat(fullname, suffix);
+        HDstrcat(fullname, suffix);
     }
 
     /* Remove any double slashes in the filename */
     for (ptr = fullname, i = j = 0; ptr && i < size; i++, ptr++) {
-    if (*ptr != '/' || last != '/')
-        fullname[j++] = *ptr;
+        if (*ptr != '/' || last != '/')
+            fullname[j++] = *ptr;
 
-    last = *ptr;
+        last = *ptr;
     }
 
     return fullname;
diff --git a/perform/pio_perf.c b/perform/pio_perf.c
index d3e2531..411fb12 100644
--- a/perform/pio_perf.c
+++ b/perform/pio_perf.c
@@ -1312,11 +1312,11 @@ parse_command_line(int argc, char *argv[])
                         if (isalnum(*end) && i < 10)
                             buf[i++] = *end;
 
-                    if (!strcasecmp(buf, "phdf5")) {
+                    if (!HDstrcasecmp(buf, "phdf5")) {
                         cl_opts->io_types |= PIO_HDF5;
-                    } else if (!strcasecmp(buf, "mpiio")) {
+                    } else if (!HDstrcasecmp(buf, "mpiio")) {
                         cl_opts->io_types |= PIO_MPI;
-                    } else if (!strcasecmp(buf, "posix")) {
+                    } else if (!HDstrcasecmp(buf, "posix")) {
                         cl_opts->io_types |= PIO_POSIX;
                     } else {
                         fprintf(stderr, "pio_perf: invalid --api option %s\n",
diff --git a/perform/pio_perf.h b/perform/pio_perf.h
index f9a8e03..6f510ca 100644
--- a/perform/pio_perf.h
+++ b/perform/pio_perf.h
@@ -16,7 +16,6 @@
 #ifndef PIO_PERF_H__
 #define PIO_PERF_H__
 
-#include "pio_timer.h"
 #ifndef STANDALONE
 #include "H5private.h"
 #include "h5test.h"
@@ -24,6 +23,7 @@
 #else
 #include "pio_standalone.h"
 #endif
+#include "pio_timer.h"
 
 /* setup the dataset no fill option if this is v1.5 or more */
 #if H5_VERS_MAJOR > 1 || H5_VERS_MINOR > 4
diff --git a/perform/pio_standalone.h b/perform/pio_standalone.h
index a4bc8b5..584a057 100644
--- a/perform/pio_standalone.h
+++ b/perform/pio_standalone.h
@@ -22,7 +22,7 @@
 
 /** From H5private.h **/
 
-#include "H5public.h"		/* Include Public Definitions		*/
+#include "H5public.h"    /* Include Public Definitions    */
 
 
 /*
@@ -47,57 +47,57 @@
  * And now for a couple non-Posix functions...  Watch out for systems that
  * define these in terms of macros.
  */
-#ifdef _WIN32
-#define HDstrdup(S)		   _strdup(S)
-#else /* _WIN32 */
+#ifdef H5_HAVE_WIN32_API
+#define HDstrdup(S)       _strdup(S)
+#else /* H5_HAVE_WIN32_API */
 
 #if !defined strdup && !defined H5_HAVE_STRDUP
 extern char *strdup(const char *s);
 #endif
 
-#define HDstrdup(S)		  strdup(S)
+#define HDstrdup(S)      strdup(S)
 
-#endif /* _WIN32 */
+#endif /* H5_HAVE_WIN32_API */
 
 H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
-#define HDstrcmp(S,T)		strcmp(S,T)
-#define HDstrlen(S)		strlen(S)
-#define HDstrncmp(S,T,L)	strncmp(S,T,L)
-#define HDstrncpy(X,Y,Z)	strncpy(X,Y,Z)
-#define HDstrchr(S,C)		strchr(S,C)
-#define HDfree(M)		free(M)
+#define HDstrcmp(S,T)    strcmp(S,T)
+#define HDstrlen(S)    strlen(S)
+#define HDstrncmp(S,T,L)  strncmp(S,T,L)
+#define HDstrncpy(X,Y,Z)  strncpy(X,Y,Z)
+#define HDstrchr(S,C)    strchr(S,C)
+#define HDfree(M)    free(M)
 
 
 #ifdef _O_BINARY
-#define HDopen(S,F,M)		open(S,F|_O_BINARY,M)
+#define HDopen(S,F,M)    open(S,F|_O_BINARY,M)
 #else
-#define HDopen(S,F,M)		open(S,F,M)
+#define HDopen(S,F,M)    open(S,F,M)
 #endif
-#define HDclose(F)		close(F)
+#define HDclose(F)    close(F)
 
-#ifdef _WIN32
-#define HDlseek(F,O,W)  	_lseeki64(F,O,W)
+#ifdef H5_HAVE_WIN32_API
+#define HDlseek(F,O,W)    _lseeki64(F,O,W)
 #else
-#define HDlseek(F,O,W)		lseek(F,O,W)
+#define HDlseek(F,O,W)    lseek(F,O,W)
 #endif
 
-#define HDwrite(F,M,Z)		write(F,M,Z)
+#define HDwrite(F,M,Z)    write(F,M,Z)
 
-#define HDread(F,M,Z)		read(F,M,Z)
+#define HDread(F,M,Z)    read(F,M,Z)
 
-#ifdef _WIN32
-     #define HDstat(S,B)	_stati64(S,B)
+#ifdef H5_HAVE_WIN32_API
+     #define HDstat(S,B)  _stati64(S,B)
 #else
 #define HDstat(S,B)  stat(S,B)
 #endif
 
-#ifdef _WIN32
-#define HDfstat(F,B)		_fstati64(F,B)
-typedef struct _stati64		h5_stat_t;
-typedef __int64            	h5_stat_size_t;
+#ifdef H5_HAVE_WIN32_API
+#define HDfstat(F,B)    _fstati64(F,B)
+typedef struct _stati64    h5_stat_t;
+typedef __int64              h5_stat_size_t;
 #else
 #define HDfstat(F,B)            fstat(F,B)
-typedef struct stat		h5_stat_t;
+typedef struct stat    h5_stat_t;
 typedef off_t                   h5_stat_size_t;
 #endif
 
@@ -134,7 +134,7 @@ extern const char *opt_arg;     /* flag argument (or value)                 */
 
 enum {
     no_arg = 0,         /* doesn't take an argument     */
-    require_arg,        /* requires an argument	        */
+    require_arg,        /* requires an argument          */
     optional_arg        /* argument is optional         */
 };
 
diff --git a/perform/pio_timer.c b/perform/pio_timer.c
index 66f9eb0..9c8abb7 100644
--- a/perform/pio_timer.c
+++ b/perform/pio_timer.c
@@ -22,7 +22,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 
-#include "pio_timer.h"
+#include "hdf5.h"
 
 #ifdef H5_HAVE_PARALLEL
 
@@ -157,7 +157,7 @@ set_time(pio_time *pt, timer_type t, int start_stop)
             }
         } else {
             if (start_stop == START) {
-                gettimeofday(&pt->sys_timer[t], NULL);
+                HDgettimeofday(&pt->sys_timer[t], NULL);
 
 		/* When we start the timer for HDF5_FINE_WRITE_FIXED_DIMS or HDF5_FINE_READ_FIXED_DIMS
 		 * we compute the time it took to only open the file */
@@ -170,7 +170,7 @@ set_time(pio_time *pt, timer_type t, int start_stop)
             } else {
                 struct timeval sys_t;
 
-                gettimeofday(&sys_t, NULL);
+                HDgettimeofday(&sys_t, NULL);
                 pt->total_time[t] += sub_time(&sys_t, &(pt->sys_timer[t]));
 
 /*                    ((double)sys_t.tv_sec +
diff --git a/perform/sio_standalone.h b/perform/sio_standalone.h
index 77bb7f8..677a8ae 100644
--- a/perform/sio_standalone.h
+++ b/perform/sio_standalone.h
@@ -21,7 +21,7 @@
 
 /** From H5private.h **/
 
-#include "H5public.h"		 /* Include Public Definitions		*/
+#include "H5public.h"     /* Include Public Definitions    */
 
 
 /*
@@ -129,11 +129,11 @@
 #define HDfgetc(F)              fgetc(F)
 #define HDfgetpos(F,P)          fgetpos(F,P)
 #define HDfgets(S,N,F)          fgets(S,N,F)
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
 #define HDfileno(F)             _fileno(F)
-#else /* _WIN32 */
+#else /* H5_HAVE_WIN32_API */
 #define HDfileno(F)             fileno(F)
-#endif /* _WIN32 */
+#endif /* H5_HAVE_WIN32_API */
 #define HDfloor(X)              floor(X)
 #define HDfmod(X,Y)             fmod(X,Y)
 #define HDfopen(S,M)            fopen(S,M)
@@ -169,7 +169,7 @@ H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
  * For Unix, if off_t is not 64bit big, try use the pseudo-standard
  * xxx64 versions if available.
  */
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
     #define HDfstat(F,B)        _fstati64(F,B)
     #define HDlstat(S,B)        _lstati64(S,B)
     #define HDstat(S,B)         _stati64(S,B)
@@ -202,7 +202,11 @@ H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
 #define HDgetgrgid(G)           getgrgid(G)
 #define HDgetgrnam(S)           getgrnam(S)
 #define HDgetgroups(Z,G)        getgroups(Z,G)
+#ifdef H5_HAVE_VISUAL_STUDIO
+#define HDgetlogin()            Wgetlogin()
+#else /* H5_HAVE_VISUAL_STUDIO */
 #define HDgetlogin()            getlogin()
+#endif /* H5_HAVE_VISUAL_STUDIO */
 #define HDgetpgrp()             getpgrp()
 #define HDgetpid()              getpid()
 #define HDgetppid()             getppid()
@@ -235,7 +239,7 @@ H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
 #define HDlog(X)                log(X)
 #define HDlog10(X)              log10(X)
 #define HDlongjmp(J,N)          longjmp(J,N)
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
     #define HDlseek(F,O,W)  _lseeki64(F,O,W)
 #else
     #ifdef H5_HAVE_LSEEK64
@@ -258,18 +262,18 @@ H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
 #define HDmemcpy(X,Y,Z)         memcpy((char*)(X),(const char*)(Y),Z)
 #define HDmemmove(X,Y,Z)        memmove((char*)(X),(const char*)(Y),Z)
 /*
- * The (void*) cast just avoids a compiler warning in _WIN32
+ * The (void*) cast just avoids a compiler warning in H5_HAVE_VISUAL_STUDIO
  */
-#ifdef _WIN32
+#ifdef H5_HAVE_VISUAL_STUDIO
 #define HDmemset(X,C,Z)         memset((void*)(X),C,Z)
-#else /* _WIN32 */
+#else /* H5_HAVE_VISUAL_STUDIO */
 #define HDmemset(X,C,Z)         memset(X,C,Z)
-#endif /* _WIN32 */
-#ifdef _WIN32
+#endif /* H5_HAVE_VISUAL_STUDIO */
+#ifdef H5_HAVE_WIN32_API
 #define HDmkdir(S,M)            _mkdir(S)
-#else /* _WIN32 */
+#else /* H5_HAVE_WIN32_API */
 #define HDmkdir(S,M)            mkdir(S,M)
-#endif /* _WIN32 */
+#endif /* H5_HAVE_WIN32_API */
 #define HDmkfifo(S,M)           mkfifo(S,M)
 #define HDmktime(T)             mktime(T)
 #define HDmodf(X,Y)             modf(X,Y)
@@ -331,7 +335,7 @@ int HDremove_all(const char * fname);
 #define HDsetuid(U)             setuid(U)
 /* Windows does not permit setting the buffer size to values
    less than 2.  */
-#ifndef _WIN32
+#ifndef H5_HAVE_WIN32_API
 #define HDsetvbuf(F,S,M,Z)      setvbuf(F,S,M,Z)
 #else
 #define HDsetvbuf(F,S,M,Z)  setvbuf(F,S,M,(Z>1?Z:2))
@@ -350,7 +354,7 @@ int HDremove_all(const char * fname);
 #define HDsin(X)                sin(X)
 #define HDsinh(X)               sinh(X)
 #define HDsleep(N)              sleep(N)
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
 #define HDsnprintf              _snprintf /*varargs*/
 #else
 #define HDsnprintf              snprintf /*varargs*/
@@ -369,7 +373,7 @@ H5_DLL void HDsrand(unsigned int seed);
 #endif
 /* sscanf() variable arguments */
 
-#define HDstrcasecmp(X,Y)	strcasecmp(X,Y)
+#define HDstrcasecmp(X,Y)      strcasecmp(X,Y)
 #define HDstrcat(X,Y)           strcat(X,Y)
 #define HDstrchr(S,C)           strchr(S,C)
 #define HDstrcmp(X,Y)           strcmp(X,Y)
@@ -415,7 +419,7 @@ H5_DLL int64_t HDstrtoll (const char *s, const char **rest, int base);
 #define HDumask(N)              umask(N)
 #define HDuname(S)              uname(S)
 #define HDungetc(C,F)           ungetc(C,F)
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
 #define HDunlink(S)             _unlink(S)
 #else
 #define HDunlink(S)             unlink(S)
@@ -428,7 +432,7 @@ H5_DLL int64_t HDstrtoll (const char *s, const char **rest, int base);
 #define HDvfprintf(F,FMT,A)     vfprintf(F,FMT,A)
 #define HDvprintf(FMT,A)        vprintf(FMT,A)
 #define HDvsprintf(S,FMT,A)     vsprintf(S,FMT,A)
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
 #   define HDvsnprintf(S,N,FMT,A) _vsnprintf(S,N,FMT,A)
 #else
 #   define HDvsnprintf(S,N,FMT,A) vsnprintf(S,N,FMT,A)
@@ -443,9 +447,9 @@ H5_DLL int64_t HDstrtoll (const char *s, const char **rest, int base);
  * And now for a couple non-Posix functions...  Watch out for systems that
  * define these in terms of macros.
  */
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
 #define HDstrdup(S)    _strdup(S)
-#else /* _WIN32 */
+#else /* H5_HAVE_WIN32_API */
 
 #if !defined strdup && !defined H5_HAVE_STRDUP
 extern char *strdup(const char *s);
@@ -453,7 +457,7 @@ extern char *strdup(const char *s);
 
 #define HDstrdup(S)     strdup(S)
 
-#endif /* _WIN32 */
+#endif /* H5_HAVE_WIN32_API */
 
 /*
  * HDF Boolean type.
@@ -487,7 +491,7 @@ extern const char *opt_arg;     /* flag argument (or value)                 */
 
 enum {
     no_arg = 0,         /* doesn't take an argument     */
-    require_arg,        /* requires an argument	        */
+    require_arg,        /* requires an argument          */
     optional_arg        /* argument is optional         */
 };
 
diff --git a/perform/zip_perf.c b/perform/zip_perf.c
index 5729baf..897fc7e 100644
--- a/perform/zip_perf.c
+++ b/perform/zip_perf.c
@@ -66,9 +66,9 @@
 #endif
 
 /* internal variables */
-static const char *prog;
-static const char *option_prefix;
-static char *filename;
+static const char *prog=NULL;
+static const char *option_prefix=NULL;
+static char *filename=NULL;
 static int compress_percent = 0;
 static int compress_level = Z_DEFAULT_COMPRESSION;
 static int output, random_test = FALSE;
@@ -175,6 +175,7 @@ cleanup(void)
 {
     if (!getenv("HDF5_NOCLEANUP"))
         unlink(filename);
+    free(filename);
 }
 
 static void
@@ -292,10 +293,11 @@ uncompress_buffer(Bytef *dest, uLongf *destLen, const Bytef *source,
  * Programmer:  Bill Wendling, 06. June 2002
  * Modifications:
  */
+#define ZIP_PERF_FILE "zip_perf.data"
 static void
 get_unique_name(void)
 {
-    const char *prefix = NULL, *tmpl = "zip_perf.data";
+    const char *prefix = NULL;
     const char *env = getenv("HDF5_PREFIX");
 
     if (env)
@@ -305,19 +307,20 @@ get_unique_name(void)
         prefix = option_prefix;
 
     if (prefix)
-	/* 2 = 1 for '/' + 1 for null terminator */
-	filename = (char *) HDmalloc(strlen(prefix) + strlen(tmpl) + 2);
+        /* 2 = 1 for '/' + 1 for null terminator */
+        filename = (char *) HDmalloc(strlen(prefix) + strlen(ZIP_PERF_FILE) + 2);
     else
-	filename = (char *) HDmalloc(strlen(tmpl) + 1);
+        filename = (char *) HDmalloc(strlen(ZIP_PERF_FILE) + 1);
 
     if (!filename)
         error("out of memory");
 
+    filename[0] = 0;
     if (prefix){
-	strcpy(filename, prefix);
-	strcat(filename, "/");
+        strcpy(filename, prefix);
+        strcat(filename, "/");
     }
-    strcat(filename, tmpl);
+    strcat(filename, ZIP_PERF_FILE);
 }
 
 /*
@@ -410,7 +413,7 @@ fill_with_random_data(Bytef *src, uLongf src_len)
     register unsigned u;
     h5_stat_t stat_buf;
 
-    if (stat("/dev/urandom", &stat_buf) == 0) {
+    if (HDstat("/dev/urandom", &stat_buf) == 0) {
         uLongf len = src_len;
         Bytef *buf = src;
         int fd = HDopen("/dev/urandom", O_RDONLY, 0);
diff --git a/release_docs/CMake.txt b/release_docs/CMake.txt
old mode 100755
new mode 100644
index 10f9e3b..3455f64
--- a/release_docs/CMake.txt
+++ b/release_docs/CMake.txt
@@ -1,43 +1,5 @@
 ************************************************************************
-* Installing and Using HDF5 C/C++ Library with CMake                   *
-************************************************************************
-
-Notes: This short instruction is written for users who want to quickly install 
-       and use the HDF5 library and tools from the HDF5 binary package using
-       the CMake tools.
-       
-       1. On windows, run the HDF5 installer. Note that there is a static and
-          a dynamic dll version for HDF5. At this time, the default install
-          location is the same; Program Files\HDFGroup\HDF5\1.8.7. By default,
-          the bin folder is added to the path. If you wish to use the tools,
-          the bin\tools folder will need to be added manually.
-          
-       2. Installing both static and dynamic versions will require installation
-          in seprate folders, so that the CMake FindPackage() function will work
-          properly. Please adjust your product CMakeLists.txt file to locate
-          the correct library.
-          
-       3. When selecting a new location, the windows installer will append the 
-          HDFGroup and HDF5 folders. 
-       
-       NOTES:
-         1. Using CPack for installing and using HDF5 is under active development. 
-            While we have attempted to provide error-free files, please 
-            understand that development with CPack has not been extensively 
-            tested outside of HDF. The CMake/CPack specific files may change
-            before the next release.
-            
-         2. CMake was originally introduced to support development on Windows, 
-            however it should be usable on any system where CMake is supported. 
-            Please send us any comments on how CMake support can be improved on 
-            any system. Visit the KitWare site for more information about CMake.
-       
-       More information about using CMake can be found at the KitWare site, 
-       www.cmake.org.
-
-
-************************************************************************
-* Build and Package HDF5 C/C++ Library with CMake                      *
+* Build and Install HDF5 C/C++ Library with CMake                      *
 ************************************************************************
 
 Notes: This short instruction is written for users who want to quickly build 
@@ -143,8 +105,8 @@ Notes: This short instruction is written for users who want to quickly build
         <options> is:
             * SZIP_INCLUDE_DIR:PATH=<path to szip includes directory>
             * SZIP_LIBRARY:FILEPATH=<path to szip/library file>
-            * ZLIB_INCLUDE_DIR:PATH=<path to szip includes directory>
-            * ZLIB_LIBRARY:FILEPATH=<path to szip/library file>
+            * ZLIB_INCLUDE_DIR:PATH=<path to zlib includes directory>
+            * ZLIB_LIBRARY:FILEPATH=<path to zlib/library file>
             * <HDF5OPTION>:BOOL=[ON | OFF]
 
         <cacheinit.cmake> is:
@@ -165,7 +127,6 @@ Notes: This short instruction is written for users who want to quickly build
             SET (HDF5_ENABLE_SZIP_ENCODING ON CACHE BOOL "Use SZip Encoding" FORCE)
             SET (HDF5_ENABLE_SZIP_SUPPORT ON CACHE BOOL "Use SZip Filter" FORCE)
             SET (HDF5_ENABLE_Z_LIB_SUPPORT ON CACHE BOOL "Enable Zlib Filters" FORCE)
-            SET (HDF5_USE_H5DUMP_PACKED_BITS ON CACHE BOOL "Use the PACKED BITS feature in h5dump" FORCE)
             SET (HDF5_ENABLE_COVERAGE OFF CACHE BOOL "Enable code coverage for Libraries and Programs" FORCE)
 
    2. Configure the cache settings
@@ -256,6 +217,10 @@ Notes: This short instruction is written for users who want to quickly build
       
       NOTE: We have just introduced the packaging capability and it has not been 
             extensively tested. Please send us comments on how it can be improved.
+            See NSIS note 8 of this document.
+            Also, if you are using a VS Express version or do not want to enable
+            the packaging components, set HDF5_NO_PACKAGES to ON (on the command
+            line add -DHDF5_NO_PACKAGES:BOOL=ON)
            
    6. The files that support building HDF5 with CMake are all the files in the 
       config/cmake folder, the CMakeLists.txt files in each source folder, and 
@@ -265,6 +230,63 @@ Notes: This short instruction is written for users who want to quickly build
 
    7. More information about using CMake can be found at the KitWare site, 
       www.cmake.org.
+      
+   8. Nullsoft Scriptable Install System
+      The Nullsoft Scriptable Install System (NSIS) is an open source installation 
+      system. It was created by the WinAmp authors to distribute that application, 
+      but it is now a general-purpose system which anyone might use. NSIS installers 
+      recognize /S for silent installation and /D=dir to specify the 
+      "output directory", which is where the program will be installed. These 
+      options are case-sensitive, so be sure to type them in upper case. 
+
+
+========================================================================
+          All options for HDF5 C/C++ Libraries with CMake
+========================================================================
+OPTION (HDF5_Enable_Clear_File_Buffers "Securely clear file buffers before writing to file" ON)
+OPTION (HDF5_Enable_Instrument "Instrument The library" HDF5_Enable_Instrument)
+OPTION (HDF5_STRICT_FORMAT_CHECKS "Whether to perform strict file format checks" OFF)
+OPTION (HDF5_METADATA_TRACE_FILE "Enable metadata trace file collection" OFF)
+OPTION (HDF5_WANT_DATA_ACCURACY "IF data accuracy is guaranteed during data conversions" ON)
+OPTION (HDF5_WANT_DCONV_EXCEPTION "exception handling functions is checked during data conversions" ON)
+OPTION (HDF5_ENABLE_CODESTACK "Enable the function stack tracing (for developer debugging)." OFF)
+OPTION (HDF5_ENABLE_HSIZET "Enable datasets larger than memory" ON)
+OPTION (HDF5_ENABLE_LARGE_FILE "Enable support for large (64-bit) files on Linux." ON)
+OPTION (HDF5_ENABLE_GPFS "Enable GPFS hints for the MPI/POSIX file driver" OFF)
+IF (APPLE) OPTION (HDF5_BUILD_WITH_INSTALL_NAME "Build with library install_name set to the installation path" OFF)
+IF (WIN32 AND NOT CYGWIN) OPTION (HDF_LEGACY_NAMING "Use Legacy Names for Libraries and Programs" OFF)
+OPTION (BUILD_SHARED_LIBS "Build Shared Libraries" OFF)
+OPTION (BUILD_STATIC_EXECS "Build Static Executabless" OFF)
+OPTION (BUILD_STATIC_PIC "Build Static PIC" OFF)
+OPTION (HDF5_ENABLE_COVERAGE "Enable code coverage for Libraries and Programs" OFF)
+OPTION (HDF5_ENABLE_USING_MEMCHECKER "Indicate that a memory checker is used" OFF)
+OPTION (HDF5_ENABLE_DEPRECATED_SYMBOLS "Enable deprecated public API symbols" ON)
+OPTION (HDF5_ENABLE_TRACE "Enable API tracing capability" ON)
+OPTION (HDF5_ENABLE_TRACE "Enable API tracing capability" OFF)
+OPTION (HDF5_ENABLE_EMBEDDED_LIBINFO "embed library info into executables" ON)
+OPTION (HDF5_DISABLE_COMPILER_WARNINGS "Disable compiler warnings" OFF)
+OPTION (HDF5_ENABLE_PARALLEL "Enable parallel build (requires MPI)" OFF)
+OPTION (HDF5_USE_16_API_DEFAULT "Use the HDF5 1.6.x API by default" OFF)
+OPTION (HDF5_USE_18_API_DEFAULT "Use the HDF5 1.8.x API by default" OFF)
+OPTION (HDF5_USE_FILTER_${FILTER} "Use the ${FILTER} Filter" ON)
+OPTION (HDF5_ALLOW_EXTERNAL_SUPPORT "Allow External Library Building" "NO")
+OPTION (ZLIB_USE_EXTERNAL "Use External Library Building for ZLIB" 0)
+OPTION (SZIP_USE_EXTERNAL "Use External Library Building for SZIP" 0)
+OPTION (HDF5_ENABLE_Z_LIB_SUPPORT "Enable Zlib Filters" OFF)
+OPTION (HDF5_ENABLE_SZIP_SUPPORT "Use SZip Filter" OFF)
+IF (HDF5_ENABLE_SZIP_SUPPORT) OPTION (HDF5_ENABLE_SZIP_ENCODING "Use SZip Encoding" OFF)
+OPTION (HDF5_PACKAGE_EXTLIBS "CPACK - include external libraries" OFF)
+IF (WIN32 AND NOT CYGWIN) OPTION (HDF5_ENABLE_THREADSAFE "Enable Threadsafety" OFF)
+OPTION (BUILD_TESTING "Build HDF5 Unit Testing" OFF)
+OPTION (HDF5_TEST_VFD "Execute tests with different VFDs" OFF)
+IF (HDF5_TEST_VFD) OPTION (HDF5_TEST_FHEAP_VFD "Execute tests with different VFDs" ON)
+OPTION (HDF5_BUILD_FORTRAN "Build FORTRAN support" OFF)
+IF (HDF5_BUILD_FORTRAN) OPTION (HDF5_ENABLE_F2003 "Enable FORTRAN 2003 Standard" OFF)
+OPTION (HDF5_BUILD_EXAMPLES  "Build HDF5 Library Examples" OFF)
+OPTION (HDF5_BUILD_CPP_LIB  "Build HDF5 C++ Library" OFF)
+OPTION (HDF5_BUILD_TOOLS  "Build HDF5 Tools" OFF)
+OPTION (HDF5_BUILD_HL_LIB  "Build HIGH Level HDF5 Library" OFF)
+OPTION (HDF5_NO_PACKAGES "Do not include CPack Packaging" OFF)
 
 
 ************************************************************************
diff --git a/release_docs/COPYING b/release_docs/COPYING
old mode 100755
new mode 100644
diff --git a/release_docs/HISTORY-1_8.txt b/release_docs/HISTORY-1_8.txt
index c005ff7..128756b 100644
--- a/release_docs/HISTORY-1_8.txt
+++ b/release_docs/HISTORY-1_8.txt
@@ -3,6 +3,7 @@ HDF5 History
 
 This file contains development history of HDF5 1.8 branch
 
+8.      Release Information for hdf5-1.8.7
 7.      Release Information for hdf5-1.8.6
 6.      Release Information for hdf5-1.8.5
 5.      Release Information for hdf5-1.8.4
@@ -13,6 +14,641 @@ This file contains development history of HDF5 1.8 branch
 
 [Search on the string '%%%%' for per-release section breaks.]
 
+%%%%1.8.7%%%%   
+
+
+HDF5 version 1.8.7 released on Tue May 10 09:24:44 CDT 2011
+================================================================================
+
+INTRODUCTION
+============
+
+This document describes the differences between HDF5-1.8.6 and 
+HDF5 1.8.7, and contains information on the platforms tested and 
+known problems in HDF5-1.8.7. 
+For more details, see the files HISTORY-1_0-1_8_0_rc3.txt 
+and HISTORY-1_8.txt in the release_docs/ directory of the HDF5 source.
+
+Links to the HDF5 1.8.7 source code, documentation, and additional materials
+can be found on the HDF5 web page at:
+
+     http://www.hdfgroup.org/products/hdf5/
+
+The HDF5 1.8.7 release can be obtained from:
+
+     http://www.hdfgroup.org/HDF5/release/obtain5.html
+
+User documentation for 1.8.7 can be accessed directly at this location: 
+
+     http://www.hdfgroup.org/HDF5/doc/
+
+New features in the HDF5-1.8.x release series, including brief general 
+descriptions of some new and modified APIs, are described in the "What's New 
+in 1.8.0?" document:
+
+     http://www.hdfgroup.org/HDF5/doc/ADGuide/WhatsNew180.html
+
+All new and modified APIs are listed in detail in the "HDF5 Software Changes 
+from Release to Release" document, in the section "Release 1.8.7 (current 
+release) versus Release 1.8.6":
+
+     http://www.hdfgroup.org/HDF5/doc/ADGuide/Changes.html
+
+If you have any questions or comments, please send them to the HDF Help Desk:
+
+     help at hdfgroup.org
+
+
+CONTENTS
+========
+
+- New Features
+- Support for New Platforms, Languages, and Compilers
+- Bug Fixes since HDF5-1.8.6
+- Platforms Tested
+- Supported Configuration Features Summary
+- Known Problems
+
+
+New Features
+============
+
+    Configuration
+    -------------
+    - Configure now generates Makefiles that build in "silent make mode"
+      by default in which compile and link lines are significantly
+      simplified for clarity. To override this and view actual compile and
+      link lines during building, the --disable-silent-rules flag can be used
+      at configure time, or the 'make' command can be followed by V=1, to
+      indicate a "verbose" make. (MAM - 2011/4/14).
+    - Added mpicc and mpif90 as the default C and Fortran compilers for Linux
+      systems when --enable-parallel is specified but no $CC or $FC is defined.
+      (AKC - 2011/2/7)
+    - Added a new configure option, "--enable-unsupported", which can
+      be used to stop configure from preventing the use of unsupported
+      configure option combinations, such as c++ in parallel or Fortran
+      with threadsafe. Use at your own risk, as it may result in a 
+      library that won't compile or run as expected!
+      (MAM - 2010/11/17 - Bug 2061)
+
+    Library
+    -------
+    - The library allows the dimension size of a dataspace to be zero.  In 
+      the past, the library would allow this only if the maximal dimension 
+      size was unlimited. Now there is no such restriction, but no data 
+      can be written to this kind of dataset. (SLU - 2011/4/20)
+    - We added two new macros, H5_VERSION_GE and H5_VERSION_LE, to let users
+      compare certain version numbers with the library being used. (SLU -
+      2011/4/20) 
+    - Added ability to cache files opened through external links.  Added new
+      public functions H5Pset_elink_file_cache_size(),
+      H5Pget_elink_file_cache_size(), and H5Fclear_elink_file_cache().
+      (NAF - 2011/02/17)
+    - Finished implementing all options for 'log' VFD.  (QAK - 2011/1/25)
+    - Removed all old code for Metrowerks compilers, bracketed by
+      __MWERKS__). Metrowerks compiler is long gone. (AKC - 2010/11/17) 
+
+    Parallel Library
+    ----------------
+    - None
+ 
+    Tools
+    -----
+     - h5diff: Added new "verbose with levels" option, '-vN, --verbose=N'.
+       The old '-v, --verbose' option is deprecated but remains available;
+       it is exactly equivalent to '-v0, --verbose=0'.
+       The new levels 1 ('-v1' or '--verbose=1') and 2 ('-v2' or 
+       '--verbose=2') can be specified to view more information regarding 
+       attributes differences.  Bug #2121 (JKM 2011/3/23)
+     - h5dump: Added new option --enable-error-stack. This option will 
+       display error stack information in the output stream. This is 
+       useful when the "h5dump: Unable to print data" message is output.
+       (ADB - 2011/03/03)
+
+    High-Level APIs
+    ---------------
+    - Fortran LT make datasets routines (H5LTmake_dataset_f, 
+      h5ltmake_dataset_int_f, h5ltmake_dataset_float_f, h5ltmake_dataset_double_f) 
+      and LT read datasets routines (h5ltread_dataset_f,h5ltread_dataset_int_f,
+      h5ltread_dataset_float_f, 5ltread_dataset_double_f) can now handle 
+      4-dimensional to 7-dimensional rank datasets. HDFFV-1217 (MSB-2011/4/24/2011)
+
+    F90 API
+    -------
+     - None
+
+    C++ API
+    -------
+    - None
+
+
+Support for New Platforms, Languages, and Compilers
+===================================================
+    - Intel V11.1 uses now -O3 optimization in production mode (EIP - 2010/10/08)
+             
+
+
+Bug Fixes since HDF5-1.8.6
+==========================
+
+    Configuration
+    -------------
+    - Shared C++ and HL libraries on AIX should now be working correctly.
+      Note that Fortran shared libraries are still not working on AIX. 
+      (See the Known Problems section, below). (MAM - 2011/4/20)
+    - Removed config/ibm-aix6.x. All IBM-AIX settings are in one file,
+      ibm-aix. (AKC - 2011/4/14)
+    - Shared C libraries are no longer disabled on Mac when Fortran
+      is enabled. Shared Fortran libraries are still not supported on Mac,
+      so configure will disable them by default, but this is overrideable
+      with the new --enable-unsupported configure option. The configure
+      summary has been updated to reflect the fact that the shared-ness of 
+      the C++/Fortran wrapper libraries may not align with the C library.
+      (MAM - 2011/04/11 - HDFFV-4353).
+
+    Library
+    -------
+    - Changed assertion failure when decoding a compound datatype with no
+      fields into a normal error failure.  Also prohibit using this sort
+      of datatype for creating an attribute (as is already the case for
+      datasets and committed (named) datatypes).  (QAK - 2011/04/15, Jira 
+      issue #HDFFV-2766)
+    - Tell the VFL flush call that the file will be closing, allowing
+      the VFDs to avoid sync'ing the file (particularly valuable in parallel).
+      (QAK - 2011/03/09)
+    - The datatype handler created with H5Tencode/decode used to have the 
+      reference count 0 (zero); it now has the reference count 1 (one).
+      (SLU - 2011/2/18)
+    - Fixed the definition of H5_HAVE_GETTIMEOFDAY on Windows so that
+      HDgettimeofday() is defined and works properly.  Bug HDFFV-5931
+      (DER - 2011/04/14)
+    - Added basic VFD tests for the Windows, STDIO and log VFD tests.
+      (DER - 2011/04/11)
+
+    Parallel Library
+    ----------------
+    - None
+
+    Tools
+    -----
+    - Updated h5dump test case script to prevent entire test failure when 
+      source directory is read-only. Bug #HDFFV-4342 (JKM 2011/4/12)
+    - Fixed h5dump displaying incorrect values for H5T_STD_I8BE type data in
+      attribute on Big-Endian machine. H5T_STD_I8BE is unsigned 8bit type,
+      so h5dump is supposed to display -2 instead of 254. It worked correctly
+      on Little-Endian system , but not on Big-Endian system.  Bug #HDFFV-4358
+      (JKM 04/08/2011)
+    - Updated some HDF5 tools to standardize the option name as 
+      '--enable-error-stack' for printing HDF5 error stack messages. h5ls and 
+      h5dump have been updated. For h5ls, this replaces "-e/--errors" option, 
+      which is deprecated. For h5dump, this is a new option. Bug #2182 
+      (JKM 2011/3/30)
+    - Fixed the h5diff --use-system-epsilon option. The formula used in the 
+      calculation was changed from ( |a - b| / b ) to ( |a - b| ). 
+      This was done to improve performance. Bug #2184 (JKM 2011/3/24)
+    - Fixed output for H5T_REFERENCE in h5dump. According to the BNF document
+      the output of a H5T_REFERENCE should be followed by the type;
+      <reference> ::= H5T_REFERENCE { <ref_type> }
+      <ref_type> ::= H5T_STD_REF_OBJECT | H5T_STD_REF_DSETREG
+      Previously this was only displayed if the -R option was used.
+      Bug #1725 (ADB 2011/3/28)
+    - Fixed two h5diff issues. 1) h5diff compared attributes correctly only 
+      when two objects had the same number of attributes and the attribute 
+      names were identical. 2) h5diff did not display useful information about 
+      attribute differences. Bug #2121 (JKM 2011/3/17)
+    - Fixed a memory leak in h5diff that occurred when accessing symbolic links 
+      with the --follow-symlink option. Bug #2214  (JKM 2011/3/18)
+    - Fixed a memory leak in h5diff that occurred when accessing variable length 
+      string data. Bug #2216 (JKM 2011/3/18)
+    - Fixed and improved the help page for h5ls -a, --address option. 
+      Bug #1904 (JKM 2011/3/11)
+    - Fixed h5copy to enable copying an object into the same HDF5 file.
+      Previously h5copy displayed an error message when the target file 
+      was the same as the source file. (XCAO 2011/3/8)
+    - Fixed an h5dump problem that caused the tool to skip some data elements 
+      in large datasets with a large array datatype on Windows. This issue 
+      arose only on Windows due to the different return behavior of the 
+      _vsnprintf() function.  Bug #2161 (JKM 2011/3/3)
+    - Fixed h5dump which was skipping some array indices in large datasets 
+      with a relatively large array datatype. The interval of skipped indices
+      varied according to the size of the array. Bug #2092 (JKM 2011/2/15)
+    - Fixed h5diff which was segfaulting when comparing compound datasets
+      with a combination of fixed-length string datatypes and variable-length
+      string datatypes in certain orders. Bug #2089 (JKM 2010/12/28)
+    - Improved h5diff performance. 1) Now use HDmemcmp() before comparing two 
+      elements. 2) Replace expensive H5Tequals() calls. 3) Retrieve datatype
+      information at dataset level, not at each element level for compound 
+      datasets. HDFFV-7516 (JKM 2011/4/18) 
+    - Fixed h5ls to display nested compound types with curly brackets 
+      when -S (--simple) option is used with -l (--label), so it shows  
+      which members (in curly brackets) belong to which nested compound type, 
+      making the output clearer.  Bug #1979 (JKM 2010/11/09)
+    - Fixed h5diff to handle variable-length strings in a compound dataset 
+      and variable-length string arrays in a compound dataset correctly.
+      Garbage values were previously displayed when h5diff compared multiple 
+      variable-length strings in a compound type dataset. 
+      Bug #1989 (JKM 2010/10/28)
+    - Fixed h5copy to fail gracefully when copying an object to a non-
+      existing group without the -p option. Bug #2040 (JKM 2010/10/18)
+
+    F90 API
+    ------
+    - None
+
+    C++ API
+    ------
+    - None
+
+    High-Level APIs:
+    ------
+    - None
+
+    Fortran High-Level APIs:
+    ------
+    -  h5tbmake_table_f: Fixed error in passing an array of characters with different 
+       length field names.
+    -  h5tget_field_info_f: Fixed error with packing the C strings into a Fortran 
+       array of strings. Added optional argument called 'maxlen_out' which returns 
+       the maximum string character length in a field name element.
+       Bug HDFFV-1255 (MSB- 4/17/2011)
+
+
+
+
+Platforms Tested
+================
+The following platforms and compilers have been tested for this release.
+
+    AIX 6.1                       xlc 11.1.0.3
+    (NCSA BP)                     xlC 11.1.0.3
+                                  xlf90 13.1.0.3
+                                  mpcc_r 11.1.0.3
+                                  mpxlf90_r 13.1.0.3
+
+    FreeBSD 8.2-STABLE i386       gcc 4.2.1 [FreeBSD] 20070719
+    (loyalty)                     g++ 4.2.1 [FreeBSD] 20070719
+                                  gcc 4.6.1 20110422
+                                  g++ 4.6.1 20110422
+                                  gfortran 4.6.1 20110422
+
+    FreeBSD 8.2-STABLE amd64      gcc 4.2.1 [FreeBSD] 20070719
+    (freedom)                     g++ 4.2.1 [FreeBSD] 20070719
+                                  gcc 4.6.1 20110422
+                                  g++ 4.6.1 20110422
+                                  gfortran 4.6.1 20110422
+
+    Linux 2.6.18-194.3.1.el5PAE   gcc (GCC) 4.1.2 and 4.4.2
+    #1 SMP i686 i686 i386         G95 (GCC 4.0.3 (g95 0.93!) Apr 21 2010)
+    (jam)                         GNU Fortran (GCC) 4.1.2 20080704 
+                                      (Red Hat 4.1.2-48) and 4.4.2
+                                  PGI C, Fortran, C++ 10.4-0 32-bit
+                                  PGI C, Fortran, C++ 10.6-0 32-bit
+                                  Intel(R) C Compiler for 32-bit
+                                      applications, Version 11.1 
+                                  Intel(R) C++ Compiler for 32-bit
+                                      applications, Version 11.1
+                                  Intel(R) Fortran Compiler for 32-bit
+                                      applications, Version 11.1
+                                  Absoft 32-bit Fortran 95 10.0.7
+                                  MPICH mpich2-1.3.1 compiled with
+                                      gcc 4.1.2 and gfortran 4.1.2
+
+    Linux 2.6.18-194.17.1.el5     gcc 4.1.2 and 4.4.2
+    #1 SMP x86_64 GNU/Linux       G95 (GCC 4.0.3 (g95 0.93!) Apr 21 2010)
+    (amani)                           tested for both 32- and 64-bit binaries
+                                  GNU Fortran (GCC) 4.1.2 20080704
+                                      (Red Hat 4.1.2-46) and 4.4.2
+                                  Intel(R) C, C++, Fortran Compilers for 
+                                      applications running on Intel(R) 64, 
+                                      Version 11.1.
+                                  PGI C, Fortran, C++ Version 9.0-4
+                                      for 64-bit target on x86-64
+                                  MPICH mpich2-1.3.1 compiled with
+                                      gcc 4.1.2 and gfortran 4.1.2
+
+    SGI ProPack 7 Linux           Intel(R) C++ Version 11.1 20100806
+    2.6.32.24-0.2.1.2230.2.PTF-   Intel(R) Fortran Version 11.1 20100806
+    default #1 SMP                SGI MPT 2.01
+    SGI Altix UV
+    (NCSA ember)
+
+    SunOS 5.10 32- and 64-bit     Sun C 5.9 Sun OS_sparc Patch 124867-16
+    (linew)                       Sun Fortran 95 8.3 Sun OS_sparc Patch 127000-13
+                                  Sun C++ 5.9 Sun OS_sparc Patch 124863-26
+                                  Sun C 5.10 SunOS_sparc Patch 141861-07
+                                  Sun Fortran 95 8.4 SunOS_sparc Patch 128231-06
+                                  Sun C++ 5.10 SunOS_sparc 128228-11
+
+    Intel Xeon Linux 2.6.18-      gcc 4.2.4
+    92.1.10.el5_lustre.1.6.6smp-  Intel(R) C++ Version 10.1.017
+    perfctr #8 SMP                Intel(R) Fortran Compiler Version 10.1.017
+    (NCSA abe)                    Open MPI 1.3.2
+                                  MVAPICH2-1.5.1_pgi-10.8
+
+    Windows XP                    Visual Studio 2008 w/ Intel Fortran 10.1 (project files)
+                                  Visual Studio 2008 w/ Intel Fortran 11.1 (cmake)
+                                  Visual Studio 2010 (cmake)
+                                  Cygwin(1.7.7 native gcc(4.3.4) compiler and gfortran)
+
+    Windows XP x64                Visual Studio 2008 w/ Intel Fortran 10.1 (project files)
+                                  Visual Studio 2008 w/ Intel Fortran 11.1 (cmake)
+                                  Visual Studio 2010 (cmake)
+                                  Cygwin(1.7.7 native gcc(4.3.4) compiler and gfortran)
+
+    Windows Vista                 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake)
+
+    Windows Vista x64             Visual Studio 2008 w/ Intel Fortran 11.1 (cmake)
+
+    Windows 7                     Visual Studio 2008 w/ Intel Fortran 11.1 (cmake)
+
+    Windows 7 x64                 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake)
+
+    Mac OS X 10.7.0 (Intel 64-bit) i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1
+    Darwin Kernel Version 10.7.0  GNU Fortran (GCC) 4.6.0 20101106 (experimental)
+                                  Intel C, C++ and Fortran compilers 12.0.1.122 20101110
+
+    Mac OS X 10.7.0 (Intel 32-bit) i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
+    Darwin Kernel Version 10.7.0  GNU Fortran (GCC) version 4.4.0 20090123 (experimental) 
+							[trunk revision 143587]
+
+    Fedora 12 2.6.32.16-150.fc12.ppc64 #1 SMP ppc64 GNU/Linux
+                                  gcc (GCC) 4.4.4 20100630 (Red Hat 4.4.4-10)
+                                  GNU Fortran (GCC) 4.4.4 20100630 (Red Hat 4.4.4-10)
+
+    Debian6.01 2.6.32-5-686 #1 SMP i686 GNU/Linux
+                                  gcc (Debian 4.4.5-8) 4.4.5
+                                  GNU Fortran (Debian 4.4.5-8) 4.4.5
+
+    Debian6.01 2.6.32-5-amd64 #1 SMP x86_64 GNU/Linux
+                                  gcc (Debian 4.4.5-8) 4.4.5
+                                  GNU Fortran (Debian 4.4.5-8) 4.4.5
+
+    Fedora14 2.6.35.12-88.fc14.i686.PAE #1 SMP i686 i686 i386 GNU/Linux
+                                  gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)
+                                  GNU Fortran (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)
+
+    Fedora14 2.6.35.12-88.fc14.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux
+                                  gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)
+                                  GNU Fortran (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)
+
+    SUSE 11.4 2.6.37.1-1.2-desktop #1 SMP PREEMPT i686 i686 i386 GNU/Linux
+                                  gcc (SUSE Linux) 4.5.1 20101208
+                                  GNU Fortran (SUSE Linux) 4.5.1 20101208
+
+    SUSE 11.4 2.6.37.1-1.2-desktop #1 SMP PREEMPT x86_64 x86_64 x86_64 GNU/Linux
+                                  gcc (SUSE Linux) 4.5.1 20101208
+                                  GNU Fortran (SUSE Linux) 4.5.1 20101208
+
+    Ubuntu 10.10 2.6.35-28-generic #50-Ubuntu SMP i686 GNU/Linux
+                                  gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
+                                  GNU Fortran (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
+
+    Ubuntu 10.10 2.6.35-28-generic #50-Ubuntu SMP x86_64 GNU/Linux
+                                  gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
+                                  GNU Fortran (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
+    
+    OpenVMS Alpha 8.3             HP C V7.3-009
+                                  HP Fortran V8.2-104679-48H9K
+                                  HP C++ V7.3-009
+
+Tested Configuration Features Summary
+========================================
+
+    In the tables below
+          y   = tested 
+          n   = not tested in this release
+          C   = Cluster
+          W   = Workstation
+          x   = not working in this release
+          dna = does not apply
+          ( ) = footnote appears below second table
+          <blank> = testing incomplete on this feature or platform 
+
+Platform                                 C        F90    F90      C++   zlib  SZIP
+                                         parallel        parallel
+Solaris2.10 32-bit                         n        y      n        y     y     y
+Solaris2.10 64-bit                         n        y      n        y     y     y
+Windows XP                                 n        y(4)   n        y     y     y
+Windows XP x64                             n        y(4)   n        y     y     y
+Windows Vista                              n        y(4)   n        y     y     y
+Windows Vista x64                          n        y(4)   n        y     y     y
+OpenVMS Alpha                              n        y      n        y     y     n
+Mac OS X 10.7 Intel 32-bit                 n        y      n        y     y     y
+Mac OS X 10.7 Intel 64-bit                 n        y      n        y     y     y
+AIX 6.1 32- and 64-bit                     y        y      y        y     y     y
+FreeBSD 8.2-STABLE 32&64 bit               n        x      n        x     y     y
+CentOS 5.5 Linux 2.6.18-194 i686 GNU (1)W  y        y(2)   y        y     y     y
+CentOS 5.5 Linux 2.6.18-194 i686 Intel  W  n        y      n        y     y     n
+CentOS 5.5 Linux 2.6.18-194 i686 PGI    W  n        y      n        y     y     n
+CentOS 5.5 Linux 2.6.16 x86_64 GNU (1)  W  y        y(3)   y        y     y     y
+CentOS 5.5 Linux 2.6.16 x86_64 Intel    W  n        y      n        y     y     n
+CentOS 5.5 Linux 2.6.16 x86_64 PGI      W  n        y      n        y     y     y
+RedHat EL4 2.6.18 Xeon Lustre           C  y        y      y        y     y     n
+Fedora 12 Linux 2.6.32.16-150.fc12.ppc64   n        y      n        y     y     y
+SGI Linux 2.6.32.19                        y        y      y        y     y     y
+
+
+Platform                                 Shared  Shared    Shared    Thread-  
+                                         C libs  F90 libs  C++ libs  safe     
+Solaris2.10 32-bit                         y       y         y         y        
+Solaris2.10 64-bit                         y       y         y         y        
+Windows XP                                 y       y(4)      y         n        
+Windows XP x64                             y       y(4)      y         n        
+Windows Vista                              y       y(4)      y         y
+Windows Vista x64                          y       y(4)      y         y
+OpenVMS Alpha                              n       n         n         n
+Mac OS X 10.7 Intel 32-bit                 y(5)    n         y         n        
+Mac OS X 10.7 Intel 64-bit                 y(5)    n         y         n        
+AIX 6.1 32- and 64-bit                     n       n         n         y        
+FreeBSD 8.2-STABLE 32&64 bit               y       x         x         y        
+CentOS 5.5 Linux 2.6.18-128 i686 GNU (1)W  y       y(2)      y         y        
+CentOS 5.5 Linux 2.6.18-128 i686 Intel  W  y       y         y         n        
+CentOS 5.5 Linux 2.6.18-128 i686 PGI    W  y       y         y         n        
+CentOS 5.5 Linux 2.6.16 x86_64 GNU (1)  W  y       y         y         y        
+CentOS 5.5 Linux 2.6.16 x86_64 Intel    W  y       y         y         n        
+CentOS 5.5 Linux 2.6.16 x86_64 PGI      W  y       y         y         n        
+RedHat EL4 2.6.18 Xeon Lustre           C  y       y         y         n
+Fedora 12 Linux 2.6.32.16-150.fc12.ppc64   y       y         y         y 
+SGI Linux 2.6.32.19                        y       y         y         y 
+
+           (1) Fortran compiled with gfortran.
+           (2) With PGI and Absoft compilers.
+           (3) With PGI compiler for Fortran.
+           (4) Using Visual Studio 2008 w/ Intel Fortran 10.1 (Cygwin shared libraries are not supported)
+           (5) C and C++ shared libraries will not be built when Fortran is enabled.
+    Compiler versions for each platform are listed in the preceding
+    "Platforms Tested" table.
+
+
+Known Problems
+==============
+* After the shared library support was fixed for some bugs, it was discovered
+  that "make prefix=XXX install" no longer works for shared libraries. It
+  still works correctly for static libraries. Therefore, if you want to
+  install the HDF5 shared libraries in a location such as /usr/local/hdf5,
+  you need to specify the location via the --prefix option during configure 
+  time. E.g, ./configure --prefix=/usr/local/hdf5 ...
+  (AKC - 2011/05/07 HDFFV-7583)
+
+* The parallel test, t_shapesame, in testpar/, may run for a long time and may
+  be terminated by the alarm signal.  If that happens, one can increase the
+  alarm seconds (default is 1200 seconds = 20 minutes) by setting the
+  environment variable, $HDF5_ALARM_SECONDS, to a larger value such as 3600
+  (60 minutes).  Note that the t_shapesame test may fail in some systems 
+  (see the "While working on the 1.8.6 release..." problem below).  If 
+  it does, it will waste more time if $HDF5_ALARM_SECONDS is set
+  to a larger value. (AKC - 2011/05/07)
+
+* The C++ and FORTRAN bindings are not currently working on FreeBSD.
+  (QAK - 2011/04/26)
+
+* Shared Fortran libraries are not quite working on AIX. While they are
+  generated when --enable-shared is specified, the fortran and hl/fortran
+  tests fail. We are looking into the issue. HL and C++ shared libraries
+  should now be working as intended, however. (MAM - 2011/04/20)
+
+* The --with-mpe configure option does not work with Mpich2. AKC - 2011/03/10
+
+* If parallel gmake (e.g., gmake -j 4) is used, the "gmake clean" command
+  sometimes fails in the perform directory due to the attempt to remove the
+  executable of h5perf or h5perf_serial by two "parallel" commands. This error
+  has no consequence on the functionality of the HDF5 library or install. It
+  is fixed in the next release. AKC - 2011/01/25
+
+* While working on the 1.8.6 release of HDF5, a bug was discovered that can
+  occur when reading from a dataset in parallel shortly after it has been
+  written to collectively. The issue was exposed by a new test in the parallel
+  HDF5 test suite, but had existed before that. We believe the problem lies with
+  certain MPI implementations and/or file systems.
+
+  We have provided a pure MPI test program, as well as a standalone HDF5
+  program, that can be used to determine if this is an issue on your system.
+  They should be run across multiple nodes with a varying number of processes.
+  These programs can be found at:
+  http://www.hdfgroup.org/ftp/HDF5/examples/known_problems/
+
+* The library's test dt_arith.c showed a compiler's rounding problem on
+  Cygwin when converting from unsigned long long to long double.  The 
+  library's own conversion works fine.  We defined a macro for Cygwin to
+  skip this test until we can solve the problem.  Please see bug #1813.
+  SLU - 2010/5/5 
+
+* All the VFL drivers aren't backward compatible.  In H5FDpublic.h, the
+  structure H5FD_class_t changed in 1.8.  There is new parameter added to
+  get_eoa and set_eoa callback functions.  A new callback function
+  get_type_map was added in.  The public function H5FDrealloc was taken
+  out in 1.8.  The problem only happens when users define their own driver
+  for 1.6 and try to plug in 1.8 library.  Because there's only one user 
+  complaining about it, we (Elena, Quincey, and I) decided to leave it as 
+  it is (see bug report #1279).  Quincey will make a plan for 1.10.
+  SLU - 2010/2/2
+
+* MinGW has a missing libstdc++.dll.a library file and will not successfully link
+  C++ applications/tests. Do not use the enable-cxx configure option. Read all of
+  the INSTALL_MINGW.txt file for all restrictions. ADB - 2009/11/11
+  
+* The PathScale MPI implementation, accessing a Panasas file system, would
+  cause H5Fcreate() with H5F_ACC_EXCL to fail even when the file does not
+  exist. This is due to the MPI_File_open() call failing if the mode has
+  the MPI_MODE_EXCL bit set. (See bug 1468 for details.) AKC - 2009/8/11
+ 
+* Parallel tests failed with 16 processes with data inconsistency at testphdf5
+  / dataset_readAll. Parallel tests also failed with 32 and 64 processes with
+  collective abort of all ranks at t_posix_compliant / allwrite_allread_blocks
+  with MPI IO. CMC - 2009/04/28
+
+* For Red Storm, a Cray XT3 system, the tools/h5ls/testh5ls.sh and
+  tools/h5copy/testh5copy.sh will fail some of its sub-tests. These sub-tests
+  are expected to fail and should exit with a non-zero code but the yod
+  command does not propagate the exit code of the executables. Yod always
+  returns 0 if it can launch the executable.  The test suite shell expects
+  a non-zero for this particular test, therefore it concludes the test has
+  failed when it receives 0 from yod.  Skip all the "failing" test for now
+  by changing them as following.
+
+  ======== Original tools/h5ls/testh5ls.sh =========
+  TOOLTEST tgroup-1.ls 1 -w80 -r -g tgroup.h5
+  ======== Change to ===============================
+  echo SKIP TOOLTEST tgroup-1.ls 1 -w80 -r -g tgroup.h5
+  ==================================================
+
+  ======== Original tools/h5copy/testh5copy.sh =========
+  TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -v -s grp_dsets  -d grp_rename
+  TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -v -s grp_dsets  -d /grp_rename/grp_dsets
+  TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -vp -s /grp_dsets -d /E/F/grp_dsets
+  TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -vp -s /grp_nested -d /G/H/grp_nested
+  H5LSTEST $FILEOUT
+  ======== Change to ===============================
+  echo SKIP TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -v -s grp_dsets  -d grp_rename
+  echo SKIP TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -v -s grp_dsets  -d /grp_rename/grp_dsets
+  echo SKIP TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -vp -s /grp_dsets -d /E/F/grp_dsets
+  echo SKIP TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -vp -s /grp_nested -d /G/H/grp_nested
+  echo SKIP H5LSTEST $FILEOUT
+  ==================================================
+  AKC - 2008/11/10
+
+* For Red Storm, a Cray XT3 system, the yod command sometimes gives the
+  message,  "yod allocation delayed for node recovery".  This interferes with
+  test suites that do not expect to see this message.  See the section of "Red
+  Storm" in file INSTALL_parallel for a way to deal with this problem.
+  AKC - 2008/05/28
+
+* On an Intel 64 Linux cluster (RH 4, Linux 2.6.9) with Intel 10.0 compilers, 
+  use -mp -O1 compilation flags to build the libraries. A higher level of 
+  optimization causes failures in several HDF5 library tests. 
+
+* On mpich 1.2.5 and 1.2.6, if more than two processes contribute no IO and 
+  the application asks to do collective IO, we have found that when using 4 
+  processors, a simple collective write will sometimes be hung. This can be 
+  verified with t_mpi test under testpar.
+
+* A dataset created or rewritten with a v1.6.3 library or after cannot be read 
+  with the v1.6.2 library or before when the Fletcher32 EDC filter is enabled.
+  There was a bug in the calculation of the Fletcher32 checksum in the 
+  library before v1.6.3; the checksum value was not consistent between big-
+  endian and little-endian systems.  This bug was fixed in Release 1.6.3.  
+  However, after fixing the bug, the checksum value was no longer the same as 
+  before on little-endian system.  Library releases after 1.6.4 can still read 
+  datasets created or rewritten with an HDF5 library of v1.6.2 or before.  
+  SLU - 2005/6/30
+
+* On IBM AIX systems, parallel HDF5 mode will fail some tests with error
+  messages like "INFO: 0031-XXX ...".  This is from the command `poe'.
+  Set the environment variable MP_INFOLEVEL to 0 to minimize the messages
+  and run the tests again.
+
+  The tests may fail with messages like "The socket name is already in use",  
+  but HDF5 does not use sockets.  This failure is due to problems with the 
+  poe command trying to set up the debug socket.  To resolve this problem, 
+  check to see whether there are many old /tmp/s.pedb.* files staying around.  
+  These are sockets used by the poe command and left behind due to failed 
+  commands.  First, ask your system administrator to clean them out.  
+  Lastly, request IBM to provide a means to run poe without the debug socket.
+
+* The --enable-static-exec configure flag will only statically link libraries
+  if the static version of that library is present. If only the shared version
+  of a library exists (i.e., most system libraries on Solaris, AIX, and Mac,
+  for example, only have shared versions), the flag should still result in a 
+  successful compilation, but note that the installed executables will not be 
+  fully static. Thus, the only guarantee on these systems is that the 
+  executable is statically linked with just the HDF5 library.
+
+* There is also a configure error on Altix machines that incorrectly reports 
+  when a version of Szip without an encoder is being used.
+
+* On cobalt, an SGI Altix SMP ia64 system, Intel compiler version 10.1 (which
+  is the default on that system) does not work properly and results in
+  failures during make check (in a static build) and make installcheck (during
+  a shared build). This appears to be a compiler optimization problem.
+  Reducing optimization by setting CFLAGS to -O1 or below resolves the issue.
+  Alternatively, using a newer version of the compiler (11.0) also works as
+  intended. MAM - 2010/06/01
+
+* h5diff will not report enum value differences when one or both of the values
+  is not a valid enumeration value.  The source of this bug has been identified
+  and it will be fixed in 1.8.8. DER - 2011/04/27
+
+
 %%%%1.8.6%%%%   
 
 
diff --git a/release_docs/INSTALL_Cygwin.txt b/release_docs/INSTALL_Cygwin.txt
index 8416dfc..5406820 100644
--- a/release_docs/INSTALL_Cygwin.txt
+++ b/release_docs/INSTALL_Cygwin.txt
@@ -181,7 +181,7 @@ Install HDF5 on Cygwin
        example, if users want to configure HDF5 C/C++/Fortran 
        library with szip library enabled, with zlib library at 
        /cygdrive/c/usr/, and install HDF5 into directory 
-       /cygdrive/c/hdf5 using gcc/g++ as C/C++ compiler and g95
+       /cygdrive/c/hdf5 using gcc/g++ as C/C++ compiler and gfortran
        as fortran compiler
      
            $ ./configure
diff --git a/release_docs/INSTALL_MinGW.txt b/release_docs/INSTALL_MinGW.txt
index 3007099..85bf3e0 100644
--- a/release_docs/INSTALL_MinGW.txt
+++ b/release_docs/INSTALL_MinGW.txt
@@ -1,263 +1,263 @@
-************************************************************************
-         HDF5 Build and Install Instructions for MinGW
-************************************************************************
-
-NOTE:
-We are no longer actively supporting MinGW as of 1.8.5. 
-Below are the instructions from the 1.8.4 release.
-
-************************************************************************
-************************************************************************
-************************************************************************
-
-Preconditions:
---------------
-
-1. Installed MinGW (5.1.6 or higher) and MSYS (1.0.11 or higher)
-
-   To install the MinGW net release, go to http://www.mingw.org and 
-   follow the instructions for a manual installation.
-
-2. Compilers Installed
-
-   2.1 C/C++ Compilers HDF5-1.8.4 Supported
-
-       gcc-4.4.0 is included in MinGW, which includes: 
-       gcc    : GNU C compiler
-       gcc-g++: GNU C++ compiler
-       gfortran: GNU Fortran compiler
-
-   2.2 Using Compilers Not Supported
-       
-       The compilers in 2.1 are supported and tested by The HDF 
-       Group. Any other compilers may still work but they are not 
-       guaranteed by HDF group.
-
-       If users want to use other compilers except those in 2.1,
-       try to set the following variables to override the default 
-       choices.
-       
-       CC  : C compiler command
-       CXX : C++ compiler command
-       FC  : Fortran compiler command
-       
-3. HDF5 Dependencies
-
-   3.1 Zlib
-
-       zlib-1.2.2 or later is supported and tested on MinGW.
-
-   3.2 Szip
-       The HDF5 library has a predefined compression filter that uses
-       the extended-Rice lossless compression algorithm for chunked
-       datatsets. For more information about Szip compression and 
-       license terms see 
-       http://hdfgroup.org/HDF5/doc_resource/SZIP/index.html.
-      
-       Szip is currently not supported on MinGW, although we plan to add
-       support in the future.
-
-
-Build HDF5 on MinGW
-----------------------
-
-1. Get HDF5 source code package
-   Users can download HDF5 source code package from HDF website
-   (http://hdfgroup.org). 
-     
-2. Unpacking the distribution
-
-   The HDF5 source code is distributed in a variety of formats which
-   can be unpacked with the following commands, each of which creates 
-   an `hdf5-1.8.4' directory.
-
-   2.1 Non-compressed tar archive (*.tar)
-
-            $ tar xf hdf5-1.8.4.tar
-
-   2.2 Gzip'd tar archive (*.tar.gz)
-
-            $ gunzip < hdf5-1.8.4.tar.gz | tar xf -
-
-   2.3 Bzip'd tar archive (*.tar.bz2)
-
-            $ bunzip2 < hdf5-1.8.4.tar.bz2 | tar xf - 
-            
-3. Setup Environment
-
-   Building HDF5 1.8.4 requires an explicit link to libws2_32.a
-   to handle Windows Sockets.  To do this, issue the command:
-   
-            $ export LIBS=-lws2_32
-            
-   Also, the default search path can cause trouble using ./configure in HDF5
-   1.8.4.  Check that non-MinGW or non-msys directories are not added to the
-   PATH.  You can do this by:
-   
-            $ echo $PATH
-            
-   If there are spurious entries, specifically those related to other Windows
-   compilers or tools, remove them by setting a new PATH without them.  For
-   example,
-   
-            $ export PATH=.:/usr/local/bin:/mingw/bin:/bin
-
-            
-4. Remove Unsupported Source
-
-   There are some projects which are built by default to test performance on
-   POSIX systems.  They are irrelevent on MinGW, and can cause compiler errors.
-   
-   To remove these projects from the build script, open ./perform/Makefile.in
-   Find all instances of "h5perf_serial", and remove them (along with their
-   respective extension or targets, if they exist).  Then save the file.
-   
-   
-5. Remove Tests
-   
-   When building with MinGW, many tests must be removed from the
-   test suite run with "make check".  This is because of the way
-   MinGW and Windows handles certain parsing.  For example, MinGW
-   treats any command parameter starting with '/' as a path, and
-   replaces it with it's root directory on Windows, such as
-   'C:\msys\1.0\'.
-   
-   To remove the tests, open the given 'Makefile.in' and edit the
-   line begining with "TEST_SCRIPT = " to remove the test script.
-   For example, to remove the "testerror.sh" from ./test/Makefile.in:
-   
-        1) Open ./test/Makefile.in
-        
-        2) Find the line "TEST_SCRIPT = $(top_srcdir)/test/testerror.sh"
-        
-        3) Change it to simply read "TEST_SCRIPT =", and save.
-        
-   Do this for the following Makefiles and tests:
-   
-        - ./test/Makefile.in: "testerror.sh testlibinfo.sh testcheckinfo.sh"
-        
-        - ./tools/h5diff/Makefile.in: "testh5diff.sh"
-        
-        - ./tools/h5ls/Makefile.in: "testh5ls.sh"
-        
-        - ./tools/misc/Makefile.in: "testh5mkgrp.sh"
-        
-        - ./tools/h5copy/Makefile.in: "testh5copy.sh"
-        
-        - ./tools/h5stat/Makefile.in: "testh5stat.sh"
-        
-        - ./tools/h5dump/Makefile.in: "testh5dump.sh" and "testh5dumpxml.sh"
-        
-        
-6. Configuring 
-     
-   Notes: 
-       1) Note: MinGW is c++ package is missing the libstdc++.dll.a file
-          and c++ linking fails. Do not enable c++ option in configure.
-       
-       2) See detailed information in hdf5/release_docs/INSTALL, 
-          part 5. Full installation instructions for source 
-          distributions
-     
-   In short,
-     
-   To configure HDF5 with C Library, use 
-            
-            $ ./configure
-                   
-   If you would like to build the C++ library, add the parameter:
-
-            --enable-cxx (12-11-2009 MinGW C++ package is missing a file)
-                                                         
-   If you would like to build without the Zlib library, add the parameter:
-     
-           --without-zlib
-           
-   If you would like to specify the the Zlib library, there are two ways:
-     
-     Using
-
-           --with-zlib=INCDIR,LIBDIR
-
-       For example, if the zlib library is installed in
-       /usr, which is the parent directory of directories
-       "include" and "lib", 
-
-           --with-zlib=/usr/include,/usr/lib
-
-     Through the CPPFLAGS and LDFLAGS Variables
-           
-       For example, if zlib was installed in the directory 
-       /c/usr then using the following command to configure 
-       HDF5 with zib
-
-           $ export CPPFLAGS=-I/usr/include
-           $ export LDFLAGS=-L/usr/lib
-
-   If you would like to specify the install directory, add the parameter:
-
-            --prefix="path for installation"
-                 
-       By default, HDF5 library, header files, examples, and 
-       support programs will be installed in /usr/local/lib,
-       /usr/local/include, /usr/local/doc/hdf5/examples, and
-       /usr/local/bin. To use a path other than /usr/local specify 
-       the path with the `--prefix=PATH' switch as in the above
-       command.
-
-   Combination of Switches 
-
-       All of the above switches can be combined together. For 
-       example, if users want to configure HDF5 C/Fortran
-       library, with zlib library at /c/usr/, and 
-       install HDF5 into directory /c/hdf5 using 
-       gcc/gfortran as C/Fortran compiler:
-     
-           $ ./configure
-             --with-zlib=/usr/include,/usr/lib
-             --prefix=/c/hdf5
-             --enable-fortran
-             <"If no more switches, then hit Enter">
-
-       Notes: The command format above is for readilibity. In practice,
-              please type in the command above with at least one
-              space between each line, No "Enter" until users finish 
-              the switches and want to run the configure. 
-
- 
-     or do it through CPPFLAGS and LDFLAGS variables:
-     
-           $ CPPFLAGS=-I/usr/include \
-           $ LDFLAGS=-L/usr/lib \
-
-           $ ./configure
-             --prefix=/c/hdf5
-             --enable-fortran
-             <"If no more switches, then hit Enter">
-                          
-7. Make and Make Check
-
-   After configuration is done successfully, run the following series of
-   commands to build, test and install HDF5
-    
-            $ make          > "output file name"
-            $ make check    > "output file name"
-            
-   Before run "make install", check output file for "make check", there
-   should be no failures at all.
-
-8. Make Install
-
-            $ make install  > "output file name"
-   
-     
-9. Check installed HDF5 library
-
-   After step 8, go to your installation directory, there should be 
-   three subdirectories: "bin" "include" and "lib".
-
-            $ make installcheck  > "output file name"
-
------------------------------------------------------------------------
-
-Need Further assistance, email help at hdfgroup.org
+************************************************************************
+         HDF5 Build and Install Instructions for MinGW
+************************************************************************
+
+NOTE:
+We are no longer actively supporting MinGW as of 1.8.5. 
+Below are the instructions from the 1.8.4 release.
+
+************************************************************************
+************************************************************************
+************************************************************************
+
+Preconditions:
+--------------
+
+1. Installed MinGW (5.1.6 or higher) and MSYS (1.0.11 or higher)
+
+   To install the MinGW net release, go to http://www.mingw.org and 
+   follow the instructions for a manual installation.
+
+2. Compilers Installed
+
+   2.1 C/C++ Compilers HDF5-1.8.4 Supported
+
+       gcc-4.4.0 is included in MinGW, which includes: 
+       gcc    : GNU C compiler
+       gcc-g++: GNU C++ compiler
+       gfortran: GNU Fortran compiler
+
+   2.2 Using Compilers Not Supported
+       
+       The compilers in 2.1 are supported and tested by The HDF 
+       Group. Any other compilers may still work but they are not 
+       guaranteed by HDF group.
+
+       If users want to use other compilers except those in 2.1,
+       try to set the following variables to override the default 
+       choices.
+       
+       CC  : C compiler command
+       CXX : C++ compiler command
+       FC  : Fortran compiler command
+       
+3. HDF5 Dependencies
+
+   3.1 Zlib
+
+       zlib-1.2.2 or later is supported and tested on MinGW.
+
+   3.2 Szip
+       The HDF5 library has a predefined compression filter that uses
+       the extended-Rice lossless compression algorithm for chunked
+       datatsets. For more information about Szip compression and 
+       license terms see 
+       http://hdfgroup.org/HDF5/doc_resource/SZIP/index.html.
+      
+       Szip is currently not supported on MinGW, although we plan to add
+       support in the future.
+
+
+Build HDF5 on MinGW
+----------------------
+
+1. Get HDF5 source code package
+   Users can download HDF5 source code package from HDF website
+   (http://hdfgroup.org). 
+     
+2. Unpacking the distribution
+
+   The HDF5 source code is distributed in a variety of formats which
+   can be unpacked with the following commands, each of which creates 
+   an `hdf5-1.8.4' directory.
+
+   2.1 Non-compressed tar archive (*.tar)
+
+            $ tar xf hdf5-1.8.4.tar
+
+   2.2 Gzip'd tar archive (*.tar.gz)
+
+            $ gunzip < hdf5-1.8.4.tar.gz | tar xf -
+
+   2.3 Bzip'd tar archive (*.tar.bz2)
+
+            $ bunzip2 < hdf5-1.8.4.tar.bz2 | tar xf - 
+            
+3. Setup Environment
+
+   Building HDF5 1.8.4 requires an explicit link to libws2_32.a
+   to handle Windows Sockets.  To do this, issue the command:
+   
+            $ export LIBS=-lws2_32
+            
+   Also, the default search path can cause trouble using ./configure in HDF5
+   1.8.4.  Check that non-MinGW or non-msys directories are not added to the
+   PATH.  You can do this by:
+   
+            $ echo $PATH
+            
+   If there are spurious entries, specifically those related to other Windows
+   compilers or tools, remove them by setting a new PATH without them.  For
+   example,
+   
+            $ export PATH=.:/usr/local/bin:/mingw/bin:/bin
+
+            
+4. Remove Unsupported Source
+
+   There are some projects which are built by default to test performance on
+   POSIX systems.  They are irrelevent on MinGW, and can cause compiler errors.
+   
+   To remove these projects from the build script, open ./perform/Makefile.in
+   Find all instances of "h5perf_serial", and remove them (along with their
+   respective extension or targets, if they exist).  Then save the file.
+   
+   
+5. Remove Tests
+   
+   When building with MinGW, many tests must be removed from the
+   test suite run with "make check".  This is because of the way
+   MinGW and Windows handles certain parsing.  For example, MinGW
+   treats any command parameter starting with '/' as a path, and
+   replaces it with it's root directory on Windows, such as
+   'C:\msys\1.0\'.
+   
+   To remove the tests, open the given 'Makefile.in' and edit the
+   line begining with "TEST_SCRIPT = " to remove the test script.
+   For example, to remove the "testerror.sh" from ./test/Makefile.in:
+   
+        1) Open ./test/Makefile.in
+        
+        2) Find the line "TEST_SCRIPT = $(top_srcdir)/test/testerror.sh"
+        
+        3) Change it to simply read "TEST_SCRIPT =", and save.
+        
+   Do this for the following Makefiles and tests:
+   
+        - ./test/Makefile.in: "testerror.sh testlibinfo.sh testcheckinfo.sh"
+        
+        - ./tools/h5diff/Makefile.in: "testh5diff.sh"
+        
+        - ./tools/h5ls/Makefile.in: "testh5ls.sh"
+        
+        - ./tools/misc/Makefile.in: "testh5mkgrp.sh"
+        
+        - ./tools/h5copy/Makefile.in: "testh5copy.sh"
+        
+        - ./tools/h5stat/Makefile.in: "testh5stat.sh"
+        
+        - ./tools/h5dump/Makefile.in: "testh5dump.sh" and "testh5dumpxml.sh"
+        
+        
+6. Configuring 
+     
+   Notes: 
+       1) Note: MinGW is c++ package is missing the libstdc++.dll.a file
+          and c++ linking fails. Do not enable c++ option in configure.
+       
+       2) See detailed information in hdf5/release_docs/INSTALL, 
+          part 5. Full installation instructions for source 
+          distributions
+     
+   In short,
+     
+   To configure HDF5 with C Library, use 
+            
+            $ ./configure
+                   
+   If you would like to build the C++ library, add the parameter:
+
+            --enable-cxx (12-11-2009 MinGW C++ package is missing a file)
+                                                         
+   If you would like to build without the Zlib library, add the parameter:
+     
+           --without-zlib
+           
+   If you would like to specify the the Zlib library, there are two ways:
+     
+     Using
+
+           --with-zlib=INCDIR,LIBDIR
+
+       For example, if the zlib library is installed in
+       /usr, which is the parent directory of directories
+       "include" and "lib", 
+
+           --with-zlib=/usr/include,/usr/lib
+
+     Through the CPPFLAGS and LDFLAGS Variables
+           
+       For example, if zlib was installed in the directory 
+       /c/usr then using the following command to configure 
+       HDF5 with zib
+
+           $ export CPPFLAGS=-I/usr/include
+           $ export LDFLAGS=-L/usr/lib
+
+   If you would like to specify the install directory, add the parameter:
+
+            --prefix="path for installation"
+                 
+       By default, HDF5 library, header files, examples, and 
+       support programs will be installed in /usr/local/lib,
+       /usr/local/include, /usr/local/doc/hdf5/examples, and
+       /usr/local/bin. To use a path other than /usr/local specify 
+       the path with the `--prefix=PATH' switch as in the above
+       command.
+
+   Combination of Switches 
+
+       All of the above switches can be combined together. For 
+       example, if users want to configure HDF5 C/Fortran
+       library, with zlib library at /c/usr/, and 
+       install HDF5 into directory /c/hdf5 using 
+       gcc/gfortran as C/Fortran compiler:
+     
+           $ ./configure
+             --with-zlib=/usr/include,/usr/lib
+             --prefix=/c/hdf5
+             --enable-fortran
+             <"If no more switches, then hit Enter">
+
+       Notes: The command format above is for readilibity. In practice,
+              please type in the command above with at least one
+              space between each line, No "Enter" until users finish 
+              the switches and want to run the configure. 
+
+ 
+     or do it through CPPFLAGS and LDFLAGS variables:
+     
+           $ CPPFLAGS=-I/usr/include \
+           $ LDFLAGS=-L/usr/lib \
+
+           $ ./configure
+             --prefix=/c/hdf5
+             --enable-fortran
+             <"If no more switches, then hit Enter">
+                          
+7. Make and Make Check
+
+   After configuration is done successfully, run the following series of
+   commands to build, test and install HDF5
+    
+            $ make          > "output file name"
+            $ make check    > "output file name"
+            
+   Before run "make install", check output file for "make check", there
+   should be no failures at all.
+
+8. Make Install
+
+            $ make install  > "output file name"
+   
+     
+9. Check installed HDF5 library
+
+   After step 8, go to your installation directory, there should be 
+   three subdirectories: "bin" "include" and "lib".
+
+            $ make installcheck  > "output file name"
+
+-----------------------------------------------------------------------
+
+Need Further assistance, email help at hdfgroup.org
diff --git a/release_docs/INSTALL_VMS.txt b/release_docs/INSTALL_VMS.txt
index 4467457..013bd6a 100644
--- a/release_docs/INSTALL_VMS.txt
+++ b/release_docs/INSTALL_VMS.txt
@@ -1,6 +1,6 @@
 		Building and installation instructions for Alpha Open VMS
-                              HDF5 1.8.7 release
-                                  9 May 2011
+                              HDF5 1.8.6 release
+                                  18 February 2011
    
 
 
diff --git a/release_docs/INSTALL_Windows.txt b/release_docs/INSTALL_Windows.txt
index c54bd02..4694611 100644
--- a/release_docs/INSTALL_Windows.txt
+++ b/release_docs/INSTALL_Windows.txt
@@ -69,6 +69,9 @@ Preconditions:
       Note: We have attempted to mirror our Autoconf configuration files for
             maintainence reasons. We will maintain the current VS2008 project
             files for the 1.8 product.
+            Also, if you are using a VS Express version or do not want to enable
+            the packaging components, set HDF5_NO_PACKAGES to ON (on the command
+            line add -DHDF5_NO_PACKAGES:BOOL=ON)
       Warning: The instructions in this file are not compatible with CMake.
             Follow the instructions in CMake.txt, dot not use any files from
             the WINDOWS subfolder.
@@ -164,6 +167,16 @@ Preconditions:
           
       9.4 If building Fortran libraries, you will also need to setup the path
           for the Intel Fortran compiler.  Please see Section VI.
+          
+      NOTE:
+          If you are using VS2010, the path settings will need to be in project
+          property sheets per project. Go to "Project" and select "Properties", find 
+          "Configuration Properties", and then "VC++ Directories".
+          
+          9.1 If you are building on 64-bit Windows, find the "Platform" dropdown
+              and select "x64".
+          9.2 Add the header path to the "Include Directories" setting.
+          9.3 Add the library path to the "Library Directories" setting.
 
 Notes:
 
diff --git a/release_docs/INSTALL_Windows_From_Command_Line.txt b/release_docs/INSTALL_Windows_From_Command_Line.txt
old mode 100755
new mode 100644
diff --git a/release_docs/INSTALL_Windows_Short_NET.TXT b/release_docs/INSTALL_Windows_Short_NET.TXT
old mode 100755
new mode 100644
diff --git a/release_docs/INSTALL_Windows_Short_VS2005.TXT b/release_docs/INSTALL_Windows_Short_VS2005.TXT
old mode 100755
new mode 100644
diff --git a/release_docs/INSTALL_Windows_Short_VS2008.TXT b/release_docs/INSTALL_Windows_Short_VS2008.TXT
old mode 100755
new mode 100644
index 8ff8866..4ec79ed
--- a/release_docs/INSTALL_Windows_Short_VS2008.TXT
+++ b/release_docs/INSTALL_Windows_Short_VS2008.TXT
@@ -56,9 +56,18 @@ notes in INSTALL_Windows.txt before starting below procedures.
       find your Zlib and Szip library path (for example, c:\zlib125\dll, 
       c:\szip\dll) from the directory list, add the library path 
       (c:\zlib125\dll, c:\szip\dll) to the library directories.            
+          
+      NOTE:
+          If you are using VS2010, the path settings will need to be in project
+          property sheets per project. Go to "Project" and select "Properties", find 
+          "Configuration Properties", and then "VC++ Directories".
+          
+          Add the header path to the "Include Directories" setting.
+          
+          Add the library path to the "Library Directories" setting.
 
 ========================================================================
-          Building HDF5 C/C++ Libraries with Visual Studio 2005
+          Building HDF5 C/C++ Libraries with Visual Studio 2008
 ========================================================================
 
    1. Run batch file copy_hdf.bat
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt
index 0f3522f..d8d44fc 100644
--- a/release_docs/RELEASE.txt
+++ b/release_docs/RELEASE.txt
@@ -1,25 +1,25 @@
-HDF5 version 1.8.7 released on Tue May 10 09:24:44 CDT 2011
+HDF5 version 1.8.8 released on 2011-11-15
 ================================================================================
 
 INTRODUCTION
 ============
 
-This document describes the differences between HDF5-1.8.6 and 
-HDF5 1.8.7, and contains information on the platforms tested and 
-known problems in HDF5-1.8.7. 
+This document describes the differences between HDF5-1.8.7 and 
+HDF5 1.8.8, and contains information on the platforms tested and 
+known problems in HDF5-1.8.8. 
 For more details, see the files HISTORY-1_0-1_8_0_rc3.txt 
 and HISTORY-1_8.txt in the release_docs/ directory of the HDF5 source.
 
-Links to the HDF5 1.8.7 source code, documentation, and additional materials
+Links to the HDF5 1.8.8 source code, documentation, and additional materials
 can be found on the HDF5 web page at:
 
      http://www.hdfgroup.org/products/hdf5/
 
-The HDF5 1.8.7 release can be obtained from:
+The HDF5 1.8.8 release can be obtained from:
 
      http://www.hdfgroup.org/HDF5/release/obtain5.html
 
-User documentation for 1.8.7 can be accessed directly at this location: 
+User documentation for 1.8.8 can be accessed directly at this location: 
 
      http://www.hdfgroup.org/HDF5/doc/
 
@@ -30,8 +30,8 @@ in 1.8.0?" document:
      http://www.hdfgroup.org/HDF5/doc/ADGuide/WhatsNew180.html
 
 All new and modified APIs are listed in detail in the "HDF5 Software Changes 
-from Release to Release" document, in the section "Release 1.8.7 (current 
-release) versus Release 1.8.6":
+from Release to Release" document, in the section "Release 1.8.8 (current 
+release) versus Release 1.8.7":
 
      http://www.hdfgroup.org/HDF5/doc/ADGuide/Changes.html
 
@@ -45,7 +45,7 @@ CONTENTS
 
 - New Features
 - Support for New Platforms, Languages, and Compilers
-- Bug Fixes since HDF5-1.8.6
+- Bug Fixes since HDF5-1.8.7
 - Platforms Tested
 - Supported Configuration Features Summary
 - Known Problems
@@ -56,67 +56,86 @@ New Features
 
     Configuration
     -------------
-    - Configure now generates Makefiles that build in "silent make mode"
-      by default in which compile and link lines are significantly
-      simplified for clarity. To override this and view actual compile and
-      link lines during building, the --disable-silent-rules flag can be used
-      at configure time, or the 'make' command can be followed by V=1, to
-      indicate a "verbose" make. (MAM - 2011/4/14).
-    - Added mpicc and mpif90 as the default C and Fortran compilers for Linux
-      systems when --enable-parallel is specified but no $CC or $FC is defined.
-      (AKC - 2011/2/7)
-    - Added a new configure option, "--enable-unsupported", which can
-      be used to stop configure from preventing the use of unsupported
-      configure option combinations, such as c++ in parallel or Fortran
-      with threadsafe. Use at your own risk, as it may result in a 
-      library that won't compile or run as expected!
-      (MAM - 2010/11/17 - Bug 2061)
-
+    - Added the --enable-fortran2003 flag to enable Fortran2003 support 
+      in the HDF5 Fortran library. The flag should be used along with the
+      --enable-fortran flag and takes affect only when the Fortran compiler 
+      is Fortran2003 compliant. (EIP - 2011/11/14)
+    - Added checks for clock_gettime and mach/mach_time.h to both configure and
+      CMake.  This will support the move from gettimeofday to clock_gettime's
+      monotonic timer in the profiling code in a future release.
+      (DER - 2011/10/12)
+    
     Library
     -------
-    - The library allows the dimension size of a dataspace to be zero.  In 
-      the past, the library would allow this only if the maximal dimension 
-      size was unlimited. Now there is no such restriction, but no data 
-      can be written to this kind of dataset. (SLU - 2011/4/20)
-    - We added two new macros, H5_VERSION_GE and H5_VERSION_LE, to let users
-      compare certain version numbers with the library being used. (SLU -
-      2011/4/20) 
-    - Added ability to cache files opened through external links.  Added new
-      public functions H5Pset_elink_file_cache_size(),
-      H5Pget_elink_file_cache_size(), and H5Fclear_elink_file_cache().
-      (NAF - 2011/02/17)
-    - Finished implementing all options for 'log' VFD.  (QAK - 2011/1/25)
-    - Removed all old code for Metrowerks compilers, bracketed by
-      __MWERKS__). Metrowerks compiler is long gone. (AKC - 2010/11/17) 
-
+    - The Windows VFD code has been removed with the exception of the functions
+      which set it (H5Pset_fapl_windows, for example).  Setting the Windows
+      VFD now really sets the SEC2 VFD.  The WINDOWS_MAX_BUF and
+      WINDOWS_USE_STDIO configuration options and #defines have also been
+      removed. NOTE: Since the Windows VFD was a clone of the SEC2 VFD, this
+      change should be transparent to users.
+      (DER - 2011/10/12 - HDFFV-7740, HDFFV-7744)
+    - H5Tcreate now supports the string type (fixed-length and variable-
+      length). (SLU - 2011/05/20)
+ 
     Parallel Library
     ----------------
-    - None
+    - Added new H5Pget_mpio_actual_chunk_opt_mode and
+      H5Pget_mpio_actual_io_mode API routines for querying whether/how
+      a collective I/O operation completed.  (QAK - 2011/10/12)
  
     Tools
     -----
-     - h5diff: Added new "verbose with levels" option, '-vN, --verbose=N'.
-       The old '-v, --verbose' option is deprecated but remains available;
-       it is exactly equivalent to '-v0, --verbose=0'.
-       The new levels 1 ('-v1' or '--verbose=1') and 2 ('-v2' or 
-       '--verbose=2') can be specified to view more information regarding 
-       attributes differences.  Bug #2121 (JKM 2011/3/23)
-     - h5dump: Added new option --enable-error-stack. This option will 
-       display error stack information in the output stream. This is 
-       useful when the "h5dump: Unable to print data" message is output.
-       (ADB - 2011/03/03)
+    - None
 
     High-Level APIs
     ---------------
-    - Fortran LT make datasets routines (H5LTmake_dataset_f, 
-      h5ltmake_dataset_int_f, h5ltmake_dataset_float_f, h5ltmake_dataset_double_f) 
-      and LT read datasets routines (h5ltread_dataset_f,h5ltread_dataset_int_f,
-      h5ltread_dataset_float_f, 5ltread_dataset_double_f) can now handle 
-      4-dimensional to 7-dimensional rank datasets. HDFFV-1217 (MSB-2011/4/24/2011)
-
-    F90 API
-    -------
-     - None
+    - Added the following Fortran wrappers for the Dimension Scale APIs:
+        h5dsset_scale_f
+        h5dsattach_scale_f
+        h5dsdetach_scale_f
+        h5dsis_attached_f
+        h5dsis_scale_f
+        h5dsset_label_f
+        h5dsget_label_f
+        h5dsget_scale_name_f
+        h5dsget_num_scales_f
+      (EIP for SB - 2011/10/13 - HDFFV-3797)
+
+    Fortran API
+    -----------
+    - The HDF5 Fortran library was enhanced to support the Fortran 2003 standard.
+      The following features are available when the HDF5 library is configured
+      using the --enable-fortran and --enable-fortran2003 configure flags AND
+      if the Fortran compiler is Fortran 2003 compliant:
+
+      - Subroutines overloaded with the C_PTR derived type:
+          h5pget_f
+          h5pget_fill_value_f
+          h5pinsert_f
+          h5pregister_f
+          h5pset_f
+          h5pset_fill_value_f
+          h5rcreate_f
+          h5rderefrence_f
+          h5rget_name_f
+          h5rget_obj_type_f
+      - Subroutines overloaded with the C_PTR derived type 
+        and simplified signatures: 
+          h5aread_f
+          h5awrite_f
+          h5dread_f
+          h5dwrite_f
+      - New subroutines
+          h5dvlen_reclaim_f
+          h5literate_by_name_f
+          h5literate_f
+          h5ovisit_f
+          h5tconvert_f
+          h5pset_nbit_f
+          h5pset_scaleoffset_f
+      - Subroutines with additional optional parameters:
+          h5pcreate_class_f
+      (EIP - 2011/10/14)
 
     C++ API
     -------
@@ -125,116 +144,169 @@ New Features
 
 Support for New Platforms, Languages, and Compilers
 ===================================================
-    - Intel V11.1 uses now -O3 optimization in production mode (EIP - 2010/10/08)
-             
-
+    - None
 
-Bug Fixes since HDF5-1.8.6
+Bug Fixes since HDF5-1.8.7
 ==========================
 
     Configuration
     -------------
-    - Shared C++ and HL libraries on AIX should now be working correctly.
-      Note that Fortran shared libraries are still not working on AIX. 
-      (See the Known Problems section, below). (MAM - 2011/4/20)
-    - Removed config/ibm-aix6.x. All IBM-AIX settings are in one file,
-      ibm-aix. (AKC - 2011/4/14)
-    - Shared C libraries are no longer disabled on Mac when Fortran
-      is enabled. Shared Fortran libraries are still not supported on Mac,
-      so configure will disable them by default, but this is overrideable
-      with the new --enable-unsupported configure option. The configure
-      summary has been updated to reflect the fact that the shared-ness of 
-      the C++/Fortran wrapper libraries may not align with the C library.
-      (MAM - 2011/04/11 - HDFFV-4353).
+    - Changed the size of H5_SIZEOF_OFF_T to 4 bytes (was 8) in the VMS
+      h5pubconf.h based on the output of a test program.  (DER - 2011/10/12)
+    - The Windows and VMS versions of H5pubconf.h were brought into sync with
+      the linux/posix version. (DER - 2011/10/12)
+    - Fixed a bug in the bin/trace Perl script where API functions
+      that take a variable number of arguments were not processed for
+      trace statement fixup. (DER - 2011/08/25)
+    - The --enable-h5dump-packed-bits configure option has been removed.
+      The h5dump code that this option conditionally enabled is now always
+      compiled into h5dump. Please refer to the h5dump reference manual for 
+      usage of the packed bits feature. (MAM - 2011/06/23 - HDFFV-7592)
+    - Configure now uses the same flags and symbols in its tests that are
+      used to build the library. (DER - 2011/05/24)
 
     Library
     -------
-    - Changed assertion failure when decoding a compound datatype with no
-      fields into a normal error failure.  Also prohibit using this sort
-      of datatype for creating an attribute (as is already the case for
-      datasets and committed (named) datatypes).  (QAK - 2011/04/15, Jira 
-      issue #HDFFV-2766)
-    - Tell the VFL flush call that the file will be closing, allowing
-      the VFDs to avoid sync'ing the file (particularly valuable in parallel).
-      (QAK - 2011/03/09)
-    - The datatype handler created with H5Tencode/decode used to have the 
-      reference count 0 (zero); it now has the reference count 1 (one).
-      (SLU - 2011/2/18)
-    - Fixed the definition of H5_HAVE_GETTIMEOFDAY on Windows so that
-      HDgettimeofday() is defined and works properly.  Bug HDFFV-5931
-      (DER - 2011/04/14)
-    - Added basic VFD tests for the Windows, STDIO and log VFD tests.
-      (DER - 2011/04/11)
+    - Corrected the error when copying attributes between files which are using
+      different versions of the file format. (QAK - 2011/10/20 - HDFFV-7718)
+    - Corrected the error when loading local heaps from the file, which could
+      cause the size of the local heap's data block to increase dramatically.
+      (QAK - 2011/10/14 - HDFFV-7767)
+    - An application does not need to do H5O_move_msgs_forward() when writing
+      attributes. Tests were checked into the performance suite.
+      (VC - 2011/10/13 - HDFFV-7640)
+    - Fixed a bug that occurred when using H5Ocopy on a committed datatype
+      containing an attribute using that committed datatype.
+      (NAF - 2011/10/13 - HDFFV-5854)
+    - Added generic VFD I/O types to the SEC2 and log VFDs to ensure correct
+      I/O sizes (and remove compiler warnings) between Windows and true POSIX
+      systems.  (DER - 2011/10/12)
+    - Corrected some Windows behavior in the SEC2 and log VFDs.  This mainly
+      involved datatype correctness fixes, Windows API call error checks, 
+      and adding the volume serial number to the VFD cmp functions.
+      (DER - 2011/10/12)
+    - Converted post-checks for the appropriate POSIX I/O sizes to pre-checks 
+      in order to avoid platform-specific or undefined behavior.  
+      (DER - 2011/10/12)
+    - #ifdef _WIN32 instances have been changed to #ifdef H5_HAVE_WIN32_API. 
+      H5_HAVE_VISUAL_STUDIO checks have been added where necessary. This is in 
+      CMake only as configure never sets _WIN32. (ADB - 2011/09/12)
+    - CLANG compiler with the options -fcatch-undefined-behavior and -ftrapv
+      discovered 3 problems in tests and tools' library:
+        1. In dsets.c, left shifting an unsigned int for 32 bits or more
+           caused undefined behavior.
+        2. In dt_arith.c, the INIT_INTEGER macro definition has an overflow
+           when the value is a negative minimal and is being subtracted from one.
+        3. In tools/lib/h5tools_str.c, right shifting an int value for 32 bits 
+           or more caused undefined behavior.
+      All the problems have been corrected. (SLU - 2011/09/02 - HDFFV-7674)
+    - H5Epush2() now has the correct trace functionality (this is related to the
+      bin/trace Perl script bug noted in the configure section).
+      (DER - 2011/08/25)
+    - Corrected mismatched function name typo of h5pget_dxpl_mpio_c and
+      h5pfill_value_defined_c. (AKC - 2011/08/22 - HDFFV-7641)
+    - Corrected an internal error in the library where objects that use committed 
+      (named) datatypes and were accessed from two different file IDs could confuse
+      the two and cause erroneous failures. (QAK - 2011/07/18 - HDFFV-7638)
+    - In v1.6 of the library, there was an EOA for the whole MULTI file saved in the 
+      super block.  We took it out in v1.8 of the library because it's meaningless 
+      for the MULTI file. v1.8 of the library saves the EOA for the metadata file 
+      instead, but this caused a backward compatibility problem.
+      A v1.8 library couldn't open the file created with the v1.6 library. We
+      fixed the problem by checking the EOA value to detect the file
+      created with v1.6 library. (SLU - 2011/06/22) 
+    - When a dataset had filters and reading data failed, the error message 
+      didn't say which filter wasn't registered. It's fixed now. (SLU - 2011/06/03)
 
     Parallel Library
     ----------------
-    - None
+    - The Special Collective IO (IO when some processes do not contribute to the
+      IO) and the Complex Derived Datatype MPI functionalities are no longer
+      conditionally enabled in the library by configure. They are always
+      enabled in order to take advantage of performance boosts from these
+      behaviors. Older MPI implementations that do not allow for these
+      functionalities can no longer by used by HDF5.
+      (MAM - 2011/07/08 - HDFFV-7639).
 
     Tools
     -----
-    - Updated h5dump test case script to prevent entire test failure when 
-      source directory is read-only. Bug #HDFFV-4342 (JKM 2011/4/12)
-    - Fixed h5dump displaying incorrect values for H5T_STD_I8BE type data in
-      attribute on Big-Endian machine. H5T_STD_I8BE is unsigned 8bit type,
-      so h5dump is supposed to display -2 instead of 254. It worked correctly
-      on Little-Endian system , but not on Big-Endian system.  Bug #HDFFV-4358
-      (JKM 04/08/2011)
-    - Updated some HDF5 tools to standardize the option name as 
-      '--enable-error-stack' for printing HDF5 error stack messages. h5ls and 
-      h5dump have been updated. For h5ls, this replaces "-e/--errors" option, 
-      which is deprecated. For h5dump, this is a new option. Bug #2182 
-      (JKM 2011/3/30)
-    - Fixed the h5diff --use-system-epsilon option. The formula used in the 
-      calculation was changed from ( |a - b| / b ) to ( |a - b| ). 
-      This was done to improve performance. Bug #2184 (JKM 2011/3/24)
-    - Fixed output for H5T_REFERENCE in h5dump. According to the BNF document
-      the output of a H5T_REFERENCE should be followed by the type;
-      <reference> ::= H5T_REFERENCE { <ref_type> }
-      <ref_type> ::= H5T_STD_REF_OBJECT | H5T_STD_REF_DSETREG
-      Previously this was only displayed if the -R option was used.
-      Bug #1725 (ADB 2011/3/28)
-    - Fixed two h5diff issues. 1) h5diff compared attributes correctly only 
-      when two objects had the same number of attributes and the attribute 
-      names were identical. 2) h5diff did not display useful information about 
-      attribute differences. Bug #2121 (JKM 2011/3/17)
-    - Fixed a memory leak in h5diff that occurred when accessing symbolic links 
-      with the --follow-symlink option. Bug #2214  (JKM 2011/3/18)
-    - Fixed a memory leak in h5diff that occurred when accessing variable length 
-      string data. Bug #2216 (JKM 2011/3/18)
-    - Fixed and improved the help page for h5ls -a, --address option. 
-      Bug #1904 (JKM 2011/3/11)
-    - Fixed h5copy to enable copying an object into the same HDF5 file.
-      Previously h5copy displayed an error message when the target file 
-      was the same as the source file. (XCAO 2011/3/8)
-    - Fixed an h5dump problem that caused the tool to skip some data elements 
-      in large datasets with a large array datatype on Windows. This issue 
-      arose only on Windows due to the different return behavior of the 
-      _vsnprintf() function.  Bug #2161 (JKM 2011/3/3)
-    - Fixed h5dump which was skipping some array indices in large datasets 
-      with a relatively large array datatype. The interval of skipped indices
-      varied according to the size of the array. Bug #2092 (JKM 2011/2/15)
-    - Fixed h5diff which was segfaulting when comparing compound datasets
-      with a combination of fixed-length string datatypes and variable-length
-      string datatypes in certain orders. Bug #2089 (JKM 2010/12/28)
-    - Improved h5diff performance. 1) Now use HDmemcmp() before comparing two 
-      elements. 2) Replace expensive H5Tequals() calls. 3) Retrieve datatype
-      information at dataset level, not at each element level for compound 
-      datasets. HDFFV-7516 (JKM 2011/4/18) 
-    - Fixed h5ls to display nested compound types with curly brackets 
-      when -S (--simple) option is used with -l (--label), so it shows  
-      which members (in curly brackets) belong to which nested compound type, 
-      making the output clearer.  Bug #1979 (JKM 2010/11/09)
-    - Fixed h5diff to handle variable-length strings in a compound dataset 
-      and variable-length string arrays in a compound dataset correctly.
-      Garbage values were previously displayed when h5diff compared multiple 
-      variable-length strings in a compound type dataset. 
-      Bug #1989 (JKM 2010/10/28)
-    - Fixed h5copy to fail gracefully when copying an object to a non-
-      existing group without the -p option. Bug #2040 (JKM 2010/10/18)
+    - h5diff: fixed segfault over non-comparable attribute with different 
+      dimention or rank, along with '-c' option to display details.
+      (JKM - 2011/10/24 - HDFFV-7770)
+    - Fixed h5diff to display all the comparable objects and attributes 
+      regardless of detecting non-comparables. (JKM - 2011/09/16 - HDFFV-7693)
+    - Fixed h5repack to update the values of references(object and region) of 
+      attributes in h5repack for 1) references, 2) arrays of references, 
+      3) variable-length references, and 4) compound references. 
+      (PC - 2011/09/14 - HDFFV-5932)
+    - h5diff: fixed a segfault over a dataset with container types 
+      array and variable-length (vlen) along with multiple nested compound types. 
+      Example: compound->array->compound, compound->vlen->compound.
+      (JKM - 2011/09/01 - HDFFV-7712)
+    - h5repack: added macro to handle a failure in H5Dread/write when memory
+      allocation failed inside the library. (PC - 2011/08/19)
+    - Fixed h5jam to not to allow the specifying of an HDF5 formatted file as 
+      an input file for the -u (user block file) option. The original HDF5 file 
+      would not be accessible if this behavior was allowed. 
+      (JKM - 2011/08/19 - HDFFV-5941)
+    - Revised the command help pages of h5jam and h5unjam. The descriptions
+      were not up to date and some were missing. 
+      (JKM - 2011/08/15 - HDFFV-7515)
+    - Fixed h5dump to correct the schema location: 
+      <hdf5:HDF5-File 
+      xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" 
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
+      xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File 
+      http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
+      (ADB - 2011/08/10)
+    - h5repack: h5repack failed to copy a dataset if the layout is changed 
+      from chunked with unlimited dimensions to contiguous.
+      (PC - 2011/07/15 - HDFFV-7649)
+    - Fixed h5diff: the "--delta" option considers two NaN of the same type 
+      are different. This is wrong based on the h5diff description in the 
+      Reference Manual. (PC - 2011/07/15 - HDFFV-7656)
+    - Fixed h5diff to display an instructive error message and exit with
+      an instructive error message when mutually exclusive options 
+      (-d, -p and --use-system-epsilon) are used together. 
+      (JKM - 2011/07/07 - HDFFV-7600)
+    - Fixed h5dump so that it displays the first line of each element in correct
+      position for multiple dimention array types. Before this fix, 
+      the first line of each element in an array was
+      displayed after the last line of previous element without
+      moving to the next line (+indentation).
+      (JKM - 2011/06/15 - HDFFV-5878)
+    - Fixed h5dump so that it will display the correct value for 
+      H5T_STD_I8LE datasets on the Blue-gene system (ppc64, linux, Big-Endian, 
+      clustering). (AKC & JKM - 2011/05/12 - HDFFV-7594)
+    - Fixed h5diff to compare a file to itself correctly. Previously h5diff
+      reported either the files were different or not compatible in certain 
+      cases even when comparing a file to itself. This fix also improves 
+      performance when comparing the same target objects through verifying 
+      the object and file addresses before comparing the details 
+      in the objects. Examples of details are datasets and attributes. 
+      (XCAO & JKM - 2011/05/06 - HDFFV-5928)
 
     F90 API
-    ------
-    - None
+    -------
+    - Modified the h5open_f and h5close_f subroutines to not to call H5open 
+      and H5close correspondingly. While the H5open call just adds overhead, 
+      the H5close call called by a Fortran application shuts down the HDF5 
+      library. This makes the library inaccessible to the application. 
+      (EIP & SB - 2011/10/13 - HDFFV-915)
+    - Fixed h5tget_tag_f where the length of the C string was used to 
+      repack the C string into the Fortran string. This lead to memory 
+      corruption in the calling program. (SB - 2011/07/26)
+    - Added defined constants:
+        H5T_ORDER_MIXED_F (HDFFV-2767)
+        H5Z_SO_FLOAT_DSCALE_F
+        H5Z_SO_FLOAT_ESCALE_F
+        H5Z_SO_INT_F
+        H5Z_SO_INT_MINBITS_DEFAULT_F
+        H5O_TYPE_UNKNOWN_F
+        H5O_TYPE_GROUP_F
+        H5O_TYPE_DATASET_F
+        H5O_TYPE_NAMED_DATATYPE_F
+        H5O_TYPE_NTYPES_F
 
     C++ API
     ------
@@ -242,29 +314,27 @@ Bug Fixes since HDF5-1.8.6
 
     High-Level APIs:
     ------
-    - None
+    - Fixed the H5LTdtype_to_text function.  It had some memory problems when 
+      dealing with some complicated data types. (SLU - 2011/10/19 - HDFFV-7701)
+    - Fixed H5DSset_label seg faulting when retrieving the length of a 
+      dimension label that was not set. (SB - 2011/08/07 - HDFFV-7673)
+    - Fixed a dimension scale bug where if you create a dimscale, attach two 
+      datasets to it, and then unattach them, you get an error if they are 
+      unattached in order, but no error if you unattach them in reverse order. 
+      (SB - 2011/06/07 - HDFFV-7605)
 
     Fortran High-Level APIs:
     ------
-    -  h5tbmake_table_f: Fixed error in passing an array of characters with different 
-       length field names.
-    -  h5tget_field_info_f: Fixed error with packing the C strings into a Fortran 
-       array of strings. Added optional argument called 'maxlen_out' which returns 
-       the maximum string character length in a field name element.
-       Bug HDFFV-1255 (MSB- 4/17/2011)
-
-
+    - None
 
 
 Platforms Tested
 ================
 The following platforms and compilers have been tested for this release.
 
-    AIX 6.1                       xlc 11.1.0.3
-    (NCSA BP)                     xlC 11.1.0.3
-                                  xlf90 13.1.0.3
-                                  mpcc_r 11.1.0.3
-                                  mpxlf90_r 13.1.0.3
+    AIX 5.3                       xlc 10.1.0.5
+    (NASA G-ADA)                  xlC 10.1.0.5
+                                  xlf90 12.1.0.6
 
     FreeBSD 8.2-STABLE i386       gcc 4.2.1 [FreeBSD] 20070719
     (loyalty)                     g++ 4.2.1 [FreeBSD] 20070719
@@ -278,10 +348,23 @@ The following platforms and compilers have been tested for this release.
                                   g++ 4.6.1 20110422
                                   gfortran 4.6.1 20110422
 
+    IBM Blue Gene/P               bgxlc 9.0.0.9
+    (LLNL uDawn)                  bgxlf90 11.1.0.7
+                                  bgxlC 9.0.0.9
+
+    Linux 2.6.16.60-0.54.5-smp    Intel(R) C, C++, Fortran Compilers
+    x86_64                            Version 11.1 20090630
+    (INL Icestorm)                   
+
+    Linux 2.6.18-194.el5 x86_64   Intel(R) C, C++, Fortran Compilers
+    (INL Fission)                     Version 12.0.2 20110112
+
+    Linux 2.6.18-108chaos x86_64  Intel(R) C, C++, Fortran Compilers
+    (LLNL Aztec)                      Version 11.1 20090630
+
     Linux 2.6.18-194.3.1.el5PAE   gcc (GCC) 4.1.2 and 4.4.2
-    #1 SMP i686 i686 i386         G95 (GCC 4.0.3 (g95 0.93!) Apr 21 2010)
-    (jam)                         GNU Fortran (GCC) 4.1.2 20080704 
-                                      (Red Hat 4.1.2-48) and 4.4.2
+    #1 SMP i686 i686 i386         GNU Fortran (GCC) 4.1.2 20080704
+    (jam)                             (Red Hat 4.1.2-48) and 4.4.2 
                                   PGI C, Fortran, C++ 10.4-0 32-bit
                                   PGI C, Fortran, C++ 10.6-0 32-bit
                                   Intel(R) C Compiler for 32-bit
@@ -290,15 +373,13 @@ The following platforms and compilers have been tested for this release.
                                       applications, Version 11.1
                                   Intel(R) Fortran Compiler for 32-bit
                                       applications, Version 11.1
-                                  Absoft 32-bit Fortran 95 10.0.7
                                   MPICH mpich2-1.3.1 compiled with
                                       gcc 4.1.2 and gfortran 4.1.2
 
-    Linux 2.6.18-194.17.1.el5     gcc 4.1.2 and 4.4.2
-    #1 SMP x86_64 GNU/Linux       G95 (GCC 4.0.3 (g95 0.93!) Apr 21 2010)
-    (amani)                           tested for both 32- and 64-bit binaries
-                                  GNU Fortran (GCC) 4.1.2 20080704
-                                      (Red Hat 4.1.2-46) and 4.4.2
+    Linux 2.6.18-238.12.1.el5     gcc 4.1.2 and 4.4.2
+    #1 SMP x86_64 GNU/Linux       GNU Fortran (GCC) 4.1.2 20080704
+    (koala)                           (Red Hat 4.1.2-46) and 4.4.2
+                                      tested for both 32- and 64-bit binaries
                                   Intel(R) C, C++, Fortran Compilers for 
                                       applications running on Intel(R) 64, 
                                       Version 11.1.
@@ -307,34 +388,30 @@ The following platforms and compilers have been tested for this release.
                                   MPICH mpich2-1.3.1 compiled with
                                       gcc 4.1.2 and gfortran 4.1.2
 
-    SGI ProPack 7 Linux           Intel(R) C++ Version 11.1 20100806
-    2.6.32.24-0.2.1.2230.2.PTF-   Intel(R) Fortran Version 11.1 20100806
-    default #1 SMP                SGI MPT 2.01
-    SGI Altix UV
+    SGI Altix UV                  Intel(R) C, Fortran Compilers
+    SGI ProPack 7 Linux               Version 11.1 20100806
+    2.6.32.24-0.2.1.2230.2.PTF-   SGI MPT 2.02
+    default #1 SMP                
     (NCSA ember)
 
-    SunOS 5.10 32- and 64-bit     Sun C 5.9 Sun OS_sparc Patch 124867-16
-    (linew)                       Sun Fortran 95 8.3 Sun OS_sparc Patch 127000-13
-                                  Sun C++ 5.9 Sun OS_sparc Patch 124863-26
-                                  Sun C 5.10 SunOS_sparc Patch 141861-07
-                                  Sun Fortran 95 8.4 SunOS_sparc Patch 128231-06
-                                  Sun C++ 5.10 SunOS_sparc 128228-11
+    Dell NVIDIA Cluster           Intel(R) C, Fortran Compilers
+    Red Hat Enterprise Linux 6        Version 12.0.4 20110427
+    2.6.32-131.4.1.el6.x86_64     mvapich2 1.7rc1-intel-12.0.4
+    (NCSA forge)
 
-    Intel Xeon Linux 2.6.18-      gcc 4.2.4
-    92.1.10.el5_lustre.1.6.6smp-  Intel(R) C++ Version 10.1.017
-    perfctr #8 SMP                Intel(R) Fortran Compiler Version 10.1.017
-    (NCSA abe)                    Open MPI 1.3.2
-                                  MVAPICH2-1.5.1_pgi-10.8
+    SunOS 5.10 32- and 64-bit     Sun C 5.11 SunOS_sparc 2010/08/13
+                                  Sun Fortran 95 8.5 SunOS_sparc 2010/08/13
+                                  Sun C++ 5.11 SunOS_sparc 2010/08/13
 
     Windows XP                    Visual Studio 2008 w/ Intel Fortran 10.1 (project files)
                                   Visual Studio 2008 w/ Intel Fortran 11.1 (cmake)
                                   Visual Studio 2010 (cmake)
-                                  Cygwin(1.7.7 native gcc(4.3.4) compiler and gfortran)
+                                  Cygwin(1.7.9 native gcc(4.5.3) compiler and gfortran)
 
     Windows XP x64                Visual Studio 2008 w/ Intel Fortran 10.1 (project files)
                                   Visual Studio 2008 w/ Intel Fortran 11.1 (cmake)
                                   Visual Studio 2010 (cmake)
-                                  Cygwin(1.7.7 native gcc(4.3.4) compiler and gfortran)
+                                  Cygwin(1.7.9 native gcc(4.5.3) compiler and gfortran)
 
     Windows Vista                 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake)
 
@@ -344,56 +421,61 @@ The following platforms and compilers have been tested for this release.
 
     Windows 7 x64                 Visual Studio 2008 w/ Intel Fortran 11.1 (cmake)
 
-    Mac OS X 10.7.0 (Intel 64-bit) i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1
-    Darwin Kernel Version 10.7.0  GNU Fortran (GCC) 4.6.0 20101106 (experimental)
-                                  Intel C, C++ and Fortran compilers 12.0.1.122 20101110
+    Mac OS X 10.8.0 (Intel 64-bit) i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
+    Darwin Kernel Version 10.8.0  GNU Fortran (GCC) 4.6.1
+                                  Intel C, C++ and Fortran compilers 12.1.0
 
-    Mac OS X 10.7.0 (Intel 32-bit) i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
-    Darwin Kernel Version 10.7.0  GNU Fortran (GCC) version 4.4.0 20090123 (experimental) 
-							[trunk revision 143587]
+    Mac OS X 10.8.0 (Intel 32-bit) i686-apple-darwin10-gcc-4.2.1 (GCC) 4.2.1 (Apple Inc. build 5666) (dot 3)
+    Darwin Kernel Version 10.8.0  GNU Fortran (GCC) version 4.6.1
+          Intel C, C++ and Fortran compilers 12.1.0
 
     Fedora 12 2.6.32.16-150.fc12.ppc64 #1 SMP ppc64 GNU/Linux
                                   gcc (GCC) 4.4.4 20100630 (Red Hat 4.4.4-10)
                                   GNU Fortran (GCC) 4.4.4 20100630 (Red Hat 4.4.4-10)
 
-    Debian6.01 2.6.32-5-686 #1 SMP i686 GNU/Linux
+    Debian6.0.3 2.6.32-5-686 #1 SMP i686 GNU/Linux
                                   gcc (Debian 4.4.5-8) 4.4.5
                                   GNU Fortran (Debian 4.4.5-8) 4.4.5
 
-    Debian6.01 2.6.32-5-amd64 #1 SMP x86_64 GNU/Linux
+    Debian6.0.3 2.6.32-5-amd64 #1 SMP x86_64 GNU/Linux
                                   gcc (Debian 4.4.5-8) 4.4.5
                                   GNU Fortran (Debian 4.4.5-8) 4.4.5
 
-    Fedora14 2.6.35.12-88.fc14.i686.PAE #1 SMP i686 i686 i386 GNU/Linux
-                                  gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)
-                                  GNU Fortran (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)
+    Fedora15 2.6.40.6-0.fc15.i686.PAE #1 SMP i686 i686 i386 GNU/Linux
+                                  gcc (GCC) 4.6.1 20110908 (Red Hat 4.6.1-9)
+                                  GNU Fortran (GCC) 4.6.1 20110908 (Red Hat 4.6.1-9)
 
-    Fedora14 2.6.35.12-88.fc14.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux
-                                  gcc (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)
-                                  GNU Fortran (GCC) 4.5.1 20100924 (Red Hat 4.5.1-4)
+    Fedora15 2.6.40.6-0.fc15.x86_64 #1 SMP x86_64 x86_64 x86_64 GNU/Linux
+                                  gcc (GCC) 4.6.1 20110908 (Red Hat 4.6.1-9)
+                                  GNU Fortran (GCC) 4.6.1 20110908 (Red Hat 4.6.1-9)
 
-    SUSE 11.4 2.6.37.1-1.2-desktop #1 SMP PREEMPT i686 i686 i386 GNU/Linux
+    SUSE 11.4 2.6.37.6-0.7-desktop #1 SMP PREEMPT i686 i686 i386 GNU/Linux
                                   gcc (SUSE Linux) 4.5.1 20101208
                                   GNU Fortran (SUSE Linux) 4.5.1 20101208
 
-    SUSE 11.4 2.6.37.1-1.2-desktop #1 SMP PREEMPT x86_64 x86_64 x86_64 GNU/Linux
+    SUSE 11.4 2.6.37.6-0.7-desktop #1 SMP PREEMPT x86_64 x86_64 x86_64 GNU/Linux
                                   gcc (SUSE Linux) 4.5.1 20101208
                                   GNU Fortran (SUSE Linux) 4.5.1 20101208
 
-    Ubuntu 10.10 2.6.35-28-generic #50-Ubuntu SMP i686 GNU/Linux
-                                  gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
-                                  GNU Fortran (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
+    Ubuntu 11.10 3.0.0-12-generic #20-Ubuntu SMP i686 GNU/Linux
+                                  gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
+                                  GNU Fortran (Ubuntu/Linaro 4.6.4-9ubuntu3) 4.6.1
 
-    Ubuntu 10.10 2.6.35-28-generic #50-Ubuntu SMP x86_64 GNU/Linux
-                                  gcc (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
-                                  GNU Fortran (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
+    Ubuntu 11.10 3.0.0-12-generic #20-Ubuntu SMP x86_64 GNU/Linux
+                                  gcc (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
+                                  GNU Fortran (Ubuntu/Linaro 4.6.1-9ubuntu3) 4.6.1
     
     OpenVMS Alpha 8.3             HP C V7.3-009
                                   HP Fortran V8.2-104679-48H9K
                                   HP C++ V7.3-009
 
+    Cray Linux Environment (CLE)  PrgEnv-pgi 2.2.74
+    hopper.nersc.gov              pgcc 11.7-0 64-bit target on x86-64 Linux -tp k8e
+    franklin.nersc.gov            pgf90 11.7-0 64-bit target on x86-64 Linux -tp k8e
+                                  pgCC 11.7-0 64-bit target on x86-64 Linux -tp k8e
+
 Tested Configuration Features Summary
-========================================
+=====================================
 
     In the tables below
           y   = tested 
@@ -407,26 +489,28 @@ Tested Configuration Features Summary
 
 Platform                                 C        F90    F90      C++   zlib  SZIP
                                          parallel        parallel
-Solaris2.10 32-bit                         n        y      n        y     y     y
-Solaris2.10 64-bit                         n        y      n        y     y     y
-Windows XP                                 n        y(4)   n        y     y     y
-Windows XP x64                             n        y(4)   n        y     y     y
-Windows Vista                              n        y(4)   n        y     y     y
-Windows Vista x64                          n        y(4)   n        y     y     y
-OpenVMS Alpha                              n        y      n        y     y     n
-Mac OS X 10.7 Intel 32-bit                 n        y      n        y     y     y
-Mac OS X 10.7 Intel 64-bit                 n        y      n        y     y     y
-AIX 6.1 32- and 64-bit                     y        y      y        y     y     y
-FreeBSD 8.2-STABLE 32&64 bit               n        x      n        x     y     y
-CentOS 5.5 Linux 2.6.18-194 i686 GNU (1)W  y        y(2)   y        y     y     y
-CentOS 5.5 Linux 2.6.18-194 i686 Intel  W  n        y      n        y     y     n
-CentOS 5.5 Linux 2.6.18-194 i686 PGI    W  n        y      n        y     y     n
-CentOS 5.5 Linux 2.6.16 x86_64 GNU (1)  W  y        y(3)   y        y     y     y
-CentOS 5.5 Linux 2.6.16 x86_64 Intel    W  n        y      n        y     y     n
-CentOS 5.5 Linux 2.6.16 x86_64 PGI      W  n        y      n        y     y     y
-RedHat EL4 2.6.18 Xeon Lustre           C  y        y      y        y     y     n
-Fedora 12 Linux 2.6.32.16-150.fc12.ppc64   n        y      n        y     y     y
-SGI Linux 2.6.32.19                        y        y      y        y     y     y
+Solaris2.10 32-bit                         n        y      n        y     y    y
+Solaris2.10 64-bit                         n        y      n        y     y    y
+Windows XP                                 n        y(4)   n        y     y    y
+Windows XP x64                             n        y(4)   n        y     y    y
+Windows Vista                              n        y(4)   n        y     y    y
+Windows Vista x64                          n        y(4)   n        y     y    y
+OpenVMS Alpha                              n        y      n        y     y    n
+Mac OS X 10.8 Intel 32-bit                 n        y      n        y     y    y
+Mac OS X 10.8 Intel 64-bit                 n        y      n        y     y    y
+AIX 5.3 32- and 64-bit                     n        y      n        y     y    y
+FreeBSD 8.2-STABLE 32&64 bit               n        x      n        x     y    y
+CentOS 5.5 Linux 2.6.18-194 i686 GNU (1)W  y        y(2)   y        y     y    y
+CentOS 5.5 Linux 2.6.18-194 i686 Intel  W  n        y      n        y     y    n
+CentOS 5.5 Linux 2.6.18-194 i686 PGI    W  n        y      n        y     y    n
+CentOS 5.5 Linux 2.6.16 x86_64 GNU (1)  W  y        y(3)   y        y     y    y
+CentOS 5.5 Linux 2.6.16 x86_64 Intel    W  n        y      n        y     y    n
+CentOS 5.5 Linux 2.6.16 x86_64 PGI      W  n        y      n        y     y    y
+Fedora 12 Linux 2.6.32.16-150.fc12.ppc64   n        y      n        y     y    y
+SGI ProPack 7 Linux 2.6.32.24              y        y      y        y     y    y
+Red Hat Enterprise Linux 6                 y        y      y        y     y    y
+CLE hopper.nersc.gov                       y        y(3)   y        y     y    n  
+CLE franklin.nersc.gov                     y        y(3)   y        y     y    n  
 
 
 Platform                                 Shared  Shared    Shared    Thread-  
@@ -438,9 +522,9 @@ Windows XP x64                             y       y(4)      y         n
 Windows Vista                              y       y(4)      y         y
 Windows Vista x64                          y       y(4)      y         y
 OpenVMS Alpha                              n       n         n         n
-Mac OS X 10.7 Intel 32-bit                 y(5)    n         y         n        
-Mac OS X 10.7 Intel 64-bit                 y(5)    n         y         n        
-AIX 6.1 32- and 64-bit                     n       n         n         y        
+Mac OS X 10.8 Intel 32-bit                 y(5)    n         y         n        
+Mac OS X 10.8 Intel 64-bit                 y(5)    n         y         n        
+AIX 5.3 32- and 64-bit                     n       n         n         y        
 FreeBSD 8.2-STABLE 32&64 bit               y       x         x         y        
 CentOS 5.5 Linux 2.6.18-128 i686 GNU (1)W  y       y(2)      y         y        
 CentOS 5.5 Linux 2.6.18-128 i686 Intel  W  y       y         y         n        
@@ -448,9 +532,11 @@ CentOS 5.5 Linux 2.6.18-128 i686 PGI    W  y       y         y         n
 CentOS 5.5 Linux 2.6.16 x86_64 GNU (1)  W  y       y         y         y        
 CentOS 5.5 Linux 2.6.16 x86_64 Intel    W  y       y         y         n        
 CentOS 5.5 Linux 2.6.16 x86_64 PGI      W  y       y         y         n        
-RedHat EL4 2.6.18 Xeon Lustre           C  y       y         y         n
 Fedora 12 Linux 2.6.32.16-150.fc12.ppc64   y       y         y         y 
-SGI Linux 2.6.32.19                        y       y         y         y 
+SGI ProPack 7 Linux 2.6.32.24              y       y         y         n 
+Red Hat Enterprise Linux 6                 y       y         y         n
+CLE hopper.nersc.gov                       n       n         n         n
+CLE franklin.nersc.gov                     n       n         n         n
 
            (1) Fortran compiled with gfortran.
            (2) With PGI and Absoft compilers.
@@ -463,13 +549,30 @@ SGI Linux 2.6.32.19                        y       y         y         y
 
 Known Problems
 ==============
+
+* The STDIO VFD does not work on some architectures, possibly due to 32/64
+  bit or large file issues.  The basic STDIO VFD test is known to fail on
+  64-bit SunOS 5.10 on SPARC when built with -m64 and 32-bit OS X/Darwin
+  10.7.0.  The STDIO VFD test has been disabled while we investigate and
+  a fix should appear in a future release, possibly 1.8.9.
+  (DER - 2011/10/14)
+
+* h5diff can report inconsistent results when comparing datasets of enum type
+  that contain invalid values.  This is due to how enum types are handled in
+  the library and will be addressed in the next release.
+  (DER - 2011/10/14 - HDFFV-7527)
+
+* The links test can fail under the stdio VFD due to some issues with external
+  links.  This will be investigated and fixed in a future release.
+  (DER - 2011/10/14 - HDFFV-7768)
+
 * After the shared library support was fixed for some bugs, it was discovered
   that "make prefix=XXX install" no longer works for shared libraries. It
   still works correctly for static libraries. Therefore, if you want to
   install the HDF5 shared libraries in a location such as /usr/local/hdf5,
   you need to specify the location via the --prefix option during configure 
   time. E.g, ./configure --prefix=/usr/local/hdf5 ...
-  (AKC - 2011/05/07 HDFFV-7583)
+  (AKC - 2011/05/07 - HDFFV-7583)
 
 * The parallel test, t_shapesame, in testpar/, may run for a long time and may
   be terminated by the alarm signal.  If that happens, one can increase the
@@ -488,13 +591,7 @@ Known Problems
   tests fail. We are looking into the issue. HL and C++ shared libraries
   should now be working as intended, however. (MAM - 2011/04/20)
 
-* The --with-mpe configure option does not work with Mpich2. AKC - 2011/03/10
-
-* If parallel gmake (e.g., gmake -j 4) is used, the "gmake clean" command
-  sometimes fails in the perform directory due to the attempt to remove the
-  executable of h5perf or h5perf_serial by two "parallel" commands. This error
-  has no consequence on the functionality of the HDF5 library or install. It
-  is fixed in the next release. AKC - 2011/01/25
+* The --with-mpe configure option does not work with Mpich2. (AKC - 2011/03/10)
 
 * While working on the 1.8.6 release of HDF5, a bug was discovered that can
   occur when reading from a dataset in parallel shortly after it has been
@@ -507,12 +604,13 @@ Known Problems
   They should be run across multiple nodes with a varying number of processes.
   These programs can be found at:
   http://www.hdfgroup.org/ftp/HDF5/examples/known_problems/
+  (NAF - 2011/01/19)
 
 * The library's test dt_arith.c showed a compiler's rounding problem on
   Cygwin when converting from unsigned long long to long double.  The 
   library's own conversion works fine.  We defined a macro for Cygwin to
-  skip this test until we can solve the problem.  Please see bug #1813.
-  SLU - 2010/5/5 
+  skip this test until we can solve the problem.
+  (SLU - 2010/05/05 - HDFFV-1264)
 
 * All the VFL drivers aren't backward compatible.  In H5FDpublic.h, the
   structure H5FD_class_t changed in 1.8.  There is new parameter added to
@@ -522,21 +620,30 @@ Known Problems
   for 1.6 and try to plug in 1.8 library.  Because there's only one user 
   complaining about it, we (Elena, Quincey, and I) decided to leave it as 
   it is (see bug report #1279).  Quincey will make a plan for 1.10.
-  SLU - 2010/2/2
+  (SLU - 2010/02/02)
 
 * MinGW has a missing libstdc++.dll.a library file and will not successfully link
   C++ applications/tests. Do not use the enable-cxx configure option. Read all of
-  the INSTALL_MINGW.txt file for all restrictions. ADB - 2009/11/11
+  the INSTALL_MINGW.txt file for all restrictions. (ADB - 2009/11/11)
+
+* The --enable-static-exec configure flag will only statically link libraries
+  if the static version of that library is present. If only the shared version
+  of a library exists (i.e., most system libraries on Solaris, AIX, and Mac,
+  for example, only have shared versions), the flag should still result in a 
+  successful compilation, but note that the installed executables will not be 
+  fully static. Thus, the only guarantee on these systems is that the 
+  executable is statically linked with just the HDF5 library.
+  (MAM - 2009/11/04)
   
 * The PathScale MPI implementation, accessing a Panasas file system, would
   cause H5Fcreate() with H5F_ACC_EXCL to fail even when the file does not
   exist. This is due to the MPI_File_open() call failing if the mode has
-  the MPI_MODE_EXCL bit set. (See bug 1468 for details.) AKC - 2009/8/11
+  the MPI_MODE_EXCL bit set. (AKC - 2009/08/11 - HDFFV-988)
  
 * Parallel tests failed with 16 processes with data inconsistency at testphdf5
   / dataset_readAll. Parallel tests also failed with 32 and 64 processes with
   collective abort of all ranks at t_posix_compliant / allwrite_allread_blocks
-  with MPI IO. CMC - 2009/04/28
+  with MPI IO. (CMC - 2009/04/28)
 
 * For Red Storm, a Cray XT3 system, the tools/h5ls/testh5ls.sh and
   tools/h5copy/testh5copy.sh will fail some of its sub-tests. These sub-tests
@@ -566,13 +673,13 @@ Known Problems
   echo SKIP TOOLTEST_FAIL -i $TESTFILE -o $FILEOUT -vp -s /grp_nested -d /G/H/grp_nested
   echo SKIP H5LSTEST $FILEOUT
   ==================================================
-  AKC - 2008/11/10
-
+  (AKC - 2008/11/10)
+  
 * For Red Storm, a Cray XT3 system, the yod command sometimes gives the
   message,  "yod allocation delayed for node recovery".  This interferes with
   test suites that do not expect to see this message.  See the section of "Red
   Storm" in file INSTALL_parallel for a way to deal with this problem.
-  AKC - 2008/05/28
+  (AKC - 2008/05/28)
 
 * On an Intel 64 Linux cluster (RH 4, Linux 2.6.9) with Intel 10.0 compilers, 
   use -mp -O1 compilation flags to build the libraries. A higher level of 
@@ -591,7 +698,7 @@ Known Problems
   However, after fixing the bug, the checksum value was no longer the same as 
   before on little-endian system.  Library releases after 1.6.4 can still read 
   datasets created or rewritten with an HDF5 library of v1.6.2 or before.  
-  SLU - 2005/6/30
+  (SLU - 2005/06/30)
 
 * On IBM AIX systems, parallel HDF5 mode will fail some tests with error
   messages like "INFO: 0031-XXX ...".  This is from the command `poe'.
@@ -605,26 +712,4 @@ Known Problems
   These are sockets used by the poe command and left behind due to failed 
   commands.  First, ask your system administrator to clean them out.  
   Lastly, request IBM to provide a means to run poe without the debug socket.
-
-* The --enable-static-exec configure flag will only statically link libraries
-  if the static version of that library is present. If only the shared version
-  of a library exists (i.e., most system libraries on Solaris, AIX, and Mac,
-  for example, only have shared versions), the flag should still result in a 
-  successful compilation, but note that the installed executables will not be 
-  fully static. Thus, the only guarantee on these systems is that the 
-  executable is statically linked with just the HDF5 library.
-
-* There is also a configure error on Altix machines that incorrectly reports 
-  when a version of Szip without an encoder is being used.
-
-* On cobalt, an SGI Altix SMP ia64 system, Intel compiler version 10.1 (which
-  is the default on that system) does not work properly and results in
-  failures during make check (in a static build) and make installcheck (during
-  a shared build). This appears to be a compiler optimization problem.
-  Reducing optimization by setting CFLAGS to -O1 or below resolves the issue.
-  Alternatively, using a newer version of the compiler (11.0) also works as
-  intended. MAM - 2010/06/01
-
-* h5diff will not report enum value differences when one or both of the values
-  is not a valid enumeration value.  The source of this bug has been identified
-  and it will be fixed in 1.8.8. DER - 2011/04/27
+  (AKC - 2004/12/08)
diff --git a/release_docs/USING_Windows.txt b/release_docs/USING_Windows.txt
index 4e78c68..410a759 100644
--- a/release_docs/USING_Windows.txt
+++ b/release_docs/USING_Windows.txt
@@ -87,7 +87,7 @@ Preconditions:
       Variables" box.
 
       In the New Variable window, set "Variable name" as HDF5_EXT_ZLIB and 
-      "Variable value" as zlib1.lib, then click OK.
+      "Variable value" as zlib.lib, then click OK.
 
       Similarly, you can set:
 
@@ -98,7 +98,7 @@ Preconditions:
          a. You will have to close and reopen running programs for the new 
             environment variable settings to take effect.
 
-         b. c:\zlib\zlib1.dll and c:\szip\dll\szip.dll should be copied 
+         b. c:\zlib\zlib.dll and c:\szip\dll\szip.dll should be copied 
             into a location that the application can find.
 
    9. Set up path for libraries and headers
@@ -123,6 +123,16 @@ Preconditions:
           
       9.4 If building Fortran applications, you will also need to setup the path
           for the Intel Fortran compiler.  Please see Section VI.
+          
+      NOTE:
+          If you are using VS2010, the path settings will need to be in project
+          property sheets per project. Go to "Project" and select "Properties", find 
+          "Configuration Properties", and then "VC++ Directories".
+          
+          9.1 If you are building on 64-bit Windows, find the "Platform" dropdown
+              and select "x64".
+          9.2 Add the header path to the "Include Directories" setting.
+          9.3 Add the library path to the "Library Directories" setting.
 
 Notes:
 
@@ -595,7 +605,7 @@ Building with Visual Studio 2010 is very similar to building with Visual Studio
 with the following considerations:
 
     1. Visual Studio 2010 uses a new format for project files, but Visual Studio
-       2008 project files can be easily converted.  The HDF5 project files
+       2008 project files can be converted.  The HDF5 project files
        will need to be converted on first use.  To do so:
        
        1.1. Open the HDF5 Visual Studio 2008 solution file as in Section II
@@ -610,7 +620,8 @@ with the following considerations:
        1.3. When it is finished, it should state that all projects were
             converted successfully with no errors.  Warnings can be ignored.
             
-    2. Once the project files have been converted, build and test normally.
+    2. Once the project files have been converted you will need to create project 
+       property sheets for the library and include paths. Then build and test normally.
        Note that the converted project files aren't backwards compatible with
        previous versions of Visual Studio.
 
diff --git a/release_docs/Using_CMake.txt b/release_docs/Using_CMake.txt
new file mode 100644
index 0000000..8fc575c
--- /dev/null
+++ b/release_docs/Using_CMake.txt
@@ -0,0 +1,181 @@
+************************************************************************
+* Build and Install HDF5 Examples with CMake                           *
+************************************************************************
+
+Notes: This short instruction is written for users who want to quickly build 
+       HDF5 Examples from the HDF5 source code package using the CMake tools.
+       
+       More information about using CMake can be found at the KitWare site, 
+       www.cmake.org.
+         
+       CMake uses the command line, however the visual CMake tool is 
+       recommended for the configuration step. The steps are similiar for
+       all the operating systems supported by CMake.
+       
+       NOTES:
+         1. Using CMake for building and using HDF5 is under active development. 
+            While we have attempted to provide error-free files, please 
+            understand that development with CMake has not been extensively 
+            tested outside of HDF. The CMake specific files may change
+            before the next release.
+            
+         2. CMake was originally introduced to support development on Windows, 
+            however it should be usable on any system where CMake is supported. 
+            Please send us any comments on how CMake support can be improved on 
+            any system. Visit the KitWare site for more information about CMake.
+            
+         3. Build and test results can be submitted to our CDash server at:
+            cdash.hdfgroup.uiuc.edu. 
+            Please read the HDF and CDash document at:
+            www.hdfgroup.org/CDash/HowToSubmit. 
+            
+
+========================================================================
+                            Preconditions                                                           
+========================================================================                          
+
+   1. We suggest you obtain the latest CMake for windows from the Kitware
+      web site. The HDF5 1.8.x product requires CMake version 2.8.4.                     
+                                                                         
+   2. You have installed the HDF5 library built with CMake. If you are
+      using a Windows platform, you can obtain a pre-built Windows binary
+      from The HDF Group's website at www.hdfgroup.org.
+
+   3. On Windows with Visual Studio, if you have installed the static HDF5
+      library, you will need to add the HDF5\lib folder to the library
+      search list. See the "Using Static Libraries with Visual Studio" section.
+ 
+   4. Set the environment variable HDF5_ROOT to the installed location of HDF5.
+      On Windows HDF5_ROOT=C:\Program Files\HDF Group\HDF5\hdf5-1.8.7
+                                                                         
+========================================================================
+          Building HDF5 Examples with CMake
+========================================================================
+
+   1. Run CMake
+
+      The CMake executable is named "cmake-gui.exe" on Windows and should be
+      available in your Start menu. For Linux, UNIX, and Mac users the
+      executable is named "cmake-gui" and can be found where CMake was 
+      installed. 
+      Specify the source and build directories. It is recommemded that you 
+      choose a build directory different then the source directory 
+      (for example on Windows, if the source is at c:\MyHDFstuff\hdf5, then
+      use c:\MyHDFstuff\hdf5\build or c:\MyHDFstuff\build\hdf5). 
+      
+      OPTIONAL:
+        Users can perform the configuration step without using the visual cmake-gui
+        program. Example configuration step executed within the build directory:
+        
+        cmake -G "<generator>"  [-D<options>]  <sourcepath>
+        
+        Where <generator> is    
+            * Borland Makefiles
+            * MSYS Makefiles
+            * MinGW Makefiles
+            * NMake Makefiles
+            * Unix Makefiles
+            * Visual Studio 10
+            * Visual Studio 10 Win64
+            * Visual Studio 6
+            * Visual Studio 7
+            * Visual Studio 7 .NET 2003
+            * Visual Studio 8 2005
+            * Visual Studio 8 2005 Win64
+            * Visual Studio 9 2008
+            * Visual Studio 9 2008 Win64
+
+        <options> is:
+            * BUILD_TESTING:BOOL=ON
+            * USE_SHARED_LIBS:BOOL=[ON | OFF]
+
+   2. Configure the cache settings
+
+      2.1  Click the Configure button. If this is the first time you are 
+           running cmake-gui in this directory, you will be prompted for the 
+           generator you wish to use (for example on Windows, Visual Studio 9 2008). 
+           CMake will read in the CMakeLists.txt files from the source directory and 
+           display options for the HDF5 project. After the first configure you 
+           can adjust the cache settings and/or specify locations of other programs.
+      
+           Any conflicts or new values will be highlighted by the configure
+           process in red. Once you are happy with all the settings and there are no 
+           more values in red, click the Generate button to produce the appropriate 
+           build files. 
+      
+           On Windows, if you are using a Visual Studio generator, the solution and 
+           project files will be created in the build folder.
+      
+           On linux, if you are using the Unix Makefiles generator, the Makefiles will
+           be created in the build folder.
+
+      2.2  Alternative command line example on Windows in c:\MyHDFstuff\hdf5\build directory:
+      
+           cmake -G "Visual Studio 9 2008" -DBUILD_TESTING:BOOL=ON -DUSE_SHARED_LIBS:BOOL=ON ..
+
+   3. Build HDF5 examples
+   
+      On Windows, you can build HDF5 using either the Visual Studio Environment 
+      or the command line. The command line is used on linux, Unix, and Mac.
+
+      To build from the command line, navigate to your build directory and
+      execute the following;
+          
+              cmake --build . --config {Debug | Release}     
+              
+      NOTE: "--config {Debug | Release}" may be optional on your platform. We
+            recommend choosing either Debug or Release on Windows. If you are
+            using the pre-built binaries from HDF, use Release.                                                                                     
+             
+      3.1  If you wish to use the Visual Studio environment, open the solution 
+           file in your build directory. Be sure to select either Debug or 
+           Release and build the solution.
+             
+   4. Test HDF5 Examples.
+
+      To test the build, navigate to your build directory and execute;
+      
+              ctest . -C {Debug | Release}
+              
+      NOTE: "-C {Debug | Release}" may be optional on your platform. We
+            recommend choosing either Debug or Release to match the build
+            step on Windows.                                                                                      
+
+   6. The files that support building with CMake are all the files in the 
+      config/cmake folder, the CMakeLists.txt files in each source folder, and 
+      CTestConfig.cmake. CTestConfig.cmake is specific to the internal testing 
+      performed by The HDF Group. It should be altered for the users 
+      installation and needs.
+
+   7. More information about using CMake can be found at the KitWare site, 
+      www.cmake.org.
+                         
+                                                                         
+========================================================================
+          Using HDF5 Libraries with Visual Studio 2008
+========================================================================
+
+   8. Set up path for external libraries and headers
+
+      Invoke Microsoft Visual Studio and go to "Tools" and select "Options", 
+      find "Projects", and then "VC++ Directories".
+      
+      8.1 If you are building on 64-bit Windows, find the "Platform" dropdown
+          and select "x64".
+
+      8.2 Find the box "Show directories for", choose "Include files", add the 
+          header path (i.e. c:\Program Files\HDF Group\HDF5\hdf5-1.8.7\include)
+          to the included directories.
+
+      8.3 Find the box "Show directories for", choose "Library files", add the
+          library path (i.e. c:\Program Files\HDF Group\HDF5\hdf5-1.8.7\lib)
+          to the library directories.
+          
+      8.4 If using Fortran libraries, you will also need to setup the path
+          for the Intel Fortran compiler.
+
+
+************************************************************************
+
+Need further assistance, send email to help at hdfgroup.org
+
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 37111e8..50d426d 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -113,6 +113,7 @@ IDE_GENERATED_PROPERTIES ("H5E" "${H5E_HDRS}" "${H5E_SRCS}" )
 SET (H5F_SRCS
     ${HDF5_SRC_DIR}/H5F.c
     ${HDF5_SRC_DIR}/H5Faccum.c
+    ${HDF5_SRC_DIR}/H5Fcwfs.c
     ${HDF5_SRC_DIR}/H5Fdbg.c
     ${HDF5_SRC_DIR}/H5Fefc.c
     ${HDF5_SRC_DIR}/H5Ffake.c
@@ -235,6 +236,7 @@ SET (H5HG_SRCS
     ${HDF5_SRC_DIR}/H5HG.c
     ${HDF5_SRC_DIR}/H5HGcache.c
     ${HDF5_SRC_DIR}/H5HGdbg.c
+    ${HDF5_SRC_DIR}/H5HGquery.c
 )
 
 SET (H5HG_HDRS
@@ -560,27 +562,15 @@ INCLUDE_DIRECTORIES (${HDF5_SOURCE_DIR})
 INCLUDE_DIRECTORIES (${CMAKE_BINARY_DIR})
 
 #-----------------------------------------------------------------------------
-# When building utility executables that generate other (source) files :
-# we make use of the following variables defined in the root CMakeLists.
-# Certain systems may add /Debug or /Release to output paths
-# and we need to call the executable from inside the CMake configuration
-#-----------------------------------------------------------------------------
-#inherit EXE_EXT     from parent HDF5 cmake project
-#inherit CFG_INIT    from parent HDF5 cmake project
-
-#-----------------------------------------------------------------------------
 # Setup the H5Detect utility which generates H5Tinit with platform
 # specific type checks inside
 #-----------------------------------------------------------------------------
-SET (CMD ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}${CFG_INIT}/H5detect${EXE_EXT})
-IF (XCODE)
-  SET (CMD "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/\${CONFIGURATION}/H5detect")
-ENDIF (XCODE)
 ADD_EXECUTABLE (H5detect ${HDF5_SRC_DIR}/H5detect.c)
 IF (MSVC)
   TARGET_LINK_LIBRARIES (H5detect "ws2_32.lib")
 ENDIF (MSVC)
 
+SET (CMD $<TARGET_FILE:H5detect>)
 ADD_CUSTOM_COMMAND (
     OUTPUT ${HDF5_BINARY_DIR}/H5Tinit.c
     COMMAND ${CMD}
@@ -588,20 +578,18 @@ ADD_CUSTOM_COMMAND (
     DEPENDS H5detect
 )
 
-SET (CMDL ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}${CFG_INIT}/H5make_libsettings${EXE_EXT})
-IF (XCODE)
-  SET (CMDL "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/\${CONFIGURATION}/H5make_libsettings")
-ENDIF (XCODE)
 ADD_EXECUTABLE (H5make_libsettings ${HDF5_SRC_DIR}/H5make_libsettings.c)
 IF (MSVC)
   TARGET_LINK_LIBRARIES (H5make_libsettings "ws2_32.lib")
 ENDIF (MSVC)
 
+SET (CMD $<TARGET_FILE:H5make_libsettings>)
 ADD_CUSTOM_COMMAND (
     OUTPUT ${HDF5_BINARY_DIR}/H5lib_settings.c
-    COMMAND ${CMDL}
+    COMMAND ${CMD}
     ARGS > ${HDF5_BINARY_DIR}/H5lib_settings.c
     DEPENDS H5make_libsettings
+    WORKING_DIRECTORY ${HDF5_BINARY_DIR}
 )
 
 ADD_CUSTOM_COMMAND (
@@ -640,7 +628,6 @@ SET (common_SRCS ${common_SRCS} ${HDF5_BINARY_DIR}/H5overflow.h)
 SET_SOURCE_FILES_PROPERTIES (${HDF5_BINARY_DIR}/H5overflow.h GENERATED)
 
 ADD_LIBRARY (${HDF5_LIB_TARGET} ${LIB_TYPE} ${common_SRCS} ${H5_PUBLIC_HEADERS} ${H5_PRIVATE_HEADERS})
-SET_TARGET_PROPERTIES(${HDF5_LIB_TARGET} PROPERTIES DEFINE_SYMBOL ${HDF5_LIB_CORENAME}_EXPORTS)
 TARGET_LINK_LIBRARIES (${HDF5_LIB_TARGET} ${LINK_LIBS})
 SET_GLOBAL_VARIABLE (HDF5_LIBRARIES_TO_EXPORT ${HDF5_LIB_TARGET})
 H5_SET_LIB_OPTIONS (${HDF5_LIB_TARGET} ${HDF5_LIB_NAME} ${LIB_TYPE})
diff --git a/src/H5A.c b/src/H5A.c
index 666a2a8..eb471dd 100644
--- a/src/H5A.c
+++ b/src/H5A.c
@@ -451,9 +451,9 @@ H5A_create(const H5G_loc_t *loc, const char *name, const H5T_t *type,
     /* Check if any of the pieces should be (or are already) shared in the
      * SOHM table
      */
-    if(H5SM_try_share(attr->oloc.file, dxpl_id, NULL, H5O_DTYPE_ID, attr->shared->dt, NULL) < 0)
+    if(H5SM_try_share(attr->oloc.file, dxpl_id, NULL, 0, H5O_DTYPE_ID, attr->shared->dt, NULL) < 0)
 	HGOTO_ERROR(H5E_OHDR, H5E_BADMESG, FAIL, "trying to share datatype failed")
-    if(H5SM_try_share(attr->oloc.file, dxpl_id, NULL, H5O_SDSPACE_ID, attr->shared->ds, NULL) < 0)
+    if(H5SM_try_share(attr->oloc.file, dxpl_id, NULL, 0, H5O_SDSPACE_ID, attr->shared->ds, NULL) < 0)
 	HGOTO_ERROR(H5E_OHDR, H5E_BADMESG, FAIL, "trying to share dataspace failed")
 
     /* Check whether datatype is committed & increment ref count
@@ -547,7 +547,7 @@ H5Aopen(hid_t loc_id, const char *attr_name, hid_t UNUSED aapl_id)
 
     /* Read in attribute from object header */
     if(NULL == (attr = H5O_attr_open_by_name(loc.oloc, attr_name, H5AC_ind_dxpl_id)))
-        HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to load attribute info from object header")
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to load attribute info from object header for attribute: '%s'", attr_name)
 
     /* Finish initializing attribute */
     if(H5A_open_common(&loc, attr) < 0)
@@ -1268,6 +1268,10 @@ H5Aget_type(hid_t attr_id)
     if(NULL == (attr = (H5A_t *)H5I_object_verify(attr_id, H5I_ATTR)))
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not an attribute")
 
+    /* Patch the datatype's "top level" file pointer */
+    if(H5T_patch_file(attr->shared->dt, attr->oloc.file) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "unable to patch datatype's file pointer")
+
     /*
      * Copy the attribute's datatype.  If the type is a named type then
      * reopen the type before returning it to the user. Make the type
diff --git a/src/H5AC.c b/src/H5AC.c
index a26d586..a462ac6 100644
--- a/src/H5AC.c
+++ b/src/H5AC.c
@@ -950,7 +950,7 @@ H5AC_insert_entry(H5F_t *f, hid_t dxpl_id, const H5AC_class_t *type, haddr_t add
     HDassert(thing);
 
     /* Check for invalid access request */
-    if(0 == (f->intent & H5F_ACC_RDWR))
+    if(0 == (H5F_INTENT(f) & H5F_ACC_RDWR))
 	HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, "no write intent on file")
 
 #if H5AC__TRACE_FILE_ENABLED
@@ -1267,7 +1267,7 @@ H5AC_protect(H5F_t *f,
     HDassert(H5F_addr_defined(addr));
 
     /* Check for invalid access request */
-    if(0 == (f->intent & H5F_ACC_RDWR) && rw == H5AC_WRITE)
+    if(0 == (H5F_INTENT(f) & H5F_ACC_RDWR) && rw == H5AC_WRITE)
 	HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, NULL, "no write intent on file")
 
 #if H5AC__TRACE_FILE_ENABLED
diff --git a/src/H5Adense.c b/src/H5Adense.c
index 889889e..d1421ae 100644
--- a/src/H5Adense.c
+++ b/src/H5Adense.c
@@ -470,7 +470,7 @@ H5A_dense_insert(H5F_t *f, hid_t dxpl_id, const H5O_ainfo_t *ainfo, H5A_t *attr)
             mesg_flags |= H5O_MSG_FLAG_SHARED;
         else {
             /* Should this attribute be written as a SOHM? */
-            if(H5SM_try_share(f, dxpl_id, NULL, H5O_ATTR_ID, attr, &mesg_flags) < 0)
+            if(H5SM_try_share(f, dxpl_id, NULL, 0, H5O_ATTR_ID, attr, &mesg_flags) < 0)
                 HGOTO_ERROR(H5E_ATTR, H5E_WRITEERROR, FAIL, "error determining if message should be shared")
 
             /* Attributes can't be "unique be shareable" yet */
diff --git a/src/H5Adeprec.c b/src/H5Adeprec.c
index 2b244fd..b289ae0 100644
--- a/src/H5Adeprec.c
+++ b/src/H5Adeprec.c
@@ -211,7 +211,7 @@ H5Aopen_name(hid_t loc_id, const char *name)
 
     /* Open the attribute on the object header */
     if(NULL == (attr = H5A_open_by_name(&loc, ".", name, H5P_LINK_ACCESS_DEFAULT, H5AC_ind_dxpl_id)))
-        HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "can't open attribute")
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTOPENOBJ, FAIL, "can't open attribute: '%s'", name)
 
     /* Register the attribute and get an ID for it */
     if((ret_value = H5I_register(H5I_ATTR, attr, TRUE)) < 0)
diff --git a/src/H5Aint.c b/src/H5Aint.c
index f1a40bd..ec9bf04 100644
--- a/src/H5Aint.c
+++ b/src/H5Aint.c
@@ -134,11 +134,15 @@ H5FL_SEQ_DEFINE(H5A_t_ptr);
  *              24 June 2008
  *              Changed the table of attribute objects to be the table of
  *              pointers to attribute objects for the ease of operation.
+ *
+ *	Vailin Choi; September 2011
+ *	Change "oh_modified" from boolean to unsigned
+ *	(See H5Oprivate.h for possible flags)
  *-------------------------------------------------------------------------
  */
 static herr_t
 H5A_compact_build_table_cb(H5O_t UNUSED *oh, H5O_mesg_t *mesg/*in,out*/,
-    unsigned sequence, hbool_t UNUSED *oh_modified, void *_udata/*in,out*/)
+    unsigned sequence, unsigned UNUSED *oh_modified, void *_udata/*in,out*/)
 {
     H5A_compact_bt_ud_t *udata = (H5A_compact_bt_ud_t *)_udata;   /* Operator user data */
     herr_t ret_value = H5_ITER_CONT;    /* Return value */
@@ -851,7 +855,8 @@ H5A_attr_copy_file(const H5A_t *attr_src, H5F_t *file_dst, hbool_t *recompute_si
     HDassert(attr_dst->shared->name);
 
     /* Copy attribute's datatype */
-    /* (Start destination datatype as transient, even if source is named) */
+    /* If source is named, we will keep dst as named, but we will not actually
+     * copy the target and update the message until post copy */
     if(NULL == (attr_dst->shared->dt = H5T_copy(attr_src->shared->dt, H5T_COPY_ALL)))
         HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, NULL, "cannot copy datatype")
 
@@ -859,37 +864,14 @@ H5A_attr_copy_file(const H5A_t *attr_src, H5F_t *file_dst, hbool_t *recompute_si
     if(H5T_set_loc(attr_dst->shared->dt, file_dst, H5T_LOC_DISK) < 0)
         HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "cannot mark datatype on disk")
 
-    /* Check for named datatype being copied */
-    if(H5T_committed(attr_src->shared->dt)) {
-        H5O_loc_t         *src_oloc;           /* Pointer to source datatype's object location */
-        H5O_loc_t         *dst_oloc;           /* Pointer to dest. datatype's object location */
-
-        /* Get group entries for source & destination */
-        src_oloc = H5T_oloc(attr_src->shared->dt);
-        HDassert(src_oloc);
-        dst_oloc = H5T_oloc(attr_dst->shared->dt);
-        HDassert(dst_oloc);
-
-        /* Reset object location for new object */
-        H5O_loc_reset(dst_oloc);
-        dst_oloc->file = file_dst;
-
-        /* Copy the shared object from source to destination */
-        if(H5O_copy_header_map(src_oloc, dst_oloc, dxpl_id, cpy_info, FALSE,
-                NULL, NULL) < 0)
-            HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, NULL, "unable to copy object")
-
-        /* Update shared message info from named datatype info */
-        H5T_update_shared(attr_dst->shared->dt);
-    } /* end if */
-    else {
+    if(!H5T_committed(attr_src->shared->dt)) {
         /* If the datatype is not named, it may have been shared in the
          * source file's heap.  Un-share it for now. We'll try to shared
          * it in the destination file below.
          */
         if(H5O_msg_reset_share(H5O_DTYPE_ID, attr_dst->shared->dt) < 0)
             HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to reset datatype sharing")
-    } /* end else */
+    } /* end if */
 
     /* Copy the dataspace for the attribute. Make sure the maximal dimension is also copied.
      * Otherwise the comparison in the test may complain about it. SLU 2011/4/12 */
@@ -902,13 +884,13 @@ H5A_attr_copy_file(const H5A_t *attr_src, H5F_t *file_dst, hbool_t *recompute_si
     if(H5O_msg_reset_share(H5O_SDSPACE_ID, attr_dst->shared->ds) < 0)
         HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to reset dataspace sharing")
 
-
-    /* Try to share both the datatype and dataset.  This does nothing if the
-     * datatype is committed or sharing is disabled.
+    /* Simulate trying to share both the datatype and dataset, to determine the
+     * final size of the messages.  This does nothing if the datatype is
+     * committed or sharing is disabled.
      */
-    if(H5SM_try_share(file_dst, dxpl_id, NULL, H5O_DTYPE_ID, attr_dst->shared->dt, NULL) < 0)
+    if(H5SM_try_share(file_dst, dxpl_id, NULL, H5SM_DEFER, H5O_DTYPE_ID, attr_dst->shared->dt, NULL) < 0)
 	HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, NULL, "can't share attribute datatype")
-    if(H5SM_try_share(file_dst, dxpl_id, NULL, H5O_SDSPACE_ID, attr_dst->shared->ds, NULL) < 0)
+    if(H5SM_try_share(file_dst, dxpl_id, NULL, H5SM_DEFER, H5O_SDSPACE_ID, attr_dst->shared->ds, NULL) < 0)
 	HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, NULL, "can't share attribute dataspace")
 
     /* Compute the sizes of the datatype and dataspace. This is their raw
@@ -1029,6 +1011,10 @@ H5A_attr_copy_file(const H5A_t *attr_src, H5F_t *file_dst, hbool_t *recompute_si
     if(H5A_set_version(file_dst, attr_dst) < 0)
         HGOTO_ERROR(H5E_ATTR, H5E_CANTSET, NULL, "unable to update attribute version")
 
+    /* Recompute the destination attribute's size, if it's a different version */
+    if(attr_src->shared->version != attr_dst->shared->version)
+        *recompute_size = TRUE;
+
     /* Set return value */
     ret_value = attr_dst;
 
@@ -1077,20 +1063,55 @@ done:
  *-------------------------------------------------------------------------
  */
 herr_t
-H5A_attr_post_copy_file(const H5O_loc_t *src_oloc, const H5A_t UNUSED *attr_src,
+H5A_attr_post_copy_file(const H5O_loc_t *src_oloc, const H5A_t *attr_src,
     H5O_loc_t *dst_oloc, const H5A_t *attr_dst, hid_t dxpl_id, H5O_copy_t *cpy_info)
 {
-    H5F_t  *file_src = src_oloc->file;
-    H5F_t  *file_dst = dst_oloc->file;
+    H5F_t  *file_src, *file_dst;
     herr_t ret_value = SUCCEED;   /* Return value */
 
-
     FUNC_ENTER_NOAPI_NOINIT(H5A_attr_post_copy_file)
 
     /* check args */
+    HDassert(src_oloc);
+    HDassert(dst_oloc);
     HDassert(attr_dst);
+    HDassert(attr_src);
+
+    file_src = src_oloc->file;
+    file_dst = dst_oloc->file;
+
+    HDassert(file_src);
     HDassert(file_dst);
 
+    if(H5T_committed(attr_src->shared->dt)) {
+        H5O_loc_t         *src_oloc_dt;           /* Pointer to source datatype's object location */
+        H5O_loc_t         *dst_oloc_dt;           /* Pointer to dest. datatype's object location */
+
+        /* Get group entries for source & destination */
+        src_oloc_dt = H5T_oloc(attr_src->shared->dt);
+        HDassert(src_oloc_dt);
+        dst_oloc_dt = H5T_oloc(attr_dst->shared->dt);
+        HDassert(dst_oloc_dt);
+
+        /* Reset object location for new object */
+        H5O_loc_reset(dst_oloc_dt);
+        dst_oloc_dt->file = file_dst;
+
+        /* Copy the shared object from source to destination */
+        if(H5O_copy_header_map(src_oloc_dt, dst_oloc_dt, dxpl_id, cpy_info, FALSE, NULL, NULL) < 0)
+            HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, FAIL, "unable to copy object")
+
+        /* Update shared message info from named datatype info */
+        H5T_update_shared(attr_dst->shared->dt);
+    } /* end if */
+
+    /* Try to share both the datatype and dataset.  This does nothing if the
+     * datatype is committed or sharing is disabled.
+     */
+    if(H5SM_try_share(file_dst, dxpl_id, NULL, H5SM_WAS_DEFERRED, H5O_DTYPE_ID, attr_dst->shared->dt, NULL) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "can't share attribute datatype")
+    if(H5SM_try_share(file_dst, dxpl_id, NULL, H5SM_WAS_DEFERRED, H5O_SDSPACE_ID, attr_dst->shared->ds, NULL) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "can't share attribute dataspace")
 
     /* Only need to fix reference attribute with real data being copied to
      *  another file.
@@ -1124,7 +1145,7 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:    H5A_dense_copy_file_cb
+ * Function:    H5A_dense_post_copy_file_cb
  *
  * Purpose:     Callback routine for copying a dense attribute from SRC to DST.
  *
@@ -1138,13 +1159,13 @@ done:
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5A_dense_copy_file_cb(const H5A_t *attr_src, void *_udata)
+H5A_dense_post_copy_file_cb(const H5A_t *attr_src, void *_udata)
 {
     H5A_dense_file_cp_ud_t *udata = (H5A_dense_file_cp_ud_t *)_udata;
     H5A_t *attr_dst = NULL;
     herr_t ret_value = H5_ITER_CONT;   /* Return value */
 
-    FUNC_ENTER_NOAPI_NOINIT(H5A_dense_copy_file_cb)
+    FUNC_ENTER_NOAPI_NOINIT(H5A_dense_post_copy_file_cb)
 
     /* check arguments */
     HDassert(attr_src);
@@ -1157,6 +1178,10 @@ H5A_dense_copy_file_cb(const H5A_t *attr_src, void *_udata)
             udata->recompute_size, udata->cpy_info,  udata->dxpl_id)))
         HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, H5_ITER_ERROR, "can't copy attribute")
 
+    if(H5A_attr_post_copy_file(udata->oloc_src, attr_src, udata->oloc_dst, attr_dst,
+            udata->dxpl_id, udata->cpy_info) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, H5_ITER_ERROR, "can't copy attribute")
+
     /* Reset shared location information */
     if(H5O_msg_reset_share(H5O_ATTR_ID, attr_dst) < 0)
         HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, FAIL, "unable to reset attribute sharing")
@@ -1170,105 +1195,20 @@ done:
         HDONE_ERROR(H5E_ATTR, H5E_CLOSEERROR, FAIL, "can't close destination attribute")
 
     FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5A_dense_copy_file_cb() */
-
-
-/*-------------------------------------------------------------------------
- * Function:    H5A_dense_copy_file_all
- *
- * Purpose:     Copy all dense attributes from SRC to DST.
- *
- * Return:      Success:        Non-negative
- *              Failure:        Negative
- *
- * Programmer:  Peter Cao
- *              xcao at hdfgroup.org
- *              July 20, 2007
- *
- *-------------------------------------------------------------------------
- */
-herr_t
-H5A_dense_copy_file_all(H5F_t *file_src, H5O_ainfo_t *ainfo_src, H5F_t *file_dst,
-    const H5O_ainfo_t *ainfo_dst, hbool_t *recompute_size, H5O_copy_t *cpy_info, hid_t dxpl_id)
-{
-    H5A_dense_file_cp_ud_t udata;       /* User data for iteration callback */
-    H5A_attr_iter_op_t attr_op;    /* Attribute operator */
-    herr_t ret_value = SUCCEED;    /* Return value */
-
-    FUNC_ENTER_NOAPI_NOINIT(H5A_dense_copy_file_all)
-
-    /* check arguments */
-    HDassert(ainfo_src);
-    HDassert(ainfo_dst);
-
-    udata.ainfo = ainfo_dst;             /* Destination dense information    */
-    udata.file = file_dst;                /* Destination file                 */
-    udata.recompute_size = recompute_size;    /* Flag to indicate if size changed */
-    udata.cpy_info = cpy_info;                /* Information on copying options   */
-    udata.dxpl_id = dxpl_id;                  /* DXPL for operation               */
-
-    attr_op.op_type = H5A_ATTR_OP_LIB;
-    attr_op.u.lib_op = H5A_dense_copy_file_cb;
-
-     if(H5A_dense_iterate(file_src, dxpl_id, (hid_t)0, ainfo_src, H5_INDEX_NAME,
-            H5_ITER_NATIVE, (hsize_t)0, NULL, &attr_op, &udata) < 0)
-        HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "error building attribute table")
-
-done:
-    FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5A_dense_copy_file_all */
-
-
-/*-------------------------------------------------------------------------
- * Function:    H5A_dense_post_copy_file_cb
- *
- * Purpose:     Callback routine to perfom post copy for a dense attribute.
- *
- * Return:      Success:        Non-negative
- *              Failure:        Negative
- *
- * Programmer:  Peter Cao
- *              xcao at hdfgroup.org
- *              July 25, 2007
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5A_dense_post_copy_file_cb(const H5A_t *attr_dst, void *_udata)
-{
-    H5A_dense_file_cp_ud_t *udata = (H5A_dense_file_cp_ud_t *)_udata;
-    herr_t ret_value = H5_ITER_CONT;   /* Return value */
-
-    FUNC_ENTER_NOAPI_NOINIT(H5A_dense_post_copy_file_cb)
-
-    /* check arguments */
-    HDassert(attr_dst);
-    HDassert(udata);
-    HDassert(udata->ainfo);
-    HDassert(udata->file);
-    HDassert(udata->cpy_info);
-
-    if ( H5A_attr_post_copy_file(udata->oloc_src, NULL,
-         udata->oloc_dst, attr_dst, udata->dxpl_id, udata->cpy_info) < 0)
-        HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, H5_ITER_ERROR, "can't copy attribute")
-
-done:
-
-    FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5A_dense_post_copy_file_cb() */
 
 
 /*-------------------------------------------------------------------------
  * Function:    H5A_dense_post_copy_file_all
  *
- * Purpose:     Do post copy for all dense attributes.
+ * Purpose:     Copy all dense attributes from SRC to DST.
  *
  * Return:      Success:        Non-negative
  *              Failure:        Negative
  *
  * Programmer:  Peter Cao
  *              xcao at hdfgroup.org
- *              July 25, 2007
+ *              July 20, 2007
  *
  *-------------------------------------------------------------------------
  */
@@ -1277,21 +1217,19 @@ H5A_dense_post_copy_file_all(const H5O_loc_t *src_oloc, const H5O_ainfo_t *ainfo
     H5O_loc_t *dst_oloc, H5O_ainfo_t *ainfo_dst, hid_t dxpl_id, H5O_copy_t *cpy_info)
 {
     H5A_dense_file_cp_ud_t udata;       /* User data for iteration callback */
-    H5A_attr_iter_op_t attr_op;    /* Attribute operator */
-    herr_t ret_value = SUCCEED;    /* Return value */
+    H5A_attr_iter_op_t attr_op;         /* Attribute operator */
+    hbool_t recompute_size = FALSE;     /* recompute the size */
+    herr_t ret_value = SUCCEED;         /* Return value */
 
     FUNC_ENTER_NOAPI_NOINIT(H5A_dense_post_copy_file_all)
 
     /* check arguments */
     HDassert(ainfo_src);
     HDassert(ainfo_dst);
-    HDassert(src_oloc);
-    HDassert(dst_oloc);
-    HDassert(src_oloc->file);
-    HDassert(dst_oloc->file);
 
-    udata.ainfo = ainfo_src;
-    udata.file = src_oloc->file;
+    udata.ainfo = ainfo_dst;                  /* Destination dense information    */
+    udata.file = dst_oloc->file;              /* Destination file                 */
+    udata.recompute_size = &recompute_size;   /* Flag to indicate if size changed */
     udata.cpy_info = cpy_info;                /* Information on copying options   */
     udata.dxpl_id = dxpl_id;                  /* DXPL for operation               */
     udata.oloc_src = src_oloc;
@@ -1300,11 +1238,12 @@ H5A_dense_post_copy_file_all(const H5O_loc_t *src_oloc, const H5O_ainfo_t *ainfo
     attr_op.op_type = H5A_ATTR_OP_LIB;
     attr_op.u.lib_op = H5A_dense_post_copy_file_cb;
 
-     if(H5A_dense_iterate(dst_oloc->file, dxpl_id, (hid_t)0, ainfo_dst, H5_INDEX_NAME,
+
+     if(H5A_dense_iterate(src_oloc->file, dxpl_id, (hid_t)0, ainfo_src, H5_INDEX_NAME,
             H5_ITER_NATIVE, (hsize_t)0, NULL, &attr_op, &udata) < 0)
         HGOTO_ERROR(H5E_ATTR, H5E_CANTINIT, FAIL, "error building attribute table")
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
-}
+} /* end H5A_dense_post_copy_file_all */
 
diff --git a/src/H5Apkg.h b/src/H5Apkg.h
index 27f500e..20aa5b9 100644
--- a/src/H5Apkg.h
+++ b/src/H5Apkg.h
@@ -283,8 +283,6 @@ H5_DLL H5A_t *H5A_attr_copy_file(const H5A_t *attr_src, H5F_t *file_dst, hbool_t
     H5O_copy_t *cpy_info, hid_t dxpl_id);
 H5_DLL herr_t H5A_attr_post_copy_file(const H5O_loc_t *src_oloc, const H5A_t *mesg_src,
     H5O_loc_t *dst_oloc, const H5A_t *mesg_dst, hid_t dxpl_id, H5O_copy_t *cpy_info);
-H5_DLL herr_t H5A_dense_copy_file_all(H5F_t *file_src, H5O_ainfo_t *ainfo_src, H5F_t *file_dst,
-    const H5O_ainfo_t *ainfo_dst, hbool_t *recompute_size, H5O_copy_t *cpy_info, hid_t dxpl_id);
 H5_DLL herr_t H5A_dense_post_copy_file_all(const H5O_loc_t *src_oloc, const H5O_ainfo_t * ainfo_src,
     H5O_loc_t *dst_oloc, H5O_ainfo_t *ainfo_dst, hid_t dxpl_id, H5O_copy_t *cpy_info);
 
diff --git a/src/H5D.c b/src/H5D.c
index e260486..cefdbe5 100644
--- a/src/H5D.c
+++ b/src/H5D.c
@@ -523,6 +523,10 @@ H5Dget_type(hid_t dset_id)
     if(NULL == (dset = (H5D_t *)H5I_object_verify(dset_id, H5I_DATASET)))
 	HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset")
 
+    /* Patch the datatype's "top level" file pointer */
+    if(H5T_patch_file(dset->shared->type, dset->oloc.file) < 0)
+        HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to patch datatype's file pointer")
+
     /* Copy the dataset's datatype */
     if(NULL == (dt = H5T_copy(dset->shared->type, H5T_COPY_REOPEN)))
 	HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to copy datatype")
diff --git a/src/H5Dchunk.c b/src/H5Dchunk.c
index 39613f5..c7aa9c9 100644
--- a/src/H5Dchunk.c
+++ b/src/H5Dchunk.c
@@ -3479,6 +3479,7 @@ H5D_chunk_prune_fill(H5D_chunk_it_ud1_t *udata)
     void        *chunk;	                /* The file chunk  */
     H5D_chunk_ud_t chk_udata;           /* User data for locking chunk */
     uint32_t    bytes_accessed;         /* Bytes accessed in chunk */
+    hbool_t     chunk_iter_init = FALSE; /* Whether the chunk iterator has been initialized */
     unsigned    u;                      /* Local index variable */
     herr_t      ret_value = SUCCEED;    /* Return value */
 
@@ -3544,16 +3545,11 @@ H5D_chunk_prune_fill(H5D_chunk_it_ud1_t *udata)
     /* Create a selection iterator for scattering the elements to memory buffer */
     if(H5S_select_iter_init(&chunk_iter, udata->chunk_space, layout->u.chunk.dim[rank]) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to initialize chunk selection information")
+    chunk_iter_init = TRUE;
 
     /* Scatter the data into memory */
-    if(H5D_scatter_mem(udata->fb_info.fill_buf, udata->chunk_space, &chunk_iter, (size_t)sel_nelmts, io_info->dxpl_cache, chunk/*out*/) < 0) {
-        H5S_SELECT_ITER_RELEASE(&chunk_iter);
+    if(H5D_scatter_mem(udata->fb_info.fill_buf, udata->chunk_space, &chunk_iter, (size_t)sel_nelmts, io_info->dxpl_cache, chunk/*out*/) < 0)
         HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "scatter failed")
-    } /* end if */
-
-    /* Release the selection iterator */
-    if(H5S_SELECT_ITER_RELEASE(&chunk_iter) < 0)
-        HGOTO_ERROR(H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
 
 
     /* The number of bytes accessed in the chunk */
@@ -3566,6 +3562,10 @@ H5D_chunk_prune_fill(H5D_chunk_it_ud1_t *udata)
         HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "unable to unlock raw data chunk")
 
 done:
+    /* Release the selection iterator */
+    if(chunk_iter_init && H5S_SELECT_ITER_RELEASE(&chunk_iter) < 0)
+        HDONE_ERROR(H5E_DATASET, H5E_CANTFREE, FAIL, "Can't release selection iterator")
+
     FUNC_LEAVE_NOAPI(ret_value)
 } /* H5D_chunk_prune_fill */
 
diff --git a/src/H5Dio.c b/src/H5Dio.c
index 0ce451e..f8684b9 100644
--- a/src/H5Dio.c
+++ b/src/H5Dio.c
@@ -602,7 +602,7 @@ H5D_write(H5D_t *dataset, hid_t mem_type_id, const H5S_t *mem_space,
             HGOTO_ERROR(H5E_DATASET, H5E_CANTINIT, FAIL, "unable to construct projected memory dataspace")
         HDassert(projected_mem_space);
         HDassert(adj_buf);
-            
+
         /* Switch to using projected memory dataspace & adjusted buffer */
         mem_space = projected_mem_space;
         buf = adj_buf;
@@ -949,6 +949,9 @@ H5D_ioinfo_adjust(H5D_io_info_t *io_info, const H5D_t *dset, hid_t dxpl_id,
     const H5S_t *file_space, const H5S_t *mem_space,
     const H5D_type_info_t *type_info, const H5D_chunk_map_t *fm)
 {
+    H5P_genplist_t *dx_plist;       /* Data transer property list */
+    H5D_mpio_actual_chunk_opt_mode_t actual_chunk_opt_mode; /* performed chunk optimization */
+    H5D_mpio_actual_io_mode_t actual_io_mode; /* performed io mode */
     herr_t	ret_value = SUCCEED;	/* Return value	*/
 
     FUNC_ENTER_NOAPI_NOINIT(H5D_ioinfo_adjust)
@@ -962,6 +965,20 @@ H5D_ioinfo_adjust(H5D_io_info_t *io_info, const H5D_t *dset, hid_t dxpl_id,
     HDassert(type_info->tpath);
     HDassert(io_info);
 
+    /* Get the dataset transfer property list */
+    if(NULL == (dx_plist = (H5P_genplist_t *)H5I_object(dxpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset transfer property list")
+
+    /* Reset the actual io mode properties to the default values in case
+     * the dxpl was previously used in a collective I/O operation.
+     */
+    actual_chunk_opt_mode = H5D_MPIO_NO_CHUNK_OPTIMIZATION;
+    actual_io_mode = H5D_MPIO_NO_COLLECTIVE;
+    if(H5P_set(dx_plist, H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_NAME, &actual_chunk_opt_mode) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "couldn't set actual chunk opt mode property")
+    if(H5P_set(dx_plist, H5D_MPIO_ACTUAL_IO_MODE_NAME, &actual_io_mode) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "couldn't set actual io mode property")
+
     /* Make any parallel I/O adjustments */
     if(io_info->using_mpi_vfd) {
         htri_t opt;         /* Flag whether a selection is optimizable */
@@ -994,12 +1011,6 @@ H5D_ioinfo_adjust(H5D_io_info_t *io_info, const H5D_t *dset, hid_t dxpl_id,
              * mark it so that we remember to revert the change.
              */
             if(io_info->dxpl_cache->xfer_mode == H5FD_MPIO_COLLECTIVE) {
-                H5P_genplist_t *dx_plist;           /* Data transer property list */
-
-                /* Get the dataset transfer property list */
-                if(NULL == (dx_plist = (H5P_genplist_t *)H5I_object(dxpl_id)))
-                    HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a dataset creation property list")
-
                 /* Change the xfer_mode to independent for handling the I/O */
                 io_info->dxpl_cache->xfer_mode = H5FD_MPIO_INDEPENDENT;
                 if(H5P_set(dx_plist, H5D_XFER_IO_XFER_MODE_NAME, &io_info->dxpl_cache->xfer_mode) < 0)
diff --git a/src/H5Dmpio.c b/src/H5Dmpio.c
index e646a7b..8c78af2 100644
--- a/src/H5Dmpio.c
+++ b/src/H5Dmpio.c
@@ -17,33 +17,33 @@
  * Programmer:  rky 980813
  * KY 2005 revised the code and made the change to support and optimize
  * collective IO support.
- * Purpose:	Functions to read/write directly between app buffer and file.
+ * Purpose:    Functions to read/write directly between app buffer and file.
  *
- * 		Beware of the ifdef'ed print statements.
- *		I didn't make them portable.
+ *         Beware of the ifdef'ed print statements.
+ *         I didn't make them portable.
  */
 
 /****************/
 /* Module Setup */
 /****************/
 
-#define H5D_PACKAGE		/*suppress error about including H5Dpkg	  */
+#define H5D_PACKAGE /* suppress error about including H5Dpkg */
 
 
 /***********/
 /* Headers */
 /***********/
-#include "H5private.h"		/* Generic Functions			*/
-#include "H5Dpkg.h"		/* Datasets				*/
-#include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fprivate.h"		/* File access				*/
-#include "H5FDprivate.h"	/* File drivers				*/
-#include "H5Iprivate.h"		/* IDs			  		*/
-#include "H5MMprivate.h"	/* Memory management			*/
-#include "H5Oprivate.h"		/* Object headers		  	*/
-#include "H5Pprivate.h"         /* Property lists                       */
-#include "H5Sprivate.h"		/* Dataspaces 				*/
-#include "H5Vprivate.h"         /* Vector                               */
+#include "H5private.h"        /* Generic Functions */
+#include "H5Dpkg.h"           /* Datasets          */
+#include "H5Eprivate.h"       /* Error handling    */
+#include "H5Fprivate.h"       /* File access       */
+#include "H5FDprivate.h"      /* File drivers      */
+#include "H5Iprivate.h"       /* IDs               */
+#include "H5MMprivate.h"      /* Memory management */
+#include "H5Oprivate.h"       /* Object headers    */
+#include "H5Pprivate.h"       /* Property lists    */
+#include "H5Sprivate.h"       /* Dataspaces        */
+#include "H5Vprivate.h"       /* Vector            */
 
 #ifdef H5_HAVE_PARALLEL
 
@@ -107,20 +107,16 @@ static herr_t H5D_multi_chunk_collective_io(H5D_io_info_t *io_info,
     H5P_genplist_t *dx_plist);
 static herr_t H5D_multi_chunk_collective_io_no_opt(H5D_io_info_t *io_info,
     const H5D_type_info_t *type_info, H5D_chunk_map_t *fm, H5P_genplist_t *dx_plist);
-#ifdef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS
 static herr_t H5D_link_chunk_collective_io(H5D_io_info_t *io_info,
     const H5D_type_info_t *type_info, H5D_chunk_map_t *fm, int sum_chunk);
-#endif /* H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS */
 static herr_t H5D_inter_collective_io(H5D_io_info_t *io_info,
     const H5D_type_info_t *type_info, const H5S_t *file_space,
     const H5S_t *mem_space);
 static herr_t H5D_final_collective_io(H5D_io_info_t *io_info,
     const H5D_type_info_t *type_info, hsize_t nelmts, MPI_Datatype *mpi_file_type,
     MPI_Datatype *mpi_buf_type);
-#ifdef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS
 static herr_t H5D_sort_chunk(H5D_io_info_t *io_info, const H5D_chunk_map_t *fm,
     H5D_chunk_addr_info_t chunk_addr_info_array[], int many_chunk_opt);
-#endif /* H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS */
 static herr_t H5D_obtain_mpio_mode(H5D_io_info_t *io_info, H5D_chunk_map_t *fm,
     H5P_genplist_t *dx_plist, uint8_t assign_io_mode[], haddr_t chunk_addr[]);
 static herr_t H5D_ioinfo_xfer_mode(H5D_io_info_t *io_info, H5P_genplist_t *dx_plist,
@@ -145,15 +141,15 @@ static herr_t H5D_mpio_get_sum_chunk(const H5D_io_info_t *io_info,
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_mpio_opt_possible
+ * Function:    H5D_mpio_opt_possible
  *
- * Purpose:	Checks if an direct I/O transfer is possible between memory and
+ * Purpose:     Checks if an direct I/O transfer is possible between memory and
  *                  the file.
  *
- * Return:	Success:        Non-negative: TRUE or FALSE
- *		Failure:	Negative
+ * Return:      Sauccess:   Non-negative: TRUE or FALSE
+ *              Failure:    Negative
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Wednesday, April 3, 2002
  *
  *-------------------------------------------------------------------------
@@ -225,19 +221,8 @@ H5D_mpio_opt_possible(const H5D_io_info_t *io_info, const H5S_t *file_space,
      *  storage.  For contiguous storage, mem_space and file_space won't change
      *  when it it is doing disk IO.  For chunking storage, mem_space will
      *  change for different chunks. So for chunking storage, whether we can
-     *  use collective IO will defer until each chunk IO is reached.  For
-     *  contiguous storage, if we find MPI-IO cannot support complicated MPI
-     *  derived data type and the shape of data space is not regular, we will
-     *  set use_par_opt_io = FALSE.
+     *  use collective IO will defer until each chunk IO is reached.
      */
-#ifndef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS
-    if(io_info->dset->shared->layout.type == H5D_CONTIGUOUS)
-        if((H5S_SELECT_IS_REGULAR(file_space) != TRUE) ||
-                (H5S_SELECT_IS_REGULAR(mem_space) != TRUE)) {
-            local_opinion = FALSE;
-            goto broadcast;
-        } /* end if */
-#endif
 
     /* Don't allow collective operations if filters need to be applied */
     if(io_info->dset->shared->layout.type == H5D_CHUNKED) {
@@ -245,24 +230,6 @@ H5D_mpio_opt_possible(const H5D_io_info_t *io_info, const H5S_t *file_space,
             local_opinion = FALSE;
             goto broadcast;
         } /* end if */
-
-/* If H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS and H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS
- *      are defined, the HDF5 library will do collective IO if the application
- *      asks for it.
- *
- * If H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS is not defined and one or more
- *      processes are not participating in the IO, then collective IO is not
- *      assured. The library will check each process for the number of chunks
- *      it involves. If any process involves zero chunks, the library will use
- *      independent IO mode instead.
- */
-#ifndef H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS
-        /* Check the number of chunks to perform I/O on */
-        if(0 == H5SL_count(fm->sel_chunks)) {
-            local_opinion = FALSE;
-            goto broadcast;
-         } /* end if */
-#endif /* H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS */
     } /* end if */
 
 broadcast:
@@ -280,11 +247,11 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_mpio_select_read
+ * Function:    H5D_mpio_select_read
  *
- * Purpose:	MPI-IO function to read directly from app buffer to file.
+ * Purpose:     MPI-IO function to read directly from app buffer to file.
  *
- * Return:	non-negative on success, negative on failure.
+ * Return:      non-negative on success, negative on failure.
  *
  * Programmer:
  *
@@ -301,7 +268,7 @@ H5D_mpio_select_read(const H5D_io_info_t *io_info, const H5D_type_info_t UNUSED
 
     H5_CHECK_OVERFLOW(mpi_buf_count, hsize_t, size_t);
     if(H5F_block_read(io_info->dset->oloc.file, H5FD_MEM_DRAW, store_contig->dset_addr, (size_t)mpi_buf_count, io_info->dxpl_id, io_info->u.rbuf) < 0)
-	HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "can't finish collective parallel read")
+        HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "can't finish collective parallel read")
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
@@ -309,11 +276,11 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_mpio_select_write
+ * Function:    H5D_mpio_select_write
  *
- * Purpose:	MPI-IO function to write directly from app buffer to file.
+ * Purpose:     MPI-IO function to write directly from app buffer to file.
  *
- * Return:	non-negative on success, negative on failure.
+ * Return:      non-negative on success, negative on failure.
  *
  * Programmer:
  *
@@ -339,14 +306,14 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_ioinfo_xfer_mode
+ * Function:    H5D_ioinfo_xfer_mode
  *
- * Purpose:	Switch to between collective & independent MPI I/O
+ * Purpose:     Switch to between collective & independent MPI I/O
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:      Non-negative on success/Negative on failure
  *
- * Programmer:	Quincey Koziol
- *		Friday, August 12, 2005
+ * Programmer:  Quincey Koziol
+ *              Friday, August 12, 2005
  *
  *-------------------------------------------------------------------------
  */
@@ -354,7 +321,7 @@ static herr_t
 H5D_ioinfo_xfer_mode(H5D_io_info_t *io_info, H5P_genplist_t *dx_plist,
     H5FD_mpio_xfer_t xfer_mode)
 {
-    herr_t	ret_value = SUCCEED;	/*return value		*/
+    herr_t  ret_value = SUCCEED;    /* return value */
 
     FUNC_ENTER_NOAPI_NOINIT(H5D_ioinfo_xfer_mode)
 
@@ -383,15 +350,15 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_ioinfo_coll_opt_mode
+ * Function:    H5D_ioinfo_coll_opt_mode
  *
- * Purpose:	Switch between using collective & independent MPI I/O w/file
+ * Purpose:     Switch between using collective & independent MPI I/O w/file
  *              set view
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:      Non-negative on success/Negative on failure
  *
- * Programmer:	MuQun Yang
- *		Oct. 5th, 2006
+ * Programmer:  MuQun Yang
+ *              Oct. 5th, 2006
  *
  *-------------------------------------------------------------------------
  */
@@ -399,7 +366,7 @@ static herr_t
 H5D_ioinfo_coll_opt_mode(H5D_io_info_t *io_info, H5P_genplist_t *dx_plist,
     H5FD_mpio_collective_opt_t coll_opt_mode)
 {
-    herr_t	ret_value = SUCCEED;	/*return value		*/
+    herr_t  ret_value = SUCCEED;    /* return value */
 
     FUNC_ENTER_NOAPI_NOINIT(H5D_ioinfo_coll_opt_mode)
 
@@ -414,14 +381,14 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_mpio_get_min_chunk
+ * Function:    H5D_mpio_get_min_chunk
  *
- * Purpose:	Routine for obtaining minimum number of chunks to cover
+ * Purpose:     Routine for obtaining minimum number of chunks to cover
  *              hyperslab selection selected by all processors.
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:      Non-negative on success/Negative on failure
  *
- * Programmer:	Muqun Yang
+ * Programmer:  Muqun Yang
  *              Monday, Feb. 13th, 2006
  *
  *-------------------------------------------------------------------------
@@ -449,14 +416,14 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_mpio_get_sum_chunk
+ * Function:    H5D_mpio_get_sum_chunk
  *
- * Purpose:	Routine for obtaining total number of chunks to cover
+ * Purpose:     Routine for obtaining total number of chunks to cover
  *              hyperslab selection selected by all processors.
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:      Non-negative on success/Negative on failure
  *
- * Programmer:	Muqun Yang
+ * Programmer:  Muqun Yang
  *              Monday, Feb. 13th, 2006
  *
  *-------------------------------------------------------------------------
@@ -487,14 +454,14 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_contig_collective_read
+ * Function:    H5D_contig_collective_read
  *
- * Purpose:	Reads directly from contiguous data in file into application
+ * Purpose:     Reads directly from contiguous data in file into application
  *              memory using collective I/O.
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:      Non-negative on success/Negative on failure
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Tuesday, March  4, 2008
  *
  *-------------------------------------------------------------------------
@@ -504,6 +471,8 @@ H5D_contig_collective_read(H5D_io_info_t *io_info, const H5D_type_info_t *type_i
     hsize_t UNUSED nelmts, const H5S_t *file_space, const H5S_t *mem_space,
     H5D_chunk_map_t UNUSED *fm)
 {
+    H5D_mpio_actual_io_mode_t actual_io_mode = H5D_MPIO_CONTIGUOUS_COLLECTIVE;
+    H5P_genplist_t *dx_plist;           /* Pointer to DXPL */
     herr_t ret_value = SUCCEED;         /* Return value */
 
     FUNC_ENTER_NOAPI(H5D_contig_collective_read, FAIL)
@@ -514,7 +483,17 @@ H5D_contig_collective_read(H5D_io_info_t *io_info, const H5D_type_info_t *type_i
 
     /* Call generic internal collective I/O routine */
     if(H5D_inter_collective_io(io_info, type_info, file_space, mem_space) < 0)
-	HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "couldn't finish shared collective MPI-IO")
+        HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "couldn't finish shared collective MPI-IO")
+
+    /* Obtain the data transfer properties */
+    if(NULL == (dx_plist = H5I_object(io_info->dxpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data transfer property list")
+
+    /* Set the actual I/O mode property. internal_collective_io will not break to
+     * independent I/O, so we set it here.
+     */
+    if(H5P_set(dx_plist, H5D_MPIO_ACTUAL_IO_MODE_NAME, &actual_io_mode) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "couldn't set actual io mode property")
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
@@ -522,14 +501,14 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_contig_collective_write
+ * Function:    H5D_contig_collective_write
  *
- * Purpose:	Write directly to contiguous data in file from application
+ * Purpose:     Write directly to contiguous data in file from application
  *              memory using collective I/O.
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:      Non-negative on success/Negative on failure
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Tuesday, March  4, 2008
  *
  *-------------------------------------------------------------------------
@@ -539,6 +518,8 @@ H5D_contig_collective_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_
     hsize_t UNUSED nelmts, const H5S_t *file_space, const H5S_t *mem_space,
     H5D_chunk_map_t UNUSED *fm)
 {
+    H5D_mpio_actual_io_mode_t actual_io_mode = H5D_MPIO_CONTIGUOUS_COLLECTIVE;
+    H5P_genplist_t *dx_plist;           /* Pointer to DXPL */
     herr_t ret_value = SUCCEED;         /* Return value */
 
     FUNC_ENTER_NOAPI(H5D_contig_collective_write, FAIL)
@@ -549,7 +530,17 @@ H5D_contig_collective_write(H5D_io_info_t *io_info, const H5D_type_info_t *type_
 
     /* Call generic internal collective I/O routine */
     if(H5D_inter_collective_io(io_info, type_info, file_space, mem_space) < 0)
-	HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "couldn't finish shared collective MPI-IO")
+        HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "couldn't finish shared collective MPI-IO")
+
+    /* Obtain the data transfer properties */
+    if(NULL == (dx_plist = H5I_object(io_info->dxpl_id)))
+        HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a data transfer property list")
+
+    /* Set the actual I/O mode property. internal_collective_io will not break to
+     * independent I/O, so we set it here.
+     */
+    if(H5P_set(dx_plist, H5D_MPIO_ACTUAL_IO_MODE_NAME, &actual_io_mode) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "couldn't set actual io mode property")
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
@@ -557,9 +548,9 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_chunk_collective_io
+ * Function:    H5D_chunk_collective_io
  *
- * Purpose:	Routine for
+ * Purpose:     Routine for
  *              1) choose an IO option:
  *                    a) One collective IO defined by one MPI derived datatype to link through all chunks
  *              or    b) multiple chunk IOs,to do MPI-IO for each chunk, the IO mode may be adjusted
@@ -570,7 +561,7 @@ done:
  *                      3. Build up the final MPI derived datatype
  *                      4. Set up collective IO property list
  *                      5. Do IO
- *             For option b)
+ *              For option b)
  *                      1. Use MPI_gather and MPI_Bcast to obtain information of *collective/independent/none*
  *                         IO mode for each chunk of the selection
  *                      2. Depending on whether the IO mode is collective or independent or none,
@@ -579,9 +570,9 @@ done:
  *                      3. Set up collective IO property list for collective mode
  *                      4. DO IO
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:      Non-negative on success/Negative on failure
  *
- * Programmer:	Muqun Yang
+ * Programmer:  Muqun Yang
  *              Monday, Feb. 13th, 2006
  *
  *-------------------------------------------------------------------------
@@ -592,6 +583,8 @@ H5D_chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *type_info
 {
     H5P_genplist_t *dx_plist;           /* Pointer to DXPL */
     H5FD_mpio_chunk_opt_t chunk_opt_mode;
+    H5D_mpio_actual_chunk_opt_mode_t actual_chunk_opt_mode;
+    H5D_mpio_actual_io_mode_t actual_io_mode;
     int         io_option = H5D_MULTI_CHUNK_IO_MORE_OPT;
     int         sum_chunk = -1;
 #ifdef H5_HAVE_INSTRUMENTED_LIBRARY
@@ -636,43 +629,9 @@ H5D_chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *type_info
         else
             temp_not_link_io = TRUE;
 #endif
-   } /* end else */
-
-#ifndef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS
-    if(io_option == H5D_ONE_LINK_CHUNK_IO) {
-        io_option = H5D_MULTI_CHUNK_IO; /* We can not do this with one chunk IO. */
-#ifdef  H5_HAVE_INSTRUMENTED_LIBRARY
-    {  int new_value;
-       htri_t check_prop;
-       check_prop = H5Pexist(io_info->dxpl_id, H5D_XFER_COLL_CHUNK_LINK_TO_MULTI);
-       if(check_prop > 0) {
-           new_value = 1;
-           if(H5Pset(io_info->dxpl_id, H5D_XFER_COLL_CHUNK_LINK_TO_MULTI, &new_value) < 0)
-                HGOTO_ERROR(H5E_IO, H5E_CANTSET, FAIL, "unable to set property value")
-
-       }
-     }/* add this property because the library changes the option from one link to multiple chunks.*/
-#endif
-    }
-    if(io_option == H5D_ONE_LINK_CHUNK_IO_MORE_OPT){
-        io_option = H5D_MULTI_CHUNK_IO_MORE_OPT;
-#ifdef  H5_HAVE_INSTRUMENTED_LIBRARY
-      { int        new_value;
-       htri_t check_prop;
-       check_prop = H5Pexist(io_info->dxpl_id, H5D_XFER_COLL_CHUNK_LINK_TO_MULTI_OPT);
-       if(check_prop > 0) {
-           new_value = 1;
-           if(H5Pset(io_info->dxpl_id, H5D_XFER_COLL_CHUNK_LINK_TO_MULTI_OPT, &new_value) < 0)
-                HGOTO_ERROR(H5E_IO, H5E_CANTSET, FAIL, "unable to set property value")
-
-       }
-      }/* add this property because the library changes the option from one link to multiple chunks.*/
-#endif
-    }
-#endif
+    } /* end else */
 
 #ifdef H5_HAVE_INSTRUMENTED_LIBRARY
-{
     htri_t            check_prop;
     int               new_value;
 
@@ -709,22 +668,42 @@ H5D_chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *type_info
                 HGOTO_ERROR(H5E_IO, H5E_CANTSET, FAIL, "unable to set property value")
         } /* end if */
     } /* end if */
-}
 #endif
 
     /* step 2:  Go ahead to do IO.*/
-#ifdef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS
     if(io_option == H5D_ONE_LINK_CHUNK_IO || io_option == H5D_ONE_LINK_CHUNK_IO_MORE_OPT) {
+        /* set the actual io mode properties to the correct values for link chunk io.
+         * Link chunk I/O does not break to independent, so we can set the actual_io mode
+         * as well as the optimisation mode. */
+        actual_chunk_opt_mode = H5D_MPIO_LINK_CHUNK;
+        actual_io_mode = H5D_MPIO_CHUNK_COLLECTIVE;
+
+        /* Set the actual chunk opt mode property. */
+        if(H5P_set(dx_plist, H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_NAME, &actual_chunk_opt_mode) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "couldn't set actual chunk opt mode property")
+
         if(H5D_link_chunk_collective_io(io_info, type_info, fm, sum_chunk) < 0)
             HGOTO_ERROR(H5E_IO, H5E_CANTGET, FAIL, "couldn't finish linked chunk MPI-IO")
+
+        /* Set the actual io mode property. */
+        if(H5P_set(dx_plist, H5D_MPIO_ACTUAL_IO_MODE_NAME, &actual_io_mode) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "couldn't set actual io mode property")
     } /* end if */
     else
-#endif /* H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS */
     if(io_option == H5D_MULTI_CHUNK_IO) {
+        /* Set the actual chunk opt mode property */
+        actual_chunk_opt_mode = H5D_MPIO_MULTI_CHUNK_NO_OPT;
+        if(H5P_set(dx_plist, H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_NAME, &actual_chunk_opt_mode) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "couldn't set actual chunk opt mode property")
+
         if(H5D_multi_chunk_collective_io_no_opt(io_info, type_info, fm, dx_plist) < 0)
             HGOTO_ERROR(H5E_IO, H5E_CANTGET, FAIL, "couldn't finish multiple chunk MPI-IO")
     } /* end if */
     else { /*multiple chunk IOs with opt */
+        actual_chunk_opt_mode = H5D_MPIO_MULTI_CHUNK;
+        if(H5P_set(dx_plist, H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_NAME, &actual_chunk_opt_mode) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "couldn't set actual chunk opt mode property")
+
         if(H5D_multi_chunk_collective_io(io_info, type_info, fm, dx_plist) < 0)
             HGOTO_ERROR(H5E_IO, H5E_CANTGET, FAIL, "couldn't finish optimized multiple chunk MPI-IO")
     } /* end else */
@@ -735,14 +714,14 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_chunk_collective_read
+ * Function:    H5D_chunk_collective_read
  *
- * Purpose:	Reads directly from chunks in file into application memory
+ * Purpose:     Reads directly from chunks in file into application memory
  *              using collective I/O.
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:      Non-negative on success/Negative on failure
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Tuesday, March  4, 2008
  *
  *-------------------------------------------------------------------------
@@ -766,14 +745,14 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_chunk_collective_write
+ * Function:    H5D_chunk_collective_write
  *
- * Purpose:	Write directly to chunks in file from application memory
+ * Purpose:     Write directly to chunks in file from application memory
  *              using collective I/O.
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:      Non-negative on success/Negative on failure
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Tuesday, March  4, 2008
  *
  *-------------------------------------------------------------------------
@@ -795,21 +774,20 @@ done:
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5D_chunk_collective_write() */
 
-#ifdef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_link_chunk_collective_io
+ * Function:    H5D_link_chunk_collective_io
  *
- * Purpose:	Routine for one collective IO with one MPI derived datatype to link with all chunks
+ * Purpose:     Routine for one collective IO with one MPI derived datatype to link with all chunks
  *
  *                      1. Sort the chunk address and chunk info
  *                      2. Build up MPI derived datatype for each chunk
  *                      3. Build up the final MPI derived datatype
  *                      4. Use common collective IO routine to do MPI-IO
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:      Non-negative on success/Negative on failure
  *
- * Programmer:	Muqun Yang
+ * Programmer:  Muqun Yang
  *              Monday, Feb. 13th, 2006
  *
  *-------------------------------------------------------------------------
@@ -833,7 +811,7 @@ H5D_link_chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *type
     hbool_t            *chunk_mft_is_derived_array = NULL;      /* Flags to indicate each chunk's MPI file datatype is derived */
     hbool_t            *chunk_mbt_is_derived_array = NULL;      /* Flags to indicate each chunk's MPI memory datatype is derived */
     int                *chunk_mpi_file_counts = NULL;   /* Count of MPI file datatype for each chunk */
-    int		       *chunk_mpi_mem_counts = NULL;    /* Count of MPI memory datatype for each chunk */
+    int                *chunk_mpi_mem_counts = NULL;    /* Count of MPI memory datatype for each chunk */
     int                 mpi_code;           /* MPI return code */
     herr_t              ret_value = SUCCEED;
 
@@ -871,21 +849,22 @@ H5D_link_chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *type
 
         /* Check for this process having selection in this chunk */
         chunk_node = H5SL_first(fm->sel_chunks);
-	if(chunk_node == NULL) {
-            /* Set the dataspace info for I/O to NULL, this process doesn't have any I/O to perform */
-            fspace = mspace = NULL;
-	} /* end if */
-	else {
-            H5D_chunk_info_t *chunk_info;
-
-            /* Get the chunk info, for the selection in the chunk */
-            if(NULL == (chunk_info = H5SL_item(chunk_node)))
-                HGOTO_ERROR(H5E_STORAGE, H5E_CANTGET, FAIL, "couldn't get chunk info from skipped list")
 
-            /* Set the dataspace info for I/O */
-            fspace = chunk_info->fspace;
-            mspace = chunk_info->mspace;
-	} /* end else */
+        if(chunk_node == NULL) {
+                /* Set the dataspace info for I/O to NULL, this process doesn't have any I/O to perform */
+                fspace = mspace = NULL;
+        } /* end if */
+        else {
+                H5D_chunk_info_t *chunk_info;
+
+                /* Get the chunk info, for the selection in the chunk */
+                if(NULL == (chunk_info = H5SL_item(chunk_node)))
+                    HGOTO_ERROR(H5E_STORAGE, H5E_CANTGET, FAIL, "couldn't get chunk info from skipped list")
+
+                /* Set the dataspace info for I/O */
+                fspace = chunk_info->fspace;
+                mspace = chunk_info->mspace;
+        } /* end else */
 
         /* Set up the base storage address for this chunk */
         io_info->store = &ctg_store;
@@ -943,6 +922,7 @@ if(H5DEBUG(D))
             if(H5D_sort_chunk(io_info, fm, chunk_addr_info_array, sum_chunk) < 0)
                 HGOTO_ERROR(H5E_DATASPACE, H5E_CANTSWAP, FAIL, "unable to sort chunk address")
             ctg_store.contig.dset_addr = chunk_addr_info_array[0].chunk_addr;
+
 #ifdef H5D_DEBUG
 if(H5DEBUG(D))
     HDfprintf(H5DEBUG(D),"after sorting the chunk address \n");
@@ -1055,7 +1035,7 @@ if(H5DEBUG(D))
     if(chunk_mpi_file_counts)
         H5MM_xfree(chunk_mpi_file_counts);
     if(chunk_mbt_is_derived_array)
-	H5MM_xfree(chunk_mbt_is_derived_array);
+        H5MM_xfree(chunk_mbt_is_derived_array);
     if(chunk_mft_is_derived_array)
         H5MM_xfree(chunk_mft_is_derived_array);
 
@@ -1067,22 +1047,21 @@ if(H5DEBUG(D))
 
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5D_link_chunk_collective_io */
-#endif /* H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS */
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_multi_chunk_collective_io
+ * Function:    H5D_multi_chunk_collective_io
  *
- * Purpose:	To do IO per chunk according to IO mode(collective/independent/none)
+ * Purpose:     To do IO per chunk according to IO mode(collective/independent/none)
  *
  *              1. Use MPI_gather and MPI_Bcast to obtain IO mode in each chunk(collective/independent/none)
  *              2. Depending on whether the IO mode is collective or independent or none,
  *                 Create either MPI derived datatype for each chunk or just do independent IO
  *              3. Use common collective IO routine to do MPI-IO
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:      Non-negative on success/Negative on failure
  *
- * Programmer:	Muqun Yang
+ * Programmer:  Muqun Yang
  *              Monday, Feb. 13th, 2006
  *
  *-------------------------------------------------------------------------
@@ -1106,6 +1085,7 @@ H5D_multi_chunk_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *typ
     int mpi_rank;
 #endif
     size_t              u;                    /* Local index variable */
+    H5D_mpio_actual_io_mode_t actual_io_mode = H5D_MPIO_NO_COLLECTIVE; /* Local variable for tracking the I/O mode used. */
     herr_t              ret_value = SUCCEED;
 
     FUNC_ENTER_NOAPI_NOINIT(H5D_multi_chunk_collective_io)
@@ -1169,7 +1149,7 @@ if(H5DEBUG(D))
             /* Pass in chunk's coordinates in a union. */
             store.chunk.offset  = chunk_info->coords;
             store.chunk.index   = chunk_info->index;
-	} /* end if */
+        } /* end if */
 
         /* Collective IO for this chunk,
          * Note: even there is no selection for this process, the process still
@@ -1185,10 +1165,19 @@ if(H5DEBUG(D))
             if(chunk_info) {
                 fspace = chunk_info->fspace;
                 mspace = chunk_info->mspace;
-	    } /* end if */
-	    else {
+
+                /* Update the local variable tracking the dxpl's actual io mode property.
+                 *
+                 * Note: H5D_MPIO_COLLECTIVE_MULTI | H5D_MPIO_INDEPENDENT = H5D_MPIO_MIXED
+                 *      to ease switching between to mixed I/O without checking the current
+                 *      value of the property. You can see the definition in H5Ppublic.h
+                 */
+                actual_io_mode = actual_io_mode | H5D_MPIO_CHUNK_COLLECTIVE;
+
+            } /* end if */
+            else {
                 fspace = mspace = NULL;
-	    } /* end else */
+            } /* end else */
 
             /* Switch back to collective I/O */
             if(last_xfer_mode != H5FD_MPIO_COLLECTIVE) {
@@ -1208,8 +1197,8 @@ if(H5DEBUG(D))
             /* Perform the I/O */
             if(H5D_inter_collective_io(&ctg_io_info, type_info, fspace, mspace) < 0)
                 HGOTO_ERROR(H5E_IO, H5E_CANTGET, FAIL, "couldn't finish shared collective MPI-IO")
-	} /* end if */
-	else {  /* possible independent IO for this chunk */
+        } /* end if */
+        else {  /* possible independent IO for this chunk */
 #ifdef H5D_DEBUG
 if(H5DEBUG(D))
     HDfprintf(H5DEBUG(D),"inside independent IO mpi_rank = %d, chunk index = %Zu\n", mpi_rank, u);
@@ -1217,85 +1206,13 @@ if(H5DEBUG(D))
 
             HDassert(chunk_io_option[u] == 0);
 
-#if !defined(H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS) || !defined(H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS)
-            /* Check if this process has something to do with this chunk */
-            if(chunk_info) {
-                H5D_io_info_t *chk_io_info;     /* Pointer to I/O info object for this chunk */
-                H5D_chunk_ud_t udata;         /* B-tree pass-through	*/
-                void *chunk;                    /* Pointer to the data chunk in cache */
-                uint32_t accessed_bytes;          /* Total accessed size in a chunk */
-                htri_t cacheable;               /* Whether the chunk is cacheable */
-
-                /* Switch to independent I/O */
-                if(last_xfer_mode != H5FD_MPIO_INDEPENDENT) {
-                    if(H5D_ioinfo_xfer_mode(io_info, dx_plist, H5FD_MPIO_INDEPENDENT) < 0)
-                        HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't switch to independent I/O")
-                    last_xfer_mode = H5FD_MPIO_INDEPENDENT;
-                } /* end if */
-
-                /* Load the chunk into cache.  But if the whole chunk is written,
-                 * simply allocate space instead of load the chunk.
-                 */
-                if(H5D_chunk_lookup(io_info->dset, io_info->dxpl_id,
-                        chunk_info->coords, chunk_info->index, &udata) < 0)
-                    HGOTO_ERROR(H5E_STORAGE, H5E_CANTGET, FAIL, "couldn't get chunk info from skipped list")
-
-                /* Load the chunk into cache and lock it. */
-                if((cacheable = H5D_chunk_cacheable(io_info, udata.addr,
-                        io_info->op_type == H5D_IO_OP_WRITE)) < 0)
-                    HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't tell if chunk is cacheable")
-                if(cacheable) {
-                    hbool_t entire_chunk = TRUE;         /* Whether whole chunk is selected */
-
-                    /* Compute # of bytes accessed in chunk */
-                    accessed_bytes = chunk_info->chunk_points * type_info->src_type_size;
-
-                    /* Determine if we will access all the data in the chunk */
-                    if(((io_info->op_type == H5D_IO_OP_WRITE) && (accessed_bytes != ctg_store.contig.dset_size))
-                            || (io_info->op_type != H5D_IO_OP_WRITE))
-                        entire_chunk = FALSE;
-
-                    /* Lock the chunk into the cache */
-                    if(NULL == (chunk = H5D_chunk_lock(io_info, &udata, entire_chunk)))
-                        HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "unable to read raw data chunk")
-
-                    /* Set up the storage buffer information for this chunk */
-                    cpt_store.compact.buf = chunk;
-
-                    /* Point I/O info at contiguous I/O info for this chunk */
-                    chk_io_info = &cpt_io_info;
-                } /* end if */
-                else {
-                    /* Set up the storage address information for this chunk */
-                    ctg_store.contig.dset_addr = udata.addr;
-
-                    /* No chunk cached */
-                    chunk = NULL;
-
-                    /* Point I/O info at temporary I/O info for this chunk */
-                    chk_io_info = &ctg_io_info;
-                } /* end else */
-
-                if(io_info->op_type == H5D_IO_OP_WRITE) {
-                    if((io_info->io_ops.single_write)(chk_io_info, type_info,
-                            (hsize_t)chunk_info->chunk_points, chunk_info->fspace, chunk_info->mspace) < 0)
-                        HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "optimized write failed")
-                } /* end if */
-                else {
-                    if((io_info->io_ops.single_read)(chk_io_info, type_info,
-                            (hsize_t)chunk_info->chunk_points, chunk_info->fspace, chunk_info->mspace) < 0)
-                        HGOTO_ERROR(H5E_DATASET, H5E_READERROR, FAIL, "optimized read failed")
-                } /* end else */
-
-                /* Release the cache lock on the chunk. */
-                if(chunk && H5D_chunk_unlock(io_info, &udata, (io_info->op_type == H5D_IO_OP_WRITE), chunk, accessed_bytes) < 0)
-                    HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "unable to unlock raw data chunk")
-            } /* end if */
-#else /* !defined(H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS) || !defined(H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS) */
             /* Set the file & memory dataspaces */
             if(chunk_info) {
                 fspace = chunk_info->fspace;
                 mspace = chunk_info->mspace;
+
+                /* Update the local variable tracking the dxpl's actual io mode. */
+                actual_io_mode = actual_io_mode | H5D_MPIO_CHUNK_INDEPENDENT;
             } /* end if */
             else {
                 fspace = mspace = NULL;
@@ -1318,10 +1235,13 @@ if(H5DEBUG(D))
   if(H5DEBUG(D))
     HDfprintf(H5DEBUG(D),"after inter collective IO\n");
 #endif
-#endif /* !defined(H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS) || !defined(H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS) */
         } /* end else */
     } /* end for */
 
+    /* Write the local value of actual io mode to the DXPL. */
+    if(H5P_set(dx_plist, H5D_MPIO_ACTUAL_IO_MODE_NAME, &actual_io_mode) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "couldn't set actual io mode property")
+
 done:
     if(chunk_io_option)
         H5MM_xfree(chunk_io_option);
@@ -1333,9 +1253,9 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_multi_chunk_collective_io_no_opt
+ * Function:    H5D_multi_chunk_collective_io_no_opt
  *
- * Purpose:	To do collective IO without any optimization per chunk base
+ * Purpose:     To do collective IO without any optimization per chunk base
  *              The internal independent IO inside HDF5 cannot handle
  *              non-contiguous(or with holes) storage efficiently.
  *              Under this case, the one independent IO call may consist of
@@ -1352,9 +1272,9 @@ done:
  *              The HDF5 library won't do any IO management but leave it to MPI-IO to figure
  *              out.
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:      Non-negative on success/Negative on failure
  *
- * Programmer:	Muqun Yang
+ * Programmer:  Muqun Yang
  *              Monday, Feb. 13th, 2006
  *
  *-------------------------------------------------------------------------
@@ -1372,6 +1292,7 @@ H5D_multi_chunk_collective_io_no_opt(H5D_io_info_t *io_info,
     int             min_chunk = -1;       /* Minimum # of chunks all processes will operate on */
     int             count_chunk;          /* How many chunks have we operated on? */
     H5D_storage_t   store;                /* union of EFL and chunk pointer in file space */
+    H5D_mpio_actual_io_mode_t actual_io_mode = H5D_MPIO_NO_COLLECTIVE; /*Local variable for tracking the I/O modes used. */
     herr_t          ret_value = SUCCEED;
 
     FUNC_ENTER_NOAPI_NOINIT(H5D_multi_chunk_collective_io_no_opt)
@@ -1416,7 +1337,7 @@ if(H5DEBUG(D)) {
      /* Iterate through chunks to be operated on */
     while(chunk_node) {
         H5D_chunk_info_t *chunk_info;   /* chunk information */
-        H5D_chunk_ud_t udata;		/* B-tree pass-through	*/
+        H5D_chunk_ud_t udata;           /* B-tree pass-through */
         hbool_t make_ind, make_coll;    /* Flags to indicate that the MPI mode should change */
 
         /* Get the actual chunk information from the skip list node */
@@ -1437,20 +1358,6 @@ if(H5DEBUG(D)) {
         if(count_chunk > min_chunk)
             /* Switch to independent I/O (permanently) */
             make_ind = TRUE;
-#ifndef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS
-/* This case needs to be improved to check if the selected space
-   is regular. If all selections are regular, collective IO can still be done.
-   However, since we find an MPI-IO bug at a DOE machine(mcr) that cannot
-   handle collective I/O selection for this case correctly,
-   we turn off this optimization but leave the following code
-   for future optimization. Otherwise, the following else {} doesn't make sense.
-   KY 2006/8/4/ */
-        else {
-            /* Switch to independent I/O (temporarily) */
-            make_ind = TRUE;
-            make_coll = TRUE;
-        } /* end else */
-#endif /* H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS */
 
         /* Retrieve the chunk's address */
         if(H5D_chunk_lookup(io_info->dset, io_info->dxpl_id, chunk_info->coords,
@@ -1468,6 +1375,9 @@ if(H5DEBUG(D)) {
             if(H5D_ioinfo_xfer_mode(io_info, dx_plist, H5FD_MPIO_INDEPENDENT) < 0)
                 HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't switch to independent I/O")
 
+            /* Update the local variable tracking the dxpl's actual io mode */
+            actual_io_mode = actual_io_mode | H5D_MPIO_CHUNK_INDEPENDENT;
+
             /* Load the chunk into cache and lock it. */
             if((cacheable = H5D_chunk_cacheable(io_info, udata.addr,
                     io_info->op_type == H5D_IO_OP_WRITE)) < 0)
@@ -1524,6 +1434,9 @@ if(H5DEBUG(D)) {
             /* Set up the storage address information for this chunk */
             ctg_store.contig.dset_addr = udata.addr;
 
+            /* Update the local variable tracking the dxpl's actual io Mode. */
+            actual_io_mode = actual_io_mode | H5D_MPIO_CHUNK_COLLECTIVE;
+
             if(H5D_inter_collective_io(&ctg_io_info, type_info, chunk_info->fspace, chunk_info->mspace) < 0)
                 HGOTO_ERROR(H5E_IO, H5E_CANTGET, FAIL,"couldn't finish shared collective MPI-IO")
         } /* end else */
@@ -1536,20 +1449,24 @@ if(H5DEBUG(D)) {
         chunk_node = H5SL_next(chunk_node);
     } /* end while */
 
+    /* Write the local value of actual io mode to the DXPL. */
+    if(H5P_set(dx_plist, H5D_MPIO_ACTUAL_IO_MODE_NAME, &actual_io_mode) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTSET, FAIL, "couldn't set actual io mode property")
+
 done:
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5D_multi_chunk_collective_io_no_opt */
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_inter_collective_io
+ * Function:    H5D_inter_collective_io
  *
- * Purpose:	Routine for the shared part of collective IO between multiple chunk
+ * Purpose:     Routine for the shared part of collective IO between multiple chunk
  *              collective IO and contiguous collective IO
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:      Non-negative on success/Negative on failure
  *
- * Programmer:	Muqun Yang
+ * Programmer:  Muqun Yang
  *              Monday, Feb. 13th, 2006
  *
  *-------------------------------------------------------------------------
@@ -1611,13 +1528,13 @@ if(H5DEBUG(D))
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_final_collective_io
+ * Function:    H5D_final_collective_io
  *
- * Purpose:	Routine for the common part of collective IO with different storages.
+ * Purpose:     Routine for the common part of collective IO with different storages.
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:      Non-negative on success/Negative on failure
  *
- * Programmer:	Muqun Yang
+ * Programmer:  Muqun Yang
  *              Monday, Feb. 13th, 2006
  *
  *-------------------------------------------------------------------------
@@ -1626,7 +1543,7 @@ static herr_t
 H5D_final_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *type_info,
     hsize_t mpi_buf_count, MPI_Datatype *mpi_file_type, MPI_Datatype *mpi_buf_type)
 {
-    hbool_t	plist_is_setup = FALSE; /* Whether the dxpl has been customized */
+    hbool_t     plist_is_setup = FALSE; /* Whether the dxpl has been customized */
     herr_t      ret_value = SUCCEED;
 
     FUNC_ENTER_NOAPI_NOINIT(H5D_final_collective_io)
@@ -1638,7 +1555,7 @@ H5D_final_collective_io(H5D_io_info_t *io_info, const H5D_type_info_t *type_info
 
     if(io_info->op_type == H5D_IO_OP_WRITE) {
         if((io_info->io_ops.single_write)(io_info, type_info, mpi_buf_count, NULL, NULL) < 0)
-	    HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "optimized write failed")
+            HGOTO_ERROR(H5E_DATASET, H5E_WRITEERROR, FAIL, "optimized write failed")
     } /* end if */
     else {
         if((io_info->io_ops.single_read)(io_info, type_info, mpi_buf_count, NULL, NULL) < 0)
@@ -1658,12 +1575,11 @@ if(H5DEBUG(D))
       FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5D_final_collective_io */
 
-#ifdef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_sort_chunk
+ * Function:    H5D_sort_chunk
  *
- * Purpose:	Routine to sort chunks in increasing order of chunk address
+ * Purpose:     Routine to sort chunks in increasing order of chunk address
  *              Each chunk address is also obtained.
  *
  * Description:
@@ -1678,9 +1594,9 @@ if(H5DEBUG(D))
  *                     many_chunk_opt                         : flag to optimize the way to obtain chunk addresses
  *                                                              for many chunks
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:      Non-negative on success/Negative on failure
  *
- * Programmer:	Muqun Yang
+ * Programmer:  Muqun Yang
  *              Monday, Feb. 13th, 2006
  *
  *-------------------------------------------------------------------------
@@ -1699,7 +1615,7 @@ H5D_sort_chunk(H5D_io_info_t *io_info, const H5D_chunk_map_t *fm,
     int             mpi_size;                   /* Number of MPI processes */
     int             mpi_code;                   /* MPI return code */
     int             i;                          /* Local index variable */
-    herr_t	    ret_value = SUCCEED;        /* Return value		*/
+    herr_t          ret_value = SUCCEED;        /* Return value */
 
     FUNC_ENTER_NOAPI_NOINIT(H5D_sort_chunk)
 
@@ -1740,14 +1656,15 @@ if(H5DEBUG(D))
         /* Retrieve all the chunk addresses with process 0 */
         if((mpi_rank = H5F_mpi_get_rank(io_info->dset->oloc.file)) < 0)
             HGOTO_ERROR(H5E_IO, H5E_MPI, FAIL, "unable to obtain mpi rank")
-	if(mpi_rank == 0) {
+
+        if(mpi_rank == 0) {
             if(H5D_chunk_addrmap(io_info, total_chunk_addr_array) < 0)
                 HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get chunk address")
-	} /* end if */
+        } /* end if */
 
-	/* Broadcasting the MPI_IO option info. and chunk address info. */
-	if(MPI_SUCCESS != (mpi_code = MPI_Bcast(total_chunk_addr_array, (int)(sizeof(haddr_t) * fm->layout->u.chunk.nchunks), MPI_BYTE, (int)0, io_info->comm)))
-	   HMPI_GOTO_ERROR(FAIL, "MPI_BCast failed", mpi_code)
+        /* Broadcasting the MPI_IO option info. and chunk address info. */
+        if(MPI_SUCCESS != (mpi_code = MPI_Bcast(total_chunk_addr_array, (int)(sizeof(haddr_t) * fm->layout->u.chunk.nchunks), MPI_BYTE, (int)0, io_info->comm)))
+           HMPI_GOTO_ERROR(FAIL, "MPI_BCast failed", mpi_code)
     } /* end if */
 
     /* Start at first node in chunk skip list */
@@ -1801,13 +1718,12 @@ done:
 
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5D_sort_chunk() */
-#endif /* H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS */
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5D_obtain_mpio_mode
+ * Function:    H5D_obtain_mpio_mode
  *
- * Purpose:	Routine to obtain each io mode(collective,independent or none) for each chunk;
+ * Purpose:     Routine to obtain each io mode(collective,independent or none) for each chunk;
  *              Each chunk address is also obtained.
  *
  * Description:
@@ -1833,9 +1749,9 @@ done:
  *              Output: uint8_t assign_io_mode[], : IO mode, collective, independent or none
  *                      haddr_t chunk_addr[],     : chunk address array for each chunk
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:      Non-negative on success/Negative on failure
  *
- * Programmer:	Muqun Yang
+ * Programmer:  Muqun Yang
  *              Monday, Feb. 13th, 2006
  *
  *-------------------------------------------------------------------------
@@ -1846,9 +1762,7 @@ H5D_obtain_mpio_mode(H5D_io_info_t* io_info, H5D_chunk_map_t *fm,
 {
     int               total_chunks;
     unsigned          percent_nproc_per_chunk, threshold_nproc_per_chunk;
-#if defined(H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS) && defined(H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS)
     H5FD_mpio_chunk_opt_t chunk_opt_mode;
-#endif
     uint8_t*          io_mode_info = NULL;
     uint8_t*          recv_io_mode_info = NULL;
     uint8_t*          mergebuf = NULL;
@@ -1881,7 +1795,6 @@ H5D_obtain_mpio_mode(H5D_io_info_t* io_info, H5D_chunk_map_t *fm,
     /* Setup parameters */
     H5_ASSIGN_OVERFLOW(total_chunks, fm->layout->u.chunk.nchunks, hsize_t, int);
     percent_nproc_per_chunk = H5P_peek_unsigned(dx_plist, H5D_XFER_MPIO_CHUNK_OPT_RATIO_NAME);
-#if defined(H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS) && defined(H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS)
     chunk_opt_mode = (H5FD_mpio_chunk_opt_t)H5P_peek_unsigned(dx_plist, H5D_XFER_MPIO_CHUNK_OPT_HARD_NAME);
     if((chunk_opt_mode == H5FD_MPIO_CHUNK_MULTI_IO) || (percent_nproc_per_chunk == 0)) {
         if(H5D_chunk_addrmap(io_info, chunk_addr) < 0)
@@ -1891,7 +1804,6 @@ H5D_obtain_mpio_mode(H5D_io_info_t* io_info, H5D_chunk_map_t *fm,
 
         HGOTO_DONE(SUCCEED)
     } /* end if */
-#endif
     threshold_nproc_per_chunk = mpi_size * percent_nproc_per_chunk/100;
 
     /* Allocate memory */
@@ -1907,16 +1819,7 @@ H5D_obtain_mpio_mode(H5D_io_info_t* io_info, H5D_chunk_map_t *fm,
     while(chunk_node) {
         chunk_info    = H5SL_item(chunk_node);
 
-#ifndef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS
-        /* regularity information: 1, selection information: 2 */
-        if(H5S_SELECT_IS_REGULAR(chunk_info->fspace) == TRUE &&
-                H5S_SELECT_IS_REGULAR(chunk_info->mspace) == TRUE)
-#endif
-            io_mode_info[chunk_info->index] = H5D_CHUNK_SELECT_REG; /* this chunk is selected and is "regular" without defining H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS. */
-#ifndef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS
-        else
-            io_mode_info[chunk_info->index] = H5D_CHUNK_SELECT_IRREG; /* this chunk is selected and is irregular*/
-#endif
+            io_mode_info[chunk_info->index] = H5D_CHUNK_SELECT_REG; /* this chunk is selected and is "regular" */
         chunk_node = H5SL_next(chunk_node);
     } /* end while */
 
@@ -1928,23 +1831,14 @@ H5D_obtain_mpio_mode(H5D_io_info_t* io_info, H5D_chunk_map_t *fm,
     if(mpi_rank == root) {
         int               nproc;
         int*              nproc_per_chunk;
-#if !defined(H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS) || !defined(H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS)
-        int*              ind_this_chunk;
-#endif
 
         /* pre-computing: calculate number of processes and
             regularity of the selection occupied in each chunk */
         nproc_per_chunk = (int*)H5MM_calloc(total_chunks * sizeof(int));
-#if !defined(H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS) || !defined(H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS)
-        ind_this_chunk   = (int*)H5MM_calloc(total_chunks * sizeof(int));
-#endif
 
         /* calculating the chunk address */
         if(H5D_chunk_addrmap(io_info, chunk_addr) < 0) {
             HDfree(nproc_per_chunk);
-#if !defined(H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS) || !defined(H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS)
-            HDfree(ind_this_chunk);
-#endif
             HGOTO_ERROR(H5E_DATASET, H5E_CANTGET, FAIL, "can't get chunk address")
         } /* end if */
 
@@ -1956,29 +1850,14 @@ H5D_obtain_mpio_mode(H5D_io_info_t* io_info, H5D_chunk_map_t *fm,
             for(ic = 0; ic < total_chunks; ic++, tmp_recv_io_mode_info++) {
                 if(*tmp_recv_io_mode_info != 0) {
                     nproc_per_chunk[ic]++;
-#ifndef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS
-                    if(*tmp_recv_io_mode_info == H5D_CHUNK_SELECT_IRREG)
-                        ind_this_chunk[ic] = 1;
-#endif
                 } /* end if */
-#ifndef H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS
-                else {
-                    /*checking whether we have a selection in this chunk */
-                    ind_this_chunk[ic] = 1;
-                } /* end else */
-#endif
             } /* end for */
         } /* end for */
 
         /* Calculating MPIO mode for each chunk (collective, independent, none) */
         for(ic = 0; ic < total_chunks; ic++) {
             if(nproc_per_chunk[ic] > MAX(1, threshold_nproc_per_chunk)) {
-#if !defined(H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS) || !defined(H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS)
-                if(!ind_this_chunk[ic])
-                    assign_io_mode[ic] = H5D_CHUNK_IO_MODE_COL;
-#else
                 assign_io_mode[ic] = H5D_CHUNK_IO_MODE_COL;
-#endif
             } /* end if */
         } /* end for */
 
@@ -1988,9 +1867,6 @@ H5D_obtain_mpio_mode(H5D_io_info_t* io_info, H5D_chunk_map_t *fm,
         HDmemcpy(tempbuf, chunk_addr, sizeof(haddr_t) * total_chunks);
 
         HDfree(nproc_per_chunk);
-#if !defined(H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS) || !defined(H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS)
-        HDfree(ind_this_chunk);
-#endif
     } /* end if */
 
     /* Broadcasting the MPI_IO option info. and chunk address info. */
@@ -2003,11 +1879,6 @@ H5D_obtain_mpio_mode(H5D_io_info_t* io_info, H5D_chunk_map_t *fm,
 #ifdef H5_HAVE_INSTRUMENTED_LIBRARY
     check_prop = H5Pexist(io_info->dxpl_id, H5D_XFER_COLL_CHUNK_MULTI_RATIO_COLL_NAME);
     if(check_prop > 0) {
-#if !defined(H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS) || !defined(H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS)
-        new_value = 0;
-        if(H5Pset(io_info->dxpl_id, H5D_XFER_COLL_CHUNK_MULTI_RATIO_COLL_NAME, &new_value) < 0)
-            HGOTO_ERROR(H5E_PLIST, H5E_UNSUPPORTED, FAIL, "unable to set property value")
-#else
         for(ic = 0; ic < total_chunks; ic++) {
             if(assign_io_mode[ic] == H5D_CHUNK_IO_MODE_COL) {
                 new_value = 0;
@@ -2016,7 +1887,6 @@ H5D_obtain_mpio_mode(H5D_io_info_t* io_info, H5D_chunk_map_t *fm,
                 break;
             } /* end if */
         } /* end for */
-#endif
     } /* end if */
 
     check_prop = H5Pexist(io_info->dxpl_id, H5D_XFER_COLL_CHUNK_MULTI_RATIO_IND_NAME);
diff --git a/src/H5Dprivate.h b/src/H5Dprivate.h
index 5849598..48966db 100644
--- a/src/H5Dprivate.h
+++ b/src/H5Dprivate.h
@@ -72,6 +72,8 @@
 #define H5D_XFER_MPIO_CHUNK_OPT_HARD_NAME "mpio_chunk_opt_hard"
 #define H5D_XFER_MPIO_CHUNK_OPT_NUM_NAME "mpio_chunk_opt_num"
 #define H5D_XFER_MPIO_CHUNK_OPT_RATIO_NAME "mpio_chunk_opt_ratio"
+#define H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_NAME "actual_chunk_opt_mode"
+#define H5D_MPIO_ACTUAL_IO_MODE_NAME    "actual_io_mode"
 #endif /* H5_HAVE_PARALLEL */
 #define H5D_XFER_EDC_NAME               "err_detect"    /* EDC */
 #define H5D_XFER_FILTER_CB_NAME         "filter_cb"     /* Filter callback function */
diff --git a/src/H5E.c b/src/H5E.c
index 8cc2099..35a8bab 100644
--- a/src/H5E.c
+++ b/src/H5E.c
@@ -1333,11 +1333,13 @@ H5Epush2(hid_t err_stack, const char *file, const char *func, unsigned line,
     int         desc_len;       /* Actual length of description when formatted */
 #endif /* H5_HAVE_VASPRINTF */
     char        *tmp = NULL;      /* Buffer to place formatted description in */
+    hbool_t     va_started = FALSE; /* Whether the variable argument list is open */
     herr_t	ret_value=SUCCEED;      /* Return value */
 
     /* Don't clear the error stack! :-) */
     FUNC_ENTER_API_NOCLEAR(H5Epush2, FAIL)
-    H5TRACE7("e","issIuiis",err_stack,file,func,line,maj_id,min_id,fmt);
+    H5TRACE8("e", "i*s*sIuiii*s", err_stack, file, func, line, cls_id, maj_id,
+             min_id, fmt);
 
     if(err_stack == H5E_DEFAULT)
     	estack = NULL;
@@ -1352,6 +1354,7 @@ H5Epush2(hid_t err_stack, const char *file, const char *func, unsigned line,
 
     /* Format the description */
     va_start(ap, fmt);
+    va_started = TRUE;
 
 #ifdef H5_HAVE_VASPRINTF
     /* Use the vasprintf() routine, since it does what we're trying to do below */
@@ -1393,13 +1396,13 @@ H5Epush2(hid_t err_stack, const char *file, const char *func, unsigned line,
     } /* end while */
 #endif /* H5_HAVE_VASPRINTF */
 
-    va_end(ap);
-
     /* Push the error on the stack */
     if(H5E_push_stack(estack, file, func, line, cls_id, maj_id, min_id, tmp) < 0)
         HGOTO_ERROR(H5E_ERROR, H5E_CANTSET, FAIL, "can't push error on stack")
 
 done:
+    if(va_started)
+        va_end(ap);
     if(tmp)
         H5MM_xfree(tmp);
 
diff --git a/src/H5Eint.c b/src/H5Eint.c
index 1f05d52..1fc8a56 100644
--- a/src/H5Eint.c
+++ b/src/H5Eint.c
@@ -694,6 +694,7 @@ H5E_printf_stack(H5E_t *estack, const char *file, const char *func, unsigned lin
     int         desc_len;       /* Actual length of description when formatted */
 #endif /* H5_HAVE_VASPRINTF */
     char        *tmp = NULL;      /* Buffer to place formatted description in */
+    hbool_t     va_started = FALSE; /* Whether the variable argument list is open */
     herr_t	ret_value = SUCCEED;    /* Return value */
 
     /*
@@ -718,6 +719,7 @@ H5E_printf_stack(H5E_t *estack, const char *file, const char *func, unsigned lin
 
     /* Start the variable-argument parsing */
     va_start(ap, fmt);
+    va_started = TRUE;
 
 #ifdef H5_HAVE_VASPRINTF
     /* Use the vasprintf() routine, since it does what we're trying to do below */
@@ -759,13 +761,13 @@ H5E_printf_stack(H5E_t *estack, const char *file, const char *func, unsigned lin
     } /* end while */
 #endif /* H5_HAVE_VASPRINTF */
 
-    va_end(ap);
-
     /* Push the error on the stack */
     if(H5E_push_stack(estack, file, func, line, cls_id, maj_id, min_id, tmp) < 0)
         HGOTO_DONE(FAIL)
 
 done:
+    if(va_started)
+        va_end(ap);
     if(tmp)
         H5MM_xfree(tmp);
 
diff --git a/src/H5F.c b/src/H5F.c
index 84d5536..7ae54cd 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -2929,3 +2929,149 @@ done:
     FUNC_LEAVE_API(ret_value)
 } /* end H5Fclear_elink_file_cache() */
 
+
+/*-------------------------------------------------------------------------
+ * Function:    H5F_set_grp_btree_shared
+ *
+ * Purpose:     Set the grp_btree_shared field with a valid ref-count pointer.
+ *
+ * Return:      Success:        SUCCEED
+ *              Failure:        FAIL
+ *
+ * Programmer:  Quincey Koziol
+ *              7/19/11
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_set_grp_btree_shared(H5F_t *f, H5RC_t *rc)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_set_grp_btree_shared)
+
+    /* Sanity check */
+    HDassert(f);
+    HDassert(f->shared);
+    HDassert(rc);
+
+    f->shared->grp_btree_shared = rc;
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* H5F_set_grp_btree_shared() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5F_set_sohm_addr
+ *
+ * Purpose:     Set the sohm_addr field with a new value.
+ *
+ * Return:      Success:        SUCCEED
+ *              Failure:        FAIL
+ *
+ * Programmer:  Quincey Koziol
+ *              7/20/11
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_set_sohm_addr(H5F_t *f, haddr_t addr)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_set_sohm_addr)
+
+    /* Sanity check */
+    HDassert(f);
+    HDassert(f->shared);
+
+    f->shared->sohm_addr = addr;
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* H5F_set_sohm_addr() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5F_set_sohm_vers
+ *
+ * Purpose:     Set the sohm_vers field with a new value.
+ *
+ * Return:      Success:        SUCCEED
+ *              Failure:        FAIL
+ *
+ * Programmer:  Quincey Koziol
+ *              7/20/11
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_set_sohm_vers(H5F_t *f, unsigned vers)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_set_sohm_vers)
+
+    /* Sanity check */
+    HDassert(f);
+    HDassert(f->shared);
+
+    f->shared->sohm_vers = vers;
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* H5F_set_sohm_vers() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5F_set_sohm_nindexes
+ *
+ * Purpose:     Set the sohm_nindexes field with a new value.
+ *
+ * Return:      Success:        SUCCEED
+ *              Failure:        FAIL
+ *
+ * Programmer:  Quincey Koziol
+ *              7/20/11
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_set_sohm_nindexes(H5F_t *f, unsigned nindexes)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_set_sohm_nindexes)
+
+    /* Sanity check */
+    HDassert(f);
+    HDassert(f->shared);
+
+    f->shared->sohm_nindexes = nindexes;
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* H5F_set_sohm_nindexes() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    H5F_set_store_msg_crt_idx
+ *
+ * Purpose:     Set the store_msg_crt_idx field with a new value.
+ *
+ * Return:      Success:        SUCCEED
+ *              Failure:        FAIL
+ *
+ * Programmer:  Quincey Koziol
+ *              7/20/11
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_set_store_msg_crt_idx(H5F_t *f, hbool_t flag)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_set_store_msg_crt_idx)
+
+    /* Sanity check */
+    HDassert(f);
+    HDassert(f->shared);
+
+    f->shared->store_msg_crt_idx = flag;
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* H5F_set_store_msg_crt_idx() */
+
diff --git a/src/H5FDcore.c b/src/H5FDcore.c
index e24f0e1..0b19e78 100644
--- a/src/H5FDcore.c
+++ b/src/H5FDcore.c
@@ -17,23 +17,23 @@
  * Programmer:  Robb Matzke <matzke at llnl.gov>
  *              Tuesday, August 10, 1999
  *
- * Purpose:	A driver which stores the HDF5 data in main memory  using
- *		only the HDF5 public API. This driver is useful for fast
- *		access to small, temporary hdf5 files.
+ * Purpose:  A driver which stores the HDF5 data in main memory  using
+ *    only the HDF5 public API. This driver is useful for fast
+ *    access to small, temporary hdf5 files.
  */
 
 /* Interface initialization */
-#define H5_INTERFACE_INIT_FUNC	H5FD_core_init_interface
+#define H5_INTERFACE_INIT_FUNC  H5FD_core_init_interface
 
 
-#include "H5private.h"		/* Generic Functions			*/
-#include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fprivate.h"		/* File access				*/
-#include "H5FDprivate.h"	/* File drivers				*/
-#include "H5FDcore.h"           /* Core file driver			*/
-#include "H5Iprivate.h"		/* IDs			  		*/
-#include "H5MMprivate.h"	/* Memory management			*/
-#include "H5Pprivate.h"		/* Property lists			*/
+#include "H5private.h"    /* Generic Functions      */
+#include "H5Eprivate.h"    /* Error handling        */
+#include "H5Fprivate.h"    /* File access        */
+#include "H5FDprivate.h"  /* File drivers        */
+#include "H5FDcore.h"           /* Core file driver      */
+#include "H5Iprivate.h"    /* IDs            */
+#include "H5MMprivate.h"  /* Memory management      */
+#include "H5Pprivate.h"    /* Property lists      */
 
 /* The driver identification number, initialized at runtime */
 static hid_t H5FD_CORE_g = 0;
@@ -44,16 +44,16 @@ static hid_t H5FD_CORE_g = 0;
  * of the file (the current size of the underlying memory).
  */
 typedef struct H5FD_core_t {
-    H5FD_t	pub;			/*public stuff, must be first	*/
-    char	*name;			/*for equivalence testing	*/
-    unsigned char *mem;			/*the underlying memory		*/
-    haddr_t	eoa;			/*end of allocated region	*/
-    haddr_t	eof;			/*current allocated size	*/
-    size_t	increment;		/*multiples for mem allocation	*/
-    hbool_t	backing_store;		/*write to file name on flush	*/
-    int		fd;			/*backing store file descriptor	*/
+    H5FD_t  pub;      /*public stuff, must be first  */
+    char  *name;      /*for equivalence testing  */
+    unsigned char *mem;      /*the underlying memory    */
+    haddr_t  eoa;      /*end of allocated region  */
+    haddr_t  eof;      /*current allocated size  */
+    size_t  increment;    /*multiples for mem allocation  */
+    hbool_t  backing_store;    /*write to file name on flush  */
+    int    fd;      /*backing store file descriptor  */
     /* Information for determining uniqueness of a file with a backing store */
-#ifndef _WIN32
+#ifndef H5_HAVE_WIN32_API
     /*
      * On most systems the combination of device and i-node number uniquely
      * identify a file.
@@ -66,7 +66,7 @@ typedef struct H5FD_core_t {
 #endif /*H5_VMS*/
 #else
     /*
-     * On _WIN32 the low-order word of a unique identifier associated with the
+     * On H5_HAVE_WIN32_API the low-order word of a unique identifier associated with the
      * file and the volume serial number uniquely identify a file. This number
      * (which, both? -rpm) may change when the system is restarted or when the
      * file is opened. After a process opens a file, the identifier is
@@ -77,43 +77,43 @@ typedef struct H5FD_core_t {
     DWORD fileindexlo;
     DWORD fileindexhi;
 #endif
-    hbool_t	dirty;			/*changes not saved?		*/
+    hbool_t  dirty;      /*changes not saved?    */
 } H5FD_core_t;
 
 /* Driver-specific file access properties */
 typedef struct H5FD_core_fapl_t {
-    size_t	increment;		/*how much to grow memory	*/
-    hbool_t	backing_store;		/*write to file name on flush	*/
+    size_t  increment;    /*how much to grow memory  */
+    hbool_t  backing_store;    /*write to file name on flush  */
 } H5FD_core_fapl_t;
 
 /* Allocate memory in multiples of this size by default */
-#define H5FD_CORE_INCREMENT		8192
+#define H5FD_CORE_INCREMENT    8192
 
 /*
  * These macros check for overflow of various quantities.  These macros
  * assume that file_offset_t is signed and haddr_t and size_t are unsigned.
  *
- * ADDR_OVERFLOW:	Checks whether a file address of type `haddr_t'
- *			is too large to be represented by the second argument
- *			of the file seek function.
+ * ADDR_OVERFLOW:  Checks whether a file address of type `haddr_t'
+ *      is too large to be represented by the second argument
+ *      of the file seek function.
  *
- * SIZE_OVERFLOW:	Checks whether a buffer size of type `hsize_t' is too
- *			large to be represented by the `size_t' type.
+ * SIZE_OVERFLOW:  Checks whether a buffer size of type `hsize_t' is too
+ *      large to be represented by the `size_t' type.
  *
- * REGION_OVERFLOW:	Checks whether an address and size pair describe data
- *			which can be addressed entirely in memory.
+ * REGION_OVERFLOW:  Checks whether an address and size pair describe data
+ *      which can be addressed entirely in memory.
  */
-#define MAXADDR 		((haddr_t)((~(size_t)0)-1))
-#define ADDR_OVERFLOW(A)	(HADDR_UNDEF==(A) || (A) > (haddr_t)MAXADDR)
-#define SIZE_OVERFLOW(Z)	((Z) > (hsize_t)MAXADDR)
-#define REGION_OVERFLOW(A,Z)	(ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) ||      \
-                                 HADDR_UNDEF==(A)+(Z) ||		      \
-				 (size_t)((A)+(Z))<(size_t)(A))
+#define MAXADDR     ((haddr_t)((~(size_t)0)-1))
+#define ADDR_OVERFLOW(A)  (HADDR_UNDEF==(A) || (A) > (haddr_t)MAXADDR)
+#define SIZE_OVERFLOW(Z)  ((Z) > (hsize_t)MAXADDR)
+#define REGION_OVERFLOW(A,Z)  (ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) ||      \
+                                 HADDR_UNDEF==(A)+(Z) ||          \
+         (size_t)((A)+(Z))<(size_t)(A))
 
 /* Prototypes */
 static void *H5FD_core_fapl_get(H5FD_t *_file);
 static H5FD_t *H5FD_core_open(const char *name, unsigned flags, hid_t fapl_id,
-			      haddr_t maxaddr);
+            haddr_t maxaddr);
 static herr_t H5FD_core_close(H5FD_t *_file);
 static int H5FD_core_cmp(const H5FD_t *_f1, const H5FD_t *_f2);
 static herr_t H5FD_core_query(const H5FD_t *_f1, unsigned long *flags);
@@ -122,44 +122,44 @@ static herr_t H5FD_core_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t addr);
 static haddr_t H5FD_core_get_eof(const H5FD_t *_file);
 static herr_t  H5FD_core_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
 static herr_t H5FD_core_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
-			     size_t size, void *buf);
+           size_t size, void *buf);
 static herr_t H5FD_core_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
-			      size_t size, const void *buf);
+            size_t size, const void *buf);
 static herr_t H5FD_core_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
 static herr_t H5FD_core_truncate(H5FD_t *_file, hid_t dxpl_id, hbool_t closing);
 
 static const H5FD_class_t H5FD_core_g = {
-    "core",					/*name			*/
-    MAXADDR,					/*maxaddr		*/
-    H5F_CLOSE_WEAK,				/*fc_degree		*/
-    NULL,					/*sb_size		*/
-    NULL,					/*sb_encode		*/
-    NULL,					/*sb_decode		*/
-    sizeof(H5FD_core_fapl_t),			/*fapl_size		*/
-    H5FD_core_fapl_get,				/*fapl_get		*/
-    NULL,					/*fapl_copy		*/
-    NULL, 					/*fapl_free		*/
-    0,						/*dxpl_size		*/
-    NULL,					/*dxpl_copy		*/
-    NULL,					/*dxpl_free		*/
-    H5FD_core_open,				/*open			*/
-    H5FD_core_close,				/*close			*/
-    H5FD_core_cmp,				/*cmp			*/
-    H5FD_core_query,			        /*query			*/
-    NULL,					/*get_type_map		*/
-    NULL,					/*alloc			*/
-    NULL,					/*free			*/
-    H5FD_core_get_eoa,				/*get_eoa		*/
-    H5FD_core_set_eoa, 				/*set_eoa		*/
-    H5FD_core_get_eof,				/*get_eof		*/
+    "core",          /*name      */
+    MAXADDR,          /*maxaddr    */
+    H5F_CLOSE_WEAK,        /*fc_degree    */
+    NULL,          /*sb_size    */
+    NULL,          /*sb_encode    */
+    NULL,          /*sb_decode    */
+    sizeof(H5FD_core_fapl_t),      /*fapl_size    */
+    H5FD_core_fapl_get,        /*fapl_get    */
+    NULL,          /*fapl_copy    */
+    NULL,           /*fapl_free    */
+    0,            /*dxpl_size    */
+    NULL,          /*dxpl_copy    */
+    NULL,          /*dxpl_free    */
+    H5FD_core_open,        /*open      */
+    H5FD_core_close,        /*close      */
+    H5FD_core_cmp,        /*cmp      */
+    H5FD_core_query,              /*query      */
+    NULL,          /*get_type_map    */
+    NULL,          /*alloc      */
+    NULL,          /*free      */
+    H5FD_core_get_eoa,        /*get_eoa    */
+    H5FD_core_set_eoa,         /*set_eoa    */
+    H5FD_core_get_eof,        /*get_eof    */
     H5FD_core_get_handle,                       /*get_handle            */
-    H5FD_core_read,				/*read			*/
-    H5FD_core_write,				/*write			*/
-    H5FD_core_flush,				/*flush			*/
-    H5FD_core_truncate,				/*truncate		*/
+    H5FD_core_read,        /*read      */
+    H5FD_core_write,        /*write      */
+    H5FD_core_flush,        /*flush      */
+    H5FD_core_truncate,        /*truncate    */
     NULL,                                       /*lock                  */
     NULL,                                       /*unlock                */
-    H5FD_FLMAP_SINGLE 				/*fl_map		*/
+    H5FD_FLMAP_SINGLE         /*fl_map    */
 };
 
 
@@ -186,16 +186,16 @@ H5FD_core_init_interface(void)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_core_init
+ * Function:  H5FD_core_init
  *
- * Purpose:	Initialize this driver by registering the driver with the
- *		library.
+ * Purpose:  Initialize this driver by registering the driver with the
+ *    library.
  *
- * Return:	Success:	The driver ID for the core driver.
+ * Return:  Success:  The driver ID for the core driver.
  *
- *		Failure:	Negative.
+ *    Failure:  Negative.
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, July 29, 1999
  *
  * Modifications:
@@ -221,11 +221,11 @@ done:
 
 
 /*---------------------------------------------------------------------------
- * Function:	H5FD_core_term
+ * Function:  H5FD_core_term
  *
- * Purpose:	Shut down the VFD
+ * Purpose:  Shut down the VFD
  *
- * Return:	<none>
+ * Return:  <none>
  *
  * Programmer:  Quincey Koziol
  *              Friday, Jan 30, 2004
@@ -247,32 +247,32 @@ H5FD_core_term(void)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5Pset_fapl_core
+ * Function:  H5Pset_fapl_core
  *
- * Purpose:	Modify the file access property list to use the H5FD_CORE
- *		driver defined in this source file.  The INCREMENT specifies
- *		how much to grow the memory each time we need more.
+ * Purpose:  Modify the file access property list to use the H5FD_CORE
+ *    driver defined in this source file.  The INCREMENT specifies
+ *    how much to grow the memory each time we need more.
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:  Non-negative on success/Negative on failure
  *
- * Programmer:	Robb Matzke
- *		Thursday, February 19, 1998
+ * Programmer:  Robb Matzke
+ *    Thursday, February 19, 1998
  *
  * Modifications:
- * 		Robb Matzke, 1999-10-19
- *		Added the BACKING_STORE argument. If set then the entire file
- *		contents are flushed to a file with the same name as this
- *		core file.
+ *     Robb Matzke, 1999-10-19
+ *    Added the BACKING_STORE argument. If set then the entire file
+ *    contents are flushed to a file with the same name as this
+ *    core file.
  *
- *		Raymond Lu, 2001-10-25
- *		Changed the file access list to the new generic list.
+ *    Raymond Lu, 2001-10-25
+ *    Changed the file access list to the new generic list.
  *
  *-------------------------------------------------------------------------
  */
 herr_t
 H5Pset_fapl_core(hid_t fapl_id, size_t increment, hbool_t backing_store)
 {
-    H5FD_core_fapl_t	fa;
+    H5FD_core_fapl_t  fa;
     H5P_genplist_t *plist;      /* Property list pointer */
     herr_t ret_value;
 
@@ -294,32 +294,32 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5Pget_fapl_core
+ * Function:  H5Pget_fapl_core
  *
- * Purpose:	Queries properties set by the H5Pset_fapl_core() function.
+ * Purpose:  Queries properties set by the H5Pset_fapl_core() function.
  *
- * Return:	Success:	Non-negative
+ * Return:  Success:  Non-negative
  *
- *		Failure:	Negative
+ *    Failure:  Negative
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Tuesday, August 10, 1999
  *
  * Modifications:
- *		Robb Matzke, 1999-10-19
- *		Added the BACKING_STORE argument.
+ *    Robb Matzke, 1999-10-19
+ *    Added the BACKING_STORE argument.
  *
- *		Raymond Lu
- *		2001-10-25
- *		Changed file access list to the new generic property list.
+ *    Raymond Lu
+ *    2001-10-25
+ *    Changed file access list to the new generic property list.
  *
  *-------------------------------------------------------------------------
  */
 herr_t
 H5Pget_fapl_core(hid_t fapl_id, size_t *increment/*out*/,
-		 hbool_t *backing_store/*out*/)
+     hbool_t *backing_store/*out*/)
 {
-    H5FD_core_fapl_t	*fa;
+    H5FD_core_fapl_t  *fa;
     H5P_genplist_t *plist;      /* Property list pointer */
     herr_t      ret_value=SUCCEED;       /* Return value */
 
@@ -344,15 +344,15 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_core_fapl_get
+ * Function:  H5FD_core_fapl_get
  *
- * Purpose:	Returns a copy of the file access properties.
+ * Purpose:  Returns a copy of the file access properties.
  *
- * Return:	Success:	Ptr to new file access properties.
+ * Return:  Success:  Ptr to new file access properties.
  *
- *		Failure:	NULL
+ *    Failure:  NULL
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Friday, August 13, 1999
  *
  * Modifications:
@@ -362,8 +362,8 @@ done:
 static void *
 H5FD_core_fapl_get(H5FD_t *_file)
 {
-    H5FD_core_t		*file = (H5FD_core_t*)_file;
-    H5FD_core_fapl_t	*fa;
+    H5FD_core_t    *file = (H5FD_core_t*)_file;
+    H5FD_core_fapl_t  *fa;
     void      *ret_value;       /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_core_fapl_get, NULL)
@@ -383,22 +383,22 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_core_open
+ * Function:  H5FD_core_open
  *
- * Purpose:	Create memory as an HDF5 file.
+ * Purpose:  Create memory as an HDF5 file.
  *
- * Return:	Success:	A pointer to a new file data structure. The
- *				public fields will be initialized by the
- *				caller, which is always H5FD_open().
+ * Return:  Success:  A pointer to a new file data structure. The
+ *        public fields will be initialized by the
+ *        caller, which is always H5FD_open().
  *
- *		Failure:	NULL
+ *    Failure:  NULL
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, July 29, 1999
  *
  * Modifications:
- *		Robb Matzke, 1999-10-19
- *		The backing store file is created and opened if specified.
+ *    Robb Matzke, 1999-10-19
+ *    The backing store file is created and opened if specified.
  *
  *              Raymond Lu, 2006-11-30
  *              Enabled the driver to read an existing file depending on
@@ -407,19 +407,19 @@ done:
  */
 static H5FD_t *
 H5FD_core_open(const char *name, unsigned flags, hid_t fapl_id,
-	       haddr_t maxaddr)
+         haddr_t maxaddr)
 {
-    int			o_flags;
-    H5FD_core_t		*file=NULL;
-    H5FD_core_fapl_t	*fa=NULL;
+    int      o_flags;
+    H5FD_core_t    *file=NULL;
+    H5FD_core_fapl_t  *fa=NULL;
     H5P_genplist_t *plist;      /* Property list pointer */
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
     HFILE filehandle;
     struct _BY_HANDLE_FILE_INFORMATION fileinfo;
 #endif
-    h5_stat_t		sb;
-    int			fd=-1;
-    H5FD_t		*ret_value;
+    h5_stat_t    sb;
+    int      fd=-1;
+    H5FD_t    *ret_value;
 
     FUNC_ENTER_NOAPI(H5FD_core_open, NULL)
 
@@ -470,12 +470,12 @@ H5FD_core_open(const char *name, unsigned flags, hid_t fapl_id,
 
     if(fd >= 0) {
         /* Retrieve information for determining uniqueness of file */
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
         filehandle = _get_osfhandle(fd);
         (void)GetFileInformationByHandle((HANDLE)filehandle, &fileinfo);
         file->fileindexhi = fileinfo.nFileIndexHigh;
         file->fileindexlo = fileinfo.nFileIndexLow;
-#else /* _WIN32 */
+#else /* H5_HAVE_WIN32_API */
         file->device = sb.st_dev;
 #ifdef H5_VMS
         file->inode[0] = sb.st_ino[0];
@@ -485,7 +485,7 @@ H5FD_core_open(const char *name, unsigned flags, hid_t fapl_id,
         file->inode = sb.st_ino;
 #endif /* H5_VMS */
 
-#endif /* _WIN32 */
+#endif /* H5_HAVE_WIN32_API */
     } /* end if */
 
     /* If an existing file is opened, load the whole file into memory. */
@@ -493,7 +493,7 @@ H5FD_core_open(const char *name, unsigned flags, hid_t fapl_id,
         size_t size;
 
         /* Retrieve file size */
-	size = (size_t)sb.st_size;
+  size = (size_t)sb.st_size;
 
         /* Check if we should allocate the memory buffer and read in existing data */
         if(size) {
@@ -519,15 +519,15 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_core_close
+ * Function:  H5FD_core_close
  *
- * Purpose:	Closes the file.
+ * Purpose:  Closes the file.
  *
- * Return:	Success:	0
+ * Return:  Success:  0
  *
- *		Failure:	-1
+ *    Failure:  -1
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, July 29, 1999
  *
  *-------------------------------------------------------------------------
@@ -535,7 +535,7 @@ done:
 static herr_t
 H5FD_core_close(H5FD_t *_file)
 {
-    H5FD_core_t	*file = (H5FD_core_t*)_file;
+    H5FD_core_t  *file = (H5FD_core_t*)_file;
     herr_t ret_value = SUCCEED;       /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_core_close, FAIL)
@@ -560,19 +560,19 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_core_cmp
+ * Function:  H5FD_core_cmp
  *
- * Purpose:	Compares two files belonging to this driver by name. If one
- *		file doesn't have a name then it is less than the other file.
- *		If neither file has a name then the comparison is by file
- *		address.
+ * Purpose:  Compares two files belonging to this driver by name. If one
+ *    file doesn't have a name then it is less than the other file.
+ *    If neither file has a name then the comparison is by file
+ *    address.
  *
- * Return:	Success:	A value like strcmp()
+ * Return:  Success:  A value like strcmp()
  *
- *		Failure:	never fails (arguments were checked by the
- *				caller).
+ *    Failure:  never fails (arguments were checked by the
+ *        caller).
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, July 29, 1999
  *
  * Modifications:
@@ -587,15 +587,15 @@ done:
 static int
 H5FD_core_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
 {
-    const H5FD_core_t	*f1 = (const H5FD_core_t*)_f1;
-    const H5FD_core_t	*f2 = (const H5FD_core_t*)_f2;
-    int			ret_value = 0;
+    const H5FD_core_t  *f1 = (const H5FD_core_t*)_f1;
+    const H5FD_core_t  *f2 = (const H5FD_core_t*)_f2;
+    int      ret_value = 0;
 
     FUNC_ENTER_NOAPI(H5FD_core_cmp, FAIL)
 
     if(f1->fd >= 0 && f2->fd >= 0) {
         /* Compare low level file information for backing store */
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
         if (f1->fileindexhi < f2->fileindexhi) HGOTO_DONE(-1)
         if (f1->fileindexhi > f2->fileindexhi) HGOTO_DONE(1)
 
@@ -623,7 +623,7 @@ H5FD_core_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
         if(HDmemcmp(&(f1->inode),&(f2->inode),3*sizeof(ino_t))>0) HGOTO_DONE(1)
 #endif /* H5_VMS */
 
-#endif /*_WIN32*/
+#endif /*H5_HAVE_WIN32_API*/
     } /* end if */
     else {
         if (NULL==f1->name && NULL==f2->name) {
@@ -648,15 +648,15 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_core_query
+ * Function:  H5FD_core_query
  *
- * Purpose:	Set the flags that this VFL driver is capable of supporting.
+ * Purpose:  Set the flags that this VFL driver is capable of supporting.
  *              (listed in H5FDpublic.h)
  *
- * Return:	Success:	non-negative
- *		Failure:	negative
+ * Return:  Success:  non-negative
+ *    Failure:  negative
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Tuesday, October  7, 2008
  *
  *-------------------------------------------------------------------------
@@ -664,7 +664,7 @@ done:
 static herr_t
 H5FD_core_query(const H5FD_t * _file, unsigned long *flags /* out */)
 {
-    const H5FD_core_t	*file = (const H5FD_core_t*)_file;
+    const H5FD_core_t  *file = (const H5FD_core_t*)_file;
 
     FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_core_query)
 
@@ -686,17 +686,17 @@ H5FD_core_query(const H5FD_t * _file, unsigned long *flags /* out */)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_core_get_eoa
+ * Function:  H5FD_core_get_eoa
  *
- * Purpose:	Gets the end-of-address marker for the file. The EOA marker
- *		is the first address past the last byte allocated in the
- *		format address space.
+ * Purpose:  Gets the end-of-address marker for the file. The EOA marker
+ *    is the first address past the last byte allocated in the
+ *    format address space.
  *
- * Return:	Success:	The end-of-address marker.
+ * Return:  Success:  The end-of-address marker.
  *
- *		Failure:	HADDR_UNDEF
+ *    Failure:  HADDR_UNDEF
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Monday, August  2, 1999
  *
  * Modifications:
@@ -709,7 +709,7 @@ H5FD_core_query(const H5FD_t * _file, unsigned long *flags /* out */)
 static haddr_t
 H5FD_core_get_eoa(const H5FD_t *_file, H5FD_mem_t UNUSED type)
 {
-    const H5FD_core_t	*file = (const H5FD_core_t*)_file;
+    const H5FD_core_t  *file = (const H5FD_core_t*)_file;
     haddr_t ret_value;   /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_core_get_eoa, HADDR_UNDEF)
@@ -723,17 +723,17 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_core_set_eoa
+ * Function:  H5FD_core_set_eoa
  *
- * Purpose:	Set the end-of-address marker for the file. This function is
- *		called shortly after an existing HDF5 file is opened in order
- *		to tell the driver where the end of the HDF5 data is located.
+ * Purpose:  Set the end-of-address marker for the file. This function is
+ *    called shortly after an existing HDF5 file is opened in order
+ *    to tell the driver where the end of the HDF5 data is located.
  *
- * Return:	Success:	0
+ * Return:  Success:  0
  *
- *		Failure:	-1
+ *    Failure:  -1
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, July 29, 1999
  *
  * Modifications:
@@ -746,7 +746,7 @@ done:
 static herr_t
 H5FD_core_set_eoa(H5FD_t *_file, H5FD_mem_t UNUSED type, haddr_t addr)
 {
-    H5FD_core_t	*file = (H5FD_core_t*)_file;
+    H5FD_core_t  *file = (H5FD_core_t*)_file;
     herr_t ret_value = SUCCEED;       /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_core_set_eoa, FAIL)
@@ -762,19 +762,19 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_core_get_eof
+ * Function:  H5FD_core_get_eof
  *
- * Purpose:	Returns the end-of-file marker, which is the greater of
- *		either the size of the underlying memory or the HDF5
- *		end-of-address markers.
+ * Purpose:  Returns the end-of-file marker, which is the greater of
+ *    either the size of the underlying memory or the HDF5
+ *    end-of-address markers.
  *
- * Return:	Success:	End of file address, the first address past
- *				the end of the "file", either the memory
- *				or the HDF5 file.
+ * Return:  Success:  End of file address, the first address past
+ *        the end of the "file", either the memory
+ *        or the HDF5 file.
  *
- *		Failure:	HADDR_UNDEF
+ *    Failure:  HADDR_UNDEF
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, July 29, 1999
  *
  * Modifications:
@@ -786,7 +786,7 @@ H5FD_core_get_eof(const H5FD_t *_file)
 {
     haddr_t ret_value;   /* Return value */
 
-    const H5FD_core_t	*file = (const H5FD_core_t*)_file;
+    const H5FD_core_t  *file = (const H5FD_core_t*)_file;
 
     FUNC_ENTER_NOAPI(H5FD_core_get_eof, HADDR_UNDEF)
 
@@ -861,18 +861,18 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_core_read
+ * Function:  H5FD_core_read
  *
- * Purpose:	Reads SIZE bytes of data from FILE beginning at address ADDR
- *		into buffer BUF according to data transfer properties in
- *		DXPL_ID.
+ * Purpose:  Reads SIZE bytes of data from FILE beginning at address ADDR
+ *    into buffer BUF according to data transfer properties in
+ *    DXPL_ID.
  *
- * Return:	Success:	Zero. Result is stored in caller-supplied
- *				buffer BUF.
+ * Return:  Success:  Zero. Result is stored in caller-supplied
+ *        buffer BUF.
  *
- *		Failure:	-1, Contents of buffer BUF are undefined.
+ *    Failure:  -1, Contents of buffer BUF are undefined.
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, July 29, 1999
  *
  * Modifications:
@@ -882,9 +882,9 @@ done:
 /* ARGSUSED */
 static herr_t
 H5FD_core_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr,
-	       size_t size, void *buf/*out*/)
+         size_t size, void *buf/*out*/)
 {
-    H5FD_core_t	*file = (H5FD_core_t*)_file;
+    H5FD_core_t  *file = (H5FD_core_t*)_file;
     herr_t      ret_value=SUCCEED;       /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_core_read, FAIL)
@@ -929,17 +929,17 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_core_write
+ * Function:  H5FD_core_write
  *
- * Purpose:	Writes SIZE bytes of data to FILE beginning at address ADDR
- *		from buffer BUF according to data transfer properties in
- *		DXPL_ID.
+ * Purpose:  Writes SIZE bytes of data to FILE beginning at address ADDR
+ *    from buffer BUF according to data transfer properties in
+ *    DXPL_ID.
  *
- * Return:	Success:	Zero
+ * Return:  Success:  Zero
  *
- *		Failure:	-1
+ *    Failure:  -1
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, July 29, 1999
  *
  * Modifications:
@@ -949,7 +949,7 @@ done:
 /* ARGSUSED */
 static herr_t
 H5FD_core_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr,
-		size_t size, const void *buf)
+    size_t size, const void *buf)
 {
     H5FD_core_t *file = (H5FD_core_t*)_file;
     herr_t ret_value = SUCCEED;       /* Return value */
@@ -982,7 +982,7 @@ H5FD_core_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, had
 
         /* (Re)allocate memory for the file buffer */
         if(NULL == (x = (unsigned char *)H5MM_realloc(file->mem, new_eof)))
-            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate memory block")
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate memory block of %llu bytes", (unsigned long long)new_eof)
 #ifdef H5_CLEAR_MEMORY
 HDmemset(x + file->eof, 0, (size_t)(new_eof - file->eof));
 #endif /* H5_CLEAR_MEMORY */
@@ -1001,16 +1001,16 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_core_flush
+ * Function:  H5FD_core_flush
  *
- * Purpose:	Flushes the file to backing store if there is any and if the
- *		dirty flag is set.
+ * Purpose:  Flushes the file to backing store if there is any and if the
+ *    dirty flag is set.
  *
- * Return:	Success:	0
+ * Return:  Success:  0
  *
- *		Failure:	-1
+ *    Failure:  -1
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Friday, October 15, 1999
  *
  * Modifications:
@@ -1023,7 +1023,7 @@ done:
 static herr_t
 H5FD_core_flush(H5FD_t *_file, hid_t UNUSED dxpl_id, unsigned UNUSED closing)
 {
-    H5FD_core_t	*file = (H5FD_core_t*)_file;
+    H5FD_core_t  *file = (H5FD_core_t*)_file;
     herr_t      ret_value=SUCCEED;       /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_core_flush, FAIL)
@@ -1057,15 +1057,15 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_core_truncate
+ * Function:  H5FD_core_truncate
  *
- * Purpose:	Makes sure that the true file size is the same (or larger)
- *		than the end-of-address.
+ * Purpose:  Makes sure that the true file size is the same (or larger)
+ *    than the end-of-address.
  *
- * Return:	Success:	Non-negative
- *		Failure:	Negative
+ * Return:  Success:  Non-negative
+ *    Failure:  Negative
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Tuesday, October  7, 2008
  *
  *-------------------------------------------------------------------------
diff --git a/src/H5FDdirect.c b/src/H5FDdirect.c
index 29fd84f..8e7a2b7 100644
--- a/src/H5FDdirect.c
+++ b/src/H5FDdirect.c
@@ -17,27 +17,27 @@
  * Programmer:  Raymond Lu <slu at hdfgroup.uiuc.edu>
  *              Wednesday, 20 September 2006
  *
- * Purpose:	The Direct I/O file driver forces the data to be written to
- *		the file directly without being copied into system kernel
- *		buffer.  The main system support this feature is Linux.
+ * Purpose:  The Direct I/O file driver forces the data to be written to
+ *    the file directly without being copied into system kernel
+ *    buffer.  The main system support this feature is Linux.
  */
 
 /* Interface initialization */
-#define H5_INTERFACE_INIT_FUNC	H5FD_direct_init_interface
+#define H5_INTERFACE_INIT_FUNC  H5FD_direct_init_interface
 
 /* For system function posix_memalign - Commented it out because copper isn't able to compile
  * this file. */
 /* #define _XOPEN_SOURCE 600 */
 
-#include "H5private.h"		/* Generic Functions			*/
-#include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fprivate.h"		/* File access				*/
-#include "H5FDprivate.h"	/* File drivers				*/
-#include "H5FDdirect.h"		/* Direct file driver			*/
-#include "H5FLprivate.h"	/* Free Lists                           */
-#include "H5Iprivate.h"		/* IDs			  		*/
-#include "H5MMprivate.h"	/* Memory management			*/
-#include "H5Pprivate.h"		/* Property lists			*/
+#include "H5private.h"    /* Generic Functions      */
+#include "H5Eprivate.h"    /* Error handling        */
+#include "H5Fprivate.h"    /* File access        */
+#include "H5FDprivate.h"  /* File drivers        */
+#include "H5FDdirect.h"    /* Direct file driver      */
+#include "H5FLprivate.h"  /* Free Lists                           */
+#include "H5Iprivate.h"    /* IDs            */
+#include "H5MMprivate.h"  /* Memory management      */
+#include "H5Pprivate.h"    /* Property lists      */
 
 #ifdef H5_HAVE_DIRECT
 
@@ -45,15 +45,15 @@
 static hid_t H5FD_DIRECT_g = 0;
 
 /* File operations */
-#define OP_UNKNOWN	0
-#define OP_READ		1
-#define OP_WRITE	2
+#define OP_UNKNOWN  0
+#define OP_READ    1
+#define OP_WRITE  2
 
 /* Driver-specific file access properties */
 typedef struct H5FD_direct_fapl_t {
-    size_t	mboundary;	/* Memory boundary for alignment		*/
-    size_t	fbsize;		/* File system block size			*/
-    size_t	cbsize;		/* Maximal buffer size for copying user data	*/
+    size_t  mboundary;  /* Memory boundary for alignment    */
+    size_t  fbsize;    /* File system block size      */
+    size_t  cbsize;    /* Maximal buffer size for copying user data  */
     hbool_t     must_align;     /* Decides if data alignment is required        */
 } H5FD_direct_fapl_t;
 
@@ -70,27 +70,27 @@ typedef struct H5FD_direct_fapl_t {
  * occurs), and `op' will be set to H5F_OP_UNKNOWN.
  */
 typedef struct H5FD_direct_t {
-    H5FD_t	pub;			/*public stuff, must be first	*/
-    int		fd;			/*the unix file			*/
-    haddr_t	eoa;			/*end of allocated region	*/
-    haddr_t	eof;			/*end of file; current file size*/
-    haddr_t	pos;			/*current file I/O position	*/
-    int		op;			/*last operation		*/
-    H5FD_direct_fapl_t	fa;		/*file access properties	*/
-#ifndef _WIN32
+    H5FD_t  pub;      /*public stuff, must be first  */
+    int    fd;      /*the unix file      */
+    haddr_t  eoa;      /*end of allocated region  */
+    haddr_t  eof;      /*end of file; current file size*/
+    haddr_t  pos;      /*current file I/O position  */
+    int    op;      /*last operation    */
+    H5FD_direct_fapl_t  fa;    /*file access properties  */
+#ifndef H5_HAVE_WIN32_API
     /*
      * On most systems the combination of device and i-node number uniquely
      * identify a file.
      */
-    dev_t	device;			/*file device number		*/
+    dev_t  device;      /*file device number    */
 #ifdef H5_VMS
-    ino_t	inode[3];		/*file i-node number		*/
+    ino_t  inode[3];    /*file i-node number    */
 #else
-    ino_t	inode;			/*file i-node number		*/
+    ino_t  inode;      /*file i-node number    */
 #endif /*H5_VMS*/
 #else
     /*
-     * On _WIN32 the low-order word of a unique identifier associated with the
+     * On H5_HAVE_WIN32_API the low-order word of a unique identifier associated with the
      * file and the volume serial number uniquely identify a file. This number
      * (which, both? -rpm) may change when the system is restarted or when the
      * file is opened. After a process opens a file, the identifier is
@@ -108,57 +108,57 @@ typedef struct H5FD_direct_t {
  * some macros here so we don't have to have conditional compilations later
  * throughout the code.
  *
- * file_offset_t:	The datatype for file offsets, the second argument of
- *			the lseek() or lseek64() call.
+ * file_offset_t:  The datatype for file offsets, the second argument of
+ *      the lseek() or lseek64() call.
  *
- * file_seek:		The function which adjusts the current file position,
- *			either lseek() or lseek64().
+ * file_seek:    The function which adjusts the current file position,
+ *      either lseek() or lseek64().
  */
 /* adding for windows NT file system support. */
 
 #ifdef H5_HAVE_LSEEK64
-#   define file_offset_t	off64_t
-#   define file_seek		lseek64
-#   define file_truncate	ftruncate64
-#elif defined (_WIN32)
+#   define file_offset_t  off64_t
+#   define file_seek    lseek64
+#   define file_truncate  ftruncate64
+#elif defined (H5_HAVE_WIN32_API)
 # /*MSVC*/
 #   define file_offset_t __int64
 #   define file_seek _lseeki64
-#   define file_truncate	_chsize
+#   define file_truncate  _chsize
 #else
-#   define file_offset_t	off_t
-#   define file_seek		lseek
-#   define file_truncate	HDftruncate
+#   define file_offset_t  off_t
+#   define file_seek    lseek
+#   define file_truncate  HDftruncate
 #endif
 
 /*
  * These macros check for overflow of various quantities.  These macros
  * assume that file_offset_t is signed and haddr_t and size_t are unsigned.
  *
- * ADDR_OVERFLOW:	Checks whether a file address of type `haddr_t'
- *			is too large to be represented by the second argument
- *			of the file seek function.
+ * ADDR_OVERFLOW:  Checks whether a file address of type `haddr_t'
+ *      is too large to be represented by the second argument
+ *      of the file seek function.
  *
- * SIZE_OVERFLOW:	Checks whether a buffer size of type `hsize_t' is too
- *			large to be represented by the `size_t' type.
+ * SIZE_OVERFLOW:  Checks whether a buffer size of type `hsize_t' is too
+ *      large to be represented by the `size_t' type.
  *
- * REGION_OVERFLOW:	Checks whether an address and size pair describe data
- *			which can be addressed entirely by the second
- *			argument of the file seek function.
+ * REGION_OVERFLOW:  Checks whether an address and size pair describe data
+ *      which can be addressed entirely by the second
+ *      argument of the file seek function.
  */
 #define MAXADDR (((haddr_t)1<<(8*sizeof(file_offset_t)-1))-1)
-#define ADDR_OVERFLOW(A)	(HADDR_UNDEF==(A) ||			      \
-				 ((A) & ~(haddr_t)MAXADDR))
-#define SIZE_OVERFLOW(Z)	((Z) & ~(hsize_t)MAXADDR)
-#define REGION_OVERFLOW(A,Z)	(ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) ||      \
-                                 HADDR_UNDEF==(A)+(Z) ||		      \
-				 (file_offset_t)((A)+(Z))<(file_offset_t)(A))
+#define ADDR_OVERFLOW(A)  (HADDR_UNDEF==(A) ||            \
+         ((A) & ~(haddr_t)MAXADDR))
+#define SIZE_OVERFLOW(Z)  ((Z) & ~(hsize_t)MAXADDR)
+#define REGION_OVERFLOW(A,Z)  (ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) ||      \
+                                 HADDR_UNDEF==(A)+(Z) ||          \
+         (file_offset_t)((A)+(Z))<(file_offset_t)(A))
 
 /* Prototypes */
 static void *H5FD_direct_fapl_get(H5FD_t *file);
 static void *H5FD_direct_fapl_copy(const void *_old_fa);
 static H5FD_t *H5FD_direct_open(const char *name, unsigned flags, hid_t fapl_id,
-			      haddr_t maxaddr);
+            haddr_t maxaddr);
 static herr_t H5FD_direct_close(H5FD_t *_file);
 static int H5FD_direct_cmp(const H5FD_t *_f1, const H5FD_t *_f2);
 static herr_t H5FD_direct_query(const H5FD_t *_f1, unsigned long *flags);
@@ -167,43 +167,43 @@ static herr_t H5FD_direct_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t addr);
 static haddr_t H5FD_direct_get_eof(const H5FD_t *_file);
 static herr_t  H5FD_direct_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
 static herr_t H5FD_direct_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
-			     size_t size, void *buf);
+           size_t size, void *buf);
 static herr_t H5FD_direct_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
-			      size_t size, const void *buf);
+            size_t size, const void *buf);
 static herr_t H5FD_direct_truncate(H5FD_t *_file, hid_t dxpl_id, hbool_t closing);
 
 static const H5FD_class_t H5FD_direct_g = {
-    "direct",					/*name			*/
-    MAXADDR,					/*maxaddr		*/
-    H5F_CLOSE_WEAK,				/* fc_degree		*/
-    NULL,					/*sb_size		*/
-    NULL,					/*sb_encode		*/
-    NULL,					/*sb_decode		*/
-    sizeof(H5FD_direct_fapl_t),                 /*fapl_size		*/
-    H5FD_direct_fapl_get,		        /*fapl_get		*/
-    H5FD_direct_fapl_copy,		        /*fapl_copy		*/
-    NULL,		        		/*fapl_free		*/
-    0,						/*dxpl_size		*/
-    NULL,					/*dxpl_copy		*/
-    NULL,					/*dxpl_free		*/
-    H5FD_direct_open,			        /*open			*/
-    H5FD_direct_close,		                /*close			*/
-    H5FD_direct_cmp,			        /*cmp			*/
-    H5FD_direct_query,		                /*query			*/
-    NULL,					/*get_type_map		*/
-    NULL,					/*alloc			*/
-    NULL,					/*free			*/
-    H5FD_direct_get_eoa,			/*get_eoa		*/
-    H5FD_direct_set_eoa, 			/*set_eoa		*/
-    H5FD_direct_get_eof,			/*get_eof		*/
+    "direct",          /*name      */
+    MAXADDR,          /*maxaddr    */
+    H5F_CLOSE_WEAK,        /* fc_degree    */
+    NULL,          /*sb_size    */
+    NULL,          /*sb_encode    */
+    NULL,          /*sb_decode    */
+    sizeof(H5FD_direct_fapl_t),                 /*fapl_size    */
+    H5FD_direct_fapl_get,            /*fapl_get    */
+    H5FD_direct_fapl_copy,            /*fapl_copy    */
+    NULL,                /*fapl_free    */
+    0,            /*dxpl_size    */
+    NULL,          /*dxpl_copy    */
+    NULL,          /*dxpl_free    */
+    H5FD_direct_open,              /*open      */
+    H5FD_direct_close,                    /*close      */
+    H5FD_direct_cmp,              /*cmp      */
+    H5FD_direct_query,                    /*query      */
+    NULL,          /*get_type_map    */
+    NULL,          /*alloc      */
+    NULL,          /*free      */
+    H5FD_direct_get_eoa,      /*get_eoa    */
+    H5FD_direct_set_eoa,       /*set_eoa    */
+    H5FD_direct_get_eof,      /*get_eof    */
     H5FD_direct_get_handle,                     /*get_handle            */
-    H5FD_direct_read,				/*read			*/
-    H5FD_direct_write,				/*write			*/
-    NULL,					/*flush			*/
-    H5FD_direct_truncate,			/*truncate		*/
+    H5FD_direct_read,        /*read      */
+    H5FD_direct_write,        /*write      */
+    NULL,          /*flush      */
+    H5FD_direct_truncate,      /*truncate    */
     NULL,                                       /*lock                  */
     NULL,                                       /*unlock                */
-    H5FD_FLMAP_SINGLE 				/*fl_map		*/
+    H5FD_FLMAP_SINGLE         /*fl_map    */
 };
 
 /* Declare a free list to manage the H5FD_direct_t struct */
@@ -233,16 +233,16 @@ H5FD_direct_init_interface(void)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_direct_init
+ * Function:  H5FD_direct_init
  *
- * Purpose:	Initialize this driver by registering the driver with the
- *		library.
+ * Purpose:  Initialize this driver by registering the driver with the
+ *    library.
  *
- * Return:	Success:	The driver ID for the direct driver.
+ * Return:  Success:  The driver ID for the direct driver.
  *
- *		Failure:	Negative.
+ *    Failure:  Negative.
  *
- * Programmer:	Raymond Lu
+ * Programmer:  Raymond Lu
  *              Wednesday, 20 September 2006
  *
  * Modifications:
@@ -268,11 +268,11 @@ done:
 
 
 /*---------------------------------------------------------------------------
- * Function:	H5FD_direct_term
+ * Function:  H5FD_direct_term
  *
- * Purpose:	Shut down the VFD
+ * Purpose:  Shut down the VFD
  *
- * Return:	<none>
+ * Return:  <none>
  *
  * Programmer:  Raymond Lu
  *              Wednesday, 20 September 2006
@@ -294,16 +294,16 @@ H5FD_direct_term(void)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5Pset_fapl_direct
+ * Function:  H5Pset_fapl_direct
  *
- * Purpose:	Modify the file access property list to use the H5FD_DIRECT
- *		driver defined in this source file.  There are no driver
- *		specific properties.
+ * Purpose:  Modify the file access property list to use the H5FD_DIRECT
+ *    driver defined in this source file.  There are no driver
+ *    specific properties.
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:  Non-negative on success/Negative on failure
  *
- * Programmer:	Raymond Lu
- *		Wednesday, 20 September 2006
+ * Programmer:  Raymond Lu
+ *    Wednesday, 20 September 2006
  *
  * Modifications:
  *
@@ -312,9 +312,9 @@ H5FD_direct_term(void)
 herr_t
 H5Pset_fapl_direct(hid_t fapl_id, size_t boundary, size_t block_size, size_t cbuf_size)
 {
-    H5P_genplist_t    	*plist;      /* Property list pointer */
-    H5FD_direct_fapl_t	fa;
-    herr_t 		ret_value;
+    H5P_genplist_t      *plist;      /* Property list pointer */
+    H5FD_direct_fapl_t  fa;
+    herr_t     ret_value;
 
     FUNC_ENTER_API(H5Pset_fapl_direct, FAIL)
     H5TRACE4("e", "izzz", fapl_id, boundary, block_size, cbuf_size);
@@ -323,17 +323,17 @@ H5Pset_fapl_direct(hid_t fapl_id, size_t boundary, size_t block_size, size_t cbu
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
 
     if(boundary != 0)
-    	fa.mboundary = boundary;
+      fa.mboundary = boundary;
     else
-	fa.mboundary = MBOUNDARY_DEF;
+  fa.mboundary = MBOUNDARY_DEF;
     if(block_size != 0)
-    	fa.fbsize = block_size;
+      fa.fbsize = block_size;
     else
-	fa.fbsize = FBSIZE_DEF;
+  fa.fbsize = FBSIZE_DEF;
     if(cbuf_size != 0)
-    	fa.cbsize = cbuf_size;
+      fa.cbsize = cbuf_size;
     else
-	fa.cbsize = CBSIZE_DEF;
+  fa.cbsize = CBSIZE_DEF;
 
     /* Set the default to be true for data alignment */
     fa.must_align = TRUE;
@@ -350,16 +350,16 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5Pget_fapl_direct
+ * Function:  H5Pget_fapl_direct
  *
- * Purpose:	Returns information about the direct file access property
- *		list though the function arguments.
+ * Purpose:  Returns information about the direct file access property
+ *    list though the function arguments.
  *
- * Return:	Success:	Non-negative
+ * Return:  Success:  Non-negative
  *
- *		Failure:	Negative
+ *    Failure:  Negative
  *
- * Programmer:	Raymond Lu
+ * Programmer:  Raymond Lu
  *              Wednesday, October 18, 2006
  *
  * Modifications:
@@ -368,9 +368,9 @@ done:
  */
 herr_t
 H5Pget_fapl_direct(hid_t fapl_id, size_t *boundary/*out*/, size_t *block_size/*out*/,
-		size_t *cbuf_size/*out*/)
+    size_t *cbuf_size/*out*/)
 {
-    H5FD_direct_fapl_t	*fa;
+    H5FD_direct_fapl_t  *fa;
     H5P_genplist_t *plist;      /* Property list pointer */
     herr_t      ret_value=SUCCEED;       /* Return value */
 
@@ -386,9 +386,9 @@ H5Pget_fapl_direct(hid_t fapl_id, size_t *boundary/*out*/, size_t *block_size/*o
     if (boundary)
         *boundary = fa->mboundary;
     if (block_size)
-	*block_size = fa->fbsize;
+  *block_size = fa->fbsize;
     if (cbuf_size)
-	*cbuf_size = fa->cbsize;
+  *cbuf_size = fa->cbsize;
 
 done:
     FUNC_LEAVE_API(ret_value)
@@ -396,18 +396,18 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_direct_fapl_get
+ * Function:  H5FD_direct_fapl_get
  *
- * Purpose:	Returns a file access property list which indicates how the
- *		specified file is being accessed. The return list could be
- *		used to access another file the same way.
+ * Purpose:  Returns a file access property list which indicates how the
+ *    specified file is being accessed. The return list could be
+ *    used to access another file the same way.
  *
- * Return:	Success:	Ptr to new file access property list with all
- *				members copied from the file struct.
+ * Return:  Success:  Ptr to new file access property list with all
+ *        members copied from the file struct.
  *
- *		Failure:	NULL
+ *    Failure:  NULL
  *
- * Programmer:	Raymond Lu
+ * Programmer:  Raymond Lu
  *              Wednesday, 18 October 2006
  *
  * Modifications:
@@ -417,7 +417,7 @@ done:
 static void *
 H5FD_direct_fapl_get(H5FD_t *_file)
 {
-    H5FD_direct_t	*file = (H5FD_direct_t*)_file;
+    H5FD_direct_t  *file = (H5FD_direct_t*)_file;
     void *ret_value;    /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_direct_fapl_get, NULL)
@@ -431,15 +431,15 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_direct_fapl_copy
+ * Function:  H5FD_direct_fapl_copy
  *
- * Purpose:	Copies the direct-specific file access properties.
+ * Purpose:  Copies the direct-specific file access properties.
  *
- * Return:	Success:	Ptr to a new property list
+ * Return:  Success:  Ptr to a new property list
  *
- *		Failure:	NULL
+ *    Failure:  NULL
  *
- * Programmer:	Raymond Lu
+ * Programmer:  Raymond Lu
  *              Wednesday, 18 October 2006
  *
  * Modifications:
@@ -469,17 +469,17 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_direct_open
+ * Function:  H5FD_direct_open
  *
- * Purpose:	Create and/or opens a Unix file for direct I/O as an HDF5 file.
+ * Purpose:  Create and/or opens a Unix file for direct I/O as an HDF5 file.
  *
- * Return:	Success:	A pointer to a new file data structure. The
- *				public fields will be initialized by the
- *				caller, which is always H5FD_open().
+ * Return:  Success:  A pointer to a new file data structure. The
+ *        public fields will be initialized by the
+ *        caller, which is always H5FD_open().
  *
- *		Failure:	NULL
+ *    Failure:  NULL
  *
- * Programmer:	Raymond Lu
+ * Programmer:  Raymond Lu
  *              Wednesday, 20 September 2006
  *
  * Modifications:
@@ -489,18 +489,18 @@ done:
 static H5FD_t *
 H5FD_direct_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
 {
-    int			o_flags;
-    int			fd=(-1);
-    H5FD_direct_t	*file=NULL;
-    H5FD_direct_fapl_t	*fa;
-#ifdef _WIN32
-    HFILE 		filehandle;
+    int      o_flags;
+    int      fd=(-1);
+    H5FD_direct_t  *file=NULL;
+    H5FD_direct_fapl_t  *fa;
+#ifdef H5_HAVE_WIN32_API
+    HFILE     filehandle;
     struct _BY_HANDLE_FILE_INFORMATION fileinfo;
 #endif
-    h5_stat_t		sb;
-    H5P_genplist_t 	*plist;      /* Property list */
+    h5_stat_t    sb;
+    H5P_genplist_t   *plist;      /* Property list */
     int                 *buf1, *buf2;
-    H5FD_t		*ret_value;
+    H5FD_t    *ret_value;
 
     FUNC_ENTER_NOAPI(H5FD_direct_open, NULL)
 
@@ -544,7 +544,7 @@ H5FD_direct_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxadd
     H5_ASSIGN_OVERFLOW(file->eof,sb.st_size,h5_stat_size_t,haddr_t);
     file->pos = HADDR_UNDEF;
     file->op = OP_UNKNOWN;
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
     filehandle = _get_osfhandle(fd);
     (void)GetFileInformationByHandle((HANDLE)filehandle, &fileinfo);
     file->fileindexhi = fileinfo.nFileIndexHigh;
@@ -558,7 +558,7 @@ H5FD_direct_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxadd
 #else
     file->inode = sb.st_ino;
 #endif /*H5_VMS*/
-#endif /*_WIN32*/
+#endif /*H5_HAVE_WIN32_API*/
     file->fa.mboundary = fa->mboundary;
     file->fa.fbsize = fa->fbsize;
     file->fa.cbsize = fa->cbsize;
@@ -569,7 +569,7 @@ H5FD_direct_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxadd
      */
     buf1 = (int*)HDmalloc(sizeof(int));
     if (HDposix_memalign(&buf2, file->fa.mboundary, file->fa.fbsize) != 0)
-	HGOTO_ERROR(H5E_RESOURCE, H5E_CANTALLOC, NULL, "HDposix_memalign failed")
+  HGOTO_ERROR(H5E_RESOURCE, H5E_CANTALLOC, NULL, "HDposix_memalign failed")
 
     if(o_flags & O_CREAT) {
         if(write(file->fd, (void*)buf1, sizeof(int))<0) {
@@ -619,15 +619,15 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_direct_close
+ * Function:  H5FD_direct_close
  *
- * Purpose:	Closes the file.
+ * Purpose:  Closes the file.
  *
- * Return:	Success:	0
+ * Return:  Success:  0
  *
- *		Failure:	-1, file not closed.
+ *    Failure:  -1, file not closed.
  *
- * Programmer:	Raymond Lu
+ * Programmer:  Raymond Lu
  *              Wednesday, 20 September 2006
  *
  * Modifications:
@@ -637,8 +637,8 @@ done:
 static herr_t
 H5FD_direct_close(H5FD_t *_file)
 {
-    H5FD_direct_t	*file = (H5FD_direct_t*)_file;
-    herr_t      	ret_value=SUCCEED;       /* Return value */
+    H5FD_direct_t  *file = (H5FD_direct_t*)_file;
+    herr_t        ret_value=SUCCEED;       /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_direct_close, FAIL)
 
@@ -653,17 +653,17 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_direct_cmp
+ * Function:  H5FD_direct_cmp
  *
- * Purpose:	Compares two files belonging to this driver using an
- *		arbitrary (but consistent) ordering.
+ * Purpose:  Compares two files belonging to this driver using an
+ *    arbitrary (but consistent) ordering.
  *
- * Return:	Success:	A value like strcmp()
+ * Return:  Success:  A value like strcmp()
  *
- *		Failure:	never fails (arguments were checked by the
- *				caller).
+ *    Failure:  never fails (arguments were checked by the
+ *        caller).
  *
- * Programmer:	Raymond Lu
+ * Programmer:  Raymond Lu
  *              Thursday, 21 September 2006
  *
  * Modifications:
@@ -673,13 +673,13 @@ done:
 static int
 H5FD_direct_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
 {
-    const H5FD_direct_t	*f1 = (const H5FD_direct_t*)_f1;
-    const H5FD_direct_t	*f2 = (const H5FD_direct_t*)_f2;
+    const H5FD_direct_t  *f1 = (const H5FD_direct_t*)_f1;
+    const H5FD_direct_t  *f2 = (const H5FD_direct_t*)_f2;
     int ret_value=0;
 
     FUNC_ENTER_NOAPI(H5FD_direct_cmp, H5FD_VFD_DEFAULT)
 
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
     if (f1->fileindexhi < f2->fileindexhi) HGOTO_DONE(-1)
     if (f1->fileindexhi > f2->fileindexhi) HGOTO_DONE(1)
 
@@ -715,16 +715,16 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_direct_query
+ * Function:  H5FD_direct_query
  *
- * Purpose:	Set the flags that this VFL driver is capable of supporting.
+ * Purpose:  Set the flags that this VFL driver is capable of supporting.
  *              (listed in H5FDpublic.h)
  *
- * Return:	Success:	non-negative
+ * Return:  Success:  non-negative
  *
- *		Failure:	negative
+ *    Failure:  negative
  *
- * Programmer:	Raymond Lu
+ * Programmer:  Raymond Lu
  *              Thursday, 21 September 2006
  *
  * Modifications:
@@ -753,17 +753,17 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_direct_get_eoa
+ * Function:  H5FD_direct_get_eoa
  *
- * Purpose:	Gets the end-of-address marker for the file. The EOA marker
- *		is the first address past the last byte allocated in the
- *		format address space.
+ * Purpose:  Gets the end-of-address marker for the file. The EOA marker
+ *    is the first address past the last byte allocated in the
+ *    format address space.
  *
- * Return:	Success:	The end-of-address marker.
+ * Return:  Success:  The end-of-address marker.
  *
- *		Failure:	HADDR_UNDEF
+ *    Failure:  HADDR_UNDEF
  *
- * Programmer:	Raymond Lu
+ * Programmer:  Raymond Lu
  *              Wednesday, 20 September 2006
  *
  * Modifications:
@@ -776,7 +776,7 @@ done:
 static haddr_t
 H5FD_direct_get_eoa(const H5FD_t *_file, H5FD_mem_t UNUSED type)
 {
-    const H5FD_direct_t	*file = (const H5FD_direct_t*)_file;
+    const H5FD_direct_t  *file = (const H5FD_direct_t*)_file;
     haddr_t ret_value;  /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_direct_get_eoa, HADDR_UNDEF)
@@ -790,17 +790,17 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_direct_set_eoa
+ * Function:  H5FD_direct_set_eoa
  *
- * Purpose:	Set the end-of-address marker for the file. This function is
- *		called shortly after an existing HDF5 file is opened in order
- *		to tell the driver where the end of the HDF5 data is located.
+ * Purpose:  Set the end-of-address marker for the file. This function is
+ *    called shortly after an existing HDF5 file is opened in order
+ *    to tell the driver where the end of the HDF5 data is located.
  *
- * Return:	Success:	0
+ * Return:  Success:  0
  *
- *		Failure:	-1
+ *    Failure:  -1
  *
- * Programmer:	Raymond Lu
+ * Programmer:  Raymond Lu
  *              Wednesday, 20 September 2006
  *
  * Modifications:
@@ -813,7 +813,7 @@ done:
 static herr_t
 H5FD_direct_set_eoa(H5FD_t *_file, H5FD_mem_t UNUSED type, haddr_t addr)
 {
-    H5FD_direct_t	*file = (H5FD_direct_t*)_file;
+    H5FD_direct_t  *file = (H5FD_direct_t*)_file;
     herr_t ret_value=SUCCEED;   /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_direct_set_eoa, FAIL)
@@ -826,19 +826,19 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_direct_get_eof
+ * Function:  H5FD_direct_get_eof
  *
- * Purpose:	Returns the end-of-file marker, which is the greater of
- *		either the Unix end-of-file or the HDF5 end-of-address
- *		markers.
+ * Purpose:  Returns the end-of-file marker, which is the greater of
+ *    either the Unix end-of-file or the HDF5 end-of-address
+ *    markers.
  *
- * Return:	Success:	End of file address, the first address past
- *				the end of the "file", either the Unix file
- *				or the HDF5 file.
+ * Return:  Success:  End of file address, the first address past
+ *        the end of the "file", either the Unix file
+ *        or the HDF5 file.
  *
- *		Failure:	HADDR_UNDEF
+ *    Failure:  HADDR_UNDEF
  *
- * Programmer:	Raymond Lu
+ * Programmer:  Raymond Lu
  *              Wednesday, 20 September 2006
  *
  * Modifications:
@@ -848,7 +848,7 @@ done:
 static haddr_t
 H5FD_direct_get_eof(const H5FD_t *_file)
 {
-    const H5FD_direct_t	*file = (const H5FD_direct_t*)_file;
+    const H5FD_direct_t  *file = (const H5FD_direct_t*)_file;
     haddr_t ret_value;  /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_direct_get_eof, HADDR_UNDEF)
@@ -893,18 +893,18 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_direct_read
+ * Function:  H5FD_direct_read
  *
- * Purpose:	Reads SIZE bytes of data from FILE beginning at address ADDR
- *		into buffer BUF according to data transfer properties in
- *		DXPL_ID.
+ * Purpose:  Reads SIZE bytes of data from FILE beginning at address ADDR
+ *    into buffer BUF according to data transfer properties in
+ *    DXPL_ID.
  *
- * Return:	Success:	Zero. Result is stored in caller-supplied
- *				buffer BUF.
+ * Return:  Success:  Zero. Result is stored in caller-supplied
+ *        buffer BUF.
  *
- *		Failure:	-1, Contents of buffer BUF are undefined.
+ *    Failure:  -1, Contents of buffer BUF are undefined.
  *
- * Programmer:	Raymond Lu
+ * Programmer:  Raymond Lu
  *              Thursday, 21 September 2006
  *
  * Modifications:
@@ -913,19 +913,19 @@ done:
  */
 static herr_t
 H5FD_direct_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr,
-	       size_t size, void *buf/*out*/)
+         size_t size, void *buf/*out*/)
 {
-    H5FD_direct_t	*file = (H5FD_direct_t*)_file;
-    ssize_t		nbytes;
-    hbool_t		_must_align = TRUE;
-    herr_t      	ret_value=SUCCEED;       /* Return value */
-    size_t		alloc_size;
-    void		*copy_buf = NULL, *p2;
-    size_t		_boundary;
-    size_t		_fbsize;
-    size_t		_cbsize;
-    haddr_t		read_size;              /* Size to read into copy buffer */
-    size_t		copy_size = size;       /* Size remaining to read when using copy buffer */
+    H5FD_direct_t  *file = (H5FD_direct_t*)_file;
+    ssize_t    nbytes;
+    hbool_t    _must_align = TRUE;
+    herr_t        ret_value=SUCCEED;       /* Return value */
+    size_t    alloc_size;
+    void    *copy_buf = NULL, *p2;
+    size_t    _boundary;
+    size_t    _fbsize;
+    size_t    _cbsize;
+    haddr_t    read_size;              /* Size to read into copy buffer */
+    size_t    copy_size = size;       /* Size remaining to read when using copy buffer */
     size_t              copy_offset;            /* Offset into copy buffer of the requested data */
 
     FUNC_ENTER_NOAPI(H5FD_direct_read, FAIL)
@@ -958,44 +958,44 @@ H5FD_direct_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, ha
      * and aligned data first, then copy the data into memory buffer.
      */
     if(!_must_align || ((addr%_fbsize==0) && (size%_fbsize==0) && ((size_t)buf%_boundary==0))) {
-	    /* Seek to the correct location */
-	    if ((addr!=file->pos || OP_READ!=file->op) &&
-		    file_seek(file->fd, (file_offset_t)addr, SEEK_SET)<0)
-		HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
- 	    /* Read the aligned data in file first, being careful of interrupted
-	     * system calls and partial results. */
-	    while (size>0) {
-		do {
-		    nbytes = HDread(file->fd, buf, size);
-		} while (-1==nbytes && EINTR==errno);
-		if (-1==nbytes) /* error */
-		    HSYS_GOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed")
-		if (0==nbytes) {
-		    /* end of file but not end of format address space */
-		    HDmemset(buf, 0, size);
-		    break;
-		}
-		assert(nbytes>=0);
-		assert((size_t)nbytes<=size);
-		H5_CHECK_OVERFLOW(nbytes,ssize_t,size_t);
-		size -= (size_t)nbytes;
-		H5_CHECK_OVERFLOW(nbytes,ssize_t,haddr_t);
-		addr += (haddr_t)nbytes;
-		buf = (char*)buf + nbytes;
-	    }
+      /* Seek to the correct location */
+      if ((addr!=file->pos || OP_READ!=file->op) &&
+        file_seek(file->fd, (file_offset_t)addr, SEEK_SET)<0)
+    HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
+       /* Read the aligned data in file first, being careful of interrupted
+       * system calls and partial results. */
+      while (size>0) {
+    do {
+        nbytes = HDread(file->fd, buf, size);
+    } while (-1==nbytes && EINTR==errno);
+    if (-1==nbytes) /* error */
+        HSYS_GOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed")
+    if (0==nbytes) {
+        /* end of file but not end of format address space */
+        HDmemset(buf, 0, size);
+        break;
+    }
+    assert(nbytes>=0);
+    assert((size_t)nbytes<=size);
+    H5_CHECK_OVERFLOW(nbytes,ssize_t,size_t);
+    size -= (size_t)nbytes;
+    H5_CHECK_OVERFLOW(nbytes,ssize_t,haddr_t);
+    addr += (haddr_t)nbytes;
+    buf = (char*)buf + nbytes;
+      }
     } else {
             /* Calculate where we will begin copying from the copy buffer */
             copy_offset = (size_t)(addr % _fbsize);
 
-	    /* allocate memory needed for the Direct IO option up to the maximal
-	     * copy buffer size. Make a bigger buffer for aligned I/O if size is
-	     * smaller than maximal copy buffer. */
-	    alloc_size = ((copy_offset + size - 1) / _fbsize + 1) * _fbsize;
-	    if(alloc_size > _cbsize)
-	    	alloc_size = _cbsize;
-	    HDassert(!(alloc_size % _fbsize));
-	    if (HDposix_memalign(&copy_buf, _boundary, alloc_size) != 0)
-		HGOTO_ERROR(H5E_RESOURCE, H5E_CANTALLOC, FAIL, "HDposix_memalign failed")
+      /* allocate memory needed for the Direct IO option up to the maximal
+       * copy buffer size. Make a bigger buffer for aligned I/O if size is
+       * smaller than maximal copy buffer. */
+      alloc_size = ((copy_offset + size - 1) / _fbsize + 1) * _fbsize;
+      if(alloc_size > _cbsize)
+        alloc_size = _cbsize;
+      HDassert(!(alloc_size % _fbsize));
+      if (HDposix_memalign(&copy_buf, _boundary, alloc_size) != 0)
+    HGOTO_ERROR(H5E_RESOURCE, H5E_CANTALLOC, FAIL, "HDposix_memalign failed")
 
             /* look for the aligned position for reading the data */
             HDassert(!(((addr / _fbsize) * _fbsize) % _fbsize));
@@ -1003,18 +1003,18 @@ H5FD_direct_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, ha
                     SEEK_SET) < 0)
                 HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
 
-	    /*
-	     * Read the aligned data in file into aligned buffer first, then copy the data
-	     * into the final buffer.  If the data size is bigger than maximal copy buffer
-	     * size, do the reading by segment (the outer while loop).  If not, do one step
-	     * reading.
-	     */
-	    do {
- 	    	/* Read the aligned data in file first.  Not able to handle interrupted
-		 * system calls and partial results like sec2 driver does because the
-		 * data may no longer be aligned. It's expecially true when the data in
-		 * file is smaller than ALLOC_SIZE. */
-	    	HDmemset(copy_buf, 0, alloc_size);
+      /*
+       * Read the aligned data in file into aligned buffer first, then copy the data
+       * into the final buffer.  If the data size is bigger than maximal copy buffer
+       * size, do the reading by segment (the outer while loop).  If not, do one step
+       * reading.
+       */
+      do {
+         /* Read the aligned data in file first.  Not able to handle interrupted
+     * system calls and partial results like sec2 driver does because the
+     * data may no longer be aligned. It's expecially true when the data in
+     * file is smaller than ALLOC_SIZE. */
+        HDmemset(copy_buf, 0, alloc_size);
 
                 /* Calculate how much data we have to read in this iteration
                  * (including unused parts of blocks) */
@@ -1025,23 +1025,23 @@ H5FD_direct_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, ha
                     read_size = alloc_size;
 
                 HDassert(!(read_size % _fbsize));
-	    	do {
-		    nbytes = HDread(file->fd, copy_buf, read_size);
-	    	} while(-1==nbytes && EINTR==errno);
+        do {
+        nbytes = HDread(file->fd, copy_buf, read_size);
+        } while(-1==nbytes && EINTR==errno);
 
-	    	if (-1==nbytes) /* error */
-		    HSYS_GOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed")
+        if (-1==nbytes) /* error */
+        HSYS_GOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed")
 
-	    	/* Copy the needed data from the copy buffer to the output
-	    	 * buffer, and update copy_size.  If the copy buffer does not
+        /* Copy the needed data from the copy buffer to the output
+         * buffer, and update copy_size.  If the copy buffer does not
                  * contain the rest of the data, just copy what's in the copy
                  * buffer and also update read_addr and copy_offset to read the
                  * next section of data. */
-	    	p2 = (unsigned char*)copy_buf + copy_offset;
-	    	if((copy_size + copy_offset) <= alloc_size) {
-	    	    HDmemcpy(buf, p2, copy_size);
-	    	    buf = (unsigned char *)buf + copy_size;
-	    	    copy_size = 0;
+        p2 = (unsigned char*)copy_buf + copy_offset;
+        if((copy_size + copy_offset) <= alloc_size) {
+            HDmemcpy(buf, p2, copy_size);
+            buf = (unsigned char *)buf + copy_size;
+            copy_size = 0;
                 } /* end if */
                 else {
                     HDmemcpy(buf, p2, alloc_size - copy_offset);
@@ -1049,12 +1049,12 @@ H5FD_direct_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, ha
                     copy_size -= alloc_size - copy_offset;
                     copy_offset = 0;
                 } /* end else */
-	    } while (copy_size > 0);
+      } while (copy_size > 0);
 
-	    /*Final step: update address*/
-	    addr = (haddr_t)(((addr + size - 1) / _fbsize + 1) * _fbsize);
+      /*Final step: update address*/
+      addr = (haddr_t)(((addr + size - 1) / _fbsize + 1) * _fbsize);
 
-	    if(copy_buf) {
+      if(copy_buf) {
                 HDfree(copy_buf);
                 copy_buf = NULL;
             } /* end if */
@@ -1079,17 +1079,17 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_direct_write
+ * Function:  H5FD_direct_write
  *
- * Purpose:	Writes SIZE bytes of data to FILE beginning at address ADDR
- *		from buffer BUF according to data transfer properties in
- *		DXPL_ID.
+ * Purpose:  Writes SIZE bytes of data to FILE beginning at address ADDR
+ *    from buffer BUF according to data transfer properties in
+ *    DXPL_ID.
  *
- * Return:	Success:	Zero
+ * Return:  Success:  Zero
  *
- *		Failure:	-1
+ *    Failure:  -1
  *
- * Programmer:	Raymond Lu
+ * Programmer:  Raymond Lu
  *              Thursday, 21 September 2006
  *
  * Modifications:
@@ -1098,18 +1098,18 @@ done:
  */
 static herr_t
 H5FD_direct_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr,
-		size_t size, const void *buf)
+    size_t size, const void *buf)
 {
-    H5FD_direct_t	*file = (H5FD_direct_t*)_file;
-    ssize_t		nbytes;
-    hbool_t		_must_align = TRUE;
-    herr_t      	ret_value=SUCCEED;       /* Return value */
-    size_t		alloc_size;
-    void		*copy_buf = NULL, *p1;
-    const void		*p3;
-    size_t		_boundary;
-    size_t		_fbsize;
-    size_t		_cbsize;
+    H5FD_direct_t  *file = (H5FD_direct_t*)_file;
+    ssize_t    nbytes;
+    hbool_t    _must_align = TRUE;
+    herr_t        ret_value=SUCCEED;       /* Return value */
+    size_t    alloc_size;
+    void    *copy_buf = NULL, *p1;
+    const void    *p3;
+    size_t    _boundary;
+    size_t    _fbsize;
+    size_t    _cbsize;
     haddr_t             write_addr;             /* Address to write copy buffer */
     haddr_t             write_size;             /* Size to write from copy buffer */
     haddr_t             read_size;              /* Size to read into copy buffer */
@@ -1146,49 +1146,49 @@ H5FD_direct_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, h
      * first, update buffer with user data, then write the data out.
      */
     if(!_must_align || ((addr%_fbsize==0) && (size%_fbsize==0) && ((size_t)buf%_boundary==0))) {
-	    /* Seek to the correct location */
-	    if ((addr!=file->pos || OP_WRITE!=file->op) &&
-		    file_seek(file->fd, (file_offset_t)addr, SEEK_SET)<0)
-		HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
-
-	    while (size>0) {
-		do {
-		    nbytes = HDwrite(file->fd, buf, size);
-		} while (-1==nbytes && EINTR==errno);
-		if (-1==nbytes) /* error */
-		    HSYS_GOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
-		assert(nbytes>0);
-		assert((size_t)nbytes<=size);
-		H5_CHECK_OVERFLOW(nbytes,ssize_t,size_t);
-		size -= (size_t)nbytes;
-		H5_CHECK_OVERFLOW(nbytes,ssize_t,haddr_t);
-		addr += (haddr_t)nbytes;
-		buf = (const char*)buf + nbytes;
-	    }
+      /* Seek to the correct location */
+      if ((addr!=file->pos || OP_WRITE!=file->op) &&
+        file_seek(file->fd, (file_offset_t)addr, SEEK_SET)<0)
+    HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
+
+      while (size>0) {
+    do {
+        nbytes = HDwrite(file->fd, buf, size);
+    } while (-1==nbytes && EINTR==errno);
+    if (-1==nbytes) /* error */
+        HSYS_GOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
+    assert(nbytes>0);
+    assert((size_t)nbytes<=size);
+    H5_CHECK_OVERFLOW(nbytes,ssize_t,size_t);
+    size -= (size_t)nbytes;
+    H5_CHECK_OVERFLOW(nbytes,ssize_t,haddr_t);
+    addr += (haddr_t)nbytes;
+    buf = (const char*)buf + nbytes;
+      }
     } else {
             /* Calculate where we will begin reading from (on disk) and where we
              * will begin copying from the copy buffer */
             write_addr = (addr / _fbsize) * _fbsize;
             copy_offset = (size_t)(addr % _fbsize);
 
-	    /* allocate memory needed for the Direct IO option up to the maximal
-	     * copy buffer size. Make a bigger buffer for aligned I/O if size is
-	     * smaller than maximal copy buffer.
-	     */
-	    alloc_size = ((copy_offset + size - 1) / _fbsize + 1) * _fbsize;
+      /* allocate memory needed for the Direct IO option up to the maximal
+       * copy buffer size. Make a bigger buffer for aligned I/O if size is
+       * smaller than maximal copy buffer.
+       */
+      alloc_size = ((copy_offset + size - 1) / _fbsize + 1) * _fbsize;
             if(alloc_size > _cbsize)
                 alloc_size = _cbsize;
             HDassert(!(alloc_size % _fbsize));
 
-	    if (HDposix_memalign(&copy_buf, _boundary, alloc_size) != 0)
-		HGOTO_ERROR(H5E_RESOURCE, H5E_CANTALLOC, FAIL, "HDposix_memalign failed")
+      if (HDposix_memalign(&copy_buf, _boundary, alloc_size) != 0)
+    HGOTO_ERROR(H5E_RESOURCE, H5E_CANTALLOC, FAIL, "HDposix_memalign failed")
 
             /* look for the right position for reading or writing the data */
             if(file_seek(file->fd, (file_offset_t)write_addr, SEEK_SET) < 0)
                 HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
 
-	    p3 = buf;
-	    do {
+      p3 = buf;
+      do {
                 /* Calculate how much data we have to write in this iteration
                  * (including unused parts of blocks) */
                 if((copy_size + copy_offset) < alloc_size)
@@ -1197,16 +1197,16 @@ H5FD_direct_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, h
                 else
                     write_size = alloc_size;
 
-	    	/*
-	     	 * Read the aligned data first if the aligned region doesn't fall
-	    	 * entirely in the range to be writen.  Not able to handle interrupted
-		 * system calls and partial results like sec2 driver does because the
-		 * data may no longer be aligned. It's expecially true when the data in
-		 * file is smaller than ALLOC_SIZE.  Only read the entire section if
+        /*
+          * Read the aligned data first if the aligned region doesn't fall
+         * entirely in the range to be writen.  Not able to handle interrupted
+     * system calls and partial results like sec2 driver does because the
+     * data may no longer be aligned. It's expecially true when the data in
+     * file is smaller than ALLOC_SIZE.  Only read the entire section if
                  * both ends are misaligned, otherwise only read the block on the
                  * misaligned end.
-	    	 */
-	    	HDmemset(copy_buf, 0, _fbsize);
+         */
+        HDmemset(copy_buf, 0, _fbsize);
 
                 if(copy_offset > 0) {
                     if((write_addr + write_size) > (addr + size)) {
@@ -1244,14 +1244,14 @@ H5FD_direct_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, h
                         HSYS_GOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed")
                 } /* end if */
 
-	    	/* look for the right position and append or copy the data to be written to
-	     	 * the aligned buffer.
-            	 * Consider all possible situations here: file address is not aligned on
-            	 * file block size; the end of data address is not aligned; the end of data
-            	 * address is aligned; data size is smaller or bigger than maximal copy size.
-	    	 */
-	    	p1 = (unsigned char *)copy_buf + copy_offset;
-	    	if((copy_size + copy_offset) <= alloc_size) {
+        /* look for the right position and append or copy the data to be written to
+          * the aligned buffer.
+               * Consider all possible situations here: file address is not aligned on
+               * file block size; the end of data address is not aligned; the end of data
+               * address is aligned; data size is smaller or bigger than maximal copy size.
+         */
+        p1 = (unsigned char *)copy_buf + copy_offset;
+        if((copy_size + copy_offset) <= alloc_size) {
                     HDmemcpy(p1, p3, copy_size);
                     copy_size = 0;
                 } /* end if */
@@ -1262,34 +1262,34 @@ H5FD_direct_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, h
                     copy_offset = 0;
                 } /* end else */
 
-	    	/*look for the aligned position for writing the data*/
-	    	HDassert(!(write_addr % _fbsize));
-	    	if(file_seek(file->fd, (file_offset_t)write_addr, SEEK_SET) < 0)
-		    HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
-
-	    	/*
-	     	 * Write the data. It doesn't truncate the extra data introduced by
-		 * alignment because that step is done in H5FD_direct_flush.
-	    	 */
-	    	HDassert(!(write_size % _fbsize));
-		do {
-		    nbytes = HDwrite(file->fd, copy_buf, write_size);
-		} while (-1==nbytes && EINTR==errno);
-
-		if (-1==nbytes) /* error */
-		    HSYS_GOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
-
-            	/* update the write address */
-            	write_addr += write_size;
-	} while (copy_size > 0);
-
-	/*Update the address and size*/
-	addr = write_addr;
-	buf = (const char*)buf + size;
-
-	if(copy_buf) {
-	    HDfree(copy_buf);
-	    copy_buf = NULL;
+        /*look for the aligned position for writing the data*/
+        HDassert(!(write_addr % _fbsize));
+        if(file_seek(file->fd, (file_offset_t)write_addr, SEEK_SET) < 0)
+        HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
+
+        /*
+          * Write the data. It doesn't truncate the extra data introduced by
+     * alignment because that step is done in H5FD_direct_flush.
+         */
+        HDassert(!(write_size % _fbsize));
+    do {
+        nbytes = HDwrite(file->fd, copy_buf, write_size);
+    } while (-1==nbytes && EINTR==errno);
+
+    if (-1==nbytes) /* error */
+        HSYS_GOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
+
+              /* update the write address */
+              write_addr += write_size;
+  } while (copy_size > 0);
+
+  /*Update the address and size*/
+  addr = write_addr;
+  buf = (const char*)buf + size;
+
+  if(copy_buf) {
+      HDfree(copy_buf);
+      copy_buf = NULL;
         } /* end if */
     }
 
@@ -1314,16 +1314,16 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_direct_truncate
+ * Function:  H5FD_direct_truncate
  *
- * Purpose:	Makes sure that the true file size is the same (or larger)
- *		than the end-of-address.
+ * Purpose:  Makes sure that the true file size is the same (or larger)
+ *    than the end-of-address.
  *
- * Return:	Success:	Non-negative
+ * Return:  Success:  Non-negative
  *
- *		Failure:	Negative
+ *    Failure:  Negative
  *
- * Programmer:	Raymond Lu
+ * Programmer:  Raymond Lu
  *              Thursday, 21 September 2006
  *
  *-------------------------------------------------------------------------
@@ -1331,8 +1331,8 @@ done:
 static herr_t
 H5FD_direct_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing)
 {
-    H5FD_direct_t	*file = (H5FD_direct_t*)_file;
-    herr_t      	ret_value = SUCCEED;       /* Return value */
+    H5FD_direct_t  *file = (H5FD_direct_t*)_file;
+    herr_t        ret_value = SUCCEED;       /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_direct_truncate, FAIL)
 
@@ -1340,7 +1340,7 @@ H5FD_direct_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing
 
     /* Extend the file to make sure it's large enough */
     if (file->eoa!=file->eof) {
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
         HFILE filehandle;   /* Windows file handle */
         LARGE_INTEGER li;   /* 64-bit integer for SetFilePointer() call */
 
@@ -1353,10 +1353,10 @@ H5FD_direct_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing
         (void)SetFilePointer((HANDLE)filehandle,li.LowPart,&li.HighPart,FILE_BEGIN);
         if(SetEndOfFile((HANDLE)filehandle)==0)
             HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to extend file properly")
-#else /* _WIN32 */
+#else /* H5_HAVE_WIN32_API */
         if (-1==file_truncate(file->fd, (file_offset_t)file->eoa))
             HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to extend file properly")
-#endif /* _WIN32 */
+#endif /* H5_HAVE_WIN32_API */
 
         /* Update the eof value */
         file->eof = file->eoa;
@@ -1366,9 +1366,9 @@ H5FD_direct_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing
         file->op = OP_UNKNOWN;
     }
     else if (file->fa.must_align){
-	/*Even though eof is equal to eoa, file is still truncated because Direct I/O
-	 *write introduces some extra data for alignment.
-	 */
+  /*Even though eof is equal to eoa, file is still truncated because Direct I/O
+   *write introduces some extra data for alignment.
+   */
         if (-1==file_truncate(file->fd, (file_offset_t)file->eof))
             HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to extend file properly")
     }
diff --git a/src/H5FDlog.c b/src/H5FDlog.c
index 96df596..2cb795e 100644
--- a/src/H5FDlog.c
+++ b/src/H5FDlog.c
@@ -30,28 +30,47 @@
 #define H5_INTERFACE_INIT_FUNC	H5FD_log_init_interface
 
 
-#include "H5private.h"		/* Generic Functions			*/
-#include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fprivate.h"		/* File access				*/
-#include "H5FDprivate.h"	/* File drivers				*/
-#include "H5FDlog.h"		/* Logging file driver			*/
-#include "H5FLprivate.h"	/* Free Lists                           */
-#include "H5Iprivate.h"		/* IDs			  		*/
-#include "H5MMprivate.h"	/* Memory management			*/
-#include "H5Pprivate.h"		/* Property lists			*/
+#include "H5private.h"      /* Generic Functions */
+#include "H5Eprivate.h"     /* Error handling */
+#include "H5Fprivate.h"     /* File access */
+#include "H5FDprivate.h"    /* File drivers */
+#include "H5FDlog.h"        /* Logging file driver */
+#include "H5FLprivate.h"    /* Free Lists */
+#include "H5Iprivate.h"     /* IDs */
+#include "H5MMprivate.h"    /* Memory management */
+#include "H5Pprivate.h"     /* Property lists */
 
 /* The driver identification number, initialized at runtime */
 static hid_t H5FD_LOG_g = 0;
 
+/* Since Windows doesn't follow the rest of the world when it comes
+ * to POSIX I/O types, some typedefs and constants are needed to avoid
+ * making the code messy with #ifdefs.
+ */
+#ifdef H5_HAVE_WIN32_API
+typedef unsigned int    h5_log_io_t;
+typedef int             h5_log_io_ret_t;
+static int H5_LOG_MAX_IO_BYTES_g = INT_MAX;
+#else
+/* Unix, everyone else */
+typedef size_t          h5_log_io_t;
+typedef ssize_t         h5_log_io_ret_t;
+static size_t H5_LOG_MAX_IO_BYTES_g = SSIZET_MAX;
+#endif /* H5_HAVE_WIN32_API */
+
 /* Driver-specific file access properties */
 typedef struct H5FD_log_fapl_t {
-    char *logfile;	        /* Allocated log file name */
+    char *logfile;              /* Allocated log file name */
     unsigned long long flags;   /* Flags for logging behavior */
     size_t buf_size;            /* Size of buffers for track flavor and number of times each byte is accessed */
 } H5FD_log_fapl_t;
 
-/* Define strings for the different file memory types */
-static const char *flavors[]={   /* These are defined in H5FDpublic.h */
+/* Define strings for the different file memory types
+ * These are defined in the H5F_mem_t enum from H5Fpublic.h
+ * Note that H5FD_MEM_NOLIST is not listed here since it has
+ * a negative value.
+ */
+static const char *flavors[]={
     "H5FD_MEM_DEFAULT",
     "H5FD_MEM_SUPER",
     "H5FD_MEM_BTREE",
@@ -61,11 +80,10 @@ static const char *flavors[]={   /* These are defined in H5FDpublic.h */
     "H5FD_MEM_OHDR",
 };
 
-/*
- * The description of a file belonging to this driver. The `eoa' and `eof'
+/* The description of a file belonging to this driver. The `eoa' and `eof'
  * determine the amount of hdf5 address space in use and the high-water mark
- * of the file (the current size of the underlying Unix file). The `pos'
- * value is used to eliminate file position updates when they would be a
+ * of the file (the current size of the underlying filesystem file). The
+ * `pos' value is used to eliminate file position updates when they would be a
  * no-op. Unfortunately we've found systems that use separate file position
  * indicators for reading and writing so the lseek can only be eliminated if
  * the current operation is the same as the previous operation.  When opening
@@ -74,69 +92,71 @@ static const char *flavors[]={   /* These are defined in H5FDpublic.h */
  * occurs), and `op' will be set to H5F_OP_UNKNOWN.
  */
 typedef struct H5FD_log_t {
-    H5FD_t	pub;			/*public stuff, must be first	*/
-    int		fd;			/*the unix file			*/
-    haddr_t	eoa;			/*end of allocated region	*/
-    haddr_t	eof;			/*end of file; current file size*/
-    haddr_t	pos;			/*current file I/O position	*/
-    H5FD_file_op_t	op;		/*last operation		*/
-    char	filename[H5FD_MAX_FILENAME_LEN];     /* Copy of file name from open operation */
-#ifndef _WIN32
-    /*
-     * On most systems the combination of device and i-node number uniquely
-     * identify a file.
+    H5FD_t          pub;    /* public stuff, must be first      */
+    int             fd;     /* the unix file                    */
+    haddr_t         eoa;    /* end of allocated region          */
+    haddr_t         eof;    /* end of file; current file size   */
+    haddr_t         pos;    /* current file I/O position        */
+    H5FD_file_op_t  op;     /* last operation                   */
+    char            filename[H5FD_MAX_FILENAME_LEN];    /* Copy of file name from open operation */
+#ifndef H5_HAVE_WIN32_API
+    /* On most systems the combination of device and i-node number uniquely
+     * identify a file.  Note that Cygwin, MinGW and other Windows POSIX
+     * environments have the stat function (which fakes inodes)
+     * and will use the 'device + inodes' scheme as opposed to the
+     * Windows code further below.
      */
-    dev_t	device;			/*file device number		*/
+    dev_t           device;         /* file device number   */
 #ifdef H5_VMS
-    ino_t	inode[3];		/*file i-node number		*/
+    ino_t           inode[3];       /* file i-node number   */
 #else
-    ino_t	inode;			/*file i-node number		*/
+    ino_t           inode;          /* file i-node number   */
 #endif /*H5_VMS*/
 #else
-    /*
-     * On _WIN32 the low-order word of a unique identifier associated with the
-     * file and the volume serial number uniquely identify a file. This number
-     * (which, both? -rpm) may change when the system is restarted or when the
-     * file is opened. After a process opens a file, the identifier is
-     * constant until the file is closed. An application can use this
-     * identifier and the volume serial number to determine whether two
-     * handles refer to the same file.
+    /* Files in windows are uniquely identified by the volume serial
+     * number and the file index (both low and high parts).
+     *
+     * There are caveats where these numbers can change, especially
+     * on FAT file systems.  On NTFS, however, a file should keep
+     * those numbers the same until renamed or deleted (though you
+     * can use ReplaceFile() on NTFS to keep the numbers the same
+     * while renaming).
+     *
+     * See the MSDN "BY_HANDLE_FILE_INFORMATION Structure" entry for
+     * more information.
+     *
+     * http://msdn.microsoft.com/en-us/library/aa363788(v=VS.85).aspx
      */
-    DWORD fileindexlo;
-    DWORD fileindexhi;
-#endif
-
-    /* Information from properties set by 'h5repart' tool */
-    hbool_t     fam_to_sec2;    /* Whether to eliminate the family driver info
-                                 * and convert this file to a single file */
+    DWORD           nFileIndexLow;
+    DWORD           nFileIndexHigh;
+    DWORD           dwVolumeSerialNumber;
+    
+    HANDLE          hFile;      /* Native windows file handle */
+#endif  /* H5_HAVE_WIN32_API */
+
+    /* Information from properties set by 'h5repart' tool
+     *
+     * Whether to eliminate the family driver info and convert this file to
+     * a single file
+     */
+    hbool_t     fam_to_sec2;
 
     /* Fields for tracking I/O operations */
-    unsigned char *nread;   /* Number of reads from a file location */
-    unsigned char *nwrite;  /* Number of write to a file location */
-    unsigned char *flavor;  /* Flavor of information written to file location */
-    unsigned long long total_read_ops;  /* Total number of read operations */
-    unsigned long long total_write_ops; /* Total number of write operations */
-    unsigned long long total_seek_ops;  /* Total number of seek operations */
-    unsigned long long total_truncate_ops; /* Total number of truncate operations */
-    double      total_read_time;    /* Total time spent in read operations */
-    double      total_write_time;   /* Total time spent in write operations */
-    double      total_seek_time;    /* Total time spent in seek operations */
-    size_t      iosize;     /* Size of I/O information buffers */
-    FILE       *logfp;      /* Log file pointer */
-    H5FD_log_fapl_t fa;	    /* Driver-specific file access properties*/
+    unsigned char       *nread;                 /* Number of reads from a file location             */
+    unsigned char       *nwrite;                /* Number of write to a file location               */
+    unsigned char       *flavor;                /* Flavor of information written to file location   */
+    unsigned long long  total_read_ops;         /* Total number of read operations                  */
+    unsigned long long  total_write_ops;        /* Total number of write operations                 */
+    unsigned long long  total_seek_ops;         /* Total number of seek operations                  */
+    unsigned long long  total_truncate_ops;     /* Total number of truncate operations              */
+    double              total_read_time;        /* Total time spent in read operations              */
+    double              total_write_time;       /* Total time spent in write operations             */
+    double              total_seek_time;        /* Total time spent in seek operations              */
+    size_t              iosize;                 /* Size of I/O information buffers                  */
+    FILE                *logfp;                 /* Log file pointer                                 */
+    H5FD_log_fapl_t     fa;                     /* Driver-specific file access properties           */
 } H5FD_log_t;
 
-
-/*
- * This driver supports systems that have the lseek64() function by defining
- * some macros here so we don't have to have conditional compilations later
- * throughout the code.
- *
- * HDoff_t:	The datatype for file offsets, the second argument of
- *		the lseek() or lseek64() call.
- *
- */
-
 /*
  * These macros check for overflow of various quantities.  These macros
  * assume that HDoff_t is signed and haddr_t and size_t are unsigned.
@@ -277,7 +297,7 @@ done:
  *
  * Purpose:	Shut down the VFD
  *
- * Return:	<none>
+ * Returns:     <none>
  *
  * Programmer:  Quincey Koziol
  *              Friday, Jan 30, 2004
@@ -300,8 +320,7 @@ H5FD_log_term(void)
  * Function:	H5Pset_fapl_log
  *
  * Purpose:	Modify the file access property list to use the H5FD_LOG
- *		driver defined in this source file.  There are no driver
- *		specific properties.
+ *		driver defined in this source file.
  *
  * Return:	Non-negative on success/Negative on failure
  *
@@ -313,17 +332,22 @@ H5FD_log_term(void)
 herr_t
 H5Pset_fapl_log(hid_t fapl_id, const char *logfile, unsigned long long flags, size_t buf_size)
 {
-    H5FD_log_fapl_t	fa;     /* File access property list information */
-    H5P_genplist_t *plist;      /* Property list pointer */
-    herr_t ret_value;
+    H5FD_log_fapl_t     fa;         /* File access property list information */
+    H5P_genplist_t      *plist;     /* Property list pointer */
+    herr_t              ret_value;  /* Return value */
 
     FUNC_ENTER_API(H5Pset_fapl_log, FAIL)
-    H5TRACE4("e", "i*sIuz", fapl_id, logfile, flags, buf_size);
+    H5TRACE4("e", "i*sULz", fapl_id, logfile, flags, buf_size);
 
+    /* Check arguments */
     if(NULL == (plist = H5P_object_verify(fapl_id, H5P_FILE_ACCESS)))
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
 
+    /* This shallow copy is correct! The string will be properly 
+     * copied deep down in the H5P code. 
+     */
     fa.logfile = (char *)logfile;
+
     fa.flags = flags;
     fa.buf_size = buf_size;
     ret_value = H5P_set_driver(plist, H5FD_LOG, &fa);
@@ -447,7 +471,7 @@ H5FD_log_fapl_free(void *_fa)
 /*-------------------------------------------------------------------------
  * Function:	H5FD_log_open
  *
- * Purpose:	Create and/or opens a Unix file as an HDF5 file.
+ * Purpose:	Create and/or opens a file as an HDF5 file.
  *
  * Return:	Success:	A pointer to a new file data structure. The
  *				public fields will be initialized by the
@@ -467,8 +491,7 @@ H5FD_log_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
     H5FD_log_fapl_t	*fa;    /* File access property list information */
     int		fd = (-1);      /* File descriptor */
     int		o_flags;        /* Flags for open() call */
-#ifdef _WIN32
-    HFILE filehandle;
+#ifdef H5_HAVE_WIN32_API
     struct _BY_HANDLE_FILE_INFORMATION fileinfo;
 #endif
 #ifdef H5_HAVE_GETTIMEOFDAY
@@ -564,12 +587,18 @@ H5FD_log_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
     H5_ASSIGN_OVERFLOW(file->eof, sb.st_size, h5_stat_size_t, haddr_t);
     file->pos = HADDR_UNDEF;
     file->op = OP_UNKNOWN;
-#ifdef _WIN32
-    filehandle = _get_osfhandle(fd);
-    (void)GetFileInformationByHandle((HANDLE)filehandle, &fileinfo);
-    file->fileindexhi = fileinfo.nFileIndexHigh;
-    file->fileindexlo = fileinfo.nFileIndexLow;
-#else /* _WIN32 */
+#ifdef H5_HAVE_WIN32_API
+    file->hFile = (HANDLE)_get_osfhandle(fd);
+    if(INVALID_HANDLE_VALUE == file->hFile)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to get Windows file handle")
+
+    if(!GetFileInformationByHandle((HANDLE)file->hFile, &fileinfo))
+        HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to get Windows file information")
+
+    file->nFileIndexHigh = fileinfo.nFileIndexHigh;
+    file->nFileIndexLow = fileinfo.nFileIndexLow;
+    file->dwVolumeSerialNumber = fileinfo.dwVolumeSerialNumber;
+#else /* H5_HAVE_WIN32_API */
     file->device = sb.st_dev;
 #ifdef H5_VMS
     file->inode[0] = sb.st_ino[0];
@@ -579,7 +608,7 @@ H5FD_log_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
     file->inode = sb.st_ino;
 #endif /*H5_VMS*/
 
-#endif /* _WIN32 */
+#endif /* H5_HAVE_WIN32_API */
 
     /* Retain a copy of the name used to open the file, for possible error reporting */
     HDstrncpy(file->filename, name, sizeof(file->filename));
@@ -650,7 +679,7 @@ done:
 /*-------------------------------------------------------------------------
  * Function:	H5FD_log_close
  *
- * Purpose:	Closes a Unix file.
+ * Purpose:	Closes an HDF5 file.
  *
  * Return:	Success:	0
  *		Failure:	-1, file not closed.
@@ -819,13 +848,15 @@ H5FD_log_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
 
     FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_log_cmp)
 
-#ifdef _WIN32
-    if(f1->fileindexhi < f2->fileindexhi) HGOTO_DONE(-1)
-    if(f1->fileindexhi > f2->fileindexhi) HGOTO_DONE(1)
+#ifdef H5_HAVE_WIN32_API
+    if(f1->dwVolumeSerialNumber < f2->dwVolumeSerialNumber) HGOTO_DONE(-1)
+    if(f1->dwVolumeSerialNumber > f2->dwVolumeSerialNumber) HGOTO_DONE(1)
 
-    if(f1->fileindexlo < f2->fileindexlo) HGOTO_DONE(-1)
-    if(f1->fileindexlo > f2->fileindexlo) HGOTO_DONE(1)
+    if(f1->nFileIndexHigh < f2->nFileIndexHigh) HGOTO_DONE(-1)
+    if(f1->nFileIndexHigh > f2->nFileIndexHigh) HGOTO_DONE(1)
 
+    if(f1->nFileIndexLow < f2->nFileIndexLow) HGOTO_DONE(-1)
+    if(f1->nFileIndexLow > f2->nFileIndexLow) HGOTO_DONE(1)
 #else
 #ifdef H5_DEV_T_IS_SCALAR
     if(f1->device < f2->device) HGOTO_DONE(-1)
@@ -1005,11 +1036,11 @@ H5FD_log_set_eoa(H5FD_t *_file, H5FD_mem_t UNUSED type, haddr_t addr)
  * Function:	H5FD_log_get_eof
  *
  * Purpose:	Returns the end-of-file marker, which is the greater of
- *		either the Unix end-of-file or the HDF5 end-of-address
+ *		either the filesystem end-of-file or the HDF5 end-of-address
  *		markers.
  *
  * Return:	Success:	End of file address, the first address past
- *				the end of the "file", either the Unix file
+ *				the end of the "file", either the filesystem file
  *				or the HDF5 file.
  *		Failure:	HADDR_UNDEF
  *
@@ -1082,7 +1113,6 @@ H5FD_log_read(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, haddr_t addr
 	       size_t size, void *buf/*out*/)
 {
     H5FD_log_t		*file = (H5FD_log_t *)_file;
-    ssize_t		nbytes;
     size_t              orig_size = size; /* Save the original size for later */
     haddr_t             orig_addr = addr;
 #ifdef H5_HAVE_GETTIMEOFDAY
@@ -1169,10 +1199,23 @@ H5FD_log_read(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, haddr_t addr
         HDgettimeofday(&timeval_start, NULL);
 #endif /* H5_HAVE_GETTIMEOFDAY */
     while(size > 0) {
+
+        h5_log_io_t         bytes_in        = 0;    /* # of bytes to read       */
+        h5_log_io_ret_t     bytes_read      = -1;   /* # of bytes actually read */ 
+
+        /* Trying to read more bytes than the return type can handle is
+         * undefined behavior in POSIX.
+         */
+        if(size > H5_LOG_MAX_IO_BYTES_g)
+            bytes_in = H5_LOG_MAX_IO_BYTES_g;
+        else
+            bytes_in = (h5_log_io_t)size;
+
         do {
-            nbytes = HDread(file->fd, buf, size);
-        } while(-1 == nbytes && EINTR == errno);
-        if(-1 == nbytes) { /* error */
+            bytes_read = HDread(file->fd, buf, bytes_in);
+        } while(-1 == bytes_read && EINTR == errno);
+
+        if(-1 == bytes_read) { /* error */
             int myerrno = errno;
             time_t mytime = HDtime(NULL);
             HDoff_t myoffset = HDlseek(file->fd, (HDoff_t)0, SEEK_CUR);
@@ -1182,18 +1225,20 @@ H5FD_log_read(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, haddr_t addr
 
             HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, error message = '%s', buf = %p, size = %lu, offset = %llu", HDctime(&mytime), file->filename, file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long)size, (unsigned long long)myoffset);
         } /* end if */
-        if(0 == nbytes) {
+
+        if(0 == bytes_read) {
             /* end of file but not end of format address space */
             HDmemset(buf, 0, size);
             break;
         } /* end if */
-        HDassert(nbytes >= 0);
-        HDassert((size_t)nbytes <= size);
-        H5_CHECK_OVERFLOW(nbytes, ssize_t, size_t);
-        size -= (size_t)nbytes;
-        H5_CHECK_OVERFLOW(nbytes, ssize_t, haddr_t);
-        addr += (haddr_t)nbytes;
-        buf = (char *)buf + nbytes;
+
+        HDassert(bytes_read >= 0);
+        HDassert((size_t)bytes_read <= size);
+        
+        size -= (size_t)bytes_read;
+        addr += (haddr_t)bytes_read;
+        buf = (char *)buf + bytes_read;
+
     } /* end while */
 #ifdef H5_HAVE_GETTIMEOFDAY
     if(file->fa.flags & H5FD_LOG_TIME_READ)
@@ -1269,7 +1314,6 @@ H5FD_log_write(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, haddr_t add
 		size_t size, const void *buf)
 {
     H5FD_log_t		*file = (H5FD_log_t *)_file;
-    ssize_t		nbytes;
     size_t              orig_size = size; /* Save the original size for later */
     haddr_t             orig_addr = addr;
 #ifdef H5_HAVE_GETTIMEOFDAY
@@ -1361,10 +1405,23 @@ H5FD_log_write(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, haddr_t add
         HDgettimeofday(&timeval_start, NULL);
 #endif /* H5_HAVE_GETTIMEOFDAY */
     while(size > 0) {
+
+        h5_log_io_t         bytes_in        = 0;    /* # of bytes to write  */
+        h5_log_io_ret_t     bytes_wrote     = -1;   /* # of bytes written   */ 
+
+        /* Trying to write more bytes than the return type can handle is
+         * undefined behavior in POSIX.
+         */
+        if(size > H5_LOG_MAX_IO_BYTES_g)
+            bytes_in = H5_LOG_MAX_IO_BYTES_g;
+        else
+            bytes_in = (h5_log_io_t)size;
+
         do {
-            nbytes = HDwrite(file->fd, buf, size);
-        } while(-1 == nbytes && EINTR == errno);
-        if(-1 == nbytes) { /* error */
+            bytes_wrote = HDwrite(file->fd, buf, bytes_in);
+        } while(-1 == bytes_wrote && EINTR == errno);
+
+        if(-1 == bytes_wrote) { /* error */
             int myerrno = errno;
             time_t mytime = HDtime(NULL);
             HDoff_t myoffset = HDlseek(file->fd, (HDoff_t)0, SEEK_CUR);
@@ -1374,13 +1431,13 @@ H5FD_log_write(H5FD_t *_file, H5FD_mem_t type, hid_t UNUSED dxpl_id, haddr_t add
 
             HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, error message = '%s', buf = %p, size = %lu, offset = %llu", HDctime(&mytime), file->filename, file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long)size, (unsigned long long)myoffset);
         } /* end if */
-        HDassert(nbytes > 0);
-        HDassert((size_t)nbytes <= size);
-        H5_CHECK_OVERFLOW(nbytes, ssize_t, size_t);
-        size -= (size_t)nbytes;
-        H5_CHECK_OVERFLOW(nbytes, ssize_t, haddr_t);
-        addr += (haddr_t)nbytes;
-        buf = (const char *)buf + nbytes;
+
+        HDassert(bytes_wrote > 0);
+        HDassert((size_t)bytes_wrote <= size);
+
+        size -= (size_t)bytes_wrote;
+        addr += (haddr_t)bytes_wrote;
+        buf = (const char *)buf + bytes_wrote;
     } /* end while */
 #ifdef H5_HAVE_GETTIMEOFDAY
     if(file->fa.flags & H5FD_LOG_TIME_WRITE)
@@ -1468,20 +1525,33 @@ H5FD_log_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing)
 
     /* Extend the file to make sure it's large enough */
     if(!H5F_addr_eq(file->eoa, file->eof)) {
-#ifdef _WIN32
-        HFILE filehandle;   /* Windows file handle */
-        LARGE_INTEGER li;   /* 64-bit integer for SetFilePointer() call */
-
-        /* Map the posix file handle to a Windows file handle */
-        filehandle = _get_osfhandle(file->fd);
-
-        /* Translate 64-bit integers into form Windows wants */
-        /* [This algorithm is from the Windows documentation for SetFilePointer()] */
-        li.QuadPart = (LONGLONG)file->eoa;
-        (void)SetFilePointer((HANDLE)filehandle, li.LowPart, &li.HighPart, FILE_BEGIN);
-        if(SetEndOfFile((HANDLE)filehandle) == 0)
+#ifdef H5_HAVE_WIN32_API
+        LARGE_INTEGER   li;         /* 64-bit (union) integer for SetFilePointer() call */
+        DWORD           dwPtrLow;   /* Low-order pointer bits from SetFilePointer()
+                                     * Only used as an error code here.
+                                     */
+        DWORD           dwError;    /* DWORD error code from GetLastError() */
+        BOOL            bError;     /* Boolean error flag */
+
+        /* Windows uses this odd QuadPart union for 32/64-bit portability */
+        li.QuadPart = (__int64)file->eoa;
+
+        /* Extend the file to make sure it's large enough.
+         *
+         * Since INVALID_SET_FILE_POINTER can technically be a valid return value
+         * from SetFilePointer(), we also need to check GetLastError().
+         */
+        dwPtrLow = SetFilePointer(file->hFile, li.LowPart, &li.HighPart, FILE_BEGIN);
+        if(INVALID_SET_FILE_POINTER == dwPtrLow) {
+            dwError = GetLastError();
+            if(dwError != NO_ERROR )
+                HGOTO_ERROR(H5E_FILE, H5E_FILEOPEN, FAIL, "unable to set file pointer")
+        }
+
+        bError = SetEndOfFile(file->hFile);
+        if(0 == bError)
             HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to extend file properly")
-#else /* _WIN32 */
+#else /* H5_HAVE_WIN32_API */
 #ifdef H5_VMS
         /* Reset seek offset to the beginning of the file, so that the file isn't
          * re-extended later.  This may happen on Open VMS. */
@@ -1491,7 +1561,7 @@ H5FD_log_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing)
 
         if(-1 == HDftruncate(file->fd, (HDoff_t)file->eoa))
             HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to extend file properly")
-#endif /* _WIN32 */
+#endif /* H5_HAVE_WIN32_API */
 
         /* Log information about the truncate */
         if(file->fa.flags & H5FD_LOG_NUM_TRUNCATE)
diff --git a/src/H5FDmpio.c b/src/H5FDmpio.c
index b382fb4..f82dca9 100644
--- a/src/H5FDmpio.c
+++ b/src/H5FDmpio.c
@@ -17,22 +17,22 @@
  * Programmer:  Robb Matzke <matzke at llnl.gov>
  *              Thursday, July 29, 1999
  *
- * Purpose:	This is the MPI-2 I/O driver.
+ * Purpose:  This is the MPI-2 I/O driver.
  *
  */
 
 /* Interface initialization */
-#define H5_INTERFACE_INIT_FUNC	H5FD_mpio_init_interface
+#define H5_INTERFACE_INIT_FUNC  H5FD_mpio_init_interface
 
 
-#include "H5private.h"		/* Generic Functions			*/
-#include "H5Dprivate.h"		/* Dataset functions			*/
-#include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fprivate.h"		/* File access				*/
-#include "H5FDprivate.h"	/* File drivers				*/
-#include "H5FDmpi.h"            /* MPI-based file drivers		*/
-#include "H5Iprivate.h"		/* IDs			  		*/
-#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5private.h"    /* Generic Functions      */
+#include "H5Dprivate.h"    /* Dataset functions      */
+#include "H5Eprivate.h"    /* Error handling        */
+#include "H5Fprivate.h"    /* File access        */
+#include "H5FDprivate.h"  /* File drivers        */
+#include "H5FDmpi.h"            /* MPI-based file drivers    */
+#include "H5Iprivate.h"    /* IDs            */
+#include "H5MMprivate.h"  /* Memory management      */
 #include "H5Pprivate.h"         /* Property lists                       */
 
 #ifdef H5_HAVE_PARALLEL
@@ -51,15 +51,15 @@ static hid_t H5FD_MPIO_g = 0;
  * driver doesn't bother to keep it updated since it's an expensive operation.
  */
 typedef struct H5FD_mpio_t {
-    H5FD_t	pub;		/*public stuff, must be first		*/
-    MPI_File	f;		/*MPIO file handle			*/
-    MPI_Comm	comm;		/*communicator				*/
-    MPI_Info	info;		/*file information			*/
+    H5FD_t  pub;    /*public stuff, must be first    */
+    MPI_File  f;    /*MPIO file handle      */
+    MPI_Comm  comm;    /*communicator        */
+    MPI_Info  info;    /*file information      */
     int         mpi_rank;       /* This process's rank                  */
     int         mpi_size;       /* Total number of processes            */
-    haddr_t	eof;		/*end-of-file marker			*/
-    haddr_t	eoa;		/*end-of-address marker			*/
-    haddr_t	last_eoa;	/* Last known end-of-address marker	*/
+    haddr_t  eof;    /*end-of-file marker      */
+    haddr_t  eoa;    /*end-of-address marker      */
+    haddr_t  last_eoa;  /* Last known end-of-address marker  */
 } H5FD_mpio_t;
 
 /* Private Prototypes */
@@ -69,7 +69,7 @@ static void *H5FD_mpio_fapl_get(H5FD_t *_file);
 static void *H5FD_mpio_fapl_copy(const void *_old_fa);
 static herr_t H5FD_mpio_fapl_free(void *_fa);
 static H5FD_t *H5FD_mpio_open(const char *name, unsigned flags, hid_t fapl_id,
-			      haddr_t maxaddr);
+            haddr_t maxaddr);
 static herr_t H5FD_mpio_close(H5FD_t *_file);
 static herr_t H5FD_mpio_query(const H5FD_t *_f1, unsigned long *flags);
 static haddr_t H5FD_mpio_get_eoa(const H5FD_t *_file, H5FD_mem_t type);
@@ -88,41 +88,41 @@ static MPI_Comm H5FD_mpio_communicator(const H5FD_t *_file);
 
 /* MPIO-specific file access properties */
 typedef struct H5FD_mpio_fapl_t {
-    MPI_Comm		comm;		/*communicator			*/
-    MPI_Info		info;		/*file information		*/
+    MPI_Comm    comm;    /*communicator      */
+    MPI_Info    info;    /*file information    */
 } H5FD_mpio_fapl_t;
 
 /* The MPIO file driver information */
 static const H5FD_class_mpi_t H5FD_mpio_g = {
     {   /* Start of superclass information */
-    "mpio",					/*name			*/
-    HADDR_MAX,					/*maxaddr		*/
-    H5F_CLOSE_SEMI,				/* fc_degree		*/
-    NULL,					/*sb_size		*/
-    NULL,					/*sb_encode		*/
-    NULL,					/*sb_decode		*/
-    sizeof(H5FD_mpio_fapl_t),			/*fapl_size		*/
-    H5FD_mpio_fapl_get,				/*fapl_get		*/
-    H5FD_mpio_fapl_copy,			/*fapl_copy		*/
-    H5FD_mpio_fapl_free, 			/*fapl_free		*/
-    0,		                		/*dxpl_size		*/
-    NULL,					/*dxpl_copy		*/
-    NULL,					/*dxpl_free		*/
-    H5FD_mpio_open,				/*open			*/
-    H5FD_mpio_close,				/*close			*/
-    NULL,					/*cmp			*/
-    H5FD_mpio_query,		                /*query			*/
-    NULL,					/*get_type_map		*/
-    NULL,					/*alloc			*/
-    NULL,					/*free			*/
-    H5FD_mpio_get_eoa,				/*get_eoa		*/
-    H5FD_mpio_set_eoa, 				/*set_eoa		*/
-    H5FD_mpio_get_eof,				/*get_eof		*/
+    "mpio",          /*name      */
+    HADDR_MAX,          /*maxaddr    */
+    H5F_CLOSE_SEMI,        /* fc_degree    */
+    NULL,          /*sb_size    */
+    NULL,          /*sb_encode    */
+    NULL,          /*sb_decode    */
+    sizeof(H5FD_mpio_fapl_t),      /*fapl_size    */
+    H5FD_mpio_fapl_get,        /*fapl_get    */
+    H5FD_mpio_fapl_copy,      /*fapl_copy    */
+    H5FD_mpio_fapl_free,       /*fapl_free    */
+    0,                        /*dxpl_size    */
+    NULL,          /*dxpl_copy    */
+    NULL,          /*dxpl_free    */
+    H5FD_mpio_open,        /*open      */
+    H5FD_mpio_close,        /*close      */
+    NULL,          /*cmp      */
+    H5FD_mpio_query,                    /*query      */
+    NULL,          /*get_type_map    */
+    NULL,          /*alloc      */
+    NULL,          /*free      */
+    H5FD_mpio_get_eoa,        /*get_eoa    */
+    H5FD_mpio_set_eoa,         /*set_eoa    */
+    H5FD_mpio_get_eof,        /*get_eof    */
     H5FD_mpio_get_handle,                       /*get_handle            */
-    H5FD_mpio_read,				/*read			*/
-    H5FD_mpio_write,				/*write			*/
-    H5FD_mpio_flush,				/*flush			*/
-    H5FD_mpio_truncate,				/*truncate		*/
+    H5FD_mpio_read,        /*read      */
+    H5FD_mpio_write,        /*write      */
+    H5FD_mpio_flush,        /*flush      */
+    H5FD_mpio_truncate,        /*truncate    */
     NULL,                                       /*lock                  */
     NULL,                                       /*unlock                */
     H5FD_FLMAP_SINGLE                           /*fl_map                */
@@ -176,16 +176,16 @@ H5FD_mpio_init_interface(void)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpio_init
+ * Function:  H5FD_mpio_init
  *
- * Purpose:	Initialize this driver by registering the driver with the
- *		library.
+ * Purpose:  Initialize this driver by registering the driver with the
+ *    library.
  *
- * Return:	Success:	The driver ID for the mpio driver.
+ * Return:  Success:  The driver ID for the mpio driver.
  *
- *		Failure:	Negative.
+ *    Failure:  Negative.
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, August 5, 1999
  *
  * Modifications:
@@ -198,7 +198,7 @@ H5FD_mpio_init(void)
 #ifdef H5FDmpio_DEBUG
     static int H5FD_mpio_Debug_inited=0;
 #endif /* H5FDmpio_DEBUG */
-    hid_t ret_value;        	/* Return value */
+    hid_t ret_value;          /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_mpio_init, FAIL)
 
@@ -208,16 +208,16 @@ H5FD_mpio_init(void)
 #ifdef H5FDmpio_DEBUG
     if (!H5FD_mpio_Debug_inited)
     {
-	/* set debug mask */
-	/* Should this be done in H5F global initialization instead of here? */
+  /* set debug mask */
+  /* Should this be done in H5F global initialization instead of here? */
         const char *s = HDgetenv ("H5FD_mpio_Debug");
         if (s) {
-	    while (*s){
-		H5FD_mpio_Debug[(int)*s]++;
-		s++;
-	    }
+      while (*s){
+    H5FD_mpio_Debug[(int)*s]++;
+    s++;
+      }
         }
-	H5FD_mpio_Debug_inited++;
+  H5FD_mpio_Debug_inited++;
     }
 #endif /* H5FDmpio_DEBUG */
 
@@ -230,11 +230,11 @@ done:
 
 
 /*---------------------------------------------------------------------------
- * Function:	H5FD_mpio_term
+ * Function:  H5FD_mpio_term
  *
- * Purpose:	Shut down the VFD
+ * Purpose:  Shut down the VFD
  *
- * Return:	<none>
+ * Return:  <none>
  *
  * Programmer:  Quincey Koziol
  *              Friday, Jan 30, 2004
@@ -256,68 +256,68 @@ H5FD_mpio_term(void)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5Pset_fapl_mpio
+ * Function:  H5Pset_fapl_mpio
  *
- * Purpose:	Store the user supplied MPIO communicator comm and info in
- *		the file access property list FAPL_ID which can then be used
- *		to create and/or open the file.  This function is available
- *		only in the parallel HDF5 library and is not collective.
+ * Purpose:  Store the user supplied MPIO communicator comm and info in
+ *    the file access property list FAPL_ID which can then be used
+ *    to create and/or open the file.  This function is available
+ *    only in the parallel HDF5 library and is not collective.
  *
- *		comm is the MPI communicator to be used for file open as
- *		defined in MPI_FILE_OPEN of MPI-2. This function makes a
- *		duplicate of comm. Any modification to comm after this function
- *		call returns has no effect on the access property list.
+ *    comm is the MPI communicator to be used for file open as
+ *    defined in MPI_FILE_OPEN of MPI-2. This function makes a
+ *    duplicate of comm. Any modification to comm after this function
+ *    call returns has no effect on the access property list.
  *
- *		info is the MPI Info object to be used for file open as
- *		defined in MPI_FILE_OPEN of MPI-2. This function makes a
- *		duplicate of info. Any modification to info after this
- *		function call returns has no effect on the access property
- *		list.
+ *    info is the MPI Info object to be used for file open as
+ *    defined in MPI_FILE_OPEN of MPI-2. This function makes a
+ *    duplicate of info. Any modification to info after this
+ *    function call returns has no effect on the access property
+ *    list.
  *
  *              If fapl_id has previously set comm and info values, they
  *              will be replaced and the old communicator and Info object
  *              are freed.
  *
- * Return:	Success:	Non-negative
+ * Return:  Success:  Non-negative
  *
- * 		Failure:	Negative
+ *     Failure:  Negative
  *
- * Programmer:	Albert Cheng
- *		Feb 3, 1998
+ * Programmer:  Albert Cheng
+ *    Feb 3, 1998
  *
  * Modifications:
- *		Robb Matzke, 1998-02-18
- *		Check all arguments before the property list is updated so we
- *		don't leave the property list in a bad state if something
- *		goes wrong.  Also, the property list data type changed to
- *		allow more generality so all the mpi-related stuff is in the
- *		`u.mpi' member.  The `access_mode' will contain only
- * 		mpi-related flags defined in H5Fpublic.h.
- *
- *		Albert Cheng, 1998-04-16
- *		Removed the ACCESS_MODE argument.  The access mode is changed
- *		to be controlled by data transfer property list during data
- *		read/write calls.
- *
- * 		Robb Matzke, 1999-08-06
- *		Modified to work with the virtual file layer.
- *
- *		Raymond Lu, 2001-10-23
- *		Changed the file access list to the new generic property
- *		list.
- *
- *		Albert Cheng, 2003-04-17
- *		Modified the description of the function that it now stores
- *		a duplicate of the communicator and INFO object.  Free the
- *		old duplicates if previously set.  (Work is actually done
- *		by H5P_set_driver.)
+ *    Robb Matzke, 1998-02-18
+ *    Check all arguments before the property list is updated so we
+ *    don't leave the property list in a bad state if something
+ *    goes wrong.  Also, the property list data type changed to
+ *    allow more generality so all the mpi-related stuff is in the
+ *    `u.mpi' member.  The `access_mode' will contain only
+ *     mpi-related flags defined in H5Fpublic.h.
+ *
+ *    Albert Cheng, 1998-04-16
+ *    Removed the ACCESS_MODE argument.  The access mode is changed
+ *    to be controlled by data transfer property list during data
+ *    read/write calls.
+ *
+ *     Robb Matzke, 1999-08-06
+ *    Modified to work with the virtual file layer.
+ *
+ *    Raymond Lu, 2001-10-23
+ *    Changed the file access list to the new generic property
+ *    list.
+ *
+ *    Albert Cheng, 2003-04-17
+ *    Modified the description of the function that it now stores
+ *    a duplicate of the communicator and INFO object.  Free the
+ *    old duplicates if previously set.  (Work is actually done
+ *    by H5P_set_driver.)
  *
  *-------------------------------------------------------------------------
  */
 herr_t
 H5Pset_fapl_mpio(hid_t fapl_id, MPI_Comm comm, MPI_Info info)
 {
-    H5FD_mpio_fapl_t	fa;
+    H5FD_mpio_fapl_t  fa;
     H5P_genplist_t *plist;      /* Property list pointer */
     herr_t ret_value;
 
@@ -331,7 +331,7 @@ H5Pset_fapl_mpio(hid_t fapl_id, MPI_Comm comm, MPI_Info info)
     if(NULL == (plist = H5P_object_verify(fapl_id, H5P_FILE_ACCESS)))
         HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a file access list")
     if(MPI_COMM_NULL == comm)
-	HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a valid communicator")
+  HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a valid communicator")
 
     /* Initialize driver specific properties */
     fa.comm = comm;
@@ -346,50 +346,50 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5Pget_fapl_mpio
+ * Function:  H5Pget_fapl_mpio
  *
- * Purpose:	If the file access property list is set to the H5FD_MPIO
- *		driver then this function returns duplicates of the MPI
- *		communicator and Info object stored through the comm and
- *		info pointers.  It is the responsibility of the application
- *		to free the returned communicator and Info object.
+ * Purpose:  If the file access property list is set to the H5FD_MPIO
+ *    driver then this function returns duplicates of the MPI
+ *    communicator and Info object stored through the comm and
+ *    info pointers.  It is the responsibility of the application
+ *    to free the returned communicator and Info object.
  *
- * Return:	Success:	Non-negative with the communicator and
- *				Info object returned through the comm and
- *				info arguments if non-null. Since they are
- *				duplicates of the stored objects, future
- *				modifications to the access property list do
- *				not affect them and it is the responsibility
- *				of the application to free them.
+ * Return:  Success:  Non-negative with the communicator and
+ *        Info object returned through the comm and
+ *        info arguments if non-null. Since they are
+ *        duplicates of the stored objects, future
+ *        modifications to the access property list do
+ *        not affect them and it is the responsibility
+ *        of the application to free them.
  *
- * 		Failure:	Negative
+ *     Failure:  Negative
  *
- * Programmer:	Robb Matzke
- *		Thursday, February 26, 1998
+ * Programmer:  Robb Matzke
+ *    Thursday, February 26, 1998
  *
  * Modifications:
  *
- *	        Albert Cheng, Apr 16, 1998
- *	        Removed the access_mode argument.  The access_mode is changed
- *	        to be controlled by data transfer property list during data
- *	        read/write calls.
+ *          Albert Cheng, Apr 16, 1998
+ *          Removed the access_mode argument.  The access_mode is changed
+ *          to be controlled by data transfer property list during data
+ *          read/write calls.
  *
- *		Raymond Lu, 2001-10-23
- *		Changed the file access list to the new generic property
- *		list.
+ *    Raymond Lu, 2001-10-23
+ *    Changed the file access list to the new generic property
+ *    list.
  *
- *		Albert Cheng, 2003-04-17
- *		Return duplicates of the stored communicator and Info object.
+ *    Albert Cheng, 2003-04-17
+ *    Return duplicates of the stored communicator and Info object.
  *
  *-------------------------------------------------------------------------
  */
 herr_t
 H5Pget_fapl_mpio(hid_t fapl_id, MPI_Comm *comm/*out*/, MPI_Info *info/*out*/)
 {
-    H5FD_mpio_fapl_t	*fa;
+    H5FD_mpio_fapl_t  *fa;
     H5P_genplist_t *plist;      /* Property list pointer */
-    MPI_Comm	comm_tmp=MPI_COMM_NULL;
-    int		mpi_code;		/* mpi return code */
+    MPI_Comm  comm_tmp=MPI_COMM_NULL;
+    int    mpi_code;    /* mpi return code */
     herr_t      ret_value=SUCCEED;      /* Return value */
 
     FUNC_ENTER_API(H5Pget_fapl_mpio, FAIL)
@@ -407,18 +407,18 @@ H5Pget_fapl_mpio(hid_t fapl_id, MPI_Comm *comm/*out*/, MPI_Info *info/*out*/)
     /* the value into *comm yet since if MPI_Comm_dup fails, we will end  */
     /* up freeing whatever *comm holds and that could be invalid. */
     if (comm){
-	if (MPI_SUCCESS != (mpi_code=MPI_Comm_dup(fa->comm, &comm_tmp)))
-	    HMPI_GOTO_ERROR(FAIL, "MPI_Comm_dup failed", mpi_code)
+  if (MPI_SUCCESS != (mpi_code=MPI_Comm_dup(fa->comm, &comm_tmp)))
+      HMPI_GOTO_ERROR(FAIL, "MPI_Comm_dup failed", mpi_code)
     }
 
     if (info){
-	if (MPI_INFO_NULL != fa->info){
-	    if (MPI_SUCCESS != (mpi_code=MPI_Info_dup(fa->info, info)))
-		HMPI_GOTO_ERROR(FAIL, "MPI_Info_dup failed", mpi_code)
-	}else{
-	    /* do not dup it */
-	    *info = MPI_INFO_NULL;
-	}
+  if (MPI_INFO_NULL != fa->info){
+      if (MPI_SUCCESS != (mpi_code=MPI_Info_dup(fa->info, info)))
+    HMPI_GOTO_ERROR(FAIL, "MPI_Info_dup failed", mpi_code)
+  }else{
+      /* do not dup it */
+      *info = MPI_INFO_NULL;
+  }
     }
 
     if (comm)
@@ -426,38 +426,38 @@ H5Pget_fapl_mpio(hid_t fapl_id, MPI_Comm *comm/*out*/, MPI_Info *info/*out*/)
 
 done:
     if (FAIL==ret_value){
-	/* need to free anything created here */
-	if (comm_tmp != MPI_COMM_NULL)
-	    MPI_Comm_free(&comm_tmp);
+  /* need to free anything created here */
+  if (comm_tmp != MPI_COMM_NULL)
+      MPI_Comm_free(&comm_tmp);
     }
     FUNC_LEAVE_API(ret_value)
 }
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5Pset_dxpl_mpio
+ * Function:  H5Pset_dxpl_mpio
  *
- * Purpose:	Set the data transfer property list DXPL_ID to use transfer
- *		mode XFER_MODE. The property list can then be used to control
- *		the I/O transfer mode during data I/O operations. The valid
- *		transfer modes are:
+ * Purpose:  Set the data transfer property list DXPL_ID to use transfer
+ *    mode XFER_MODE. The property list can then be used to control
+ *    the I/O transfer mode during data I/O operations. The valid
+ *    transfer modes are:
  *
- * 		H5FD_MPIO_INDEPENDENT:
- *			Use independent I/O access (the default).
+ *     H5FD_MPIO_INDEPENDENT:
+ *      Use independent I/O access (the default).
  *
- * 		H5FD_MPIO_COLLECTIVE:
- *			Use collective I/O access.
+ *     H5FD_MPIO_COLLECTIVE:
+ *      Use collective I/O access.
  *
- * Return:	Success:	Non-negative
+ * Return:  Success:  Non-negative
  *
- * 		Failure:	Negative
+ *     Failure:  Negative
  *
- * Programmer:	Albert Cheng
- *		April 2, 1998
+ * Programmer:  Albert Cheng
+ *    April 2, 1998
  *
  * Modifications:
- * 		Robb Matzke, 1999-08-06
- *		Modified to work with the virtual file layer.
+ *     Robb Matzke, 1999-08-06
+ *    Modified to work with the virtual file layer.
  *-------------------------------------------------------------------------
  */
 herr_t
@@ -491,23 +491,23 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5Pget_dxpl_mpio
+ * Function:  H5Pget_dxpl_mpio
  *
- * Purpose:	Queries the transfer mode current set in the data transfer
- *		property list DXPL_ID. This is not collective.
+ * Purpose:  Queries the transfer mode current set in the data transfer
+ *    property list DXPL_ID. This is not collective.
  *
- * Return:	Success:	Non-negative, with the transfer mode returned
- *				through the XFER_MODE argument if it is
- *				non-null.
+ * Return:  Success:  Non-negative, with the transfer mode returned
+ *        through the XFER_MODE argument if it is
+ *        non-null.
  *
- * 		Failure:	Negative
+ *     Failure:  Negative
  *
- * Programmer:	Albert Cheng
- *		April 2, 1998
+ * Programmer:  Albert Cheng
+ *    April 2, 1998
  *
  * Modifications:
- * 		Robb Matzke, 1999-08-06
- *		Modified to work with the virtual file layer.
+ *     Robb Matzke, 1999-08-06
+ *    Modified to work with the virtual file layer.
  *-------------------------------------------------------------------------
  */
 herr_t
@@ -534,10 +534,10 @@ done:
 }
 
 /*-------------------------------------------------------------------------
- * Function:	H5Pset_dxpl_mpio_collective_opt
+ * Function:  H5Pset_dxpl_mpio_collective_opt
 
 Purpose:
-	To set a flag to choose linked chunk IO or multi-chunk IO without
+  To set a flag to choose linked chunk IO or multi-chunk IO without
         involving decision-making inside HDF5
 
 Description:
@@ -547,8 +547,8 @@ Description:
         that the low-level MPI-IO package doesn't support this.
 
 Parameters:
-        hid_t dxpl_id	      		in: Data transfer property list identifier
-	H5FD_mpio_chunk_opt_t   	in: The optimization flag for linked chunk IO
+        hid_t dxpl_id            in: Data transfer property list identifier
+  H5FD_mpio_chunk_opt_t     in: The optimization flag for linked chunk IO
                                             or multi-chunk IO.
 
 
@@ -586,10 +586,10 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5Pset_dxpl_mpio_chunk_opt
+ * Function:  H5Pset_dxpl_mpio_chunk_opt
 
 Purpose:
-	To set a flag to choose linked chunk IO or multi-chunk IO without
+  To set a flag to choose linked chunk IO or multi-chunk IO without
         involving decision-making inside HDF5
 
 Description:
@@ -599,8 +599,8 @@ Description:
         that the low-level MPI-IO package doesn't support this.
 
 Parameters:
-        hid_t dxpl_id	      		in: Data transfer property list identifier
-	H5FD_mpio_chunk_opt_t   	in: The optimization flag for linked chunk IO
+        hid_t dxpl_id            in: Data transfer property list identifier
+  H5FD_mpio_chunk_opt_t     in: The optimization flag for linked chunk IO
                                             or multi-chunk IO.
 
 
@@ -638,18 +638,18 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5Pset_dxpl_mpio_chunk_opt_num
+ * Function:  H5Pset_dxpl_mpio_chunk_opt_num
 
 Purpose:
-	To set a threshold for doing linked chunk IO
+  To set a threshold for doing linked chunk IO
 
 Description:
         If the number is greater than the threshold set by the user,
         the library will do linked chunk IO; otherwise, IO will be done for every chunk.
 
 Parameters:
-        hid_t dxpl_id	      		in: Data transfer property list identifier
-	unsigned num_proc_per_chunk	in: the threshold of the average number of chunks selected by each process
+        hid_t dxpl_id            in: Data transfer property list identifier
+  unsigned num_proc_per_chunk  in: the threshold of the average number of chunks selected by each process
 
 Returns:
 Returns a non-negative value if successful. Otherwise returns a negative value.
@@ -685,17 +685,17 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5Pset_dxpl_mpio_chunk_opt_ratio
+ * Function:  H5Pset_dxpl_mpio_chunk_opt_ratio
 
 Purpose:
-	To set a threshold for doing collective IO for each chunk
+  To set a threshold for doing collective IO for each chunk
 Description:
-	The library will calculate the percentage of the number of process holding selections at each chunk. If that percentage of number of process in the individual chunk is greater than the threshold set by the user, the library will do collective chunk IO for this chunk; otherwise, independent IO will be done for this chunk.
+  The library will calculate the percentage of the number of process holding selections at each chunk. If that percentage of number of process in the individual chunk is greater than the threshold set by the user, the library will do collective chunk IO for this chunk; otherwise, independent IO will be done for this chunk.
 Parameters:
-	hid_t dxpl_id
-		in: Data transfer property list identifier
-	unsigned percent_num_proc_per_chunk
-		in: the threshold of the percentage of the number of process holding selections per chunk
+  hid_t dxpl_id
+    in: Data transfer property list identifier
+  unsigned percent_num_proc_per_chunk
+    in: the threshold of the percentage of the number of process holding selections per chunk
 Returns:
 Returns a non-negative value if successful. Otherwise returns a negative value.
 
@@ -732,30 +732,30 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpio_fapl_get
+ * Function:  H5FD_mpio_fapl_get
  *
- * Purpose:	Returns a file access property list which could be used to
- *		create another file the same as this one.
+ * Purpose:  Returns a file access property list which could be used to
+ *    create another file the same as this one.
  *
- * Return:	Success:	Ptr to new file access property list with all
- *				fields copied from the file pointer.
+ * Return:  Success:  Ptr to new file access property list with all
+ *        fields copied from the file pointer.
  *
- *		Failure:	NULL
+ *    Failure:  NULL
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Friday, August 13, 1999
  *
  * Modifications:
- * 		Albert Cheng, 2003-04-17
- * 		Duplicate the communicator and Info object so that the new
- * 		property list is insulated from the old one.
+ *     Albert Cheng, 2003-04-17
+ *     Duplicate the communicator and Info object so that the new
+ *     property list is insulated from the old one.
  *-------------------------------------------------------------------------
  */
 static void *
 H5FD_mpio_fapl_get(H5FD_t *_file)
 {
-    H5FD_mpio_t		*file = (H5FD_mpio_t*)_file;
-    H5FD_mpio_fapl_t	*fa = NULL;
+    H5FD_mpio_t    *file = (H5FD_mpio_t*)_file;
+    H5FD_mpio_fapl_t  *fa = NULL;
     void      *ret_value;       /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_mpio_fapl_get, NULL)
@@ -768,7 +768,7 @@ H5FD_mpio_fapl_get(H5FD_t *_file)
 
     /* Duplicate communicator and Info object. */
     if(FAIL == H5FD_mpi_comm_info_dup(file->comm, file->info, &fa->comm, &fa->info))
-	HGOTO_ERROR(H5E_INTERNAL, H5E_CANTCOPY, NULL, "Communicator/Info duplicate failed")
+  HGOTO_ERROR(H5E_INTERNAL, H5E_CANTCOPY, NULL, "Communicator/Info duplicate failed")
 
     /* Set return value */
     ret_value = fa;
@@ -779,15 +779,15 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpio_fapl_copy
+ * Function:  H5FD_mpio_fapl_copy
  *
- * Purpose:	Copies the mpio-specific file access properties.
+ * Purpose:  Copies the mpio-specific file access properties.
  *
- * Return:	Success:	Ptr to a new property list
+ * Return:  Success:  Ptr to a new property list
  *
- *		Failure:	NULL
+ *    Failure:  NULL
  *
- * Programmer:	Albert Cheng
+ * Programmer:  Albert Cheng
  *              Jan  8, 2003
  *
  * Modifications:
@@ -797,9 +797,9 @@ done:
 static void *
 H5FD_mpio_fapl_copy(const void *_old_fa)
 {
-    void		*ret_value = NULL;
+    void    *ret_value = NULL;
     const H5FD_mpio_fapl_t *old_fa = (const H5FD_mpio_fapl_t*)_old_fa;
-    H5FD_mpio_fapl_t	*new_fa = NULL;
+    H5FD_mpio_fapl_t  *new_fa = NULL;
 
     FUNC_ENTER_NOAPI(H5FD_mpio_fapl_copy, NULL)
 #ifdef H5FDmpio_DEBUG
@@ -815,14 +815,14 @@ fprintf(stderr, "enter H5FD_mpio_fapl_copy\n");
 
     /* Duplicate communicator and Info object. */
     if(FAIL == H5FD_mpi_comm_info_dup(old_fa->comm, old_fa->info, &new_fa->comm, &new_fa->info))
-	HGOTO_ERROR(H5E_INTERNAL, H5E_CANTCOPY, NULL, "Communicator/Info duplicate failed")
+  HGOTO_ERROR(H5E_INTERNAL, H5E_CANTCOPY, NULL, "Communicator/Info duplicate failed")
     ret_value = new_fa;
 
 done:
     if (NULL == ret_value){
-	/* cleanup */
-	if (new_fa)
-	    H5MM_xfree(new_fa);
+  /* cleanup */
+  if (new_fa)
+      H5MM_xfree(new_fa);
     }
 
 #ifdef H5FDmpio_DEBUG
@@ -834,15 +834,15 @@ fprintf(stderr, "leaving H5FD_mpio_fapl_copy\n");
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpio_fapl_free
+ * Function:  H5FD_mpio_fapl_free
  *
- * Purpose:	Frees the mpio-specific file access properties.
+ * Purpose:  Frees the mpio-specific file access properties.
  *
- * Return:	Success:	0
+ * Return:  Success:  0
  *
- *		Failure:	-1
+ *    Failure:  -1
  *
- * Programmer:	Albert Cheng
+ * Programmer:  Albert Cheng
  *              Jan  8, 2003
  *
  * Modifications:
@@ -852,8 +852,8 @@ fprintf(stderr, "leaving H5FD_mpio_fapl_copy\n");
 static herr_t
 H5FD_mpio_fapl_free(void *_fa)
 {
-    herr_t		ret_value = SUCCEED;
-    H5FD_mpio_fapl_t	*fa = (H5FD_mpio_fapl_t*)_fa;
+    herr_t    ret_value = SUCCEED;
+    H5FD_mpio_fapl_t  *fa = (H5FD_mpio_fapl_t*)_fa;
 
     FUNC_ENTER_NOAPI(H5FD_mpio_fapl_free, FAIL)
 #ifdef H5FDmpio_DEBUG
@@ -880,11 +880,11 @@ fprintf(stderr, "leaving H5FD_mpio_fapl_free\n");
  * Function:    H5FD_mpio_open
  *
  * Purpose:     Opens a file with name NAME.  The FLAGS are a bit field with
- *		purpose similar to the second argument of open(2) and which
- *		are defined in H5Fpublic.h. The file access property list
- *		FAPL_ID contains the properties driver properties and MAXADDR
- *		is the largest address which this file will be expected to
- *		access.  This is collective.
+ *    purpose similar to the second argument of open(2) and which
+ *    are defined in H5Fpublic.h. The file access property list
+ *    FAPL_ID contains the properties driver properties and MAXADDR
+ *    is the largest address which this file will be expected to
+ *    access.  This is collective.
  *
  * Return:      Success:        A new file pointer.
  *
@@ -894,61 +894,61 @@ fprintf(stderr, "leaving H5FD_mpio_fapl_free\n");
  *              January 30, 1998
  *
  * Modifications:
- * 		Robb Matzke, 1998-02-18
- *		Added the ACCESS_PARMS argument.  Moved some error checking
- *		here from elsewhere.
+ *     Robb Matzke, 1998-02-18
+ *    Added the ACCESS_PARMS argument.  Moved some error checking
+ *    here from elsewhere.
  *
- *      	rky, 1998-01-11
- *      	Added H5FD_mpio_Debug debug flags controlled by MPI_Info.
+ *        rky, 1998-01-11
+ *        Added H5FD_mpio_Debug debug flags controlled by MPI_Info.
  *
- *      	rky, 1998-08-28
- *		Init flag controlling redundant metadata writes to disk.
+ *        rky, 1998-08-28
+ *    Init flag controlling redundant metadata writes to disk.
  *
- *      	rky, 1998-12-07
- *		Added barrier after MPI_File_set_size to prevent race
- *		condition -- subsequent writes were being truncated, causing
- *		holes in file.
+ *        rky, 1998-12-07
+ *    Added barrier after MPI_File_set_size to prevent race
+ *    condition -- subsequent writes were being truncated, causing
+ *    holes in file.
  *
- * 		Robb Matzke, 1999-08-06
- *		Modified to work with the virtual file layer.
+ *     Robb Matzke, 1999-08-06
+ *    Modified to work with the virtual file layer.
  *
- *      	rky & ppw, 1999-11-07
- *		Modified "H5FD_mpio_open" so that file-truncation is
+ *        rky & ppw, 1999-11-07
+ *    Modified "H5FD_mpio_open" so that file-truncation is
  *              avoided for brand-new files (with zero filesize).
  *
- * 		Albert Cheng, 2003-04-17
- * 		Duplicate the communicator and Info object so that file is
- * 		insulated from the old one.
+ *     Albert Cheng, 2003-04-17
+ *     Duplicate the communicator and Info object so that file is
+ *     insulated from the old one.
  *-------------------------------------------------------------------------
  */
 static H5FD_t *
 H5FD_mpio_open(const char *name, unsigned flags, hid_t fapl_id,
-	       haddr_t UNUSED maxaddr)
+         haddr_t UNUSED maxaddr)
 {
-    H5FD_mpio_t			*file=NULL;
-    MPI_File			fh;
+    H5FD_mpio_t      *file=NULL;
+    MPI_File      fh;
     unsigned                    file_opened=0;  /* Flag to indicate that the file was successfully opened */
-    int				mpi_amode;
-    int				mpi_rank;       /* MPI rank of this process */
-    int				mpi_size;       /* Total number of MPI processes */
-    int				mpi_code;	/* mpi return code */
-    MPI_Offset			size;
-    const H5FD_mpio_fapl_t	*fa=NULL;
-    H5FD_mpio_fapl_t		_fa;
+    int        mpi_amode;
+    int        mpi_rank;       /* MPI rank of this process */
+    int        mpi_size;       /* Total number of MPI processes */
+    int        mpi_code;  /* mpi return code */
+    MPI_Offset      size;
+    const H5FD_mpio_fapl_t  *fa=NULL;
+    H5FD_mpio_fapl_t    _fa;
     H5P_genplist_t *plist;      /* Property list pointer */
     MPI_Comm                    comm_dup=MPI_COMM_NULL;
     MPI_Info                    info_dup=MPI_INFO_NULL;
-    H5FD_t			*ret_value;     /* Return value */
+    H5FD_t      *ret_value;     /* Return value */
 #ifndef H5_HAVE_MPI_GET_SIZE
-    struct stat                 stat_buf;
+    h5_stat_t                 stat_buf;
 #endif
 
     FUNC_ENTER_NOAPI(H5FD_mpio_open, NULL)
 
 #ifdef H5FDmpio_DEBUG
     if (H5FD_mpio_Debug[(int)'t']) {
-    	fprintf(stdout, "Entering H5FD_mpio_open(name=\"%s\", flags=0x%x, "
-		"fapl_id=%d, maxaddr=%lu)\n", name, flags, (int)fapl_id, (unsigned long)maxaddr);
+      fprintf(stdout, "Entering H5FD_mpio_open(name=\"%s\", flags=0x%x, "
+    "fapl_id=%d, maxaddr=%lu)\n", name, flags, (int)fapl_id, (unsigned long)maxaddr);
     }
 #endif
 
@@ -956,28 +956,28 @@ H5FD_mpio_open(const char *name, unsigned flags, hid_t fapl_id,
     if(NULL == (plist = H5P_object_verify(fapl_id, H5P_FILE_ACCESS)))
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
     if(H5P_FILE_ACCESS_DEFAULT == fapl_id || H5FD_MPIO != H5P_get_driver(plist)) {
-	_fa.comm = MPI_COMM_SELF; /*default*/
-	_fa.info = MPI_INFO_NULL; /*default*/
-	fa = &_fa;
+  _fa.comm = MPI_COMM_SELF; /*default*/
+  _fa.info = MPI_INFO_NULL; /*default*/
+  fa = &_fa;
     } else {
-	fa = (const H5FD_mpio_fapl_t *)H5P_get_driver_info(plist);
-	assert(fa);
+  fa = (const H5FD_mpio_fapl_t *)H5P_get_driver_info(plist);
+  assert(fa);
     }
 
     /* Duplicate communicator and Info object for use by this file. */
     if (FAIL==H5FD_mpi_comm_info_dup(fa->comm, fa->info, &comm_dup, &info_dup))
-	HGOTO_ERROR(H5E_INTERNAL, H5E_CANTCOPY, NULL, "Communicator/Info duplicate failed")
+  HGOTO_ERROR(H5E_INTERNAL, H5E_CANTCOPY, NULL, "Communicator/Info duplicate failed")
 
     /* convert HDF5 flags to MPI-IO flags */
     /* some combinations are illegal; let MPI-IO figure it out */
     mpi_amode  = (flags&H5F_ACC_RDWR) ? MPI_MODE_RDWR : MPI_MODE_RDONLY;
-    if (flags&H5F_ACC_CREAT)	mpi_amode |= MPI_MODE_CREATE;
-    if (flags&H5F_ACC_EXCL)	mpi_amode |= MPI_MODE_EXCL;
+    if (flags&H5F_ACC_CREAT)  mpi_amode |= MPI_MODE_CREATE;
+    if (flags&H5F_ACC_EXCL)  mpi_amode |= MPI_MODE_EXCL;
 
 #ifdef H5FDmpio_DEBUG
     /* Check for debug commands in the info parameter */
     {
-	char debug_str[128];
+  char debug_str[128];
         int flag, i;
         if (MPI_INFO_NULL != info_dup) {
             /*OKAY: CAST DISCARDS CONST*/
@@ -1057,12 +1057,12 @@ done:
     if(ret_value==NULL) {
         if(file_opened)
             MPI_File_close(&fh);
-	if (MPI_COMM_NULL != comm_dup)
-	    MPI_Comm_free(&comm_dup);
-	if (MPI_INFO_NULL != info_dup)
-	    MPI_Info_free(&info_dup);
-	if (file)
-	    H5MM_xfree(file);
+  if (MPI_COMM_NULL != comm_dup)
+      MPI_Comm_free(&comm_dup);
+  if (MPI_INFO_NULL != info_dup)
+      MPI_Info_free(&info_dup);
+  if (file)
+      H5MM_xfree(file);
     } /* end if */
 
 #ifdef H5FDmpio_DEBUG
@@ -1078,36 +1078,36 @@ done:
  *
  * Purpose:     Closes a file.  This is collective.
  *
- * Return:      Success:	Non-negative
+ * Return:      Success:  Non-negative
  *
- * 		Failure:	Negative
+ *     Failure:  Negative
  *
  * Programmer:  Unknown
  *              January 30, 1998
  *
  * Modifications:
- * 		Robb Matzke, 1998-02-18
- *		Added the ACCESS_PARMS argument.
+ *     Robb Matzke, 1998-02-18
+ *    Added the ACCESS_PARMS argument.
  *
- * 		Robb Matzke, 1999-08-06
- *		Modified to work with the virtual file layer.
+ *     Robb Matzke, 1999-08-06
+ *    Modified to work with the virtual file layer.
  *
- * 		Albert Cheng, 2003-04-17
- *		Free the communicator stored.
+ *     Albert Cheng, 2003-04-17
+ *    Free the communicator stored.
  *-------------------------------------------------------------------------
  */
 static herr_t
 H5FD_mpio_close(H5FD_t *_file)
 {
-    H5FD_mpio_t	*file = (H5FD_mpio_t*)_file;
-    int		mpi_code;	        /* MPI return code */
+    H5FD_mpio_t  *file = (H5FD_mpio_t*)_file;
+    int    mpi_code;          /* MPI return code */
     herr_t      ret_value=SUCCEED;      /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_mpio_close, FAIL)
 
 #ifdef H5FDmpio_DEBUG
     if (H5FD_mpio_Debug[(int)'t'])
-    	fprintf(stdout, "Entering H5FD_mpio_close\n");
+      fprintf(stdout, "Entering H5FD_mpio_close\n");
 #endif
     assert(file);
     assert(H5FD_MPIO==file->pub.driver_id);
@@ -1123,33 +1123,33 @@ H5FD_mpio_close(H5FD_t *_file)
 done:
 #ifdef H5FDmpio_DEBUG
     if (H5FD_mpio_Debug[(int)'t'])
-    	fprintf(stdout, "Leaving H5FD_mpio_close\n");
+      fprintf(stdout, "Leaving H5FD_mpio_close\n");
 #endif
     FUNC_LEAVE_NOAPI(ret_value)
 }
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpio_query
+ * Function:  H5FD_mpio_query
  *
- * Purpose:	Set the flags that this VFL driver is capable of supporting.
+ * Purpose:  Set the flags that this VFL driver is capable of supporting.
  *              (listed in H5FDpublic.h)
  *
- * Return:	Success:	non-negative
+ * Return:  Success:  non-negative
  *
- *		Failure:	negative
+ *    Failure:  negative
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Friday, August 25, 2000
  *
  * Modifications:
  *
- *		John Mainzer -- 9/21/05
- *		Modified code to turn off the
- *		H5FD_FEAT_ACCUMULATE_METADATA_WRITE flag.
+ *    John Mainzer -- 9/21/05
+ *    Modified code to turn off the
+ *    H5FD_FEAT_ACCUMULATE_METADATA_WRITE flag.
  *              With the movement of
- *		all cache writes to process 0, this flag has become
- *		problematic in PHDF5.
+ *    all cache writes to process 0, this flag has become
+ *    problematic in PHDF5.
  *
  *-------------------------------------------------------------------------
  */
@@ -1173,17 +1173,17 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpio_get_eoa
+ * Function:  H5FD_mpio_get_eoa
  *
- * Purpose:	Gets the end-of-address marker for the file. The EOA marker
- *		is the first address past the last byte allocated in the
- *		format address space.
+ * Purpose:  Gets the end-of-address marker for the file. The EOA marker
+ *    is the first address past the last byte allocated in the
+ *    format address space.
  *
- * Return:	Success:	The end-of-address marker.
+ * Return:  Success:  The end-of-address marker.
  *
- *		Failure:	HADDR_UNDEF
+ *    Failure:  HADDR_UNDEF
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Friday, August  6, 1999
  *
  * Modifications:
@@ -1196,7 +1196,7 @@ done:
 static haddr_t
 H5FD_mpio_get_eoa(const H5FD_t *_file, H5FD_mem_t UNUSED type)
 {
-    const H5FD_mpio_t	*file = (const H5FD_mpio_t*)_file;
+    const H5FD_mpio_t  *file = (const H5FD_mpio_t*)_file;
     haddr_t ret_value;          /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_mpio_get_eoa, HADDR_UNDEF)
@@ -1213,17 +1213,17 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpio_set_eoa
+ * Function:  H5FD_mpio_set_eoa
  *
- * Purpose:	Set the end-of-address marker for the file. This function is
- *		called shortly after an existing HDF5 file is opened in order
- *		to tell the driver where the end of the HDF5 data is located.
+ * Purpose:  Set the end-of-address marker for the file. This function is
+ *    called shortly after an existing HDF5 file is opened in order
+ *    to tell the driver where the end of the HDF5 data is located.
  *
- * Return:	Success:	0
+ * Return:  Success:  0
  *
- *		Failure:	-1
+ *    Failure:  -1
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Friday, August 6, 1999
  *
  * Modifications:
@@ -1236,7 +1236,7 @@ done:
 static herr_t
 H5FD_mpio_set_eoa(H5FD_t *_file, H5FD_mem_t UNUSED type, haddr_t addr)
 {
-    H5FD_mpio_t	*file = (H5FD_mpio_t*)_file;
+    H5FD_mpio_t  *file = (H5FD_mpio_t*)_file;
     herr_t ret_value=SUCCEED;   /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_mpio_set_eoa, FAIL)
@@ -1252,28 +1252,28 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpio_get_eof
+ * Function:  H5FD_mpio_get_eof
  *
- * Purpose:	Gets the end-of-file marker for the file. The EOF marker
- *		is the real size of the file.
+ * Purpose:  Gets the end-of-file marker for the file. The EOF marker
+ *    is the real size of the file.
  *
- *		The MPIO driver doesn't bother keeping this field updated
- *		since that's a relatively expensive operation. Fortunately
- *		the library only needs the EOF just after the file is opened
- *		in order to determine whether the file is empty, truncated,
- *		or okay.  Therefore, any MPIO I/O function will set its value
- *		to HADDR_UNDEF which is the error return value of this
- *		function.
+ *    The MPIO driver doesn't bother keeping this field updated
+ *    since that's a relatively expensive operation. Fortunately
+ *    the library only needs the EOF just after the file is opened
+ *    in order to determine whether the file is empty, truncated,
+ *    or okay.  Therefore, any MPIO I/O function will set its value
+ *    to HADDR_UNDEF which is the error return value of this
+ *    function.
  *
  *              Keeping the EOF updated (during write calls) is expensive
  *              because any process may extend the physical end of the
  *              file. -QAK
  *
- * Return:	Success:	The end-of-address marker.
+ * Return:  Success:  The end-of-address marker.
  *
- *		Failure:	HADDR_UNDEF
+ *    Failure:  HADDR_UNDEF
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Friday, August  6, 1999
  *
  * Modifications:
@@ -1283,7 +1283,7 @@ done:
 static haddr_t
 H5FD_mpio_get_eof(const H5FD_t *_file)
 {
-    const H5FD_mpio_t	*file = (const H5FD_mpio_t*)_file;
+    const H5FD_mpio_t  *file = (const H5FD_mpio_t*)_file;
     haddr_t ret_value;          /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_mpio_get_eof, HADDR_UNDEF)
@@ -1332,53 +1332,53 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpio_read
+ * Function:  H5FD_mpio_read
  *
- * Purpose:	Reads SIZE bytes of data from FILE beginning at address ADDR
- *		into buffer BUF according to data transfer properties in
- *		DXPL_ID using potentially complex file and buffer types to
- *		effect the transfer.
+ * Purpose:  Reads SIZE bytes of data from FILE beginning at address ADDR
+ *    into buffer BUF according to data transfer properties in
+ *    DXPL_ID using potentially complex file and buffer types to
+ *    effect the transfer.
  *
- *		Reading past the end of the MPI file returns zeros instead of
- *		failing.  MPI is able to coalesce requests from different
- *		processes (collective or independent).
+ *    Reading past the end of the MPI file returns zeros instead of
+ *    failing.  MPI is able to coalesce requests from different
+ *    processes (collective or independent).
  *
- * Return:	Success:	Zero. Result is stored in caller-supplied
- *				buffer BUF.
+ * Return:  Success:  Zero. Result is stored in caller-supplied
+ *        buffer BUF.
  *
- *		Failure:	-1, Contents of buffer BUF are undefined.
+ *    Failure:  -1, Contents of buffer BUF are undefined.
  *
- * Programmer:	rky, 1998-01-30
+ * Programmer:  rky, 1998-01-30
  *
  * Modifications:
- * 		Robb Matzke, 1998-02-18
- *		Added the ACCESS_PARMS argument.
+ *     Robb Matzke, 1998-02-18
+ *    Added the ACCESS_PARMS argument.
  *
- * 		rky, 1998-04-10
- *		Call independent or collective MPI read, based on
- *		ACCESS_PARMS.
+ *     rky, 1998-04-10
+ *    Call independent or collective MPI read, based on
+ *    ACCESS_PARMS.
  *
- * 		Albert Cheng, 1998-06-01
- *		Added XFER_MODE to control independent or collective MPI
- *		read.
+ *     Albert Cheng, 1998-06-01
+ *    Added XFER_MODE to control independent or collective MPI
+ *    read.
  *
- * 		rky, 1998-08-16
- *		Use BTYPE, FTYPE, and DISP from access parms. The guts of
- *		H5FD_mpio_read and H5FD_mpio_write should be replaced by a
- *		single dual-purpose routine.
+ *     rky, 1998-08-16
+ *    Use BTYPE, FTYPE, and DISP from access parms. The guts of
+ *    H5FD_mpio_read and H5FD_mpio_write should be replaced by a
+ *    single dual-purpose routine.
  *
- * 		Robb Matzke, 1999-04-21
- *		Changed XFER_MODE to XFER_PARMS for all H5F_*_read()
- *		callbacks.
+ *     Robb Matzke, 1999-04-21
+ *    Changed XFER_MODE to XFER_PARMS for all H5F_*_read()
+ *    callbacks.
  *
- * 		Robb Matzke, 1999-07-28
- *		The ADDR argument is passed by value.
+ *     Robb Matzke, 1999-07-28
+ *    The ADDR argument is passed by value.
  *
- * 		Robb Matzke, 1999-08-06
- *		Modified to work with the virtual file layer.
+ *     Robb Matzke, 1999-08-06
+ *    Modified to work with the virtual file layer.
  *
- *		Quincey Koziol,  2002-05-14
- *		Only call MPI_Get_count if we can use MPI_BYTE for the MPI type
+ *    Quincey Koziol,  2002-05-14
+ *    Only call MPI_Get_count if we can use MPI_BYTE for the MPI type
  *              for the I/O transfer.  Someday we might include code to decode
  *              the MPI type used for more complicated transfers and call
  *              MPI_Get_count all the time.
@@ -1401,27 +1401,27 @@ done:
  */
 static herr_t
 H5FD_mpio_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t dxpl_id, haddr_t addr, size_t size,
-	       void *buf/*out*/)
+         void *buf/*out*/)
 {
-    H5FD_mpio_t			*file = (H5FD_mpio_t*)_file;
-    MPI_Offset			mpi_off;
-    MPI_Status  		mpi_stat;       /* Status from I/O operation */
-    int				mpi_code;	/* mpi return code */
-    MPI_Datatype		buf_type = MPI_BYTE;      /* MPI description of the selection in memory */
-    int         		size_i;         /* Integer copy of 'size' to read */
-    int         		bytes_read;     /* Number of bytes read in */
-    int         		n;
+    H5FD_mpio_t      *file = (H5FD_mpio_t*)_file;
+    MPI_Offset      mpi_off;
+    MPI_Status      mpi_stat;       /* Status from I/O operation */
+    int        mpi_code;  /* mpi return code */
+    MPI_Datatype    buf_type = MPI_BYTE;      /* MPI description of the selection in memory */
+    int             size_i;         /* Integer copy of 'size' to read */
+    int             bytes_read;     /* Number of bytes read in */
+    int             n;
     int                         type_size;      /* MPI datatype used for I/O's size */
     int                         io_size;        /* Actual number of bytes requested */
     H5P_genplist_t              *plist = NULL;  /* Property list pointer */
-    hbool_t			use_view_this_time = FALSE;
-    herr_t              	ret_value = SUCCEED;
+    hbool_t      use_view_this_time = FALSE;
+    herr_t                ret_value = SUCCEED;
 
     FUNC_ENTER_NOAPI(H5FD_mpio_read, FAIL)
 
 #ifdef H5FDmpio_DEBUG
     if (H5FD_mpio_Debug[(int)'t'])
-    	fprintf(stdout, "Entering H5FD_mpio_read\n" );
+      fprintf(stdout, "Entering H5FD_mpio_read\n" );
 #endif
     assert(file);
     assert(H5FD_MPIO==file->pub.driver_id);
@@ -1443,7 +1443,7 @@ H5FD_mpio_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t dxpl_id, haddr_t add
 #ifdef H5FDmpio_DEBUG
     if (H5FD_mpio_Debug[(int)'r'])
         fprintf(stdout, "in H5FD_mpio_read  mpi_off=%ld  size_i=%d\n",
-		(long)mpi_off, size_i );
+    (long)mpi_off, size_i );
 #endif
 
     /* Only look for MPI views for raw data transfers */
@@ -1462,7 +1462,7 @@ H5FD_mpio_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t dxpl_id, haddr_t add
          * could mean "use MPI_BYTE" by convention).
          */
         if(xfer_mode==H5FD_MPIO_COLLECTIVE) {
-            MPI_Datatype		file_type;
+            MPI_Datatype    file_type;
 
             /* Remember that views are used */
             use_view_this_time = TRUE;
@@ -1492,8 +1492,8 @@ H5FD_mpio_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t dxpl_id, haddr_t add
        H5FD_mpio_collective_opt_t coll_opt_mode;
 
 #ifdef H5FDmpio_DEBUG
-	if (H5FD_mpio_Debug[(int)'t'])
-	    fprintf(stdout, "H5FD_mpio_read: using MPIO collective mode\n");
+  if (H5FD_mpio_Debug[(int)'t'])
+      fprintf(stdout, "H5FD_mpio_read: using MPIO collective mode\n");
 #endif
         /* Peek the collective_opt property to check whether the application wants to do IO individually. */
         HDassert(plist);
@@ -1557,7 +1557,7 @@ H5FD_mpio_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t dxpl_id, haddr_t add
 done:
 #ifdef H5FDmpio_DEBUG
     if (H5FD_mpio_Debug[(int)'t'])
-    	fprintf(stdout, "Leaving H5FD_mpio_read\n" );
+      fprintf(stdout, "Leaving H5FD_mpio_read\n" );
 #endif
 
     FUNC_LEAVE_NOAPI(ret_value)
@@ -1565,100 +1565,100 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpio_write
+ * Function:  H5FD_mpio_write
  *
- * Purpose:	Writes SIZE bytes of data to FILE beginning at address ADDR
- *		from buffer BUF according to data transfer properties in
- *		DXPL_ID using potentially complex file and buffer types to
- *		effect the transfer.
+ * Purpose:  Writes SIZE bytes of data to FILE beginning at address ADDR
+ *    from buffer BUF according to data transfer properties in
+ *    DXPL_ID using potentially complex file and buffer types to
+ *    effect the transfer.
  *
- *		MPI is able to coalesce requests from different processes
- *		(collective and independent).
+ *    MPI is able to coalesce requests from different processes
+ *    (collective and independent).
  *
- * Return:	Success:	Zero. USE_TYPES and OLD_USE_TYPES in the
- *				access params are altered.
+ * Return:  Success:  Zero. USE_TYPES and OLD_USE_TYPES in the
+ *        access params are altered.
  *
- *		Failure:	-1, USE_TYPES and OLD_USE_TYPES in the
- *				access params may be altered.
+ *    Failure:  -1, USE_TYPES and OLD_USE_TYPES in the
+ *        access params may be altered.
  *
- * Programmer:	Unknown
+ * Programmer:  Unknown
  *              January 30, 1998
  *
  * Modifications:
- *		rky, 1998-08-28
- *		If the file->allsame flag is set, we assume that all the
- *		procs in the relevant MPI communicator will write identical
- *		data at identical offsets in the file, so only proc 0 will
- *		write, and all other procs will wait for p0 to finish. This
- *		is useful for writing metadata, for example. Note that we
- *		don't _check_ that the data is identical. Also, the mechanism
- *		we use to eliminate the redundant writes is by requiring a
- *		call to H5FD_mpio_tas_allsame before the write, which is
- *		rather klugey. Would it be better to pass a parameter to
- *		low-level writes like H5F_block_write and H5F_low_write,
- *		instead?  Or...??? Also, when I created this mechanism I
- *		wanted to minimize the difference in behavior between the old
- *		way of doing things (i.e., all procs write) and the new way,
- *		so the writes are eliminated at the very lowest level, here
- *		in H5FD_mpio_write. It may be better to rethink that, and
- *		short-circuit the writes at a higher level (e.g., at the
- *		points in the code where H5FD_mpio_tas_allsame is called).
- *
- *
- * 		Robb Matzke, 1998-02-18
- *		Added the ACCESS_PARMS argument.
- *
- * 		rky, 1998-04-10
- *		Call independent or collective MPI write, based on
- *		ACCESS_PARMS.
- *
- * 		rky, 1998-04-24
- *		Removed redundant write from H5FD_mpio_write.
- *
- * 		Albert Cheng, 1998-06-01
- *		Added XFER_MODE to control independent or collective MPI
- *		write.
- *
- * 		rky, 1998-08-16
- *		Use BTYPE, FTYPE, and DISP from access parms. The guts of
- *		H5FD_mpio_read and H5FD_mpio_write should be replaced by a
- *		single dual-purpose routine.
- *
- * 		rky, 1998-08-28
- *		Added ALLSAME parameter to make all but proc 0 skip the
- *		actual write.
- *
- * 		Robb Matzke, 1999-04-21
- *		Changed XFER_MODE to XFER_PARMS for all H5FD_*_write()
- *		callbacks.
- *
- * 		Robb Matzke, 1999-07-28
- *		The ADDR argument is passed by value.
- *
- * 		Robb Matzke, 1999-08-06
- *		Modified to work with the virtual file layer.
- *
- *		Albert Cheng, 1999-12-19
- *		When only-p0-write-allsame-data, p0 Bcasts the
- *		ret_value to other processes.  This prevents
- *		a racing condition (that other processes try to
- *		read the file before p0 finishes writing) and also
- *		allows all processes to report the same ret_value.
- *
- *		Kim Yates, Pat Weidhaas,  2000-09-26
- *		Move block of coding where only p0 writes after the
+ *    rky, 1998-08-28
+ *    If the file->allsame flag is set, we assume that all the
+ *    procs in the relevant MPI communicator will write identical
+ *    data at identical offsets in the file, so only proc 0 will
+ *    write, and all other procs will wait for p0 to finish. This
+ *    is useful for writing metadata, for example. Note that we
+ *    don't _check_ that the data is identical. Also, the mechanism
+ *    we use to eliminate the redundant writes is by requiring a
+ *    call to H5FD_mpio_tas_allsame before the write, which is
+ *    rather klugey. Would it be better to pass a parameter to
+ *    low-level writes like H5F_block_write and H5F_low_write,
+ *    instead?  Or...??? Also, when I created this mechanism I
+ *    wanted to minimize the difference in behavior between the old
+ *    way of doing things (i.e., all procs write) and the new way,
+ *    so the writes are eliminated at the very lowest level, here
+ *    in H5FD_mpio_write. It may be better to rethink that, and
+ *    short-circuit the writes at a higher level (e.g., at the
+ *    points in the code where H5FD_mpio_tas_allsame is called).
+ *
+ *
+ *     Robb Matzke, 1998-02-18
+ *    Added the ACCESS_PARMS argument.
+ *
+ *     rky, 1998-04-10
+ *    Call independent or collective MPI write, based on
+ *    ACCESS_PARMS.
+ *
+ *     rky, 1998-04-24
+ *    Removed redundant write from H5FD_mpio_write.
+ *
+ *     Albert Cheng, 1998-06-01
+ *    Added XFER_MODE to control independent or collective MPI
+ *    write.
+ *
+ *     rky, 1998-08-16
+ *    Use BTYPE, FTYPE, and DISP from access parms. The guts of
+ *    H5FD_mpio_read and H5FD_mpio_write should be replaced by a
+ *    single dual-purpose routine.
+ *
+ *     rky, 1998-08-28
+ *    Added ALLSAME parameter to make all but proc 0 skip the
+ *    actual write.
+ *
+ *     Robb Matzke, 1999-04-21
+ *    Changed XFER_MODE to XFER_PARMS for all H5FD_*_write()
+ *    callbacks.
+ *
+ *     Robb Matzke, 1999-07-28
+ *    The ADDR argument is passed by value.
+ *
+ *     Robb Matzke, 1999-08-06
+ *    Modified to work with the virtual file layer.
+ *
+ *    Albert Cheng, 1999-12-19
+ *    When only-p0-write-allsame-data, p0 Bcasts the
+ *    ret_value to other processes.  This prevents
+ *    a racing condition (that other processes try to
+ *    read the file before p0 finishes writing) and also
+ *    allows all processes to report the same ret_value.
+ *
+ *    Kim Yates, Pat Weidhaas,  2000-09-26
+ *    Move block of coding where only p0 writes after the
  *              MPI_File_set_view call.
  *
- *		Quincey Koziol,  2002-05-10
- *		Instead of always writing metadata from process 0, spread the
+ *    Quincey Koziol,  2002-05-10
+ *    Instead of always writing metadata from process 0, spread the
  *              burden among all the processes by using a round-robin rotation
  *              scheme.
  *
- *		Quincey Koziol,  2002-05-10
- *		Removed allsame code, keying off the type parameter instead.
+ *    Quincey Koziol,  2002-05-10
+ *    Removed allsame code, keying off the type parameter instead.
  *
- *		Quincey Koziol,  2002-05-14
- *		Only call MPI_Get_count if we can use MPI_BYTE for the MPI type
+ *    Quincey Koziol,  2002-05-14
+ *    Only call MPI_Get_count if we can use MPI_BYTE for the MPI type
  *              for the I/O transfer.  Someday we might include code to decode
  *              the MPI type used for more complicated transfers and call
  *              MPI_Get_count all the time.
@@ -1687,25 +1687,25 @@ done:
  */
 static herr_t
 H5FD_mpio_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
-		size_t size, const void *buf)
+    size_t size, const void *buf)
 {
-    H5FD_mpio_t			*file = (H5FD_mpio_t*)_file;
-    MPI_Offset 		 	mpi_off;
-    MPI_Status  		mpi_stat;       /* Status from I/O operation */
-    MPI_Datatype		buf_type = MPI_BYTE;      /* MPI description of the selection in memory */
-    int			        mpi_code;	/* MPI return code */
-    int         		size_i, bytes_written;
+    H5FD_mpio_t      *file = (H5FD_mpio_t*)_file;
+    MPI_Offset        mpi_off;
+    MPI_Status      mpi_stat;       /* Status from I/O operation */
+    MPI_Datatype    buf_type = MPI_BYTE;      /* MPI description of the selection in memory */
+    int              mpi_code;  /* MPI return code */
+    int             size_i, bytes_written;
     int                         type_size;      /* MPI datatype used for I/O's size */
     int                         io_size;        /* Actual number of bytes requested */
-    hbool_t			use_view_this_time = FALSE;
+    hbool_t      use_view_this_time = FALSE;
     H5P_genplist_t              *plist = NULL;  /* Property list pointer */
-    herr_t              	ret_value = SUCCEED;
+    herr_t                ret_value = SUCCEED;
 
     FUNC_ENTER_NOAPI(H5FD_mpio_write, FAIL)
 
 #ifdef H5FDmpio_DEBUG
     if (H5FD_mpio_Debug[(int)'t'])
-    	fprintf(stdout, "Entering H5FD_mpio_write\n" );
+      fprintf(stdout, "Entering H5FD_mpio_write\n" );
 #endif
     assert(file);
     assert(H5FD_MPIO==file->pub.driver_id);
@@ -1746,7 +1746,7 @@ H5FD_mpio_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
          * could mean "use MPI_BYTE" by convention).
          */
         if(xfer_mode == H5FD_MPIO_COLLECTIVE) {
-            MPI_Datatype		file_type;
+            MPI_Datatype    file_type;
 
             /* Remember that views are used */
             use_view_this_time = TRUE;
@@ -1848,8 +1848,8 @@ H5FD_mpio_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
 done:
 #ifdef H5FDmpio_DEBUG
     if(H5FD_mpio_Debug[(int)'t'])
-    	fprintf(stdout, "proc %d: Leaving H5FD_mpio_write with ret_value=%d\n",
-	    file->mpi_rank, ret_value );
+      fprintf(stdout, "proc %d: Leaving H5FD_mpio_write with ret_value=%d\n",
+      file->mpi_rank, ret_value );
 #endif
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5FD_mpio_write() */
@@ -1860,9 +1860,9 @@ done:
  *
  * Purpose:     Makes sure that all data is on disk.  This is collective.
  *
- * Return:      Success:	Non-negative
+ * Return:      Success:  Non-negative
  *
- * 		Failure:	Negative
+ *     Failure:  Negative
  *
  * Programmer:  Robb Matzke
  *              January 30, 1998
@@ -1872,15 +1872,15 @@ done:
 static herr_t
 H5FD_mpio_flush(H5FD_t *_file, hid_t UNUSED dxpl_id, unsigned closing)
 {
-    H5FD_mpio_t		*file = (H5FD_mpio_t*)_file;
-    int			mpi_code;	/* mpi return code */
+    H5FD_mpio_t    *file = (H5FD_mpio_t*)_file;
+    int      mpi_code;  /* mpi return code */
     herr_t              ret_value = SUCCEED;
 
     FUNC_ENTER_NOAPI(H5FD_mpio_flush, FAIL)
 
 #ifdef H5FDmpio_DEBUG
     if(H5FD_mpio_Debug[(int)'t'])
-    	HDfprintf(stdout, "Entering %s\n", FUNC);
+      HDfprintf(stdout, "Entering %s\n", FUNC);
 #endif
     HDassert(file);
     HDassert(H5FD_MPIO == file->pub.driver_id);
@@ -1894,7 +1894,7 @@ H5FD_mpio_flush(H5FD_t *_file, hid_t UNUSED dxpl_id, unsigned closing)
 done:
 #ifdef H5FDmpio_DEBUG
     if(H5FD_mpio_Debug[(int)'t'])
-    	HDfprintf(stdout, "Leaving %s\n", FUNC);
+      HDfprintf(stdout, "Leaving %s\n", FUNC);
 #endif
 
     FUNC_LEAVE_NOAPI(ret_value)
@@ -1906,8 +1906,8 @@ done:
  *
  * Purpose:     Make certain the file's size matches it's allocated size
  *
- * Return:      Success:	Non-negative
- * 		Failure:	Negative
+ * Return:      Success:  Non-negative
+ *     Failure:  Negative
  *
  * Programmer:  Quincey Koziol
  *              January 31, 2008
@@ -1917,14 +1917,14 @@ done:
 static herr_t
 H5FD_mpio_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing)
 {
-    H5FD_mpio_t		*file = (H5FD_mpio_t*)_file;
+    H5FD_mpio_t    *file = (H5FD_mpio_t*)_file;
     herr_t              ret_value = SUCCEED;
 
     FUNC_ENTER_NOAPI(H5FD_mpio_truncate, FAIL)
 
 #ifdef H5FDmpio_DEBUG
     if(H5FD_mpio_Debug[(int)'t'])
-    	HDfprintf(stdout, "Entering %s\n", FUNC);
+      HDfprintf(stdout, "Entering %s\n", FUNC);
 #endif
     HDassert(file);
     HDassert(H5FD_MPIO == file->pub.driver_id);
@@ -1934,7 +1934,7 @@ H5FD_mpio_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing)
      * we can't just check whether EOF<EOA like with other drivers.
      * Therefore we'll just read the byte at EOA-1 and then write it back. */
     if(file->eoa > file->last_eoa) {
-        int		mpi_code;	/* mpi return code */
+        int    mpi_code;  /* mpi return code */
         MPI_Offset      mpi_off;
 
 #ifdef H5_MPI_FILE_SET_SIZE_BIG
@@ -1945,7 +1945,7 @@ H5FD_mpio_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing)
         if(MPI_SUCCESS != (mpi_code = MPI_File_set_size(file->f, mpi_off)))
             HMPI_GOTO_ERROR(FAIL, "MPI_File_set_size failed", mpi_code)
 #else /* H5_MPI_FILE_SET_SIZE_BIG */
-	/* Wait until all processes are here before reading/writing the byte at
+  /* Wait until all processes are here before reading/writing the byte at
          * process 0's end of address space.  The window for corruption is
          * probably tiny, but does exist...
          */
@@ -1968,7 +1968,7 @@ H5FD_mpio_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing)
         } /* end if */
 #endif /* H5_MPI_FILE_SET_SIZE_BIG */
 
-	/* Don't let any proc return until all have extended the file.
+  /* Don't let any proc return until all have extended the file.
          * (Prevents race condition where some processes go ahead and write
          * more data to the file before all the processes have finished making
          * it the shorter length, potentially truncating the file and dropping
@@ -1984,7 +1984,7 @@ H5FD_mpio_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing)
 done:
 #ifdef H5FDmpio_DEBUG
     if(H5FD_mpio_Debug[(int)'t'])
-    	HDfprintf(stdout, "Leaving %s\n", FUNC);
+      HDfprintf(stdout, "Leaving %s\n", FUNC);
 #endif
 
     FUNC_LEAVE_NOAPI(ret_value)
@@ -1992,14 +1992,14 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpio_mpi_rank
+ * Function:  H5FD_mpio_mpi_rank
  *
- * Purpose:	Returns the MPI rank for a process
+ * Purpose:  Returns the MPI rank for a process
  *
- * Return:	Success: non-negative
- *		Failure: negative
+ * Return:  Success: non-negative
+ *    Failure: negative
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Thursday, May 16, 2002
  *
  * Modifications:
@@ -2009,7 +2009,7 @@ done:
 static int
 H5FD_mpio_mpi_rank(const H5FD_t *_file)
 {
-    const H5FD_mpio_t	*file = (const H5FD_mpio_t*)_file;
+    const H5FD_mpio_t  *file = (const H5FD_mpio_t*)_file;
     int ret_value;              /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_mpio_mpi_rank, FAIL)
@@ -2026,14 +2026,14 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpio_mpi_size
+ * Function:  H5FD_mpio_mpi_size
  *
- * Purpose:	Returns the number of MPI processes
+ * Purpose:  Returns the number of MPI processes
  *
- * Return:	Success: non-negative
- *		Failure: negative
+ * Return:  Success: non-negative
+ *    Failure: negative
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Thursday, May 16, 2002
  *
  * Modifications:
@@ -2043,7 +2043,7 @@ done:
 static int
 H5FD_mpio_mpi_size(const H5FD_t *_file)
 {
-    const H5FD_mpio_t	*file = (const H5FD_mpio_t*)_file;
+    const H5FD_mpio_t  *file = (const H5FD_mpio_t*)_file;
     int ret_value;              /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_mpio_mpi_size, FAIL)
@@ -2060,15 +2060,15 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpio_communicator
+ * Function:  H5FD_mpio_communicator
  *
- * Purpose:	Returns the MPI communicator for the file.
+ * Purpose:  Returns the MPI communicator for the file.
  *
- * Return:	Success:	The communicator
+ * Return:  Success:  The communicator
  *
- *		Failure:	NULL
+ *    Failure:  NULL
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Monday, August  9, 1999
  *
  * Modifications:
@@ -2078,7 +2078,7 @@ done:
 static MPI_Comm
 H5FD_mpio_communicator(const H5FD_t *_file)
 {
-    const H5FD_mpio_t	*file = (const H5FD_mpio_t*)_file;
+    const H5FD_mpio_t  *file = (const H5FD_mpio_t*)_file;
     MPI_Comm ret_value;         /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_mpio_communicator, MPI_COMM_NULL)
diff --git a/src/H5FDmpiposix.c b/src/H5FDmpiposix.c
index 7ca38cc..558c709 100644
--- a/src/H5FDmpiposix.c
+++ b/src/H5FDmpiposix.c
@@ -17,7 +17,7 @@
  * Programmer:  Quincey Koziol <koziol at ncsa.uiuc.ed>
  *              Thursday, July 11, 2002
  *
- * Purpose:	This is a "combination" MPI-2 and posix I/O driver.
+ * Purpose:  This is a "combination" MPI-2 and posix I/O driver.
  *              It uses MPI for coordinating the actions of several processes
  *              and posix I/O calls to do the actual I/O to the disk.
  *
@@ -34,17 +34,17 @@
  */
 
 /* Interface initialization */
-#define H5_INTERFACE_INIT_FUNC	H5FD_mpiposix_init_interface
+#define H5_INTERFACE_INIT_FUNC  H5FD_mpiposix_init_interface
 
 
-#include "H5private.h"		/* Generic Functions			*/
-#include "H5ACprivate.h"	/* Metadata cache			*/
-#include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fprivate.h"		/* File access				*/
-#include "H5FDprivate.h"	/* File drivers				*/
-#include "H5FDmpi.h"            /* MPI-based file drivers		*/
-#include "H5Iprivate.h"		/* IDs			  		*/
-#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5private.h"    /* Generic Functions      */
+#include "H5ACprivate.h"  /* Metadata cache      */
+#include "H5Eprivate.h"    /* Error handling        */
+#include "H5Fprivate.h"    /* File access        */
+#include "H5FDprivate.h"  /* File drivers        */
+#include "H5FDmpi.h"            /* MPI-based file drivers    */
+#include "H5Iprivate.h"    /* IDs            */
+#include "H5MMprivate.h"  /* Memory management      */
 #include "H5Pprivate.h"         /* Property lists                       */
 
 /* Features:
@@ -72,9 +72,9 @@
 static hid_t H5FD_MPIPOSIX_g = 0;
 
 /* File operations */
-#define OP_UNKNOWN	0
-#define OP_READ		1
-#define OP_WRITE	2
+#define OP_UNKNOWN  0
+#define OP_READ    1
+#define OP_WRITE  2
 
 /*
  * The description of a file belonging to this driver.
@@ -84,31 +84,31 @@ static hid_t H5FD_MPIPOSIX_g = 0;
  * doesn't bother to keep it updated since it's an expensive operation.
  */
 typedef struct H5FD_mpiposix_t {
-    H5FD_t	pub;		/*public stuff, must be first		*/
-    int		fd;		/*the unix file handle		        */
-    MPI_Comm	comm;		/*communicator				*/
+    H5FD_t  pub;    /*public stuff, must be first    */
+    int    fd;    /*the unix file handle            */
+    MPI_Comm  comm;    /*communicator        */
     int         mpi_rank;       /* This process's rank                  */
     int         mpi_size;       /* Total number of processes            */
-    haddr_t	eof;		/*end-of-file marker			*/
-    haddr_t	eoa;		/*end-of-address marker			*/
-    haddr_t	last_eoa;	/* Last known end-of-address marker	*/
-    haddr_t	pos;		/* Current file I/O position	        */
-    int		op;		/* Last file I/O operation		*/
-    hsize_t	naccess;	/* Number of (write) accesses to file   */
+    haddr_t  eof;    /*end-of-file marker      */
+    haddr_t  eoa;    /*end-of-address marker      */
+    haddr_t  last_eoa;  /* Last known end-of-address marker  */
+    haddr_t  pos;    /* Current file I/O position          */
+    int    op;    /* Last file I/O operation    */
+    hsize_t  naccess;  /* Number of (write) accesses to file   */
 #ifdef H5_HAVE_GPFS
     size_t      blksize;        /* Block size of file system            */
 #endif
     hbool_t     use_gpfs;       /* Use GPFS to write things             */
-#ifndef _WIN32
+#ifndef H5_HAVE_WIN32_API
     /*
      * On most systems the combination of device and i-node number uniquely
      * identify a file.
      */
-    dev_t	device;		/*file device number		*/
-    ino_t	inode;		/*file i-node number		*/
+    dev_t  device;    /*file device number    */
+    ino_t  inode;    /*file i-node number    */
 #else
     /*
-     * On _WIN32 the low-order word of a unique identifier associated with the
+     * On H5_HAVE_WIN32_API the low-order word of a unique identifier associated with the
      * file and the volume serial number uniquely identify a file. This number
      * (which, both? -rpm) may change when the system is restarted or when the
      * file is opened. After a process opens a file, the identifier is
@@ -126,59 +126,59 @@ typedef struct H5FD_mpiposix_t {
  * some macros here so we don't have to have conditional compilations later
  * throughout the code.
  *
- * file_offset_t:	The datatype for file offsets, the second argument of
- *			the lseek() or lseek64() call.
+ * file_offset_t:  The datatype for file offsets, the second argument of
+ *      the lseek() or lseek64() call.
  *
- * file_seek:		The function which adjusts the current file position,
- *			either lseek() or lseek64().
+ * file_seek:    The function which adjusts the current file position,
+ *      either lseek() or lseek64().
  */
 /* adding for windows NT file system support. */
 
 #ifdef H5_HAVE_LSEEK64
-#   define file_offset_t	off64_t
-#   define file_seek		lseek64
-#   define file_truncate	ftruncate64
-#elif defined (_WIN32)
+#   define file_offset_t  off64_t
+#   define file_seek    lseek64
+#   define file_truncate  ftruncate64
+#elif defined (H5_HAVE_WIN32_API)
 # /*MSVC*/
 #   define file_offset_t __int64
 #   define file_seek _lseeki64
-#   define file_truncate	_ftruncatei64
+#   define file_truncate  _ftruncatei64
 #else
-#   define file_offset_t	off_t
-#   define file_seek		HDlseek
-#   define file_truncate	HDftruncate
+#   define file_offset_t  off_t
+#   define file_seek    HDlseek
+#   define file_truncate  HDftruncate
 #endif
 
 /*
  * These macros check for overflow of various quantities.  These macros
  * assume that file_offset_t is signed and haddr_t and size_t are unsigned.
  *
- * ADDR_OVERFLOW:	Checks whether a file address of type `haddr_t'
- *			is too large to be represented by the second argument
- *			of the file seek function.
+ * ADDR_OVERFLOW:  Checks whether a file address of type `haddr_t'
+ *      is too large to be represented by the second argument
+ *      of the file seek function.
  *
- * SIZE_OVERFLOW:	Checks whether a buffer size of type `hsize_t' is too
- *			large to be represented by the `size_t' type.
+ * SIZE_OVERFLOW:  Checks whether a buffer size of type `hsize_t' is too
+ *      large to be represented by the `size_t' type.
  *
- * REGION_OVERFLOW:	Checks whether an address and size pair describe data
- *			which can be addressed entirely by the second
- *			argument of the file seek function.
+ * REGION_OVERFLOW:  Checks whether an address and size pair describe data
+ *      which can be addressed entirely by the second
+ *      argument of the file seek function.
  */
 #define MAXADDR (((haddr_t)1<<(8*sizeof(file_offset_t)-1))-1)
-#define ADDR_OVERFLOW(A)	(HADDR_UNDEF==(A) ||			      \
-				 ((A) & ~(haddr_t)MAXADDR))
-#define SIZE_OVERFLOW(Z)	((Z) & ~(hsize_t)MAXADDR)
-#define REGION_OVERFLOW(A,Z)	(ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) ||      \
-				 sizeof(file_offset_t)<sizeof(size_t) ||      \
-                                 HADDR_UNDEF==(A)+(Z) ||		      \
-				 (file_offset_t)((A)+(Z))<(file_offset_t)(A))
+#define ADDR_OVERFLOW(A)  (HADDR_UNDEF==(A) ||            \
+         ((A) & ~(haddr_t)MAXADDR))
+#define SIZE_OVERFLOW(Z)  ((Z) & ~(hsize_t)MAXADDR)
+#define REGION_OVERFLOW(A,Z)  (ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) ||      \
+         sizeof(file_offset_t)<sizeof(size_t) ||      \
+                                 HADDR_UNDEF==(A)+(Z) ||          \
+         (file_offset_t)((A)+(Z))<(file_offset_t)(A))
 
 /* Callbacks */
 static void *H5FD_mpiposix_fapl_get(H5FD_t *_file);
 static void *H5FD_mpiposix_fapl_copy(const void *_old_fa);
 static herr_t H5FD_mpiposix_fapl_free(void *_fa);
 static H5FD_t *H5FD_mpiposix_open(const char *name, unsigned flags, hid_t fapl_id,
-			      haddr_t maxaddr);
+            haddr_t maxaddr);
 static herr_t H5FD_mpiposix_close(H5FD_t *_file);
 static int H5FD_mpiposix_cmp(const H5FD_t *_f1, const H5FD_t *_f2);
 static herr_t H5FD_mpiposix_query(const H5FD_t *_f1, unsigned long *flags);
@@ -198,43 +198,43 @@ static MPI_Comm H5FD_mpiposix_communicator(const H5FD_t *_file);
 /* MPIPOSIX-specific file access properties */
 typedef struct H5FD_mpiposix_fapl_t {
     hbool_t             use_gpfs;       /*use GPFS hints                */
-    MPI_Comm		comm;		/*communicator			*/
+    MPI_Comm    comm;    /*communicator      */
 } H5FD_mpiposix_fapl_t;
 
 /* The MPIPOSIX file driver information */
 static const H5FD_class_mpi_t H5FD_mpiposix_g = {
     {   /* Start of superclass information */
-    "mpiposix",					/*name			*/
-    MAXADDR,					/*maxaddr		*/
-    H5F_CLOSE_SEMI,				/* fc_degree		*/
-    NULL,					/*sb_size		*/
-    NULL,					/*sb_encode		*/
-    NULL,					/*sb_decode		*/
-    sizeof(H5FD_mpiposix_fapl_t),		/*fapl_size		*/
-    H5FD_mpiposix_fapl_get,			/*fapl_get		*/
-    H5FD_mpiposix_fapl_copy,			/*fapl_copy		*/
-    H5FD_mpiposix_fapl_free, 			/*fapl_free		*/
-    0,						/*dxpl_size		*/
-    NULL,					/*dxpl_copy		*/
-    NULL,					/*dxpl_free		*/
-    H5FD_mpiposix_open,				/*open			*/
-    H5FD_mpiposix_close,			/*close			*/
-    H5FD_mpiposix_cmp,			        /*cmp			*/
-    H5FD_mpiposix_query,		        /*query			*/
-    NULL,					/*get_type_map		*/
-    NULL,					/*alloc			*/
-    NULL,					/*free			*/
-    H5FD_mpiposix_get_eoa,			/*get_eoa		*/
-    H5FD_mpiposix_set_eoa, 			/*set_eoa		*/
-    H5FD_mpiposix_get_eof,			/*get_eof		*/
+    "mpiposix",          /*name      */
+    MAXADDR,          /*maxaddr    */
+    H5F_CLOSE_SEMI,        /* fc_degree    */
+    NULL,          /*sb_size    */
+    NULL,          /*sb_encode    */
+    NULL,          /*sb_decode    */
+    sizeof(H5FD_mpiposix_fapl_t),    /*fapl_size    */
+    H5FD_mpiposix_fapl_get,      /*fapl_get    */
+    H5FD_mpiposix_fapl_copy,      /*fapl_copy    */
+    H5FD_mpiposix_fapl_free,       /*fapl_free    */
+    0,            /*dxpl_size    */
+    NULL,          /*dxpl_copy    */
+    NULL,          /*dxpl_free    */
+    H5FD_mpiposix_open,        /*open      */
+    H5FD_mpiposix_close,      /*close      */
+    H5FD_mpiposix_cmp,              /*cmp      */
+    H5FD_mpiposix_query,            /*query      */
+    NULL,          /*get_type_map    */
+    NULL,          /*alloc      */
+    NULL,          /*free      */
+    H5FD_mpiposix_get_eoa,      /*get_eoa    */
+    H5FD_mpiposix_set_eoa,       /*set_eoa    */
+    H5FD_mpiposix_get_eof,      /*get_eof    */
     H5FD_mpiposix_get_handle,                   /*get_handle            */
-    H5FD_mpiposix_read,				/*read			*/
-    H5FD_mpiposix_write,			/*write			*/
-    NULL,					/*flush			*/
-    H5FD_mpiposix_truncate,			/*truncate		*/
+    H5FD_mpiposix_read,        /*read      */
+    H5FD_mpiposix_write,      /*write      */
+    NULL,          /*flush      */
+    H5FD_mpiposix_truncate,      /*truncate    */
     NULL,                                       /*lock                  */
     NULL,                                       /*unlock                */
-    H5FD_FLMAP_SINGLE 				/*fl_map		*/
+    H5FD_FLMAP_SINGLE         /*fl_map    */
     },  /* End of superclass information */
     H5FD_mpiposix_mpi_rank,                     /*get_rank              */
     H5FD_mpiposix_mpi_size,                     /*get_size              */
@@ -265,16 +265,16 @@ H5FD_mpiposix_init_interface(void)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpiposix_init
+ * Function:  H5FD_mpiposix_init
  *
- * Purpose:	Initialize this driver by registering the driver with the
- *		library.
+ * Purpose:  Initialize this driver by registering the driver with the
+ *    library.
  *
- * Return:	Success:	The driver ID for the mpiposix driver.
+ * Return:  Success:  The driver ID for the mpiposix driver.
  *
- *		Failure:	Negative.
+ *    Failure:  Negative.
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Thursday, July 11, 2002
  *
  * Modifications:
@@ -300,11 +300,11 @@ done:
 
 
 /*---------------------------------------------------------------------------
- * Function:	H5FD_mpiposix_term
+ * Function:  H5FD_mpiposix_term
  *
- * Purpose:	Shut down the VFD
+ * Purpose:  Shut down the VFD
  *
- * Return:	<none>
+ * Return:  <none>
  *
  * Programmer:  Quincey Koziol
  *              Friday, Jan 30, 2004
@@ -326,43 +326,43 @@ H5FD_mpiposix_term(void)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5Pset_fapl_mpiposix
+ * Function:  H5Pset_fapl_mpiposix
  *
- * Purpose:	Store the user supplied MPI communicator COMM in
- *		the file access property list FAPL_ID which can then be used
- *		to create and/or open the file.  This function is available
- *		only in the parallel HDF5 library and is not collective.
+ * Purpose:  Store the user supplied MPI communicator COMM in
+ *    the file access property list FAPL_ID which can then be used
+ *    to create and/or open the file.  This function is available
+ *    only in the parallel HDF5 library and is not collective.
  *
- *		comm is the MPI communicator to be used for file open as
- *		defined in MPI_FILE_OPEN of MPI-2. This function makes a
- *		duplicate of comm. Any modification to comm after this function
- *		call returns has no effect on the access property list.
+ *    comm is the MPI communicator to be used for file open as
+ *    defined in MPI_FILE_OPEN of MPI-2. This function makes a
+ *    duplicate of comm. Any modification to comm after this function
+ *    call returns has no effect on the access property list.
  *
  *              If fapl_id has previously set comm value, it will be replaced
  *              and the old communicator is freed.
  *
- * Return:	Success:	Non-negative
- * 		Failure:	Negative
+ * Return:  Success:  Non-negative
+ *     Failure:  Negative
  *
- * Programmer:	Quincey Koziol
- *		Thursday, July 11, 2002
+ * Programmer:  Quincey Koziol
+ *    Thursday, July 11, 2002
  *
  * Modifications:
- *		Albert Cheng, 2003-04-24
- *		Modified the description of the function that it now stores
- *		a duplicate of the communicator.  Free the old duplicate if
- *		previously set.  (Work is actually done by H5P_set_driver.)
+ *    Albert Cheng, 2003-04-24
+ *    Modified the description of the function that it now stores
+ *    a duplicate of the communicator.  Free the old duplicate if
+ *    previously set.  (Work is actually done by H5P_set_driver.)
  *
- *		Bill Wendling, 2003-05-01
- *		Modified to take an extra flag indicating that we should
- *		use the GPFS hints (if available) for this file.
+ *    Bill Wendling, 2003-05-01
+ *    Modified to take an extra flag indicating that we should
+ *    use the GPFS hints (if available) for this file.
  *
  *-------------------------------------------------------------------------
  */
 herr_t
 H5Pset_fapl_mpiposix(hid_t fapl_id, MPI_Comm comm, hbool_t use_gpfs)
 {
-    H5FD_mpiposix_fapl_t	fa;
+    H5FD_mpiposix_fapl_t  fa;
     H5P_genplist_t *plist;      /* Property list pointer */
     herr_t ret_value;
 
@@ -373,7 +373,7 @@ H5Pset_fapl_mpiposix(hid_t fapl_id, MPI_Comm comm, hbool_t use_gpfs)
     if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
         HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a file access list")
     if (MPI_COMM_NULL == comm)
-	HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a valid communicator")
+  HGOTO_ERROR(H5E_PLIST, H5E_BADTYPE, FAIL, "not a valid communicator")
 
     /* Initialize driver specific properties */
     fa.comm = comm;
@@ -388,29 +388,29 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5Pget_fapl_mpiposix
+ * Function:  H5Pget_fapl_mpiposix
  *
- * Purpose:	If the file access property list is set to the H5FD_MPIPOSIX
- *		driver then this function returns a duplicate of the MPI
- *		communicator through the comm pointer. It is the responsibility
- *		of the application to free the returned communicator.
+ * Purpose:  If the file access property list is set to the H5FD_MPIPOSIX
+ *    driver then this function returns a duplicate of the MPI
+ *    communicator through the comm pointer. It is the responsibility
+ *    of the application to free the returned communicator.
  *
- * Return:	Success:	Non-negative with the communicator and
- *				information returned through the COMM
- *				argument if non-null.  Since it is a duplicate
- *				of the stored object, future modifications to
- *				the access property list do not affect it and
- *				it is the responsibility of the application to
- *				free it.
+ * Return:  Success:  Non-negative with the communicator and
+ *        information returned through the COMM
+ *        argument if non-null.  Since it is a duplicate
+ *        of the stored object, future modifications to
+ *        the access property list do not affect it and
+ *        it is the responsibility of the application to
+ *        free it.
  *
- * 		Failure:	Negative
+ *     Failure:  Negative
  *
- * Programmer:	Quincey Koziol
- *		Thursday, July 11, 2002
+ * Programmer:  Quincey Koziol
+ *    Thursday, July 11, 2002
  *
  * Modifications:
- *		Albert Cheng, 2003-04-24
- *		Return duplicate of the stored communicator.
+ *    Albert Cheng, 2003-04-24
+ *    Return duplicate of the stored communicator.
  *
  *              Bill Wendling, 2003-05-01
  *              Return the USE_GPFS flag.
@@ -420,9 +420,9 @@ done:
 herr_t
 H5Pget_fapl_mpiposix(hid_t fapl_id, MPI_Comm *comm/*out*/, hbool_t *use_gpfs/*out*/)
 {
-    H5FD_mpiposix_fapl_t	*fa;
+    H5FD_mpiposix_fapl_t  *fa;
     H5P_genplist_t *plist;      /* Property list pointer */
-    int		mpi_code;		/* mpi return code */
+    int    mpi_code;    /* mpi return code */
     herr_t      ret_value=SUCCEED;      /* Return value */
 
     FUNC_ENTER_API(H5Pget_fapl_mpiposix, FAIL)
@@ -437,8 +437,8 @@ H5Pget_fapl_mpiposix(hid_t fapl_id, MPI_Comm *comm/*out*/, hbool_t *use_gpfs/*ou
 
     /* Get MPI Communicator */
     if (comm){
-	if (MPI_SUCCESS != (mpi_code=MPI_Comm_dup(fa->comm, comm)))
-	    HMPI_GOTO_ERROR(FAIL, "MPI_Comm_dup failed", mpi_code)
+  if (MPI_SUCCESS != (mpi_code=MPI_Comm_dup(fa->comm, comm)))
+      HMPI_GOTO_ERROR(FAIL, "MPI_Comm_dup failed", mpi_code)
     }
 
     if (use_gpfs)
@@ -450,32 +450,32 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpiposix_fapl_get
+ * Function:  H5FD_mpiposix_fapl_get
  *
- * Purpose:	Returns a file access property list which could be used to
- *		create another file the same as this one.
+ * Purpose:  Returns a file access property list which could be used to
+ *    create another file the same as this one.
  *
- * Return:	Success:	Ptr to new file access property list with all
- *				fields copied from the file pointer.
+ * Return:  Success:  Ptr to new file access property list with all
+ *        fields copied from the file pointer.
  *
- *		Failure:	NULL
+ *    Failure:  NULL
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Thursday, July 11, 2002
  *
  * Modifications:
- * 		Albert Cheng, 2003-04-24
- * 		Duplicate the communicator object so that the new
- * 		property list is insulated from the old one.
+ *     Albert Cheng, 2003-04-24
+ *     Duplicate the communicator object so that the new
+ *     property list is insulated from the old one.
  *
  *-------------------------------------------------------------------------
  */
 static void *
 H5FD_mpiposix_fapl_get(H5FD_t *_file)
 {
-    H5FD_mpiposix_t	*file = (H5FD_mpiposix_t*)_file;
+    H5FD_mpiposix_t  *file = (H5FD_mpiposix_t*)_file;
     H5FD_mpiposix_fapl_t *fa = NULL;
-    int		mpi_code;	/* MPI return code */
+    int    mpi_code;  /* MPI return code */
     void        *ret_value;     /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_mpiposix_fapl_get, NULL)
@@ -488,7 +488,7 @@ H5FD_mpiposix_fapl_get(H5FD_t *_file)
 
     /* Duplicate the communicator. */
     if (MPI_SUCCESS != (mpi_code=MPI_Comm_dup(file->comm, &fa->comm)))
-	HMPI_GOTO_ERROR(NULL, "MPI_Comm_dup failed", mpi_code)
+  HMPI_GOTO_ERROR(NULL, "MPI_Comm_dup failed", mpi_code)
 
     fa->use_gpfs = file->use_gpfs;
 
@@ -501,15 +501,15 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpiposix_fapl_copy
+ * Function:  H5FD_mpiposix_fapl_copy
  *
- * Purpose:	Copies the mpiposix-specific file access properties.
+ * Purpose:  Copies the mpiposix-specific file access properties.
  *
- * Return:	Success:	Ptr to a new property list
+ * Return:  Success:  Ptr to a new property list
  *
- *		Failure:	NULL
+ *    Failure:  NULL
  *
- * Programmer:	Albert Cheng
+ * Programmer:  Albert Cheng
  *              Apr 24, 2003
  *
  * Modifications:
@@ -519,10 +519,10 @@ done:
 static void *
 H5FD_mpiposix_fapl_copy(const void *_old_fa)
 {
-    void		*ret_value = NULL;
+    void    *ret_value = NULL;
     const H5FD_mpiposix_fapl_t *old_fa = (const H5FD_mpiposix_fapl_t*)_old_fa;
-    H5FD_mpiposix_fapl_t	*new_fa = NULL;
-    int		mpi_code;	/* MPI return code */
+    H5FD_mpiposix_fapl_t  *new_fa = NULL;
+    int    mpi_code;  /* MPI return code */
 
     FUNC_ENTER_NOAPI(H5FD_mpiposix_fapl_copy, NULL)
 
@@ -534,16 +534,16 @@ H5FD_mpiposix_fapl_copy(const void *_old_fa)
 
     /* Duplicate communicator. */
     if (MPI_SUCCESS != (mpi_code=MPI_Comm_dup(old_fa->comm, &new_fa->comm)))
-	HMPI_GOTO_ERROR(NULL, "MPI_Comm_dup failed", mpi_code)
+  HMPI_GOTO_ERROR(NULL, "MPI_Comm_dup failed", mpi_code)
 
     new_fa->use_gpfs = old_fa->use_gpfs;
     ret_value = new_fa;
 
 done:
     if (NULL == ret_value){
-	/* cleanup */
-	if (new_fa)
-	    H5MM_xfree(new_fa);
+  /* cleanup */
+  if (new_fa)
+      H5MM_xfree(new_fa);
     }
 
     FUNC_LEAVE_NOAPI(ret_value)
@@ -551,15 +551,15 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpiposix_fapl_free
+ * Function:  H5FD_mpiposix_fapl_free
  *
- * Purpose:	Frees the mpiposix-specific file access properties.
+ * Purpose:  Frees the mpiposix-specific file access properties.
  *
- * Return:	Success:	0
+ * Return:  Success:  0
  *
- *		Failure:	-1
+ *    Failure:  -1
  *
- * Programmer:	Albert Cheng
+ * Programmer:  Albert Cheng
  *              Apr 24, 2003
  *
  * Modifications:
@@ -569,8 +569,8 @@ done:
 static herr_t
 H5FD_mpiposix_fapl_free(void *_fa)
 {
-    herr_t		ret_value = SUCCEED;
-    H5FD_mpiposix_fapl_t	*fa = (H5FD_mpiposix_fapl_t*)_fa;
+    herr_t    ret_value = SUCCEED;
+    H5FD_mpiposix_fapl_t  *fa = (H5FD_mpiposix_fapl_t*)_fa;
 
     FUNC_ENTER_NOAPI(H5FD_mpiposix_fapl_free, FAIL)
     assert(fa);
@@ -589,11 +589,11 @@ done:
  * Function:    H5FD_mpiposix_open
  *
  * Purpose:     Opens a file with name NAME.  The FLAGS are a bit field with
- *		purpose similar to the second argument of open(2) and which
- *		are defined in H5Fpublic.h. The file access property list
- *		FAPL_ID contains the properties driver properties and MAXADDR
- *		is the largest address which this file will be expected to
- *		access.  This is collective.
+ *    purpose similar to the second argument of open(2) and which
+ *    are defined in H5Fpublic.h. The file access property list
+ *    FAPL_ID contains the properties driver properties and MAXADDR
+ *    is the largest address which this file will be expected to
+ *    access.  This is collective.
  *
  * Return:      Success:        A new file pointer.
  *              Failure:        NULL
@@ -602,27 +602,27 @@ done:
  *              Thursday, July 11, 2002
  *
  * Modifications:
- * 		Albert Cheng, 2003-04-24
- * 		Duplicate the communicator so that file is insulated from the
- * 		old one.
+ *     Albert Cheng, 2003-04-24
+ *     Duplicate the communicator so that file is insulated from the
+ *     old one.
  *
  *-------------------------------------------------------------------------
  */
 static H5FD_t *
 H5FD_mpiposix_open(const char *name, unsigned flags, hid_t fapl_id,
-	       haddr_t maxaddr)
+         haddr_t maxaddr)
 {
-    H5FD_mpiposix_t		*file=NULL;     /* New MPIPOSIX file struct */
+    H5FD_mpiposix_t    *file=NULL;     /* New MPIPOSIX file struct */
     int                         o_flags;        /* Flags for file open call */
-    int			        fd=(-1);        /* File handle for file opened */
-    int				mpi_rank;       /* MPI rank of this process */
-    int				mpi_size;       /* Total number of MPI processes */
-    int				mpi_code;	/* mpi return code */
-    const H5FD_mpiposix_fapl_t	*fa=NULL;       /* MPIPOSIX file access property list information */
-    H5FD_mpiposix_fapl_t	_fa;            /* Private copy of default file access property list information */
+    int              fd=(-1);        /* File handle for file opened */
+    int        mpi_rank;       /* MPI rank of this process */
+    int        mpi_size;       /* Total number of MPI processes */
+    int        mpi_code;  /* mpi return code */
+    const H5FD_mpiposix_fapl_t  *fa=NULL;       /* MPIPOSIX file access property list information */
+    H5FD_mpiposix_fapl_t  _fa;            /* Private copy of default file access property list information */
     H5P_genplist_t              *plist;         /* Property list pointer */
     h5_stat_t                   sb;             /* Portable 'stat' struct */
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
     HFILE filehandle;
     struct _BY_HANDLE_FILE_INFORMATION fileinfo;
     int results;
@@ -644,18 +644,18 @@ H5FD_mpiposix_open(const char *name, unsigned flags, hid_t fapl_id,
     if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, NULL, "not a file access property list")
     if (H5P_FILE_ACCESS_DEFAULT==fapl_id || H5FD_MPIPOSIX!=H5P_get_driver(plist)) {
-	_fa.comm = MPI_COMM_SELF; /*default*/
+  _fa.comm = MPI_COMM_SELF; /*default*/
         _fa.use_gpfs = FALSE;
-	fa = &_fa;
+  fa = &_fa;
     } /* end if */
     else {
-	fa = H5P_get_driver_info(plist);
-	assert(fa);
+  fa = H5P_get_driver_info(plist);
+  assert(fa);
     } /* end else */
 
     /* Duplicate the communicator for use by this file. */
     if (MPI_SUCCESS != (mpi_code=MPI_Comm_dup(fa->comm, &comm_dup)))
-	HMPI_GOTO_ERROR(NULL, "MPI_Comm_dup failed", mpi_code)
+  HMPI_GOTO_ERROR(NULL, "MPI_Comm_dup failed", mpi_code)
 
     /* Get the MPI rank of this process and the total number of processes */
     if (MPI_SUCCESS != (mpi_code=MPI_Comm_rank (comm_dup, &mpi_rank)))
@@ -756,7 +756,7 @@ H5FD_mpiposix_open(const char *name, unsigned flags, hid_t fapl_id,
     file->fd = fd;
     file->eof = sb.st_size;
 
-    /* for _WIN32 support. _WIN32 'stat' does not have st_blksize and st_blksize
+    /* for H5_HAVE_WIN32_API support. H5_HAVE_WIN32_API 'stat' does not have st_blksize and st_blksize
        is only used for the H5_HAVE_GPFS case */
 #ifdef H5_HAVE_GPFS
     file->blksize = sb.st_blksize;
@@ -775,7 +775,7 @@ H5FD_mpiposix_open(const char *name, unsigned flags, hid_t fapl_id,
     file->op = OP_UNKNOWN;
 
     /* Set the information for the file's device and inode */
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
     filehandle = _get_osfhandle(fd);
     results = GetFileInformationByHandle((HANDLE)filehandle, &fileinfo);
     file->fileindexhi = fileinfo.nFileIndexHigh;
@@ -794,8 +794,8 @@ done:
         /* Close the file if it was left open */
         if(fd!=(-1))
             HDclose(fd);
-	if (MPI_COMM_NULL != comm_dup)
-	    MPI_Comm_free(&comm_dup);
+  if (MPI_COMM_NULL != comm_dup)
+      MPI_Comm_free(&comm_dup);
     } /* end if */
 
     FUNC_LEAVE_NOAPI(ret_value)
@@ -807,21 +807,21 @@ done:
  *
  * Purpose:     Closes a file.
  *
- * Return:      Success:	Non-negative
- * 		Failure:	Negative
+ * Return:      Success:  Non-negative
+ *     Failure:  Negative
  *
  * Programmer:  Quincey Koziol
  *              Thursday, July 11, 2002
  *
  * Modifications:
- * 		Albert Cheng, 2003-04-24
- *		Free the communicator stored.
+ *     Albert Cheng, 2003-04-24
+ *    Free the communicator stored.
  *-------------------------------------------------------------------------
  */
 static herr_t
 H5FD_mpiposix_close(H5FD_t *_file)
 {
-    H5FD_mpiposix_t	*file = (H5FD_mpiposix_t*)_file;
+    H5FD_mpiposix_t  *file = (H5FD_mpiposix_t*)_file;
     herr_t      ret_value=SUCCEED;       /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_mpiposix_close, FAIL)
@@ -845,16 +845,16 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpiposix_cmp
+ * Function:  H5FD_mpiposix_cmp
  *
- * Purpose:	Compares two files belonging to this driver using an
- *		arbitrary (but consistent) ordering.
+ * Purpose:  Compares two files belonging to this driver using an
+ *    arbitrary (but consistent) ordering.
  *
- * Return:	Success:	A value like strcmp()
- *		Failure:	never fails (arguments were checked by the
- *				caller).
+ * Return:  Success:  A value like strcmp()
+ *    Failure:  never fails (arguments were checked by the
+ *        caller).
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Thursday, July 11, 2002
  *
  * Modifications:
@@ -864,13 +864,13 @@ done:
 static int
 H5FD_mpiposix_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
 {
-    const H5FD_mpiposix_t	*f1 = (const H5FD_mpiposix_t*)_f1;
-    const H5FD_mpiposix_t	*f2 = (const H5FD_mpiposix_t*)_f2;
+    const H5FD_mpiposix_t  *f1 = (const H5FD_mpiposix_t*)_f1;
+    const H5FD_mpiposix_t  *f2 = (const H5FD_mpiposix_t*)_f2;
     int ret_value=0;
 
     FUNC_ENTER_NOAPI(H5FD_mpiposix_cmp, H5FD_VFD_DEFAULT)
 
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
     if (f1->fileindexhi < f2->fileindexhi) HGOTO_DONE(-1)
     if (f1->fileindexhi > f2->fileindexhi) HGOTO_DONE(1)
 
@@ -900,15 +900,15 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpiposix_query
+ * Function:  H5FD_mpiposix_query
  *
- * Purpose:	Set the flags that this VFL driver is capable of supporting.
+ * Purpose:  Set the flags that this VFL driver is capable of supporting.
  *              (listed in H5FDpublic.h)
  *
- * Return:	Success:	non-negative
- *		Failure:	negative
+ * Return:  Success:  non-negative
+ *    Failure:  negative
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Thursday, July 11, 2002
  *
  * Modifications:
@@ -916,8 +916,8 @@ done:
  *              John Mainzer -- 9/21/05
  *              Modified code to turn off the
  *              H5FD_FEAT_ACCUMULATE_METADATA_WRITE flag.
- *		With the movement of all cache writes to process 0,
- *		this flag has become problematic in PHDF5.
+ *    With the movement of all cache writes to process 0,
+ *    this flag has become problematic in PHDF5.
  *
  *-------------------------------------------------------------------------
  */
@@ -941,16 +941,16 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpiposix_get_eoa
+ * Function:  H5FD_mpiposix_get_eoa
  *
- * Purpose:	Gets the end-of-address marker for the file. The EOA marker
- *		is the first address past the last byte allocated in the
- *		format address space.
+ * Purpose:  Gets the end-of-address marker for the file. The EOA marker
+ *    is the first address past the last byte allocated in the
+ *    format address space.
  *
- * Return:	Success:	The end-of-address marker.
- *		Failure:	HADDR_UNDEF
+ * Return:  Success:  The end-of-address marker.
+ *    Failure:  HADDR_UNDEF
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Thursday, July 11, 2002
  *
  * Modifications:
@@ -980,16 +980,16 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpiposix_set_eoa
+ * Function:  H5FD_mpiposix_set_eoa
  *
- * Purpose:	Set the end-of-address marker for the file. This function is
- *		called shortly after an existing HDF5 file is opened in order
- *		to tell the driver where the end of the HDF5 data is located.
+ * Purpose:  Set the end-of-address marker for the file. This function is
+ *    called shortly after an existing HDF5 file is opened in order
+ *    to tell the driver where the end of the HDF5 data is located.
  *
- * Return:	Success:	non-negative
- *		Failure:	negative
+ * Return:  Success:  non-negative
+ *    Failure:  negative
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Thursday, July 11, 2002
  *
  * Modifications:
@@ -1002,7 +1002,7 @@ done:
 static herr_t
 H5FD_mpiposix_set_eoa(H5FD_t *_file, H5FD_mem_t UNUSED type, haddr_t addr)
 {
-    H5FD_mpiposix_t	*file = (H5FD_mpiposix_t*)_file;
+    H5FD_mpiposix_t  *file = (H5FD_mpiposix_t*)_file;
     herr_t ret_value=SUCCEED;   /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_mpiposix_set_eoa, FAIL)
@@ -1018,21 +1018,21 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpiposix_get_eof
+ * Function:  H5FD_mpiposix_get_eof
  *
- * Purpose:	Gets the end-of-file marker for the file. The EOF marker
- *		is the real size of the file.
+ * Purpose:  Gets the end-of-file marker for the file. The EOF marker
+ *    is the real size of the file.
  *
- *		The MPIPOSIX driver doesn't bother keeping this field updated
- *		since that's a relatively expensive operation. Fortunately
- *		the library only needs the EOF just after the file is opened
- *		in order to determine whether the file is empty, truncated,
- *		or okay.
+ *    The MPIPOSIX driver doesn't bother keeping this field updated
+ *    since that's a relatively expensive operation. Fortunately
+ *    the library only needs the EOF just after the file is opened
+ *    in order to determine whether the file is empty, truncated,
+ *    or okay.
  *
- * Return:	Success:	The end-of-address marker.
- *		Failure:	HADDR_UNDEF
+ * Return:  Success:  The end-of-address marker.
+ *    Failure:  HADDR_UNDEF
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Thursday, July 11, 2002
  *
  * Modifications:
@@ -1042,7 +1042,7 @@ done:
 static haddr_t
 H5FD_mpiposix_get_eof(const H5FD_t *_file)
 {
-    const H5FD_mpiposix_t	*file = (const H5FD_mpiposix_t*)_file;
+    const H5FD_mpiposix_t  *file = (const H5FD_mpiposix_t*)_file;
     haddr_t ret_value;          /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_mpiposix_get_eof, HADDR_UNDEF)
@@ -1091,21 +1091,21 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpiposix_read
+ * Function:  H5FD_mpiposix_read
  *
- * Purpose:	Reads SIZE bytes of data from FILE beginning at address ADDR
- *		into buffer BUF according to data transfer properties in
- *		DXPL_ID using potentially complex file and buffer types to
- *		effect the transfer.
+ * Purpose:  Reads SIZE bytes of data from FILE beginning at address ADDR
+ *    into buffer BUF according to data transfer properties in
+ *    DXPL_ID using potentially complex file and buffer types to
+ *    effect the transfer.
  *
- *		Reading past the end of the file returns zeros instead of
- *		failing.
+ *    Reading past the end of the file returns zeros instead of
+ *    failing.
  *
- * Return:	Success:	Non-negative. Result is stored in caller-supplied
- *				buffer BUF.
- *		Failure:	Negative, Contents of buffer BUF are undefined.
+ * Return:  Success:  Non-negative. Result is stored in caller-supplied
+ *        buffer BUF.
+ *    Failure:  Negative, Contents of buffer BUF are undefined.
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Thursday, July 11, 2002
  *
  * Modifications:
@@ -1114,11 +1114,11 @@ done:
  */
 static herr_t
 H5FD_mpiposix_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr, size_t size,
-	       void *buf/*out*/)
+         void *buf/*out*/)
 {
-    H5FD_mpiposix_t	*file = (H5FD_mpiposix_t*)_file;
-    ssize_t	        nbytes;         /* Number of bytes read each I/O call */
-    herr_t             	ret_value=SUCCEED;
+    H5FD_mpiposix_t  *file = (H5FD_mpiposix_t*)_file;
+    ssize_t          nbytes;         /* Number of bytes read each I/O call */
+    herr_t               ret_value=SUCCEED;
 
     FUNC_ENTER_NOAPI(H5FD_mpiposix_read, FAIL)
 
@@ -1187,17 +1187,17 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpiposix_write
+ * Function:  H5FD_mpiposix_write
  *
- * Purpose:	Writes SIZE bytes of data to FILE beginning at address ADDR
- *		from buffer BUF according to data transfer properties in
- *		DXPL_ID using potentially complex file and buffer types to
- *		effect the transfer.
+ * Purpose:  Writes SIZE bytes of data to FILE beginning at address ADDR
+ *    from buffer BUF according to data transfer properties in
+ *    DXPL_ID using potentially complex file and buffer types to
+ *    effect the transfer.
  *
- * Return:	Success:	non-negative
- *		Failure:	negative
+ * Return:  Success:  non-negative
+ *    Failure:  negative
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Thursday, July 11, 2002
  *
  * Modifications:
@@ -1212,15 +1212,15 @@ done:
  */
 static herr_t
 H5FD_mpiposix_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
-		size_t size, const void *buf)
+    size_t size, const void *buf)
 {
-    H5FD_mpiposix_t	*file = (H5FD_mpiposix_t*)_file;
+    H5FD_mpiposix_t  *file = (H5FD_mpiposix_t*)_file;
 #if 0 /* JRM */
-    int			mpi_code;	/* MPI return code */
+    int      mpi_code;  /* MPI return code */
 #endif /* JRM */
-    ssize_t	        nbytes;         /* Number of bytes written each I/O call */
+    ssize_t          nbytes;         /* Number of bytes written each I/O call */
     H5P_genplist_t      *plist;         /* Property list pointer */
-    herr_t             	ret_value=SUCCEED;      /* Return value */
+    herr_t               ret_value=SUCCEED;      /* Return value */
 
     FUNC_ENTER_NOAPI(H5FD_mpiposix_write, FAIL)
 
@@ -1249,10 +1249,10 @@ H5FD_mpiposix_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
      * writes between processes, but we should really just flag an error
      * whenever any process other than process 0 attempts to write
      * metadata.
-     * 						-- JRM 9/1/05
+     *             -- JRM 9/1/05
      */
     if(type!=H5FD_MEM_DRAW) {
-        unsigned		block_before_meta_write=0;      /* Whether to block before a metadata write */
+        unsigned    block_before_meta_write=0;      /* Whether to block before a metadata write */
 
         /* Check if we need to syncronize all processes before attempting metadata write
          * (Prevents race condition where the process writing the metadata goes ahead
@@ -1350,11 +1350,11 @@ done:
     } /* end if */
 #if 0 /* JRM */
         /* Since metadata writes are now done by process 0 only, this broadcast
-	 * is no longer needed.  I leave it in and commented out to remind us
-	 * that we need to re-work this function to reflect this reallity.
-	 *
-	 *                                          -- JRM 9/1/05
-	 */
+   * is no longer needed.  I leave it in and commented out to remind us
+   * that we need to re-work this function to reflect this reallity.
+   *
+   *                                          -- JRM 9/1/05
+   */
 
     /* Guard against getting into metadata broadcast in failure cases */
     else {
@@ -1373,11 +1373,11 @@ done:
 /*-------------------------------------------------------------------------
  * Function:    H5FD_mpiposix_truncate
  *
- * Purpose:	Makes sure that the true file size is the same (or larger)
- *		than the end-of-address.
+ * Purpose:  Makes sure that the true file size is the same (or larger)
+ *    than the end-of-address.
  *
- * Return:      Success:	Non-negative
- * 		Failure:	Negative
+ * Return:      Success:  Non-negative
+ *     Failure:  Negative
  *
  * Programmer:  Quincey Koziol
  *              Thursday, July 11, 2002
@@ -1387,12 +1387,12 @@ done:
 static herr_t
 H5FD_mpiposix_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing)
 {
-    H5FD_mpiposix_t	*file = (H5FD_mpiposix_t*)_file;
-#ifdef _WIN32
+    H5FD_mpiposix_t  *file = (H5FD_mpiposix_t*)_file;
+#ifdef H5_HAVE_WIN32_API
     HFILE filehandle;   /* Windows file handle */
     LARGE_INTEGER li;   /* 64-bit integer for SetFilePointer() call */
-#endif /* _WIN32 */
-    int			mpi_code;	/* MPI return code */
+#endif /* H5_HAVE_WIN32_API */
+    int      mpi_code;  /* MPI return code */
     herr_t              ret_value = SUCCEED;
 
     FUNC_ENTER_NOAPI(H5FD_mpiposix_truncate, FAIL)
@@ -1404,7 +1404,7 @@ H5FD_mpiposix_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closi
     if(file->eoa > file->last_eoa) {
         /* Use the round-robin process to truncate (extend) the file */
         if(file->mpi_rank == H5_PAR_META_WRITE) {
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
             /* Map the posix file handle to a Windows file handle */
             filehandle = _get_osfhandle(file->fd);
 
@@ -1414,10 +1414,10 @@ H5FD_mpiposix_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closi
             SetFilePointer((HANDLE)filehandle, li.LowPart, &li.HighPart, FILE_BEGIN);
             if(SetEndOfFile((HANDLE)filehandle) == 0)
                 HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to extend file properly")
-#else /* _WIN32 */
+#else /* H5_HAVE_WIN32_API */
             if(-1==file_truncate(file->fd, (file_offset_t)file->eoa))
                 HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to extend file properly")
-#endif /* _WIN32 */
+#endif /* H5_HAVE_WIN32_API */
         } /* end if */
 
         /* Don't let any proc return until all have extended the file.
@@ -1444,14 +1444,14 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpiposix_mpi_rank
+ * Function:  H5FD_mpiposix_mpi_rank
  *
- * Purpose:	Returns the MPI rank for a process
+ * Purpose:  Returns the MPI rank for a process
  *
- * Return:	Success: non-negative
- *		Failure: negative
+ * Return:  Success: non-negative
+ *    Failure: negative
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Thursday, July 11, 2002
  *
  * Modifications:
@@ -1478,14 +1478,14 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpiposix_mpi_size
+ * Function:  H5FD_mpiposix_mpi_size
  *
- * Purpose:	Returns the number of MPI processes
+ * Purpose:  Returns the number of MPI processes
  *
- * Return:	Success: non-negative
- *		Failure: negative
+ * Return:  Success: non-negative
+ *    Failure: negative
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Thursday, July 11, 2002
  *
  * Modifications:
@@ -1512,15 +1512,15 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_mpiposix_communicator
+ * Function:  H5FD_mpiposix_communicator
  *
- * Purpose:	Returns the MPI communicator for the file.
+ * Purpose:  Returns the MPI communicator for the file.
  *
- * Return:	Success:	The communicator
+ * Return:  Success:  The communicator
  *
- *		Failure:	NULL
+ *    Failure:  NULL
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Thursday, July 11, 2002
  *
  * Modifications:
diff --git a/src/H5FDmulti.c b/src/H5FDmulti.c
index 328b530..772384f 100644
--- a/src/H5FDmulti.c
+++ b/src/H5FDmulti.c
@@ -97,9 +97,11 @@ typedef struct H5FD_multi_t {
     H5FD_multi_fapl_t fa;	/*driver-specific file access properties*/
     haddr_t	memb_next[H5FD_MEM_NTYPES];/*addr of next member	*/
     H5FD_t	*memb[H5FD_MEM_NTYPES];	/*member pointers		*/
-    /*haddr_t	eoa;*/		/*end of allocated addresses.  Took it out
-                                 *because individual files have their own
-                                 *eoa.                                  */
+    haddr_t     memb_eoa[H5FD_MEM_NTYPES]; /*EOA for individual files,
+    				 *end of allocated addresses.  v1.6 library 
+                                 *have the EOA for the entire file. But it's
+                                 *meaningless for MULTI file.  We replaced it
+                                 *with the EOAs for individual files    */
     unsigned	flags;		/*file open flags saved for debugging	*/
     char	*name;		/*name passed to H5Fopen or H5Fcreate	*/
 } H5FD_multi_t;
@@ -969,6 +971,9 @@ H5FD_multi_sb_decode(H5FD_t *_file, const char *name, const unsigned char *buf)
         if (file->memb[mt])
             if(H5FDset_eoa(file->memb[mt], mt, memb_eoa[mt])<0)
                 H5Epush_ret(func, H5E_ERR_CLS, H5E_INTERNAL, H5E_CANTSET, "set_eoa() failed", -1)
+       
+        /* Save the individual EOAs in one place for later comparison (in H5FD_multi_set_eoa) */ 
+        file->memb_eoa[mt] = memb_eoa[mt]; 
     } END_MEMBERS;
 
     return 0;
@@ -1221,7 +1226,9 @@ H5FD_multi_open(const char *name, unsigned flags, hid_t fapl_id,
 
     /*
      * Initialize the file from the file access properties, using default
-     * values if necessary.
+     * values if necessary.  Make sure to use CALLOC here because the code
+     * in H5FD_multi_set_eoa depends on the proper initialization of memb_eoa 
+     * in H5FD_multi_t.
      */
     if(NULL == (file = (H5FD_multi_t *)calloc((size_t)1, sizeof(H5FD_multi_t))))
         H5Epush_ret(func, H5E_ERR_CLS, H5E_RESOURCE, H5E_NOSPACE, "memory allocation failed", NULL)
@@ -1563,6 +1570,10 @@ H5FD_multi_get_eoa(const H5FD_t *_file, H5FD_mem_t type)
  *              for MULTI file.  This function only sets eoa for individual
  *              file.
  *
+ *              Raymond Lu
+ *              21 June 2011
+ *              Backward compatibility of EOA.  Please the comment in the
+ *              code.
  *-------------------------------------------------------------------------
  */
 static herr_t
@@ -1580,6 +1591,17 @@ H5FD_multi_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t eoa)
     if(H5FD_MEM_DEFAULT == mmt)
         mmt = type;
 
+    /* Handle backward compatibility in a quick and simple way.  v1.6 library had EOA for the entire virtual 
+     * file.  But it wasn't meaningful.  So v1.8 library doesn't have it anymore.  It saves the EOA for the 
+     * metadata file, instead.  Here we try to figure out whether the EOA is from a v1.6 file by comparing its 
+     * value.  If it is a big value, we assume it's from v1.6 and simply discard it. This is the normal case 
+     * when the metadata file has the smallest starting address.  If the metadata file has the biggest address,
+     * the EOAs of v1.6 and v1.8 files are the same.  It won't cause any trouble.  (Please see Issue 2598 
+     * in Jira) SLU - 2011/6/21
+     */
+    if(H5FD_MEM_SUPER == type && file->memb_eoa[H5FD_MEM_SUPER] > 0 && eoa > file->memb_eoa[H5FD_MEM_SUPER])
+        return 0;
+
     assert(eoa >= file->fa.memb_addr[mmt]);
     assert(eoa < file->memb_next[mmt]);
 
diff --git a/src/H5FDsec2.c b/src/H5FDsec2.c
index 1153df7..a7ae93e 100644
--- a/src/H5FDsec2.c
+++ b/src/H5FDsec2.c
@@ -42,11 +42,25 @@
 /* The driver identification number, initialized at runtime */
 static hid_t H5FD_SEC2_g = 0;
 
-/*
- * The description of a file belonging to this driver. The `eoa' and `eof'
+/* Since Windows doesn't follow the rest of the world when it comes
+ * to POSIX I/O types, some typedefs and constants are needed to avoid
+ * making the code messy with #ifdefs.
+ */
+#ifdef H5_HAVE_WIN32_API
+typedef unsigned int    h5_sec2_io_t;
+typedef int             h5_sec2_io_ret_t;
+static int H5_SEC2_MAX_IO_BYTES_g = INT_MAX;
+#else
+/* Unix, everyone else */
+typedef size_t          h5_sec2_io_t;
+typedef ssize_t         h5_sec2_io_ret_t;
+static size_t H5_SEC2_MAX_IO_BYTES_g = SSIZET_MAX;
+#endif /* H5_HAVE_WIN32_API */
+ 
+/* The description of a file belonging to this driver. The `eoa' and `eof'
  * determine the amount of hdf5 address space in use and the high-water mark
- * of the file (the current size of the underlying Unix file). The `pos'
- * value is used to eliminate file position updates when they would be a
+ * of the file (the current size of the underlying filesystem file). The
+ * `pos' value is used to eliminate file position updates when they would be a
  * no-op. Unfortunately we've found systems that use separate file position
  * indicators for reading and writing so the lseek can only be eliminated if
  * the current operation is the same as the previous operation.  When opening
@@ -55,54 +69,56 @@ static hid_t H5FD_SEC2_g = 0;
  * occurs), and `op' will be set to H5F_OP_UNKNOWN.
  */
 typedef struct H5FD_sec2_t {
-    H5FD_t	pub;			/*public stuff, must be first	*/
-    int		fd;			/*the unix file			*/
-    haddr_t	eoa;			/*end of allocated region	*/
-    haddr_t	eof;			/*end of file; current file size*/
-    haddr_t	pos;			/*current file I/O position	*/
-    H5FD_file_op_t	op;		/*last operation		*/
-    char	filename[H5FD_MAX_FILENAME_LEN];     /* Copy of file name from open operation */
-#ifndef _WIN32
-    /*
-     * On most systems the combination of device and i-node number uniquely
-     * identify a file.
+    H5FD_t          pub;    /* public stuff, must be first      */
+    int             fd;     /* the filesystem file descriptor   */
+    haddr_t         eoa;    /* end of allocated region          */
+    haddr_t         eof;    /* end of file; current file size   */
+    haddr_t         pos;    /* current file I/O position        */
+    H5FD_file_op_t  op;     /* last operation                   */
+    char            filename[H5FD_MAX_FILENAME_LEN];    /* Copy of file name from open operation */
+#ifndef H5_HAVE_WIN32_API
+    /* On most systems the combination of device and i-node number uniquely
+     * identify a file.  Note that Cygwin, MinGW and other Windows POSIX
+     * environments have the stat function (which fakes inodes)
+     * and will use the 'device + inodes' scheme as opposed to the
+     * Windows code further below.
      */
-    dev_t	device;			/*file device number		*/
+    dev_t           device;     /* file device number   */
 #ifdef H5_VMS
-    ino_t	inode[3];		/*file i-node number		*/
+    ino_t           inode[3];   /* file i-node number   */
 #else
-    ino_t	inode;			/*file i-node number		*/
-#endif /*H5_VMS*/
+    ino_t           inode;      /* file i-node number   */
+#endif /* H5_VMS */
 #else
-    /*
-     * On _WIN32 the low-order word of a unique identifier associated with the
-     * file and the volume serial number uniquely identify a file. This number
-     * (which, both? -rpm) may change when the system is restarted or when the
-     * file is opened. After a process opens a file, the identifier is
-     * constant until the file is closed. An application can use this
-     * identifier and the volume serial number to determine whether two
-     * handles refer to the same file.
+    /* Files in windows are uniquely identified by the volume serial
+     * number and the file index (both low and high parts).
+     *
+     * There are caveats where these numbers can change, especially
+     * on FAT file systems.  On NTFS, however, a file should keep
+     * those numbers the same until renamed or deleted (though you
+     * can use ReplaceFile() on NTFS to keep the numbers the same
+     * while renaming).
+     *
+     * See the MSDN "BY_HANDLE_FILE_INFORMATION Structure" entry for
+     * more information.
+     *
+     * http://msdn.microsoft.com/en-us/library/aa363788(v=VS.85).aspx
      */
-    DWORD fileindexlo;
-    DWORD fileindexhi;
-#endif
-
-    /* Information from properties set by 'h5repart' tool */
-    hbool_t     fam_to_sec2;    /* Whether to eliminate the family driver info
-                                 * and convert this file to a single file */
+    DWORD           nFileIndexLow;
+    DWORD           nFileIndexHigh;
+    DWORD           dwVolumeSerialNumber;
+    
+    HANDLE          hFile;      /* Native windows file handle */
+#endif  /* H5_HAVE_WIN32_API */
+
+    /* Information from properties set by 'h5repart' tool
+     *
+     * Whether to eliminate the family driver info and convert this file to
+     * a single file.
+     */
+    hbool_t         fam_to_sec2;
 } H5FD_sec2_t;
 
-
-/*
- * This driver supports systems that have the lseek64() function by defining
- * some macros here so we don't have to have conditional compilations later
- * throughout the code.
- *
- * HDoff_t:	The datatype for file offsets, the second argument of
- *		the lseek() or lseek64() call.
- *
- */
-
 /*
  * These macros check for overflow of various quantities.  These macros
  * assume that HDoff_t is signed and haddr_t and size_t are unsigned.
@@ -239,7 +255,7 @@ done:
  *
  * Purpose:	Shut down the VFD
  *
- * Return:	<none>
+ * Returns:     <none>
  *
  * Programmer:  Quincey Koziol
  *              Friday, Jan 30, 2004
@@ -294,7 +310,7 @@ done:
 /*-------------------------------------------------------------------------
  * Function:	H5FD_sec2_open
  *
- * Purpose:	Create and/or opens a Unix file as an HDF5 file.
+ * Purpose:	Create and/or opens a file as an HDF5 file.
  *
  * Return:	Success:	A pointer to a new file data structure. The
  *				public fields will be initialized by the
@@ -309,15 +325,14 @@ done:
 static H5FD_t *
 H5FD_sec2_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
 {
-    H5FD_sec2_t	*file = NULL;   /* sec2 VFD info */
-    int		fd = (-1);      /* File descriptor */
-    int		o_flags;        /* Flags for open() call */
-#ifdef _WIN32
-    HFILE filehandle;
+    H5FD_sec2_t     *file       = NULL;     /* sec2 VFD info            */
+    int             fd          = -1;       /* File descriptor          */
+    int             o_flags;                /* Flags for open() call    */
+#ifdef H5_HAVE_WIN32_API
     struct _BY_HANDLE_FILE_INFORMATION fileinfo;
 #endif
-    h5_stat_t	sb;
-    H5FD_t	*ret_value;     /* Return value */
+    h5_stat_t       sb;
+    H5FD_t          *ret_value;             /* Return value             */
 
     FUNC_ENTER_NOAPI_NOINIT(H5FD_sec2_open)
 
@@ -344,9 +359,9 @@ H5FD_sec2_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
     /* Open the file */
     if((fd = HDopen(name, o_flags, 0666)) < 0) {
         int myerrno = errno;
-
         HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open file: name = '%s', errno = %d, error message = '%s', flags = %x, o_flags = %x", name, myerrno, HDstrerror(myerrno), flags, (unsigned)o_flags);
     } /* end if */
+
     if(HDfstat(fd, &sb) < 0)
         HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, NULL, "unable to fstat file")
 
@@ -358,22 +373,27 @@ H5FD_sec2_open(const char *name, unsigned flags, hid_t fapl_id, haddr_t maxaddr)
     H5_ASSIGN_OVERFLOW(file->eof, sb.st_size, h5_stat_size_t, haddr_t);
     file->pos = HADDR_UNDEF;
     file->op = OP_UNKNOWN;
-#ifdef _WIN32
-    filehandle = _get_osfhandle(fd);
-    (void)GetFileInformationByHandle((HANDLE)filehandle, &fileinfo);
-    file->fileindexhi = fileinfo.nFileIndexHigh;
-    file->fileindexlo = fileinfo.nFileIndexLow;
-#else /* _WIN32 */
+#ifdef H5_HAVE_WIN32_API
+    file->hFile = (HANDLE)_get_osfhandle(fd);
+    if(INVALID_HANDLE_VALUE == file->hFile)
+        HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to get Windows file handle")
+
+    if(!GetFileInformationByHandle((HANDLE)file->hFile, &fileinfo))
+        HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to get Windows file information")
+
+    file->nFileIndexHigh = fileinfo.nFileIndexHigh;
+    file->nFileIndexLow = fileinfo.nFileIndexLow;
+    file->dwVolumeSerialNumber = fileinfo.dwVolumeSerialNumber;
+#else /* H5_HAVE_WIN32_API */
     file->device = sb.st_dev;
 #ifdef H5_VMS
     file->inode[0] = sb.st_ino[0];
     file->inode[1] = sb.st_ino[1];
     file->inode[2] = sb.st_ino[2];
-#else
+#else /* H5_VMS */
     file->inode = sb.st_ino;
-#endif /*H5_VMS*/
-
-#endif /* _WIN32 */
+#endif /* H5_VMS */
+#endif /* H5_HAVE_WIN32_API */
 
     /* Retain a copy of the name used to open the file, for possible error reporting */
     HDstrncpy(file->filename, name, sizeof(file->filename));
@@ -415,7 +435,7 @@ done:
 /*-------------------------------------------------------------------------
  * Function:	H5FD_sec2_close
  *
- * Purpose:	Closes a Unix file.
+ * Purpose:	Closes an HDF5 file.
  *
  * Return:	Success:	0
  *		Failure:	-1, file not closed.
@@ -472,14 +492,16 @@ H5FD_sec2_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
 
     FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_sec2_cmp)
 
-#ifdef _WIN32
-    if(f1->fileindexhi < f2->fileindexhi) HGOTO_DONE(-1)
-    if(f1->fileindexhi > f2->fileindexhi) HGOTO_DONE(1)
+#ifdef H5_HAVE_WIN32_API
+    if(f1->dwVolumeSerialNumber < f2->dwVolumeSerialNumber) HGOTO_DONE(-1)
+    if(f1->dwVolumeSerialNumber > f2->dwVolumeSerialNumber) HGOTO_DONE(1)
 
-    if(f1->fileindexlo < f2->fileindexlo) HGOTO_DONE(-1)
-    if(f1->fileindexlo > f2->fileindexlo) HGOTO_DONE(1)
+    if(f1->nFileIndexHigh < f2->nFileIndexHigh) HGOTO_DONE(-1)
+    if(f1->nFileIndexHigh > f2->nFileIndexHigh) HGOTO_DONE(1)
 
-#else
+    if(f1->nFileIndexLow < f2->nFileIndexLow) HGOTO_DONE(-1)
+    if(f1->nFileIndexLow > f2->nFileIndexLow) HGOTO_DONE(1)
+#else /* H5_HAVE_WIN32_API */
 #ifdef H5_DEV_T_IS_SCALAR
     if(f1->device < f2->device) HGOTO_DONE(-1)
     if(f1->device > f2->device) HGOTO_DONE(1)
@@ -491,16 +513,14 @@ H5FD_sec2_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
     if(HDmemcmp(&(f1->device),&(f2->device),sizeof(dev_t)) < 0) HGOTO_DONE(-1)
     if(HDmemcmp(&(f1->device),&(f2->device),sizeof(dev_t)) > 0) HGOTO_DONE(1)
 #endif /* H5_DEV_T_IS_SCALAR */
-
-#ifndef H5_VMS
-    if(f1->inode < f2->inode) HGOTO_DONE(-1)
-    if(f1->inode > f2->inode) HGOTO_DONE(1)
-#else
+#ifdef H5_VMS
     if(HDmemcmp(&(f1->inode), &(f2->inode), 3 * sizeof(ino_t)) < 0) HGOTO_DONE(-1)
     if(HDmemcmp(&(f1->inode), &(f2->inode), 3 * sizeof(ino_t)) > 0) HGOTO_DONE(1)
-#endif /*H5_VMS*/
-
-#endif
+#else /* H5_VMS */
+    if(f1->inode < f2->inode) HGOTO_DONE(-1)
+    if(f1->inode > f2->inode) HGOTO_DONE(1)
+#endif /* H5_VMS */
+#endif /* H5_HAVE_WIN32_API */
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
@@ -531,11 +551,11 @@ H5FD_sec2_query(const H5FD_t *_file, unsigned long *flags /* out */)
     /* Set the VFL feature flags that this driver supports */
     if(flags) {
         *flags = 0;
-        *flags |= H5FD_FEAT_AGGREGATE_METADATA; /* OK to aggregate metadata allocations */
-        *flags |= H5FD_FEAT_ACCUMULATE_METADATA; /* OK to accumulate metadata for faster writes */
-        *flags |= H5FD_FEAT_DATA_SIEVE;       /* OK to perform data sieving for faster raw data reads & writes */
-        *flags |= H5FD_FEAT_AGGREGATE_SMALLDATA; /* OK to aggregate "small" raw data allocations */
-        *flags |= H5FD_FEAT_POSIX_COMPAT_HANDLE; /* VFD handle is POSIX I/O call compatible */
+        *flags |= H5FD_FEAT_AGGREGATE_METADATA;     /* OK to aggregate metadata allocations                             */
+        *flags |= H5FD_FEAT_ACCUMULATE_METADATA;    /* OK to accumulate metadata for faster writes                      */
+        *flags |= H5FD_FEAT_DATA_SIEVE;             /* OK to perform data sieving for faster raw data reads & writes    */
+        *flags |= H5FD_FEAT_AGGREGATE_SMALLDATA;    /* OK to aggregate "small" raw data allocations                     */
+        *flags |= H5FD_FEAT_POSIX_COMPAT_HANDLE;    /* VFD handle is POSIX I/O call compatible                          */
 
         /* Check for flags that are set by h5repart */
         if(file->fam_to_sec2)
@@ -561,6 +581,7 @@ H5FD_sec2_query(const H5FD_t *_file, unsigned long *flags /* out */)
  *
  *-------------------------------------------------------------------------
  */
+/* ARGSUSED */
 static haddr_t
 H5FD_sec2_get_eoa(const H5FD_t *_file, H5FD_mem_t UNUSED type)
 {
@@ -587,6 +608,7 @@ H5FD_sec2_get_eoa(const H5FD_t *_file, H5FD_mem_t UNUSED type)
  *
  *-------------------------------------------------------------------------
  */
+/* ARGSUSED */
 static herr_t
 H5FD_sec2_set_eoa(H5FD_t *_file, H5FD_mem_t UNUSED type, haddr_t addr)
 {
@@ -604,11 +626,11 @@ H5FD_sec2_set_eoa(H5FD_t *_file, H5FD_mem_t UNUSED type, haddr_t addr)
  * Function:	H5FD_sec2_get_eof
  *
  * Purpose:	Returns the end-of-file marker, which is the greater of
- *		either the Unix end-of-file or the HDF5 end-of-address
+ *		either the filesystem end-of-file or the HDF5 end-of-address
  *		markers.
  *
  * Return:	Success:	End of file address, the first address past
- *				the end of the "file", either the Unix file
+ *				the end of the "file", either the filesystem file
  *				or the HDF5 file.
  *		Failure:	HADDR_UNDEF
  *
@@ -678,11 +700,10 @@ done:
 /* ARGSUSED */
 static herr_t
 H5FD_sec2_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id,
-    haddr_t addr, size_t size, void *buf/*out*/)
+    haddr_t addr, size_t size, void *buf /*out*/)
 {
-    H5FD_sec2_t		*file = (H5FD_sec2_t *)_file;
-    ssize_t		nbytes;
-    herr_t              ret_value = SUCCEED;       /* Return value */
+    H5FD_sec2_t     *file       = (H5FD_sec2_t *)_file;
+    herr_t          ret_value   = SUCCEED;                  /* Return value */
 
     FUNC_ENTER_NOAPI_NOINIT(H5FD_sec2_read)
 
@@ -695,7 +716,8 @@ H5FD_sec2_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id,
     if(REGION_OVERFLOW(addr, size))
         HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow, addr = %llu", (unsigned long long)addr)
     if((addr + size) > file->eoa)
-        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow, addr = %llu", (unsigned long long)addr)
+        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow, addr = %llu, size=%lu, eoa=%llu", 
+                    (unsigned long long)addr, size, (unsigned long long)file->eoa)
 
     /* Seek to the correct location */
     if(addr != file->pos || OP_READ != file->op) {
@@ -703,33 +725,46 @@ H5FD_sec2_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id,
             HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
     } /* end if */
 
-    /*
-     * Read data, being careful of interrupted system calls, partial results,
+    /* Read data, being careful of interrupted system calls, partial results,
      * and the end of the file.
      */
     while(size > 0) {
+
+        h5_sec2_io_t        bytes_in        = 0;    /* # of bytes to read       */
+        h5_sec2_io_ret_t    bytes_read      = -1;   /* # of bytes actually read */ 
+
+        /* Trying to read more bytes than the return type can handle is
+         * undefined behavior in POSIX.
+         */
+        if(size > H5_SEC2_MAX_IO_BYTES_g)
+            bytes_in = H5_SEC2_MAX_IO_BYTES_g;
+        else
+            bytes_in = (h5_sec2_io_t)size;
+
         do {
-            nbytes = HDread(file->fd, buf, size);
-        } while(-1 == nbytes && EINTR == errno);
-        if(-1 == nbytes) { /* error */
+            bytes_read = HDread(file->fd, buf, bytes_in);
+        } while(-1 == bytes_read && EINTR == errno);
+        
+        if(-1 == bytes_read) { /* error */
             int myerrno = errno;
             time_t mytime = HDtime(NULL);
             HDoff_t myoffset = HDlseek(file->fd, (HDoff_t)0, SEEK_CUR);
 
             HGOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, error message = '%s', buf = %p, size = %lu, offset = %llu", HDctime(&mytime), file->filename, file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long)size, (unsigned long long)myoffset);
         } /* end if */
-        if(0 == nbytes) {
+        
+        if(0 == bytes_read) {
             /* end of file but not end of format address space */
             HDmemset(buf, 0, size);
             break;
         } /* end if */
-        HDassert(nbytes >= 0);
-        HDassert((size_t)nbytes <= size);
-        H5_CHECK_OVERFLOW(nbytes, ssize_t, size_t);
-        size -= (size_t)nbytes;
-        H5_CHECK_OVERFLOW(nbytes, ssize_t, haddr_t);
-        addr += (haddr_t)nbytes;
-        buf = (char *)buf + nbytes;
+        
+        HDassert(bytes_read >= 0);
+        HDassert((size_t)bytes_read <= size);
+        
+        size -= (size_t)bytes_read;
+        addr += (haddr_t)bytes_read;
+        buf = (char *)buf + bytes_read;
     } /* end while */
 
     /* Update current position */
@@ -764,12 +799,11 @@ done:
  */
 /* ARGSUSED */
 static herr_t
-H5FD_sec2_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr,
-		size_t size, const void *buf)
+H5FD_sec2_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id,
+                haddr_t addr, size_t size, const void *buf)
 {
-    H5FD_sec2_t		*file = (H5FD_sec2_t *)_file;
-    ssize_t		nbytes;
-    herr_t              ret_value = SUCCEED;       /* Return value */
+    H5FD_sec2_t     *file       = (H5FD_sec2_t *)_file;
+    herr_t          ret_value   = SUCCEED;                  /* Return value */
 
     FUNC_ENTER_NOAPI_NOINIT(H5FD_sec2_write)
 
@@ -790,28 +824,40 @@ H5FD_sec2_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, had
             HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
     } /* end if */
 
-    /*
-     * Write the data, being careful of interrupted system calls and partial
+    /* Write the data, being careful of interrupted system calls and partial
      * results
      */
     while(size > 0) {
+
+        h5_sec2_io_t        bytes_in        = 0;    /* # of bytes to write  */
+        h5_sec2_io_ret_t    bytes_wrote     = -1;   /* # of bytes written   */ 
+
+        /* Trying to write more bytes than the return type can handle is
+         * undefined behavior in POSIX.
+         */
+        if(size > H5_SEC2_MAX_IO_BYTES_g)
+            bytes_in = H5_SEC2_MAX_IO_BYTES_g;
+        else
+            bytes_in = (h5_sec2_io_t)size;
+
         do {
-            nbytes = HDwrite(file->fd, buf, size);
-        } while(-1 == nbytes && EINTR == errno);
-        if(-1 == nbytes) { /* error */
+            bytes_wrote = HDwrite(file->fd, buf, bytes_in);
+        } while(-1 == bytes_wrote && EINTR == errno);
+        
+        if(-1 == bytes_wrote) { /* error */
             int myerrno = errno;
             time_t mytime = HDtime(NULL);
             HDoff_t myoffset = HDlseek(file->fd, (HDoff_t)0, SEEK_CUR);
 
             HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed: time = %s, filename = '%s', file descriptor = %d, errno = %d, error message = '%s', buf = %p, size = %lu, offset = %llu", HDctime(&mytime), file->filename, file->fd, myerrno, HDstrerror(myerrno), buf, (unsigned long)size, (unsigned long long)myoffset);
         } /* end if */
-        HDassert(nbytes > 0);
-        HDassert((size_t)nbytes <= size);
-        H5_CHECK_OVERFLOW(nbytes, ssize_t, size_t);
-        size -= (size_t)nbytes;
-        H5_CHECK_OVERFLOW(nbytes, ssize_t, haddr_t);
-        addr += (haddr_t)nbytes;
-        buf = (const char *)buf + nbytes;
+        
+        HDassert(bytes_wrote > 0);
+        HDassert((size_t)bytes_wrote <= size);
+
+        size -= (size_t)bytes_wrote;
+        addr += (haddr_t)bytes_wrote;
+        buf = (const char *)buf + bytes_wrote;
     } /* end while */
 
     /* Update current position and eof */
@@ -858,30 +904,42 @@ H5FD_sec2_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing)
 
     /* Extend the file to make sure it's large enough */
     if(!H5F_addr_eq(file->eoa, file->eof)) {
-#ifdef _WIN32
-        HFILE filehandle;   /* Windows file handle */
-        LARGE_INTEGER li;   /* 64-bit integer for SetFilePointer() call */
-
-        /* Map the posix file handle to a Windows file handle */
-        filehandle = _get_osfhandle(file->fd);
-
-        /* Translate 64-bit integers into form Windows wants */
-        /* [This algorithm is from the Windows documentation for SetFilePointer()] */
-        li.QuadPart = (LONGLONG)file->eoa;
-        (void)SetFilePointer((HANDLE)filehandle, li.LowPart, &li.HighPart, FILE_BEGIN);
-        if(SetEndOfFile((HANDLE)filehandle) == 0)
+#ifdef H5_HAVE_WIN32_API
+        LARGE_INTEGER   li;         /* 64-bit (union) integer for SetFilePointer() call */
+        DWORD           dwPtrLow;   /* Low-order pointer bits from SetFilePointer()
+                                     * Only used as an error code here.
+                                     */
+        DWORD           dwError;    /* DWORD error code from GetLastError() */
+        BOOL            bError;     /* Boolean error flag */
+
+        /* Windows uses this odd QuadPart union for 32/64-bit portability */
+        li.QuadPart = (__int64)file->eoa;
+
+        /* Extend the file to make sure it's large enough.
+         *
+         * Since INVALID_SET_FILE_POINTER can technically be a valid return value
+         * from SetFilePointer(), we also need to check GetLastError().
+         */
+        dwPtrLow = SetFilePointer(file->hFile, li.LowPart, &li.HighPart, FILE_BEGIN);
+        if(INVALID_SET_FILE_POINTER == dwPtrLow) {
+            dwError = GetLastError();
+            if(dwError != NO_ERROR )
+                HGOTO_ERROR(H5E_FILE, H5E_FILEOPEN, FAIL, "unable to set file pointer")
+        }
+
+        bError = SetEndOfFile(file->hFile);
+        if(0 == bError)
             HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to extend file properly")
-#else /* _WIN32 */
+#else /* H5_HAVE_WIN32_API */
 #ifdef H5_VMS
         /* Reset seek offset to the beginning of the file, so that the file isn't
          * re-extended later.  This may happen on Open VMS. */
         if(-1 == HDlseek(file->fd, (HDoff_t)0, SEEK_SET))
             HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
 #endif
-
         if(-1 == HDftruncate(file->fd, (HDoff_t)file->eoa))
             HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to extend file properly")
-#endif /* _WIN32 */
+#endif /* H5_HAVE_WIN32_API */
 
         /* Update the eof value */
         file->eof = file->eoa;
diff --git a/src/H5FDstdio.c b/src/H5FDstdio.c
index 9bc4161..8e970c6 100644
--- a/src/H5FDstdio.c
+++ b/src/H5FDstdio.c
@@ -14,12 +14,12 @@
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
 /*
- * Programmer:	Robb Matzke <matzke at llnl.gov>
- *	      	Wednesday, October 22, 1997
+ * Programmer:  Robb Matzke <matzke at llnl.gov>
+ *          Wednesday, October 22, 1997
  *
- * Purpose:   	This is the Posix stdio.h I/O subclass of H5Flow.
- *		It also serves as an example of coding a simple file driver,
- *		therefore, it should not use any non-public definitions.
+ * Purpose:     This is the Posix stdio.h I/O subclass of H5Flow.
+ *    It also serves as an example of coding a simple file driver,
+ *    therefore, it should not use any non-public definitions.
  *
  * Notes:  Ported to the new H5FD architecture on 10/18/99 - QAK
  *
@@ -43,7 +43,7 @@
 #include <unistd.h>
 #endif
 
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
 #include <windows.h>
 #include <io.h>
 
@@ -58,7 +58,7 @@
 #ifdef MAX
 #undef MAX
 #endif /* MAX */
-#define MAX(X,Y)	((X)>(Y)?(X):(Y))
+#define MAX(X,Y)  ((X)>(Y)?(X):(Y))
 
 /* The driver identification number, initialized at runtime */
 static hid_t H5FD_STDIO_g = 0;
@@ -84,23 +84,23 @@ typedef enum {
  * occurs), and `op' will be set to H5F_OP_UNKNOWN.
  */
 typedef struct H5FD_stdio_t {
-    H5FD_t	pub;			/*public stuff, must be first	*/
-    FILE *	fp;			    /*the file handle */
-    haddr_t	eoa;			/*end of allocated region	*/
-    haddr_t	eof;			/*end of file; current file size*/
-    haddr_t	pos;			/*current file I/O position	*/
-    H5FD_stdio_file_op op;	/*last operation		*/
+    H5FD_t  pub;      /*public stuff, must be first  */
+    FILE *  fp;          /*the file handle */
+    haddr_t  eoa;      /*end of allocated region  */
+    haddr_t  eof;      /*end of file; current file size*/
+    haddr_t  pos;      /*current file I/O position  */
+    H5FD_stdio_file_op op;  /*last operation    */
     unsigned write_access;  /* Flag to indicate the file was opened with write access */
-#ifndef _WIN32
+#ifndef H5_HAVE_WIN32_API
     /*
      * On most systems the combination of device and i-node number uniquely
      * identify a file.
      */
-    dev_t	device;			/*file device number		*/
-    ino_t	inode;			/*file i-node number		*/
+    dev_t  device;      /*file device number    */
+    ino_t  inode;      /*file i-node number    */
 #else
     /*
-     * On _WIN32 the low-order word of a unique identifier associated with the
+     * On H5_HAVE_WIN32_API the low-order word of a unique identifier associated with the
      * file and the volume serial number uniquely identify a file. This number
      * (which, both? -rpm) may change when the system is restarted or when the
      * file is opened. After a process opens a file, the identifier is
@@ -114,18 +114,11 @@ typedef struct H5FD_stdio_t {
 } H5FD_stdio_t;
 
 /* Use similar structure as in H5private.h by defining Windows stuff first. */
-#ifdef _WIN32
-    #if _MSC_VER > 1310 /* Newer than VS.NET 2003 */
-    #   define file_fseek	_fseeki64
-    #   define file_offset_t	__int64
-    #   define file_ftruncate	_chsize_s   /* Supported in VS 2005 or newer */
-    #   define file_ftell	_ftelli64
-    #else
-    #   define file_fseek	fseek
-    #   define file_offset_t	long
-    #   define file_ftruncate	_chsize
-    #   define file_ftell	ftell
-    #endif
+#ifdef H5_HAVE_WIN32_API
+    #   define file_fseek  _fseeki64
+    #   define file_offset_t  __int64
+    #   define file_ftruncate  _chsize_s   /* Supported in VS 2005 or newer */
+    #   define file_ftell  _ftelli64
 #endif
 
 /* Use file_xxx to indicate these are local macros, avoiding confusing 
@@ -135,15 +128,15 @@ typedef struct H5FD_stdio_t {
  */
 #ifndef file_fseek
     #ifdef H5_HAVE_FSEEKO64
-    #   define file_fseek	fseeko64
-    #   define file_offset_t	off64_t
-    #   define file_ftruncate	ftruncate64
-    #   define file_ftell	ftello64
+    #   define file_fseek  fseeko64
+    #   define file_offset_t  off64_t
+    #   define file_ftruncate  ftruncate64
+    #   define file_ftell  ftello64
     #else
-    #   define file_fseek	fseeko
-    #   define file_offset_t	off_t
-    #   define file_ftruncate	ftruncate
-    #   define file_ftell	ftello
+    #   define file_fseek  fseeko
+    #   define file_offset_t  off_t
+    #   define file_ftruncate  ftruncate
+    #   define file_ftell  ftello
     #endif
 #endif
 
@@ -151,22 +144,22 @@ typedef struct H5FD_stdio_t {
  * These macros check for overflow of various quantities.  These macros
  * assume that file_offset_t is signed and haddr_t and size_t are unsigned.
  *
- * ADDR_OVERFLOW:	Checks whether a file address of type `haddr_t'
- *			is too large to be represented by the second argument
- *			of the file seek function.
+ * ADDR_OVERFLOW:  Checks whether a file address of type `haddr_t'
+ *      is too large to be represented by the second argument
+ *      of the file seek function.
  *
- * SIZE_OVERFLOW:	Checks whether a buffer size of type `hsize_t' is too
- *			large to be represented by the `size_t' type.
+ * SIZE_OVERFLOW:  Checks whether a buffer size of type `hsize_t' is too
+ *      large to be represented by the `size_t' type.
  *
- * REGION_OVERFLOW:	Checks whether an address and size pair describe data
- *			which can be addressed entirely by the second
- *			argument of the file seek function.
+ * REGION_OVERFLOW:  Checks whether an address and size pair describe data
+ *      which can be addressed entirely by the second
+ *      argument of the file seek function.
  */
 /* adding for windows NT filesystem support. */
 #define MAXADDR (((haddr_t)1<<(8*sizeof(file_offset_t)-1))-1)
-#define ADDR_OVERFLOW(A)	(HADDR_UNDEF==(A) || ((A) & ~(haddr_t)MAXADDR))
-#define SIZE_OVERFLOW(Z)	((Z) & ~(hsize_t)MAXADDR)
-#define REGION_OVERFLOW(A,Z)	(ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) || \
+#define ADDR_OVERFLOW(A)  (HADDR_UNDEF==(A) || ((A) & ~(haddr_t)MAXADDR))
+#define SIZE_OVERFLOW(Z)  ((Z) & ~(hsize_t)MAXADDR)
+#define REGION_OVERFLOW(A,Z)  (ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) || \
     HADDR_UNDEF==(A)+(Z) || (file_offset_t)((A)+(Z))<(file_offset_t)(A))
 
 /* Prototypes */
@@ -188,51 +181,51 @@ static herr_t H5FD_stdio_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
 static herr_t H5FD_stdio_truncate(H5FD_t *_file, hid_t dxpl_id, hbool_t closing);
 
 static const H5FD_class_t H5FD_stdio_g = {
-    "stdio",				        /*name			*/
-    MAXADDR,				        /*maxaddr		*/
-    H5F_CLOSE_WEAK,				/* fc_degree		*/
-    NULL,					/*sb_size		*/
-    NULL,					/*sb_encode		*/
-    NULL,					/*sb_decode		*/
-    0, 						/*fapl_size		*/
-    NULL,					/*fapl_get		*/
-    NULL,					/*fapl_copy		*/
-    NULL, 					/*fapl_free		*/
-    0,						/*dxpl_size		*/
-    NULL,					/*dxpl_copy		*/
-    NULL,					/*dxpl_free		*/
-    H5FD_stdio_open,		                /*open			*/
-    H5FD_stdio_close,		                /*close			*/
-    H5FD_stdio_cmp,			        /*cmp			*/
-    H5FD_stdio_query,		                /*query			*/
-    NULL,					/*get_type_map		*/
-    H5FD_stdio_alloc,				/*alloc			*/
-    NULL,					/*free			*/
-    H5FD_stdio_get_eoa,		                /*get_eoa		*/
-    H5FD_stdio_set_eoa, 	                /*set_eoa		*/
-    H5FD_stdio_get_eof,		                /*get_eof		*/
+    "stdio",                /*name      */
+    MAXADDR,                /*maxaddr    */
+    H5F_CLOSE_WEAK,        /* fc_degree    */
+    NULL,          /*sb_size    */
+    NULL,          /*sb_encode    */
+    NULL,          /*sb_decode    */
+    0,             /*fapl_size    */
+    NULL,          /*fapl_get    */
+    NULL,          /*fapl_copy    */
+    NULL,           /*fapl_free    */
+    0,            /*dxpl_size    */
+    NULL,          /*dxpl_copy    */
+    NULL,          /*dxpl_free    */
+    H5FD_stdio_open,                    /*open      */
+    H5FD_stdio_close,                    /*close      */
+    H5FD_stdio_cmp,              /*cmp      */
+    H5FD_stdio_query,                    /*query      */
+    NULL,          /*get_type_map    */
+    H5FD_stdio_alloc,        /*alloc      */
+    NULL,          /*free      */
+    H5FD_stdio_get_eoa,                    /*get_eoa    */
+    H5FD_stdio_set_eoa,                   /*set_eoa    */
+    H5FD_stdio_get_eof,                    /*get_eof    */
     H5FD_stdio_get_handle,                      /*get_handle            */
-    H5FD_stdio_read,		                /*read			*/
-    H5FD_stdio_write,		                /*write			*/
-    H5FD_stdio_flush,		                /*flush			*/
-    H5FD_stdio_truncate,			/*truncate		*/
+    H5FD_stdio_read,                    /*read      */
+    H5FD_stdio_write,                    /*write      */
+    H5FD_stdio_flush,                    /*flush      */
+    H5FD_stdio_truncate,      /*truncate    */
     NULL,                                       /*lock                  */
     NULL,                                       /*unlock                */
-    H5FD_FLMAP_SINGLE 		                /*fl_map		*/
+    H5FD_FLMAP_SINGLE                     /*fl_map    */
 };
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_stdio_init
+ * Function:  H5FD_stdio_init
  *
- * Purpose:	Initialize this driver by registering the driver with the
- *		library.
+ * Purpose:  Initialize this driver by registering the driver with the
+ *    library.
  *
- * Return:	Success:	The driver ID for the stdio driver.
+ * Return:  Success:  The driver ID for the stdio driver.
  *
- *		Failure:	Negative.
+ *    Failure:  Negative.
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, July 29, 1999
  *
  * Modifications:
@@ -253,11 +246,11 @@ H5FD_stdio_init(void)
 
 
 /*---------------------------------------------------------------------------
- * Function:	H5FD_stdio_term
+ * Function:  H5FD_stdio_term
  *
- * Purpose:	Shut down the VFD
+ * Purpose:  Shut down the VFD
  *
- * Return:	<none>
+ * Return:  <none>
  *
  * Programmer:  Quincey Koziol
  *              Friday, Jan 30, 2004
@@ -276,16 +269,16 @@ H5FD_stdio_term(void)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5Pset_fapl_stdio
+ * Function:  H5Pset_fapl_stdio
  *
- * Purpose:	Modify the file access property list to use the H5FD_STDIO
- *		driver defined in this source file.  There are no driver
- *		specific properties.
+ * Purpose:  Modify the file access property list to use the H5FD_STDIO
+ *    driver defined in this source file.  There are no driver
+ *    specific properties.
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:  Non-negative on success/Negative on failure
  *
- * Programmer:	Robb Matzke
- *		Thursday, February 19, 1998
+ * Programmer:  Robb Matzke
+ *    Thursday, February 19, 1998
  *
  * Modifications:
  *      Stolen from the sec2 driver - QAK, 10/18/99
@@ -310,27 +303,27 @@ H5Pset_fapl_stdio(hid_t fapl_id)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_stdio_open
+ * Function:  H5FD_stdio_open
  *
- * Purpose:	Create and/or opens a Standard C file as an HDF5 file.
+ * Purpose:  Create and/or opens a Standard C file as an HDF5 file.
  *
- * Bugs:	H5F_ACC_EXCL has a race condition. (? -QAK)
+ * Bugs:  H5F_ACC_EXCL has a race condition. (? -QAK)
  *
  * Errors:
- *		IO	  CANTOPENFILE	File doesn't exist and CREAT wasn't
- *					specified.
- *		IO	  CANTOPENFILE	Fopen failed.
- *		IO	  FILEEXISTS	File exists but CREAT and EXCL were
- *					specified.
+ *    IO    CANTOPENFILE  File doesn't exist and CREAT wasn't
+ *          specified.
+ *    IO    CANTOPENFILE  Fopen failed.
+ *    IO    FILEEXISTS  File exists but CREAT and EXCL were
+ *          specified.
  *
- * Return:	Success:	A pointer to a new file data structure. The
- *				public fields will be initialized by the
- *				caller, which is always H5FD_open().
+ * Return:  Success:  A pointer to a new file data structure. The
+ *        public fields will be initialized by the
+ *        caller, which is always H5FD_open().
  *
- *		Failure:	NULL
+ *    Failure:  NULL
  *
- * Programmer:	Robb Matzke
- *		Wednesday, October 22, 1997
+ * Programmer:  Robb Matzke
+ *    Wednesday, October 22, 1997
  *
  * Modifications:
  *      Ported to VFL/H5FD layer - QAK, 10/18/99
@@ -341,17 +334,17 @@ static H5FD_t *
 H5FD_stdio_open( const char *name, unsigned flags, hid_t fapl_id,
     haddr_t maxaddr)
 {
-    FILE		   *f = NULL;
+    FILE       *f = NULL;
     unsigned    write_access=0;     /* File opened with write access? */
-    H5FD_stdio_t	*file=NULL;
+    H5FD_stdio_t  *file=NULL;
     static const char *func="H5FD_stdio_open";  /* Function Name for error reporting */
-#ifdef _WIN32
-	HFILE filehandle;
-	struct _BY_HANDLE_FILE_INFORMATION fileinfo;
+#ifdef H5_HAVE_WIN32_API
+  HFILE filehandle;
+  struct _BY_HANDLE_FILE_INFORMATION fileinfo;
         int fd;
-#else /* _WIN32 */
-    struct stat		    sb;
-#endif  /* _WIN32 */
+#else /* H5_HAVE_WIN32_API */
+    struct stat        sb;
+#endif  /* H5_HAVE_WIN32_API */
 
     /* Sanity check on file offsets */
     assert(sizeof(file_offset_t)>=sizeof(size_t));
@@ -409,7 +402,7 @@ H5FD_stdio_open( const char *name, unsigned flags, hid_t fapl_id,
     }
 
     /* The unique key */
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
 /*#error "Needs correct fileindexhi & fileindexlo, code below is from sec2 driver"*/
     fd = _fileno(f);
     filehandle = _get_osfhandle(fd);
@@ -426,17 +419,17 @@ H5FD_stdio_open( const char *name, unsigned flags, hid_t fapl_id,
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5F_stdio_close
+ * Function:  H5F_stdio_close
  *
- * Purpose:	Closes a file.
+ * Purpose:  Closes a file.
  *
  * Errors:
- *		IO	  CLOSEERROR	Fclose failed.
+ *    IO    CLOSEERROR  Fclose failed.
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:  Non-negative on success/Negative on failure
  *
- * Programmer:	Robb Matzke
- *		Wednesday, October 22, 1997
+ * Programmer:  Robb Matzke
+ *    Wednesday, October 22, 1997
  *
  * Modifications:
  *      Ported to VFL/H5FD layer - QAK, 10/18/99
@@ -446,7 +439,7 @@ H5FD_stdio_open( const char *name, unsigned flags, hid_t fapl_id,
 static herr_t
 H5FD_stdio_close(H5FD_t *_file)
 {
-    H5FD_stdio_t	*file = (H5FD_stdio_t*)_file;
+    H5FD_stdio_t  *file = (H5FD_stdio_t*)_file;
     static const char *func="H5FD_stdio_close";  /* Function Name for error reporting */
 
     /* Clear the error stack */
@@ -462,17 +455,17 @@ H5FD_stdio_close(H5FD_t *_file)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_stdio_cmp
+ * Function:  H5FD_stdio_cmp
  *
- * Purpose:	Compares two files belonging to this driver using an
- *		arbitrary (but consistent) ordering.
+ * Purpose:  Compares two files belonging to this driver using an
+ *    arbitrary (but consistent) ordering.
  *
- * Return:	Success:	A value like strcmp()
+ * Return:  Success:  A value like strcmp()
  *
- *		Failure:	never fails (arguments were checked by the
- *				caller).
+ *    Failure:  never fails (arguments were checked by the
+ *        caller).
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, July 29, 1999
  *
  * Modifications:
@@ -483,13 +476,13 @@ H5FD_stdio_close(H5FD_t *_file)
 static int
 H5FD_stdio_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
 {
-    const H5FD_stdio_t	*f1 = (const H5FD_stdio_t*)_f1;
-    const H5FD_stdio_t	*f2 = (const H5FD_stdio_t*)_f2;
+    const H5FD_stdio_t  *f1 = (const H5FD_stdio_t*)_f1;
+    const H5FD_stdio_t  *f2 = (const H5FD_stdio_t*)_f2;
 
     /* Clear the error stack */
     H5Eclear2(H5E_DEFAULT);
 
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
     if (f1->fileindexhi < f2->fileindexhi) return -1;
     if (f1->fileindexhi > f2->fileindexhi) return 1;
 
@@ -517,16 +510,16 @@ H5FD_stdio_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_stdio_query
+ * Function:  H5FD_stdio_query
  *
- * Purpose:	Set the flags that this VFL driver is capable of supporting.
+ * Purpose:  Set the flags that this VFL driver is capable of supporting.
  *              (listed in H5FDpublic.h)
  *
- * Return:	Success:	non-negative
+ * Return:  Success:  non-negative
  *
- *		Failure:	negative
+ *    Failure:  negative
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Friday, August 25, 2000
  *
  * Modifications:
@@ -553,18 +546,18 @@ H5FD_stdio_query(const H5FD_t *_f, unsigned long *flags /* out */)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_stdio_alloc
+ * Function:  H5FD_stdio_alloc
  *
- * Purpose:	Allocates file memory. If fseeko isn't available, makes
+ * Purpose:  Allocates file memory. If fseeko isn't available, makes
  *              sure the file size isn't bigger than 2GB because the
  *              parameter OFFSET of fseek is of the type LONG INT, limiting
  *              the file size to 2GB.
  *
- * Return:	Success:	Address of new memory
+ * Return:  Success:  Address of new memory
  *
- *		Failure:	HADDR_UNDEF
+ *    Failure:  HADDR_UNDEF
  *
- * Programmer:	Raymond Lu
+ * Programmer:  Raymond Lu
  *              30 March 2007
  *
  * Modifications:
@@ -574,8 +567,8 @@ H5FD_stdio_query(const H5FD_t *_f, unsigned long *flags /* out */)
 static haddr_t
 H5FD_stdio_alloc(H5FD_t *_file, H5FD_mem_t /*UNUSED*/ type, hid_t /*UNUSED*/ dxpl_id, hsize_t size)
 {
-    H5FD_stdio_t	*file = (H5FD_stdio_t*)_file;
-    haddr_t		addr;
+    H5FD_stdio_t  *file = (H5FD_stdio_t*)_file;
+    haddr_t    addr;
     haddr_t ret_value;          /* Return value */
 
     /* Shut compiler up */
@@ -605,17 +598,17 @@ H5FD_stdio_alloc(H5FD_t *_file, H5FD_mem_t /*UNUSED*/ type, hid_t /*UNUSED*/ dxp
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_stdio_get_eoa
+ * Function:  H5FD_stdio_get_eoa
  *
- * Purpose:	Gets the end-of-address marker for the file. The EOA marker
- *		is the first address past the last byte allocated in the
- *		format address space.
+ * Purpose:  Gets the end-of-address marker for the file. The EOA marker
+ *    is the first address past the last byte allocated in the
+ *    format address space.
  *
- * Return:	Success:	The end-of-address marker.
+ * Return:  Success:  The end-of-address marker.
  *
- *		Failure:	HADDR_UNDEF
+ *    Failure:  HADDR_UNDEF
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Monday, August  2, 1999
  *
  * Modifications:
@@ -630,7 +623,7 @@ H5FD_stdio_alloc(H5FD_t *_file, H5FD_mem_t /*UNUSED*/ type, hid_t /*UNUSED*/ dxp
 static haddr_t
 H5FD_stdio_get_eoa(const H5FD_t *_file, H5FD_mem_t /*unused*/ type)
 {
-    const H5FD_stdio_t	*file = (const H5FD_stdio_t *)_file;
+    const H5FD_stdio_t  *file = (const H5FD_stdio_t *)_file;
 
     /* Clear the error stack */
     H5Eclear2(H5E_DEFAULT);
@@ -643,17 +636,17 @@ H5FD_stdio_get_eoa(const H5FD_t *_file, H5FD_mem_t /*unused*/ type)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_stdio_set_eoa
+ * Function:  H5FD_stdio_set_eoa
  *
- * Purpose:	Set the end-of-address marker for the file. This function is
- *		called shortly after an existing HDF5 file is opened in order
- *		to tell the driver where the end of the HDF5 data is located.
+ * Purpose:  Set the end-of-address marker for the file. This function is
+ *    called shortly after an existing HDF5 file is opened in order
+ *    to tell the driver where the end of the HDF5 data is located.
  *
- * Return:	Success:	0
+ * Return:  Success:  0
  *
- *		Failure:	-1
+ *    Failure:  -1
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, July 29, 1999
  *
  * Modifications:
@@ -667,7 +660,7 @@ H5FD_stdio_get_eoa(const H5FD_t *_file, H5FD_mem_t /*unused*/ type)
 static herr_t
 H5FD_stdio_set_eoa(H5FD_t *_file, H5FD_mem_t /*unused*/ type, haddr_t addr)
 {
-    H5FD_stdio_t	*file = (H5FD_stdio_t*)_file;
+    H5FD_stdio_t  *file = (H5FD_stdio_t*)_file;
 
     /* Clear the error stack */
     H5Eclear2(H5E_DEFAULT);
@@ -682,19 +675,19 @@ H5FD_stdio_set_eoa(H5FD_t *_file, H5FD_mem_t /*unused*/ type, haddr_t addr)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5FD_stdio_get_eof
+ * Function:  H5FD_stdio_get_eof
  *
- * Purpose:	Returns the end-of-file marker, which is the greater of
- *		either the Unix end-of-file or the HDF5 end-of-address
- *		markers.
+ * Purpose:  Returns the end-of-file marker, which is the greater of
+ *    either the Unix end-of-file or the HDF5 end-of-address
+ *    markers.
  *
- * Return:	Success:	End of file address, the first address past
- *				the end of the "file", either the Unix file
- *				or the HDF5 file.
+ * Return:  Success:  End of file address, the first address past
+ *        the end of the "file", either the Unix file
+ *        or the HDF5 file.
  *
- *		Failure:	HADDR_UNDEF
+ *    Failure:  HADDR_UNDEF
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, July 29, 1999
  *
  * Modifications:
@@ -705,7 +698,7 @@ H5FD_stdio_set_eoa(H5FD_t *_file, H5FD_mem_t /*unused*/ type, haddr_t addr)
 static haddr_t
 H5FD_stdio_get_eof(const H5FD_t *_file)
 {
-    const H5FD_stdio_t	*file = (const H5FD_stdio_t *)_file;
+    const H5FD_stdio_t  *file = (const H5FD_stdio_t *)_file;
 
     /* Clear the error stack */
     H5Eclear2(H5E_DEFAULT);
@@ -748,24 +741,24 @@ H5FD_stdio_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5F_stdio_read
+ * Function:  H5F_stdio_read
  *
- * Purpose:	Reads SIZE bytes beginning at address ADDR in file LF and
- *		places them in buffer BUF.  Reading past the logical or
- *		physical end of file returns zeros instead of failing.
+ * Purpose:  Reads SIZE bytes beginning at address ADDR in file LF and
+ *    places them in buffer BUF.  Reading past the logical or
+ *    physical end of file returns zeros instead of failing.
  *
  * Errors:
- *		IO	  READERROR	Fread failed.
- *		IO	  SEEKERROR	Fseek failed.
+ *    IO    READERROR  Fread failed.
+ *    IO    SEEKERROR  Fseek failed.
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:  Non-negative on success/Negative on failure
  *
- * Programmer:	Robb Matzke
- *		Wednesday, October 22, 1997
+ * Programmer:  Robb Matzke
+ *    Wednesday, October 22, 1997
  *
  * Modifications:
- *		June 2, 1998	Albert Cheng
- *		Added xfer_mode argument
+ *    June 2, 1998  Albert Cheng
+ *    Added xfer_mode argument
  *
  *      Ported to VFL/H5FD layer - QAK, 10/18/99
  *
@@ -775,8 +768,8 @@ static herr_t
 H5FD_stdio_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, size_t size,
     void *buf/*out*/)
 {
-    size_t		n;
-    H5FD_stdio_t		*file = (H5FD_stdio_t*)_file;
+    size_t    n;
+    H5FD_stdio_t    *file = (H5FD_stdio_t*)_file;
     static const char *func="H5FD_stdio_read";  /* Function Name for error reporting */
 
     /* Shut compiler up */
@@ -848,23 +841,23 @@ H5FD_stdio_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, siz
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5F_stdio_write
+ * Function:  H5F_stdio_write
  *
- * Purpose:	Writes SIZE bytes from the beginning of BUF into file LF at
- *		file address ADDR.
+ * Purpose:  Writes SIZE bytes from the beginning of BUF into file LF at
+ *    file address ADDR.
  *
  * Errors:
- *		IO	  SEEKERROR	Fseek failed.
- *		IO	  WRITEERROR	Fwrite failed.
+ *    IO    SEEKERROR  Fseek failed.
+ *    IO    WRITEERROR  Fwrite failed.
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:  Non-negative on success/Negative on failure
  *
- * Programmer:	Robb Matzke
- *		Wednesday, October 22, 1997
+ * Programmer:  Robb Matzke
+ *    Wednesday, October 22, 1997
  *
  * Modifications:
- *		June 2, 1998	Albert Cheng
- *		Added xfer_mode argument
+ *    June 2, 1998  Albert Cheng
+ *    Added xfer_mode argument
  *
  *      Ported to VFL/H5FD layer - QAK, 10/18/99
  *
@@ -872,9 +865,9 @@ H5FD_stdio_read(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr, siz
  */
 static herr_t
 H5FD_stdio_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
-		size_t size, const void *buf)
+    size_t size, const void *buf)
 {
-    H5FD_stdio_t		*file = (H5FD_stdio_t*)_file;
+    H5FD_stdio_t    *file = (H5FD_stdio_t*)_file;
     static const char *func="H5FD_stdio_write";  /* Function Name for error reporting */
 
     /* Shut compiler up */
@@ -931,25 +924,25 @@ H5FD_stdio_write(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id, haddr_t addr,
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5F_stdio_flush
+ * Function:  H5F_stdio_flush
  *
- * Purpose:	Makes sure that all data is on disk.
+ * Purpose:  Makes sure that all data is on disk.
  *
  * Errors:
- *		IO	  SEEKERROR     fseek failed.
- *		IO	  WRITEERROR    fflush or fwrite failed.
+ *    IO    SEEKERROR     fseek failed.
+ *    IO    WRITEERROR    fflush or fwrite failed.
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:  Non-negative on success/Negative on failure
  *
- * Programmer:	Robb Matzke
- *		Wednesday, October 22, 1997
+ * Programmer:  Robb Matzke
+ *    Wednesday, October 22, 1997
  *
  *-------------------------------------------------------------------------
  */
 static herr_t
 H5FD_stdio_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing)
 {
-    H5FD_stdio_t	*file = (H5FD_stdio_t*)_file;
+    H5FD_stdio_t  *file = (H5FD_stdio_t*)_file;
     static const char *func = "H5FD_stdio_flush";  /* Function Name for error reporting */
 
     /* Shut compiler up */
@@ -976,29 +969,29 @@ H5FD_stdio_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing)
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5F_stdio_truncate
+ * Function:  H5F_stdio_truncate
  *
- * Purpose:	Makes sure that the true file size is the same (or larger)
- *		than the end-of-address.
+ * Purpose:  Makes sure that the true file size is the same (or larger)
+ *    than the end-of-address.
  *
  * Errors:
- *		IO	  SEEKERROR     fseek failed.
- *		IO	  WRITEERROR    fflush or fwrite failed.
+ *    IO    SEEKERROR     fseek failed.
+ *    IO    WRITEERROR    fflush or fwrite failed.
  *
- * Return:	Non-negative on success/Negative on failure
+ * Return:  Non-negative on success/Negative on failure
  *
- * Programmer:	Quincey Koziol
- *		Thursday, January 31, 2008
+ * Programmer:  Quincey Koziol
+ *    Thursday, January 31, 2008
  *
  * Modifications:
- *	Vailin Choi; June 2010
- *	Fix for window failures manifested from tests in mf.c.
+ *  Vailin Choi; June 2010
+ *  Fix for window failures manifested from tests in mf.c.
  *-------------------------------------------------------------------------
  */
 static herr_t
 H5FD_stdio_truncate(H5FD_t *_file, hid_t dxpl_id, hbool_t closing)
 {
-    H5FD_stdio_t	*file = (H5FD_stdio_t*)_file;
+    H5FD_stdio_t  *file = (H5FD_stdio_t*)_file;
     static const char *func = "H5FD_stdio_truncate";  /* Function Name for error reporting */
 
     /* Shut compiler up */
@@ -1014,11 +1007,11 @@ H5FD_stdio_truncate(H5FD_t *_file, hid_t dxpl_id, hbool_t closing)
         if(file->eoa != file->eof) {
             int fd = fileno(file->fp);     /* File descriptor for HDF5 file */
 
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
             HFILE filehandle;   /* Windows file handle */
             LARGE_INTEGER li;   /* 64-bit integer for SetFilePointer() call */
 
-	    /* Reset seek offset to beginning of file, so that file isn't re-extended later */
+      /* Reset seek offset to beginning of file, so that file isn't re-extended later */
             rewind(file->fp);
 
             /* Map the posix file handle to a Windows file handle */
@@ -1030,14 +1023,14 @@ H5FD_stdio_truncate(H5FD_t *_file, hid_t dxpl_id, hbool_t closing)
             (void)SetFilePointer((HANDLE)filehandle, li.LowPart, &li.HighPart, FILE_BEGIN);
             if(SetEndOfFile((HANDLE)filehandle) == 0)
                 H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_SEEKERROR, "unable to truncate/extend file properly", -1)
-#else /* _WIN32 */
+#else /* H5_HAVE_WIN32_API */
             /* Reset seek offset to beginning of file, so that file isn't re-extended later */
             rewind(file->fp);
 
             /* Truncate file to proper length */
             if(-1 == file_ftruncate(fd, (file_offset_t)file->eoa))
                 H5Epush_ret(func, H5E_ERR_CLS, H5E_IO, H5E_SEEKERROR, "unable to truncate/extend file properly", -1)
-#endif /* _WIN32 */
+#endif /* H5_HAVE_WIN32_API */
 
             /* Update the eof value */
             file->eof = file->eoa;
diff --git a/src/H5FDwindows.c b/src/H5FDwindows.c
index 47c7f2d..28434ec 100644
--- a/src/H5FDwindows.c
+++ b/src/H5FDwindows.c
@@ -13,268 +13,37 @@
  * access to either file, you may request a copy from help at hdfgroup.org.     *
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
-/*
- * Programmer:  Scott Wegner <swegner at hdfgroup.org>
- *				Based on code by Robb Matzke
- *				May 24, 2007
- *
- * Purpose:	We would like to create a driver specifically for Windows
- *			to utilize the Win32 API, and reduce the maintenence demands
- *			for the other file drivers.  Our other motivation is that
- *			the Windows system calls of the existing sec2 driver differ
- *			from those on other platforms, and are not 64-bit compatible.
- *			From the start, this will have the structure very similar
- *			to our sec2 driver, but make system calls more similar to
- *			our stdio driver.
- */
-
-/* Interface initialization */
-#define H5_INTERFACE_INIT_FUNC	H5FD_windows_init_interface
-
-
-#include "H5private.h"		/* Generic Functions		*/
-#include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fprivate.h"		/* File access				*/
-#include "H5FDprivate.h"	/* File drivers				*/
-#include "H5FDwindows.h"	/* Windows file driver		*/
-#include "H5FLprivate.h"	/* Free Lists               */
-#include "H5Iprivate.h"		/* IDs			  			*/
-#include "H5MMprivate.h"	/* Memory management		*/
-#include "H5Pprivate.h"		/* Property lists			*/
+#include "H5private.h"      /* Generic Functions        */
+#include "H5Eprivate.h"     /* Error handling           */
+#include "H5Fprivate.h"     /* File access              */
+#include "H5FDprivate.h"    /* File drivers             */
+#include "H5FDwindows.h"    /* Windows file driver      */
+#include "H5FDsec2.h"       /* Windows file driver      */
+#include "H5FLprivate.h"    /* Free Lists               */
+#include "H5Iprivate.h"     /* IDs                      */
+#include "H5MMprivate.h"    /* Memory management        */
+#include "H5Pprivate.h"     /* Property lists           */
 
 #ifdef H5_HAVE_WINDOWS
 
-/* The driver identification number, initialized at runtime */
-static hid_t H5FD_WINDOWS_g = 0;
-
-/* File operations */
-#define OP_UNKNOWN	0
-#define OP_READ		1
-#define OP_WRITE	2
-
-/*
- * The description of a file belonging to this driver. The `eoa' and `eof'
- * determine the amount of hdf5 address space in use and the high-water mark
- * of the file (the current size of the underlying file). The `pos'
- * value is used to eliminate file position updates when they would be a
- * no-op. Unfortunately we've found systems that use separate file position
- * indicators for reading and writing so the lseek can only be eliminated if
- * the current operation is the same as the previous operation.  When opening
- * a file the `eof' will be set to the current file size, `eoa' will be set
- * to zero, `pos' will be set to H5F_ADDR_UNDEF (as it is when an error
- * occurs), and `op' will be set to H5F_OP_UNKNOWN.
- */
-typedef struct H5FD_windows_t {
-    H5FD_t	pub;			/*public stuff, must be first	*/
-	/*
-	 * .NET doesn't support our 64-bit safe stdio functions,
-	 * so we will use io.h functions instead.
-     */
-#ifndef WINDOWS_USE_STDIO
-	int		fd;				/*the file descriptor			*/
-#else
-    FILE 	*fp;			/*the file handle				*/
-#endif /*MSC_VER */
-    haddr_t	eoa;			/*end of allocated region		*/
-    haddr_t	eof;			/*end of file; current file size*/
-    haddr_t	pos;			/*current file I/O position		*/
-    int		op;				/*last operation				*/
-	unsigned write_access;	/*flag to indicate the file was opened with write access */
-    /*
-     * On _WIN32 the low-order word of a unique identifier associated with the
-     * file and the volume serial number uniquely identify a file. This number
-     * may change when the system is restarted or when the
-     * file is opened. After a process opens a file, the identifier is
-     * constant until the file is closed. An application can use this
-     * identifier and the volume serial number to determine whether two
-     * handles refer to the same file.
-     */
-    DWORD fileindexlo;
-    DWORD fileindexhi;
-    DWORD volumeserialnumber;
-
-    /* Information from properties set by 'h5repart' tool */
-    hbool_t     fam_to_sec2;    /* Whether to eliminate the family driver info
-                                 * and convert this file to a single file */
-} H5FD_windows_t;
-
-
-/* These are used by the macros below */
-#define file_offset_t		__int64
-#define fseek_offset_t		__int64
-
-/*
- * These macros check for overflow of various quantities.  These macros
- * assume that fseek_offset_t is signed and haddr_t and size_t are unsigned.
- *
- * ADDR_OVERFLOW:	Checks whether a file address of type `haddr_t'
- *			is too large to be represented by the second argument
- *			of the file seek function.
- *
- * SIZE_OVERFLOW:	Checks whether a buffer size of type `hsize_t' is too
- *			large to be represented by the `size_t' type.
- *
- * REGION_OVERFLOW:	Checks whether an address and size pair describe data
- *			which can be addressed entirely by the second
- *			argument of the file seek function.
- */
-#define MAXADDR (((haddr_t)1<<(8*sizeof(file_offset_t)-1))-1)
-#define ADDR_OVERFLOW(A)	(HADDR_UNDEF==(A) ||			      \
-				 ((A) & ~(haddr_t)MAXADDR))
-#define SIZE_OVERFLOW(Z)	((Z) & ~(hsize_t)MAXADDR)
-#define REGION_OVERFLOW(A,Z)	(ADDR_OVERFLOW(A) || SIZE_OVERFLOW(Z) ||      \
-                                 HADDR_UNDEF==(A)+(Z) ||		      \
-				 (fseek_offset_t)((A)+(Z))<(fseek_offset_t)(A))
-
-/* Prototypes */
-static H5FD_t *H5FD_windows_open(const char *name, unsigned flags, hid_t fapl_id,
-			      haddr_t maxaddr);
-static herr_t H5FD_windows_close(H5FD_t *_file);
-static int H5FD_windows_cmp(const H5FD_t *_f1, const H5FD_t *_f2);
-static herr_t H5FD_windows_query(const H5FD_t *_f1, unsigned long *flags);
-static haddr_t H5FD_windows_alloc(H5FD_t *_file, H5FD_mem_t type, hid_t dxpl_id,
-			      hsize_t size);
-static haddr_t H5FD_windows_get_eoa(const H5FD_t *_file, H5FD_mem_t type);
-static herr_t H5FD_windows_set_eoa(H5FD_t *_file, H5FD_mem_t type, haddr_t addr);
-static haddr_t H5FD_windows_get_eof(const H5FD_t *_file);
-static herr_t  H5FD_windows_get_handle(H5FD_t *_file, hid_t fapl, void** file_handle);
-static herr_t H5FD_windows_read(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
-			     size_t size, void *buf);
-static herr_t H5FD_windows_write(H5FD_t *_file, H5FD_mem_t type, hid_t fapl_id, haddr_t addr,
-			      size_t size, const void *buf);
-static herr_t H5FD_windows_flush(H5FD_t *_file, hid_t dxpl_id, unsigned closing);
-static herr_t H5FD_windows_truncate(H5FD_t *_file, hid_t dxpl_id, hbool_t closing);
-
-static const H5FD_class_t H5FD_windows_g = {
-    "windows",					/*name			*/
-    MAXADDR,					/*maxaddr		*/
-    H5F_CLOSE_WEAK,				/* fc_degree	*/
-    NULL,					/*sb_size		*/
-    NULL,					/*sb_encode		*/
-    NULL,					/*sb_decode		*/
-    0, 						/*fapl_size		*/
-    NULL,					/*fapl_get		*/
-    NULL,					/*fapl_copy		*/
-    NULL, 					/*fapl_free		*/
-    0,						/*dxpl_size		*/
-    NULL,					/*dxpl_copy		*/
-    NULL,					/*dxpl_free		*/
-    H5FD_windows_open,				/*open			*/
-    H5FD_windows_close,				/*close			*/
-    H5FD_windows_cmp,				/*cmp			*/
-    H5FD_windows_query,				/*query			*/
-    NULL,					/*get_type_map		*/
-    NULL,					/*alloc			*/
-    NULL,					/*free			*/
-    H5FD_windows_get_eoa,			/*get_eoa		*/
-    H5FD_windows_set_eoa,			/*set_eoa		*/
-    H5FD_windows_get_eof,			/*get_eof		*/
-    H5FD_windows_get_handle,			/*get_handle    */
-    H5FD_windows_read,				/*read			*/
-    H5FD_windows_write,				/*write			*/
-    H5FD_windows_flush,				/*flush			*/
-    H5FD_windows_truncate,			/*truncate		*/
-    NULL,					/*lock          */
-    NULL,					/*unlock        */
-    H5FD_FLMAP_SINGLE 				/*fl_map		*/
-};
-
-/* Declare a free list to manage the H5FD_windows_t struct */
-H5FL_DEFINE_STATIC(H5FD_windows_t);
-
-/*--------------------------------------------------------------------------
-NAME
-   H5FD_windows_init_interface -- Initialize interface-specific information
-USAGE
-    herr_t H5FD_windows_init_interface()
-
-RETURNS
-    Non-negative on success/Negative on failure
-DESCRIPTION
-    Initializes any interface-specific data or routines.  (Just calls
-    H5FD_windows_init currently).
-
---------------------------------------------------------------------------*/
-static herr_t
-H5FD_windows_init_interface(void)
-{
-    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_windows_init_interface)
-
-    FUNC_LEAVE_NOAPI(H5FD_windows_init())
-} /* H5FD_windows_init_interface() */
-
+
 /*-------------------------------------------------------------------------
- * Function:	H5FD_windows_init
- *
- * Purpose:	Initialize this driver by registering the driver with the
- *			library.
- *
- * Return:	Success:	The driver ID for the windows driver.
- *			Failure:	Negative.
+ * Function:    H5Pset_fapl_windows
  *
- * Programmer:	Scott Wegner
- *				Based on code by Robb Matzke
- *              Thursday, May 24, 2007
+ * Purpose: Modify the file access property list to use the H5FD_WINDOWS
+ *          driver defined in this source file.  There are no driver
+ *          specific properties.
  *
- *-------------------------------------------------------------------------
- */
-hid_t
-H5FD_windows_init(void)
-{
-    hid_t ret_value;        /* Return value */
-
-    FUNC_ENTER_NOAPI(H5FD_windows_init, FAIL)
-
-    if(H5I_VFL != H5I_get_type(H5FD_WINDOWS_g))
-        H5FD_WINDOWS_g = H5FD_register(&H5FD_windows_g, sizeof(H5FD_class_t), FALSE);
-
-    /* Set return value */
-    ret_value = H5FD_WINDOWS_g;
-
-done:
-    FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5FD_windows_init() */
-
-/*---------------------------------------------------------------------------
- * Function:	H5FD_windows_term
+ * NOTE: The Windows VFD was merely a merge of the SEC2 and STDIO drivers
+ *       so it has been retired.  Selecting the Windows VFD will actually
+ *       set the SEC2 VFD (though for backwards compatibility, we'll keep
+ *       the H5FD_WINDOWS symbol).
  *
- * Purpose:	Shut down the VFD
  *
- * Return:	<none>
+ * Return:  Non-negative on success/Negative on failure
  *
- * Programmer:  Scott Wegner
- *				Based on code by Quincey Koziol
- *              Thursday, May 24 2007
- *
- * Modification:
- *
- *---------------------------------------------------------------------------
- */
-void
-H5FD_windows_term(void)
-{
-    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_windows_term)
-
-    /* Reset VFL ID */
-    H5FD_WINDOWS_g=0;
-
-    FUNC_LEAVE_NOAPI_VOID
-} /* end H5FD_windows_term() */
-
-/*-------------------------------------------------------------------------
- * Function:	H5Pset_fapl_windows
- *
- * Purpose:	Modify the file access property list to use the H5FD_WINDOWS
- *		driver defined in this source file.  There are no driver
- *		specific properties.
- *
- * Return:	Non-negative on success/Negative on failure
- *
- * Programmer:	Scott Wegner
- *				Based on code by Robb Matzke
- *				Thursday, May 24 2007
- *
- * Modifications:
+ * Programmer:  Dana Robinson
+ *              October 10, 2011
  *
  *-------------------------------------------------------------------------
  */
@@ -287,797 +56,14 @@ H5Pset_fapl_windows(hid_t fapl_id)
     FUNC_ENTER_API(H5Pset_fapl_windows, FAIL)
     H5TRACE1("e", "i", fapl_id);
 
-    if(NULL == (plist = H5P_object_verify(fapl_id,H5P_FILE_ACCESS)))
+    if(NULL == (plist = H5P_object_verify(fapl_id, H5P_FILE_ACCESS)))
         HGOTO_ERROR(H5E_ARGS, H5E_BADTYPE, FAIL, "not a file access property list")
 
-    ret_value= H5P_set_driver(plist, H5FD_WINDOWS, NULL);
+    ret_value = H5P_set_driver(plist, H5FD_WINDOWS, NULL);
 
 done:
     FUNC_LEAVE_API(ret_value)
-}
-
-/*-------------------------------------------------------------------------
- * Function:	H5FD_windows_open
- *
- * Purpose:	Create and/or opens a Windows file as an HDF5 file.
- *
- * Return:	Success:	A pointer to a new file data structure. The
- *						public fields will be initialized by the
- *						caller, which is always H5FD_open().
- *
- *		Failure:	NULL
- *
- * Programmer:	Scott Wegner
- *				Based on code by Robb Matzke
- *              Thursday, May 24 2007
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-/* ARGSUSED */
-static H5FD_t *
-H5FD_windows_open(const char *name, unsigned flags, hid_t UNUSED fapl_id,
-				  haddr_t maxaddr)
-{
-    int             fd = -1;
-    FILE			*f = NULL;
-    H5FD_windows_t	*file = NULL;
-    HANDLE			filehandle;
-    struct _BY_HANDLE_FILE_INFORMATION fileinfo;
-    H5FD_t			*ret_value;
-    struct _stati64 sb;
-#ifndef WINDOWS_USE_STDIO
-    int o_flags;
-#else
-	unsigned		write_access = 0;
-#endif /* WINDOWS_USE_STDIO */
-
-    FUNC_ENTER_NOAPI(H5FD_windows_open, NULL)
-
-    /* Sanity check on file offsets */
-    assert(sizeof(file_offset_t)>=sizeof(size_t));
-
-    /* Check arguments */
-    if (!name || !*name)
-        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, NULL, "invalid file name")
-    if (0==maxaddr || HADDR_UNDEF==maxaddr)
-        HGOTO_ERROR(H5E_ARGS, H5E_BADRANGE, NULL, "bogus maxaddr")
-    if (ADDR_OVERFLOW(maxaddr))
-        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, NULL, "bogus maxaddr")
-
-#ifndef WINDOWS_USE_STDIO
-    /* Build the open flags */
-    o_flags = (H5F_ACC_RDWR & flags) ? O_RDWR : O_RDONLY;
-    if (H5F_ACC_TRUNC & flags) o_flags |= O_TRUNC;
-    if (H5F_ACC_CREAT & flags) o_flags |= O_CREAT;
-    if (H5F_ACC_EXCL & flags) o_flags |= O_EXCL;
-	/* Windows needs O_BINARY to correctly handle eol characters */
-	o_flags |= O_BINARY;
-
-    /* Open the file */
-    if ((fd=_open(name, o_flags, 0666))<0)
-        HSYS_GOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to open file")
-    if (_fstati64(fd, &sb) == -1)
-        HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, NULL, "unable to fstat file")
-
-#else /* WINDOWS_USE_STDIO */
-	/* Translate our flags into a mode, and open the file */
-    if (_access_s(name, F_OK)) {
-        if ((flags & H5F_ACC_CREAT) && (flags & H5F_ACC_RDWR)) {
-            f = fopen(name, "wb+");
-            write_access=1;     /* Note the write access */
-        }
-        else
-			HSYS_GOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "file doesn't exist and CREAT wasn't specified")
-    } else if ((flags & H5F_ACC_CREAT) && (flags & H5F_ACC_EXCL)) {
-		HSYS_GOTO_ERROR(H5E_FILE, H5E_FILEEXISTS, NULL, "file exists but CREAT and EXCL were specified")
-    } else if (flags & H5F_ACC_RDWR) {
-		if (flags & H5F_ACC_TRUNC)
-            f = fopen(name, "wb+");
-		else
-            f = fopen(name, "rb+");
-        write_access=1;     /* Note the write access */
-    } else
-        f = fopen(name, "rb");
-
-    if (!f)
-		HSYS_GOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "fsopen failed")
-
-    if (_stati64(name, &sb) == -1)
-        HSYS_GOTO_ERROR(H5E_FILE, H5E_BADFILE, NULL, "unable to stat file")
-#endif /* WINDOWS_USE_STDIO */
-
-	/* Create the new file struct */
-    if (NULL==(file=H5FL_CALLOC(H5FD_windows_t)))
-        HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "unable to allocate file struct")
-
-    H5_ASSIGN_OVERFLOW(file->eof,sb.st_size,h5_stat_size_t,haddr_t);
-    file->pos = HADDR_UNDEF;
-    file->op = OP_UNKNOWN;
-
-#ifndef WINDOWS_USE_STDIO
-    file->fd = fd;
-#else
-    file->fp = f;
-	if((fd = _fileno(f)) == -1)
-		HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to get file descriptor for file")
-    file->write_access=write_access;    /* Note the write_access for later */
-#endif /* WINDOWS_USE_STDIO */
-
-    if( (filehandle = (HANDLE)_get_osfhandle(fd)) == INVALID_HANDLE_VALUE)
-        HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to get file handle for file")
-    if(!GetFileInformationByHandle(filehandle, &fileinfo))
-        HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, NULL, "unable to get file information")
-    file->fileindexhi = fileinfo.nFileIndexHigh;
-    file->fileindexlo = fileinfo.nFileIndexLow;
-    file->volumeserialnumber = fileinfo.dwVolumeSerialNumber;
-
-    /* Check for non-default FAPL */
-    if(H5P_FILE_ACCESS_DEFAULT != fapl_id) {
-        H5P_genplist_t      *plist;      /* Property list pointer */
-
-        /* Get the FAPL */
-        if(NULL == (plist = (H5P_genplist_t *)H5I_object(fapl_id)))
-            HGOTO_ERROR(H5E_VFL, H5E_BADTYPE, NULL, "not a file access property list")
-
-        /* This step is for h5repart tool only. If user wants to change file driver from
-         * family to sec2 while using h5repart, this private property should be set so that
-         * in the later step, the library can ignore the family driver information saved
-         * in the superblock.
-         */
-        if(H5P_exist_plist(plist, H5F_ACS_FAMILY_TO_SEC2_NAME) > 0)
-            if(H5P_get(plist, H5F_ACS_FAMILY_TO_SEC2_NAME, &file->fam_to_sec2) < 0)
-                HGOTO_ERROR(H5E_VFL, H5E_CANTGET, NULL, "can't get property of changing family to sec2")
-    } /* end if */
-
-    /* Set return value */
-    ret_value=(H5FD_t*)file;
-
-done:
-    if(ret_value==NULL) {
-#ifndef WINDOWS_USE_STDIO
-        if(fd>=0)
-            _close(fd);
-#else
-        if(f)
-			fclose(file->fp);
-#endif /* WINDOWS_USE_STDIO */
-    } /* end if */
-
-    FUNC_LEAVE_NOAPI(ret_value)
-}
-
-/*-------------------------------------------------------------------------
- * Function:	H5FD_windows_close
- *
- * Purpose:	Closes a Windows file.
- *
- * Return:	Success:	0
- *
- *		Failure:	-1, file not closed.
- *
- * Programmer:	Scott Wegner
- *				Based on code by Robb Matzke
- *              Thursday, May 24 2007
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5FD_windows_close(H5FD_t *_file)
-{
-    H5FD_windows_t	*file = (H5FD_windows_t*)_file;
-    herr_t			ret_value=SUCCEED;       /* Return value */
-
-    FUNC_ENTER_NOAPI(H5FD_windows_close, FAIL)
-
-#ifndef WINDOWS_USE_STDIO
-    if (_close(file->fd)<0)
-#else
-    if (fclose(file->fp)<0)
-#endif /* WINDOWS_USE_STDIO */
-        HSYS_GOTO_ERROR(H5E_IO, H5E_CANTCLOSEFILE, FAIL, "unable to close file")
-
-    H5FL_FREE(H5FD_windows_t,file);
-
-done:
-    FUNC_LEAVE_NOAPI(ret_value)
-}
-
-/*-------------------------------------------------------------------------
- * Function:	H5FD_windows_cmp
- *
- * Purpose:	Compares two files belonging to this driver using an
- *		arbitrary (but consistent) ordering.
- *
- * Return:	Success:	A value like strcmp()
- *
- *			Failure:	never fails (arguments were checked by the
- *						caller).
- *
- * Programmer:	Scott Wegner
- *				Based on code by Robb Matzke
- *              Thursday, May 24 2007
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-static int
-H5FD_windows_cmp(const H5FD_t *_f1, const H5FD_t *_f2)
-{
-    const H5FD_windows_t	*f1 = (const H5FD_windows_t*)_f1;
-    const H5FD_windows_t	*f2 = (const H5FD_windows_t*)_f2;
-    int ret_value=0;
-
-    FUNC_ENTER_NOAPI(H5FD_windows_cmp, H5FD_VFD_DEFAULT)
-
-	if (f1->volumeserialnumber < f2->volumeserialnumber) HGOTO_DONE(-1)
-	if (f1->volumeserialnumber > f2->volumeserialnumber) HGOTO_DONE(1)
-
-    if (f1->fileindexhi < f2->fileindexhi) HGOTO_DONE(-1)
-    if (f1->fileindexhi > f2->fileindexhi) HGOTO_DONE(1)
-
-    if (f1->fileindexlo < f2->fileindexlo) HGOTO_DONE(-1)
-    if (f1->fileindexlo > f2->fileindexlo) HGOTO_DONE(1)
-
-
-done:
-    FUNC_LEAVE_NOAPI(ret_value)
-}
-
-/*-------------------------------------------------------------------------
- * Function:	H5FD_windows_query
- *
- * Purpose:	Set the flags that this VFL driver is capable of supporting.
- *              (listed in H5FDpublic.h)
- *
- * Return:	Success:	non-negative
- *
- *		    Failure:	negative
- *
- * Programmer:	Scott Wegner
-				Based on code by Quincey Koziol
- *              Thursday, May 24 2007
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5FD_windows_query(const H5FD_t *_file, unsigned long *flags /* out */)
-{
-    const H5FD_windows_t *file = (const H5FD_windows_t*)_file;    /* windows VFD info */
-
-    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5FD_windows_query)
-
-    /* Set the VFL feature flags that this driver supports */
-    if(flags) {
-        *flags = 0;
-        *flags|=H5FD_FEAT_AGGREGATE_METADATA;	/* OK to aggregate metadata allocations */
-        *flags|=H5FD_FEAT_ACCUMULATE_METADATA;	/* OK to accumulate metadata for faster writes */
-        *flags|=H5FD_FEAT_DATA_SIEVE;			/* OK to perform data sieving for faster raw data reads & writes */
-        *flags|=H5FD_FEAT_AGGREGATE_SMALLDATA;	/* OK to aggregate "small" raw data allocations */
-
-        /* Check for flags that are set by h5repart */
-        if(file->fam_to_sec2)
-            *flags |= H5FD_FEAT_IGNORE_DRVRINFO; /* Ignore the driver info when file is opened (which eliminates it) */
-    } /* end if */
-
-done:
-    FUNC_LEAVE_NOAPI(SUCCEED)
-} /* end H5FD_windows_query() */
-
-/*-------------------------------------------------------------------------
- * Function:	H5FD_windows_get_eoa
- *
- * Purpose:	Gets the end-of-address marker for the file. The EOA marker
- *			is the first address past the last byte allocated in the
- *			format address space.
- *
- * Return:	Success:	The end-of-address marker.
- *
- *			Failure:	HADDR_UNDEF
- *
- * Programmer:	Scott Wegner
- *				Based on code by Robb Matzke
- *              Thursday, May 24 2007
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-static haddr_t
-H5FD_windows_get_eoa(const H5FD_t *_file, H5FD_mem_t UNUSED type)
-{
-    const H5FD_windows_t	*file = (const H5FD_windows_t*)_file;
-    haddr_t ret_value;  /* Return value */
-
-    FUNC_ENTER_NOAPI(H5FD_windows_get_eoa, HADDR_UNDEF)
-
-    /* Set return value */
-    ret_value=file->eoa;
-
-done:
-    FUNC_LEAVE_NOAPI(ret_value)
-}
-
-
-/*-------------------------------------------------------------------------
- * Function:	H5FD_windows_set_eoa
- *
- * Purpose:	Set the end-of-address marker for the file. This function is
- *			called shortly after an existing HDF5 file is opened in order
- *			to tell the driver where the end of the HDF5 data is located.
- *
- * Return:	Success:	0
- *
- *			Failure:	-1
- *
- * Programmer:	Scott Wegner
- *				Based on code by Robb Matzke
- *              Thursday, July 29, 1999
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5FD_windows_set_eoa(H5FD_t *_file, H5FD_mem_t UNUSED type, haddr_t addr)
-{
-    H5FD_windows_t	*file = (H5FD_windows_t*)_file;
-    herr_t ret_value=SUCCEED;   /* Return value */
-
-    FUNC_ENTER_NOAPI(H5FD_windows_set_eoa, FAIL)
-
-    file->eoa = addr;
-
-done:
-    FUNC_LEAVE_NOAPI(ret_value)
-}
-
-/*-------------------------------------------------------------------------
- * Function:	H5FD_windows_get_eof
- *
- * Purpose:	Returns the end-of-file marker, which is the greater of
- *			either the Windows end-of-file or the HDF5 end-of-address
- *			markers.
- *
- * Return:	Success:	End of file address, the first address past
- *						the end of the "file", either the Unix file
- *						or the HDF5 file.
- *
- *			Failure:	HADDR_UNDEF
- *
- * Programmer:	Scott Wegner
- *				Based on code by Robb Matzke
- *              Thursday, May 24 2007
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-static haddr_t
-H5FD_windows_get_eof(const H5FD_t *_file)
-{
-    const H5FD_windows_t	*file = (const H5FD_windows_t*)_file;
-    haddr_t ret_value;  /* Return value */
-
-    FUNC_ENTER_NOAPI(H5FD_windows_get_eof, HADDR_UNDEF)
-
-    /* Set return value */
-    ret_value=MAX(file->eof, file->eoa);
-
-done:
-    FUNC_LEAVE_NOAPI(ret_value)
-}
-
-
-/*-------------------------------------------------------------------------
- * Function:		H5FD_windows_get_handle
- *
- * Purpose:			Returns the file handle of windows file driver.
- *
- * Returns:			Non-negative if succeed or negative if fails.
- *
- * Programmer:		Scott Wegner
-					Based on code by Raymond Lu
- *					Thursday, May 24 2007
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-/* ARGSUSED */
-static herr_t
-H5FD_windows_get_handle(H5FD_t *_file, hid_t UNUSED fapl, void** file_handle)
-{
-    H5FD_windows_t         *file = (H5FD_windows_t *)_file;
-    herr_t              ret_value = SUCCEED;
-
-    FUNC_ENTER_NOAPI(H5FD_windows_get_handle, FAIL)
-
-    if(!file_handle)
-        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "file handle not valid")
-#ifndef WINDOWS_USE_STDIO
-    *file_handle = &(file->fd);
-#else
-    *file_handle = &(file->fp);
-#endif /* WINDOWS_USE_STDIO */
-	if(*file_handle==NULL)
-        HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "get handle failed")
-
-
-done:
-    FUNC_LEAVE_NOAPI(ret_value)
-}
-
-/*-------------------------------------------------------------------------
- * Function:	H5FD_windows_alloc
- *
- * Purpose:	Allocates file memory.
- *
- * Return:	Success:	Address of new memory
- *
- *			Failure:	HADDR_UNDEF
- *
- * Programmer:	Scott Wegner
-				Based on code by Raymond Lu
- *              Thursday, May 24 2007
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-static haddr_t
-H5FD_windows_alloc(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, hsize_t size)
-{
-    H5FD_windows_t	*file = (H5FD_windows_t*)_file;
-    haddr_t		addr;
-    haddr_t ret_value;          /* Return value */
-
-    FUNC_ENTER_NOAPI(H5FD_windows_alloc, HADDR_UNDEF)
-
-    /* Compute the address for the block to allocate */
-    addr = file->eoa;
-
-    /* Check if we need to align this block */
-    if(size >= file->pub.threshold) {
-        /* Check for an already aligned block */
-        if((addr % file->pub.alignment) != 0)
-            addr = ((addr / file->pub.alignment) + 1) * file->pub.alignment;
-    }
-
-
-    file->eoa = addr + size;
-
-    /* Set return value */
-    ret_value = addr;
-
-done:
-    FUNC_LEAVE_NOAPI(ret_value)
-
-}
-
-
-/*-------------------------------------------------------------------------
- * Function:	H5FD_windows_read
- *
- * Purpose:	Reads SIZE bytes of data from FILE beginning at address ADDR
- *			into buffer BUF according to data transfer properties in
- *			DXPL_ID.
- *
- * Return:	Success:	Zero. Result is stored in caller-supplied
- *						buffer BUF.
- *
- *			Failure:	-1, Contents of buffer BUF are undefined.
- *
- * Programmer:	Scott Wegner
-				Based on code by Robb Matzke
- *              Thursday, May 24 2007
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-/* ARGSUSED */
-static herr_t
-H5FD_windows_read(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr,
-	       size_t size, void *buf/*out*/)
-{
-    H5FD_windows_t		*file = (H5FD_windows_t*)_file;
-    int					nbytes;
-    herr_t				ret_value=SUCCEED;       /* Return value */
-
-    FUNC_ENTER_NOAPI(H5FD_windows_read, FAIL)
-
-    assert(file && file->pub.cls);
-    assert(buf);
-
-    /* Check for overflow conditions */
-    if (HADDR_UNDEF==addr)
-        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined")
-    if (REGION_OVERFLOW(addr, size))
-        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
-    if((addr + size) > file->eoa)
-        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
-
-    /* Seek to the correct location */
-    if ((addr!=file->pos || OP_READ!=file->op))
-#ifndef WINDOWS_USE_STDIO
-		if (_lseeki64(file->fd, addr, SEEK_SET) == -1) {
-#else
-        if (_fseeki64(file->fp, addr, SEEK_SET) == -1) {
-#endif /* WINDOWS_USE_STDIO */
-            file->op = OP_UNKNOWN;
-            file->pos = HADDR_UNDEF;
-			HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
-		}
-
-    /*
-     * Read data, being careful of interrupted system calls, partial results,
-     * and the end of the file.
-     */
-    while (size>0) {
-#ifndef WINDOWS_USE_STDIO
-        do {
-			nbytes = _read(file->fd, buf, (unsigned)(size <= WINDOWS_MAX_BUF ? size: WINDOWS_MAX_BUF));
-        } while (-1==nbytes && EINTR==errno);
-        if (-1==nbytes) /* error */
-            HSYS_GOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed")
-        if (0==nbytes) {
-            /* end of file but not end of format address space */
-            HDmemset(buf, 0, size);
-            break;
-        }
-#else
-        do {
-            nbytes = fread(buf,(size_t)1,(size <= WINDOWS_MAX_BUF ? size: WINDOWS_MAX_BUF),file->fp);
-        } while (!nbytes && EINTR==errno);
-		if(!nbytes) {
-            if (ferror(file->fp)) /* error */
-                HSYS_GOTO_ERROR(H5E_IO, H5E_READERROR, FAIL, "file read failed")
-			if (feof(file->fp)) {
-				/* end of file but not end of format address space */
-				HDmemset(buf, 0, size);
-				break;
-			}
-		}
-#endif /* WINDOWS_USE_STDIO */
-        assert(nbytes>=0);
-        assert((size_t)nbytes<=size);
-        H5_CHECK_OVERFLOW(nbytes,ssize_t,size_t);
-        size -= (size_t)nbytes;
-        H5_CHECK_OVERFLOW(nbytes,ssize_t,haddr_t);
-        addr += (haddr_t)nbytes;
-        buf = (char*)buf + nbytes;
-    }
-
-    /* Update current position */
-    file->pos = addr;
-    file->op = OP_READ;
-
-done:
-    if(ret_value<0) {
-        /* Reset last file I/O information */
-        file->pos = HADDR_UNDEF;
-        file->op = OP_UNKNOWN;
-    } /* end if */
-
-    FUNC_LEAVE_NOAPI(ret_value)
-}
-
-
-/*-------------------------------------------------------------------------
- * Function:	H5FD_windows_write
- *
- * Purpose:	Writes SIZE bytes of data to FILE beginning at address ADDR
- *		from buffer BUF according to data transfer properties in
- *		DXPL_ID.
- *
- * Return:	Success:	Zero
- *
- *			Failure:	-1
- *
- * Programmer:	Scott Wegner
- *				Based on code by Robb Matzke
- *              Thursday, May 24 2007
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-/* ARGSUSED */
-static herr_t
-H5FD_windows_write(H5FD_t *_file, H5FD_mem_t UNUSED type, hid_t UNUSED dxpl_id, haddr_t addr,
-		size_t size, const void *buf)
-{
-    H5FD_windows_t		*file = (H5FD_windows_t*)_file;
-    ssize_t		nbytes;
-    herr_t      ret_value=SUCCEED;       /* Return value */
-
-    FUNC_ENTER_NOAPI(H5FD_windows_write, FAIL)
-
-    assert(file && file->pub.cls);
-    assert(buf);
-
-    /* Check for overflow conditions */
-    if (HADDR_UNDEF==addr)
-        HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "addr undefined")
-    if (REGION_OVERFLOW(addr, size))
-        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
-    if (addr+size>file->eoa)
-        HGOTO_ERROR(H5E_ARGS, H5E_OVERFLOW, FAIL, "addr overflow")
-
-    /* Seek to the correct location */
-    if ((addr!=file->pos || OP_WRITE!=file->op))
-	{
-#ifndef WINDOWS_USE_STDIO
-		if (_lseeki64(file->fd, addr, SEEK_SET) == -1) {
-#else
-        if (_fseeki64(file->fp, addr, SEEK_SET) == -1) {
-#endif /* WINDOWS_USE_STDIO */
-            file->op = OP_UNKNOWN;
-            file->pos = HADDR_UNDEF;
-	        HSYS_GOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to seek to proper position")
-		}
-	}
-
-    /*
-     * Write the data, being careful of interrupted system calls and partial
-     * results
-     */
-	while (size>0) {
-        do {
-#ifndef WINDOWS_USE_STDIO
-            nbytes = _write(file->fd, buf, (unsigned)(size <= WINDOWS_MAX_BUF ? size: WINDOWS_MAX_BUF));
-        } while (-1==nbytes && EINTR==errno);
-        if (-1==nbytes) /* error */
-#else
-
-
-		/* Write 1GB or less at a time */
-			nbytes = fwrite(buf, 1, (size <= WINDOWS_MAX_BUF ? size: WINDOWS_MAX_BUF),file->fp);
-		} while (!nbytes && EINTR==errno);
-        if (!nbytes) /* error */
-#endif /* WINDOWS_USE_STDIO */
-            HSYS_GOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "file write failed")
-        assert(nbytes>0);
-        assert((size_t)nbytes<=size);
-        H5_CHECK_OVERFLOW(nbytes,ssize_t,size_t);
-        size -= (size_t)nbytes;
-        H5_CHECK_OVERFLOW(nbytes,ssize_t,haddr_t);
-        addr += (haddr_t)nbytes;
-        buf = (const char*)buf + nbytes;
-	}
-
-    /* Update current position and eof */
-    file->pos = addr;
-    file->op = OP_WRITE;
-    if (file->pos>file->eof)
-        file->eof = file->pos;
-
-done:
-    if(ret_value<0) {
-        /* Reset last file I/O information */
-        file->pos = HADDR_UNDEF;
-        file->op = OP_UNKNOWN;
-    } /* end if */
-
-    FUNC_LEAVE_NOAPI(ret_value)
-}
-
-
-/*-------------------------------------------------------------------------
- * Function:	H5FD_windows_flush
- *
- * Purpose:	Makes sure that the true file size is the same (or larger)
- *		than the end-of-address.
- *
- * Return:	Success:	Non-negative
- *		Failure:	Negative
- *
- * Programmer:	Scott Wegner
- *		Based on code by Robb Matzke
- *              Thursday, May 24 2007
- *
- *-------------------------------------------------------------------------
- */
-/* ARGSUSED */
-static herr_t
-H5FD_windows_flush(H5FD_t *_file, hid_t UNUSED dxpl_id, unsigned closing)
-{
-    H5FD_windows_t	*file = (H5FD_windows_t*)_file;
-    herr_t		ret_value = SUCCEED;       /* Return value */
-
-    FUNC_ENTER_NOAPI(H5FD_windows_flush, FAIL)
-
-    HDassert(file);
-
-    /* Only try to flush if we have write access */
-    if(file->write_access) {
-        /* Flush */
-        if(!closing) {
-#ifdef WINDOWS_USE_STDIO
-            if(fflush(file->fp) == EOF)
-                HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "fflush failed")
-#endif /* WINDOWS_USE_STDIO */
-
-            /* Reset last file I/O information */
-            file->pos = HADDR_UNDEF;
-            file->op = OP_UNKNOWN;
-        } /* end if */
-    } /* end if */
-
-done:
-    FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5FD_windows_flush() */
-
-
-/*-------------------------------------------------------------------------
- * Function:	H5FD_windows_truncate
- *
- * Purpose:	Makes sure that the true file size is the same (or larger)
- *		than the end-of-address.
- *
- * Return:	Success:	Non-negative
- *		Failure:	Negative
- *
- * Programmer:	Scott Wegner
- *		Based on code by Robb Matzke
- *              Thursday, May 24 2007
- *
- *-------------------------------------------------------------------------
- */
-/* ARGSUSED */
-static herr_t
-H5FD_windows_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing)
-{
-    H5FD_windows_t	*file = (H5FD_windows_t*)_file;
-#ifndef WINDOWS_USE_STDIO
-    LARGE_INTEGER	li;
-    HANDLE		filehandle;
-#else
-    int			fd;
-#endif /* WINDOWS_USE_STDIO */
-    herr_t		ret_value = SUCCEED;       /* Return value */
-
-    FUNC_ENTER_NOAPI(H5FD_windows_truncate, FAIL)
-
-    HDassert(file);
-
-    if(file->eoa != file->eof) {
-#ifndef WINDOWS_USE_STDIO
-        /* Extend the file to make sure it's large enough */
-        if((filehandle = (HANDLE)_get_osfhandle(file->fd)) == INVALID_HANDLE_VALUE)
-            HGOTO_ERROR(H5E_FILE, H5E_FILEOPEN, FAIL, "unable to get file handle for file")
-
-        li.QuadPart = (__int64)file->eoa;
-        (void)SetFilePointer((HANDLE)filehandle, li.LowPart, &li.HighPart, FILE_BEGIN);
-        if(SetEndOfFile(filehandle) == 0)
-            HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to extend file properly")
-#else /* WINDOWS_USE_STDIO */
-        /* Only try to flush if we have write access */
-        if(!file->write_access)
-            HGOTO_ERROR(H5E_IO, H5E_WRITEERROR, FAIL, "cannot flush without write access")
-
-        if((fd = _fileno(file->fp)) == -1)
-            HGOTO_ERROR(H5E_FILE, H5E_CANTOPENFILE, FAIL, "unable to get file descriptor for file")
-        if(_chsize_s(fd, file->eoa))
-            HGOTO_ERROR(H5E_IO, H5E_SEEKERROR, FAIL, "unable to extend file properly")
-#endif /* WINDOWS_USE_STDIO */
-
-        /* Update the eof value */
-        file->eof = file->eoa;
-
-        /* Reset last file I/O information */
-        file->pos = HADDR_UNDEF;
-        file->op = OP_UNKNOWN;
-    } /* end if */
-
-done:
-    FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5FD_windows_truncate() */
+} /* end H5Pset_fapl_windows() */
 
 #endif /* H5_HAVE_WINDOWS */
 
diff --git a/src/H5FDwindows.h b/src/H5FDwindows.h
index 8277f14..ecc28a7 100644
--- a/src/H5FDwindows.h
+++ b/src/H5FDwindows.h
@@ -24,6 +24,7 @@
 #define H5FDwindows_H
 
 #include "H5Ipublic.h"
+#include "H5FDsec2.h"
 
 #define H5FD_WINDOWS	(H5FD_windows_init())
 
@@ -31,8 +32,14 @@
 extern "C" {
 #endif
 
-H5_DLL hid_t H5FD_windows_init(void);
-H5_DLL void H5FD_windows_term(void);
+/* The code behind the windows VFD has been removed and the windows
+ * VFD initialization has been redirected to the SEC2 driver.  The
+ * "Windows" VFD was actually identical to the SEC2 driver code
+ * (a planned Win32 API driver never happened) so this change
+ * should be transparent to users.
+ */
+#define H5FD_windows_init H5FD_sec2_init
+#define H5FD_windows_term H5FD_sec2_term
 H5_DLL herr_t H5Pset_fapl_windows(hid_t fapl_id);
 
 #ifdef __cplusplus
diff --git a/src/H5Fcwfs.c b/src/H5Fcwfs.c
new file mode 100644
index 0000000..cc3cbd6
--- /dev/null
+++ b/src/H5Fcwfs.c
@@ -0,0 +1,323 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help at hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol at hdfgroup.org>
+ *              Tuesday, July 19, 2011
+ *
+ * Purpose:	Each file has a small cache of global heap collections called
+ *		the CWFS list and recently accessed collections with free
+ *		space appear on this list.  As collections are accessed the
+ *		collection is moved toward the front of the list.  New
+ *		collections are added to the front of the list while old
+ *		collections are added to the end of the list.
+ *
+ *		The collection model reduces the overhead which would be
+ *		incurred if the global heap were a single object, and the
+ *		CWFS list allows the library to cheaply choose a collection
+ *		for a new object based on object size, amount of free space
+ *		in the collection, and temporal locality.
+ */
+
+/****************/
+/* Module Setup */
+/****************/
+
+#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+
+/***********/
+/* Headers */
+/***********/
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5Fpkg.h"		/* File access				*/
+#include "H5HGprivate.h"	/* Global heaps				*/
+#include "H5MFprivate.h"	/* File memory management		*/
+#include "H5MMprivate.h"	/* Memory management			*/
+
+
+/****************/
+/* Local Macros */
+/****************/
+
+/*
+ * Maximum length of the CWFS list, the list of remembered collections that
+ * have free space.
+ */
+#define H5F_NCWFS	16
+
+
+/******************/
+/* Local Typedefs */
+/******************/
+
+
+/********************/
+/* Package Typedefs */
+/********************/
+
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+
+/*********************/
+/* Package Variables */
+/*********************/
+
+
+/*****************************/
+/* Library Private Variables */
+/*****************************/
+
+
+/*******************/
+/* Local Variables */
+/*******************/
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_cwfs_add
+ *
+ * Purpose:	Add a global heap collection to the CWFS for a file.
+ *
+ * Return:	Success:	Non-negative
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Tuesday, July 19, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_cwfs_add(H5F_t *f, H5HG_heap_t *heap)
+{
+    herr_t	ret_value = SUCCEED;        /* Return value */
+
+    FUNC_ENTER_NOAPI(H5F_cwfs_add, FAIL)
+
+    /* Check args */
+    HDassert(f);
+    HDassert(f->shared);
+    HDassert(heap);
+
+    /*
+     * Add the new heap to the CWFS list, removing some other entry if
+     * necessary to make room. We remove the right-most entry that has less
+     * free space than this heap.
+     */
+    if(NULL == f->shared->cwfs) {
+	if(NULL == (f->shared->cwfs = (H5HG_heap_t **)H5MM_malloc(H5F_NCWFS * sizeof(H5HG_heap_t *))))
+	    HGOTO_ERROR(H5E_FILE, H5E_CANTALLOC, FAIL, "can't allocate CWFS for file")
+	f->shared->cwfs[0] = heap;
+	f->shared->ncwfs = 1;
+    } else if(H5F_NCWFS == f->shared->ncwfs) {
+        int i;          /* Local index variable */
+
+        for(i = H5F_NCWFS - 1; i >= 0; --i)
+            if(H5HG_FREE_SIZE(f->shared->cwfs[i]) < H5HG_FREE_SIZE(heap)) {
+                HDmemmove(f->shared->cwfs + 1, f->shared->cwfs, (size_t)i * sizeof(H5HG_heap_t *));
+                f->shared->cwfs[0] = heap;
+                break;
+            } /* end if */
+    } else {
+        HDmemmove(f->shared->cwfs + 1, f->shared->cwfs, f->shared->ncwfs * sizeof(H5HG_heap_t *));
+	f->shared->cwfs[0] = heap;
+        f->shared->ncwfs += 1;
+    } /* end else */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5F_cwfs_add() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_cwfs_find_free_heap
+ *
+ * Purpose:	Find a global heap collection with free space for storing
+ *		a new object.
+ *
+ * Return:	Success:	Non-negative
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, July 20, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_cwfs_find_free_heap(H5F_t *f, hid_t dxpl_id, size_t need, haddr_t *addr)
+{
+    unsigned    cwfsno;                 /* Local index for iterating over collections */
+    hbool_t     found = FALSE;          /* Flag to indicate a heap with enough space was found */
+    herr_t	ret_value = SUCCEED;    /* Return value */
+
+    FUNC_ENTER_NOAPI(H5F_cwfs_find_free_heap, FAIL)
+
+    /* Check args */
+    HDassert(f);
+    HDassert(f->shared);
+    HDassert(addr);
+
+    /* Note that we don't have metadata cache locks on the entries in
+     * f->shared->cwfs.
+     *
+     * In the current situation, this doesn't matter, as we are single
+     * threaded, and as best I can tell, entries are added to and deleted
+     * from f->shared->cwfs as they are added to and deleted from the
+     * metadata cache.
+     *
+     * To be proper, we should either lock each entry in f->shared->cwfs
+     * as we examine it, or lock the whole array.  However, at present
+     * I don't see the point as there will be significant overhead,
+     * and protecting and unprotecting all the collections in the global
+     * heap on a regular basis will skew the replacement policy.
+     *
+     *                                        JRM - 5/24/04
+     */
+    for(cwfsno = 0; cwfsno < f->shared->ncwfs; cwfsno++)
+	if(H5HG_FREE_SIZE(f->shared->cwfs[cwfsno]) >= need) {
+	    *addr = H5HG_ADDR(f->shared->cwfs[cwfsno]);
+            found = TRUE;
+	    break;
+	} /* end if */
+
+    /*
+     * If we didn't find any collection with enough free space the check if
+     * we can extend any of the collections to make enough room.
+     */
+    if(!found) {
+        size_t new_need;
+
+        for(cwfsno = 0; cwfsno < f->shared->ncwfs; cwfsno++) {
+            new_need = need;
+            new_need -= H5HG_FREE_SIZE(f->shared->cwfs[cwfsno]);
+            new_need = MAX(H5HG_SIZE(f->shared->cwfs[cwfsno]), new_need);
+
+            if((H5HG_SIZE(f->shared->cwfs[cwfsno]) + new_need) <= H5HG_MAXSIZE) {
+                htri_t extended;        /* Whether the heap was extended */
+
+                extended = H5MF_try_extend(f, dxpl_id, H5FD_MEM_GHEAP, H5HG_ADDR(f->shared->cwfs[cwfsno]), (hsize_t)H5HG_SIZE(f->shared->cwfs[cwfsno]), (hsize_t)new_need);
+                if(extended < 0)
+                    HGOTO_ERROR(H5E_HEAP, H5E_CANTEXTEND, FAIL, "error trying to extend heap")
+                else if(extended == TRUE) {
+                    if(H5HG_extend(f, dxpl_id, H5HG_ADDR(f->shared->cwfs[cwfsno]), new_need) < 0)
+                        HGOTO_ERROR(H5E_HEAP, H5E_CANTRESIZE, FAIL, "unable to extend global heap collection")
+                    *addr = H5HG_ADDR(f->shared->cwfs[cwfsno]);
+                    found = TRUE;
+                    break;
+                } /* end if */
+            } /* end if */
+        } /* end for */
+    } /* end if */
+
+    if(found) {
+        /* Move the collection forward in the CWFS list, if it's not
+         * already at the front
+         */
+        if(cwfsno > 0) {
+            H5HG_heap_t *tmp = f->shared->cwfs[cwfsno];
+
+            f->shared->cwfs[cwfsno] = f->shared->cwfs[cwfsno - 1];
+            f->shared->cwfs[cwfsno - 1] = tmp;
+        } /* end if */
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* H5F_cwfs_find_free_heap() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_cwfs_advance_heap
+ *
+ * Purpose:	Advance a heap in the CWFS
+ *
+ * Return:	Success:	Non-negative
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, July 20, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_cwfs_advance_heap(H5F_t *f, H5HG_heap_t *heap, hbool_t add_heap)
+{
+    unsigned u;                         /* Local index variable */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5F_cwfs_advance_heap)
+
+    /* Check args */
+    HDassert(f);
+    HDassert(f->shared);
+    HDassert(heap);
+
+    for(u = 0; u < f->shared->ncwfs; u++)
+        if(f->shared->cwfs[u] == heap) {
+            if(u) {
+                f->shared->cwfs[u] = f->shared->cwfs[u - 1];
+                f->shared->cwfs[u - 1] = heap;
+            } /* end if */
+            break;
+        } /* end if */
+    if(add_heap && u >= f->shared->ncwfs) {
+        f->shared->ncwfs = MIN(f->shared->ncwfs + 1, H5F_NCWFS);
+        f->shared->cwfs[f->shared->ncwfs - 1] = heap;
+    } /* end if */
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* H5F_cwfs_advance_heap() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_cwfs_remove_heap
+ *
+ * Purpose:	Remove a heap from the CWFS
+ *
+ * Return:	Success:	Non-negative
+ *		Failure:	Negative
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, July 20, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_cwfs_remove_heap(H5F_file_t *shared, H5HG_heap_t *heap)
+{
+    unsigned u;                         /* Local index variable */
+
+    FUNC_ENTER_NOAPI_NOFUNC(H5F_cwfs_remove_heap)
+
+    /* Check args */
+    HDassert(shared);
+    HDassert(heap);
+
+    /* Remove the heap from the CWFS list */
+    for(u = 0; u < shared->ncwfs; u++) {
+        if(shared->cwfs[u] == heap) {
+            shared->ncwfs -= 1;
+            HDmemmove(shared->cwfs + u, shared->cwfs + u + 1, (shared->ncwfs - u) * sizeof(H5HG_heap_t *));
+            break;
+        } /* end if */
+    } /* end for */
+
+    FUNC_LEAVE_NOAPI(SUCCEED)
+} /* H5F_cwfs_remove_heap() */
+
diff --git a/src/H5Fefc.c b/src/H5Fefc.c
index eebf143..a0c204e 100644
--- a/src/H5Fefc.c
+++ b/src/H5Fefc.c
@@ -147,7 +147,7 @@ H5F_efc_open(H5F_t *parent, const char *name, unsigned flags, hid_t fcpl_id,
     H5F_efc_t   *efc = NULL;    /* External file cache for parent file */
     H5F_efc_ent_t *ent = NULL;  /* Entry for target file in efc */
     hbool_t     open_file = FALSE; /* Whether ent->file needs to be closed in case of error */
-    H5F_t       *ret_value;     /* Return value */
+    H5F_t       *ret_value = NULL; /* Return value */
 
     FUNC_ENTER_NOAPI_NOINIT(H5F_efc_open)
 
diff --git a/src/H5Fmount.c b/src/H5Fmount.c
index d04e747..707495a 100644
--- a/src/H5Fmount.c
+++ b/src/H5Fmount.c
@@ -705,3 +705,83 @@ done:
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5F_flush_mounts() */
 
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_traverse_mount
+ *
+ * Purpose:	If LNK is a mount point then copy the entry for the root
+ *		group of the mounted file into LNK.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Robb Matzke
+ *              Tuesday, October  6, 1998
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5F_traverse_mount(H5O_loc_t *oloc/*in,out*/)
+{
+    H5F_t *parent = oloc->file,         /* File of object */
+        *child = NULL;                  /* Child file */
+    unsigned	lt, rt, md = 0;         /* Binary search indices */
+    int cmp;
+    H5O_loc_t	*mnt_oloc = NULL;       /* Object location for mount points */
+    herr_t ret_value = SUCCEED;         /* Return value */
+
+    FUNC_ENTER_NOAPI(H5F_traverse_mount, FAIL)
+
+    /* Sanity check */
+    HDassert(oloc);
+
+    /*
+     * The loop is necessary because we might have file1 mounted at the root
+     * of file2, which is mounted somewhere in file3.
+     */
+    do {
+	/*
+	 * Use a binary search to find the potential mount point in the mount
+	 * table for the parent
+	 */
+	lt = 0;
+	rt = parent->shared->mtab.nmounts;
+	cmp = -1;
+	while(lt < rt && cmp) {
+	    md = (lt + rt) / 2;
+	    mnt_oloc = H5G_oloc(parent->shared->mtab.child[md].group);
+	    cmp = H5F_addr_cmp(oloc->addr, mnt_oloc->addr);
+	    if(cmp < 0)
+		rt = md;
+	    else
+		lt = md + 1;
+	} /* end while */
+
+        /* Copy root info over to ENT */
+        if(0 == cmp) {
+            /* Get the child file */
+            child = parent->shared->mtab.child[md].file;
+
+            /* Get the location for the root group in the child's file */
+            mnt_oloc = H5G_oloc(child->shared->root_grp);
+
+            /* Release the mount point */
+            if(H5O_loc_free(oloc) < 0)
+                HGOTO_ERROR(H5E_FILE, H5E_CANTFREE, FAIL, "unable to free object location")
+
+            /* Copy the entry for the root group */
+            if(H5O_loc_copy(oloc, mnt_oloc, H5_COPY_DEEP) < 0)
+                HGOTO_ERROR(H5E_FILE, H5E_CANTCOPY, FAIL, "unable to copy object location")
+
+            /* In case the shared root group info points to a different file handle
+             * than the child, modify oloc */
+            oloc->file = child;
+
+            /* Switch to child's file */
+            parent = child;
+        } /* end if */
+    } while(!cmp);
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5F_traverse_mount() */
+
diff --git a/src/H5Fpkg.h b/src/H5Fpkg.h
index 07e6b16..ece1600 100644
--- a/src/H5Fpkg.h
+++ b/src/H5Fpkg.h
@@ -196,7 +196,7 @@ typedef struct H5F_super_t {
  * count in this struct indicates the number of H5F_t structs which are
  * pointing to this struct.
  */
-typedef struct H5F_file_t {
+struct H5F_file_t {
     H5FD_t	*lf; 		/* Lower level file handle for I/O	*/
     H5F_super_t *sblock;        /* Pointer to (pinned) superblock for file */
     unsigned	nrefs;		/* Ref count for times file is opened	*/
@@ -251,7 +251,7 @@ typedef struct H5F_file_t {
 
     /* Metadata accumulator information */
     H5F_meta_accum_t accum;     /* Metadata accumulator info           	*/
-} H5F_file_t;
+};
 
 /*
  * This is the top-level file descriptor.  One of these structures is
diff --git a/src/H5Fprivate.h b/src/H5Fprivate.h
index 7cb9cfc..f659491 100644
--- a/src/H5Fprivate.h
+++ b/src/H5Fprivate.h
@@ -35,6 +35,7 @@
 
 /* Main file structure */
 typedef struct H5F_t H5F_t;
+typedef struct H5F_file_t H5F_file_t;
 
 /* Block aggregation structure */
 typedef struct H5F_blk_aggr_t H5F_blk_aggr_t;
@@ -236,52 +237,86 @@ typedef struct H5F_blk_aggr_t H5F_blk_aggr_t;
 /* If the module using this macro is allowed access to the private variables, access them directly */
 #ifdef H5F_PACKAGE
 #define H5F_INTENT(F)           ((F)->intent)
-#define H5F_FCPL(F)             ((F)->shared->fcpl_id)
-#define H5F_SIZEOF_ADDR(F)      ((F)->shared->sizeof_addr)
-#define H5F_SIZEOF_SIZE(F)      ((F)->shared->sizeof_size)
+#define H5F_OPEN_NAME(F)        ((F)->open_name)
+#define H5F_ACTUAL_NAME(F)      ((F)->actual_name)
+#define H5F_EXTPATH(F)          ((F)->extpath)
+#define H5F_SHARED(F)           ((F)->shared)
+#define H5F_SAME_SHARED(F1, F2) ((F1)->shared == (F2)->shared))
+#define H5F_NOPEN_OBJS(F)       ((F)->nopen_objs)
+#define H5F_INCR_NOPEN_OBJS(F)  ((F)->nopen_objs++)
+#define H5F_DECR_NOPEN_OBJS(F)  ((F)->nopen_objs--)
+#define H5F_FILE_ID(F)          ((F)->file_id)
+#define H5F_PARENT(F)           ((F)->parent)
+#define H5F_NMOUNTS(F)          ((F)->nmounts)
+#define H5F_DRIVER_ID(F)        ((F)->shared->lf->driver_id)
+#define H5F_GET_FILENO(F,FILENUM) ((FILENUM) = (F)->shared->lf->fileno)
+#define H5F_HAS_FEATURE(F,FL)   ((F)->shared->lf->feature_flags & (FL))
+#define H5F_BASE_ADDR(F)        ((F)->shared->sblock->base_addr)
 #define H5F_SYM_LEAF_K(F)       ((F)->shared->sblock->sym_leaf_k)
 #define H5F_KVALUE(F,T)         ((F)->shared->sblock->btree_k[(T)->id])
+#define H5F_NREFS(F)		((F)->shared->nrefs)
+#define H5F_SIZEOF_ADDR(F)      ((F)->shared->sizeof_addr)
+#define H5F_SIZEOF_SIZE(F)      ((F)->shared->sizeof_size)
+#define H5F_SOHM_ADDR(F)        ((F)->shared->sohm_addr)
+#define H5F_SET_SOHM_ADDR(F, A) ((F)->shared->sohm_addr = (A))
+#define H5F_SOHM_VERS(F)        ((F)->shared->sohm_vers)
+#define H5F_SET_SOHM_VERS(F, V) ((F)->shared->sohm_vers = (V))
+#define H5F_SOHM_NINDEXES(F)    ((F)->shared->sohm_nindexes)
+#define H5F_SET_SOHM_NINDEXES(F, N) ((F)->shared->sohm_nindexes = (N))
+#define H5F_FCPL(F)             ((F)->shared->fcpl_id)
+#define H5F_GET_FC_DEGREE(F)    ((F)->shared->fc_degree)
 #define H5F_RDCC_NSLOTS(F)      ((F)->shared->rdcc_nslots)
 #define H5F_RDCC_NBYTES(F)      ((F)->shared->rdcc_nbytes)
 #define H5F_RDCC_W0(F)          ((F)->shared->rdcc_w0)
-#define H5F_BASE_ADDR(F)        ((F)->shared->sblock->base_addr)
-#define H5F_GRP_BTREE_SHARED(F) ((F)->shared->grp_btree_shared)
 #define H5F_SIEVE_BUF_SIZE(F)   ((F)->shared->sieve_buf_size)
 #define H5F_GC_REF(F)           ((F)->shared->gc_ref)
 #define H5F_USE_LATEST_FORMAT(F) ((F)->shared->latest_format)
-#define H5F_OPEN_NAME(F)        ((F)->open_name)
-#define H5F_ACTUAL_NAME(F)      ((F)->actual_name)
-#define H5F_EXTPATH(F)          ((F)->extpath)
-#define H5F_GET_FC_DEGREE(F)    ((F)->shared->fc_degree)
 #define H5F_STORE_MSG_CRT_IDX(F)    ((F)->shared->store_msg_crt_idx)
-#define H5F_HAS_FEATURE(F,FL)   ((F)->shared->lf->feature_flags & (FL))
-#define H5F_DRIVER_ID(F)        ((F)->shared->lf->driver_id)
-#define H5F_GET_FILENO(F,FILENUM) ((FILENUM) = (F)->shared->lf->fileno)
+#define H5F_SET_STORE_MSG_CRT_IDX(F, FL)    ((F)->shared->store_msg_crt_idx = (FL))
+#define H5F_GRP_BTREE_SHARED(F) ((F)->shared->grp_btree_shared)
+#define H5F_SET_GRP_BTREE_SHARED(F, RC) (((F)->shared->grp_btree_shared = (RC)) ? SUCCEED : FAIL)
 #define H5F_USE_TMP_SPACE(F)    ((F)->shared->use_tmp_space)
 #define H5F_IS_TMP_ADDR(F, ADDR) (H5F_addr_le((F)->shared->tmp_addr, (ADDR)))
 #else /* H5F_PACKAGE */
 #define H5F_INTENT(F)           (H5F_get_intent(F))
-#define H5F_FCPL(F)             (H5F_get_fcpl(F))
-#define H5F_SIZEOF_ADDR(F)      (H5F_sizeof_addr(F))
-#define H5F_SIZEOF_SIZE(F)      (H5F_sizeof_size(F))
+#define H5F_OPEN_NAME(F)        (H5F_get_open_name(F))
+#define H5F_ACTUAL_NAME(F)      (H5F_get_actual_name(F))
+#define H5F_EXTPATH(F)          (H5F_get_extpath(F))
+#define H5F_SHARED(F)           (H5F_get_shared(F))
+#define H5F_SAME_SHARED(F1, F2) (H5F_same_shared((F1), (F2)))
+#define H5F_NOPEN_OBJS(F)       (H5F_get_nopen_objs(F))
+#define H5F_INCR_NOPEN_OBJS(F)  (H5F_incr_nopen_objs(F))
+#define H5F_DECR_NOPEN_OBJS(F)  (H5F_decr_nopen_objs(F))
+#define H5F_FILE_ID(F)          (H5F_get_file_id(F))
+#define H5F_PARENT(F)           (H5F_get_parent(F))
+#define H5F_NMOUNTS(F)          (H5F_get_nmounts(F))
+#define H5F_DRIVER_ID(F)        (H5F_get_driver_id(F))
+#define H5F_GET_FILENO(F,FILENUM) (H5F_get_fileno((F), &(FILENUM)))
+#define H5F_HAS_FEATURE(F,FL)   (H5F_has_feature(F,FL))
+#define H5F_BASE_ADDR(F)        (H5F_get_base_addr(F))
 #define H5F_SYM_LEAF_K(F)       (H5F_sym_leaf_k(F))
 #define H5F_KVALUE(F,T)         (H5F_Kvalue(F,T))
+#define H5F_NREFS(F)		(H5F_get_nrefs(F))
+#define H5F_SIZEOF_ADDR(F)      (H5F_sizeof_addr(F))
+#define H5F_SIZEOF_SIZE(F)      (H5F_sizeof_size(F))
+#define H5F_SOHM_ADDR(F)        (H5F_get_sohm_addr(F))
+#define H5F_SET_SOHM_ADDR(F, A) (H5F_set_sohm_addr((F), (A)))
+#define H5F_SOHM_VERS(F)        (H5F_get_sohm_vers(F))
+#define H5F_SET_SOHM_VERS(F, V) (H5F_set_sohm_vers((F), (V)))
+#define H5F_SOHM_NINDEXES(F)    (H5F_get_sohm_nindexes(F))
+#define H5F_SET_SOHM_NINDEXES(F, N) (H5F_set_sohm_nindexes((F), (N)))
+#define H5F_FCPL(F)             (H5F_get_fcpl(F))
+#define H5F_GET_FC_DEGREE(F)    (H5F_get_fc_degree(F))
 #define H5F_RDCC_NSLOTS(F)      (H5F_rdcc_nslots(F))
 #define H5F_RDCC_NBYTES(F)      (H5F_rdcc_nbytes(F))
 #define H5F_RDCC_W0(F)          (H5F_rdcc_w0(F))
-#define H5F_BASE_ADDR(F)        (H5F_get_base_addr(F))
-#define H5F_GRP_BTREE_SHARED(F) (H5F_grp_btree_shared(F))
 #define H5F_SIEVE_BUF_SIZE(F)   (H5F_sieve_buf_size(F))
 #define H5F_GC_REF(F)           (H5F_gc_ref(F))
 #define H5F_USE_LATEST_FORMAT(F) (H5F_use_latest_format(F))
-#define H5F_OPEN_NAME(F)        (H5F_get_open_name(F))
-#define H5F_ACTUAL_NAME(F)      (H5F_get_actual_name(F))
-#define H5F_EXTPATH(F)          (H5F_get_extpath(F))
-#define H5F_GET_FC_DEGREE(F)    (H5F_get_fc_degree(F))
 #define H5F_STORE_MSG_CRT_IDX(F) (H5F_store_msg_crt_idx(F))
-#define H5F_HAS_FEATURE(F,FL)   (H5F_has_feature(F,FL))
-#define H5F_DRIVER_ID(F)        (H5F_get_driver_id(F))
-#define H5F_GET_FILENO(F,FILENUM) (H5F_get_fileno((F), &(FILENUM)))
+#define H5F_SET_STORE_MSG_CRT_IDX(F, FL)    (H5F_set_store_msg_crt_idx((F), (FL)))
+#define H5F_GRP_BTREE_SHARED(F) (H5F_grp_btree_shared(F))
+#define H5F_SET_GRP_BTREE_SHARED(F, RC) (H5F_set_grp_btree_shared((F), (RC)))
 #define H5F_USE_TMP_SPACE(F)    (H5F_use_tmp_space(F))
 #define H5F_IS_TMP_ADDR(F, ADDR) (H5F_is_tmp_addr((F), (ADDR)))
 #endif /* H5F_PACKAGE */
@@ -458,54 +493,72 @@ typedef struct H5F_blk_aggr_t H5F_blk_aggr_t;
 /* Forward declarations for prototype arguments */
 struct H5B_class_t;
 struct H5RC_t;
+struct H5O_loc_t;
+struct H5HG_heap_t;
 
 /* Private functions */
 H5_DLL H5F_t *H5F_open(const char *name, unsigned flags, hid_t fcpl_id,
     hid_t fapl_id, hid_t dxpl_id);
 H5_DLL herr_t H5F_try_close(H5F_t *f);
-H5_DLL unsigned H5F_incr_nopen_objs(H5F_t *f);
-H5_DLL unsigned H5F_decr_nopen_objs(H5F_t *f);
 
 /* Functions than retrieve values from the file struct */
 H5_DLL unsigned H5F_get_intent(const H5F_t *f);
-H5_DLL hid_t H5F_get_access_plist(H5F_t *f, hbool_t app_ref);
-H5_DLL char *H5F_get_extpath(const H5F_t *f);
 H5_DLL char *H5F_get_open_name(const H5F_t *f);
 H5_DLL char *H5F_get_actual_name(const H5F_t *f);
+H5_DLL char *H5F_get_extpath(const H5F_t *f);
+H5_DLL H5F_file_t *H5F_get_shared(const H5F_t *f);
+H5_DLL hbool_t H5F_same_shared(const H5F_t *f1, const H5F_t *f2);
+H5_DLL unsigned H5F_get_nopen_objs(const H5F_t *f);
+H5_DLL unsigned H5F_incr_nopen_objs(H5F_t *f);
+H5_DLL unsigned H5F_decr_nopen_objs(H5F_t *f);
+H5_DLL hid_t H5F_get_file_id(const H5F_t *f);
+H5_DLL H5F_t *H5F_get_parent(const H5F_t *f);
+H5_DLL unsigned H5F_get_nmounts(const H5F_t *f);
+H5_DLL hid_t H5F_get_access_plist(H5F_t *f, hbool_t app_ref);
 H5_DLL hid_t H5F_get_id(H5F_t *file, hbool_t app_ref);
 H5_DLL size_t H5F_get_obj_count(const H5F_t *f, unsigned types, hbool_t app_ref);
 H5_DLL size_t H5F_get_obj_ids(const H5F_t *f, unsigned types, size_t max_objs, hid_t *obj_id_list, hbool_t app_ref);
 
 /* Functions than retrieve values set/cached from the superblock/FCPL */
-H5_DLL hid_t H5F_get_fcpl(const H5F_t *f);
-H5_DLL uint8_t H5F_sizeof_addr(const H5F_t *f);
-H5_DLL uint8_t H5F_sizeof_size(const H5F_t *f);
+H5_DLL haddr_t H5F_get_base_addr(const H5F_t *f);
 H5_DLL unsigned H5F_sym_leaf_k(const H5F_t *f);
 H5_DLL unsigned H5F_Kvalue(const H5F_t *f, const struct H5B_class_t *type);
+H5_DLL unsigned H5F_get_nrefs(const H5F_t *f);
+H5_DLL uint8_t H5F_sizeof_addr(const H5F_t *f);
+H5_DLL uint8_t H5F_sizeof_size(const H5F_t *f);
+H5_DLL haddr_t H5F_get_sohm_addr(const H5F_t *f);
+H5_DLL herr_t H5F_set_sohm_addr(H5F_t *f, haddr_t addr);
+H5_DLL unsigned H5F_get_sohm_vers(const H5F_t *f);
+H5_DLL herr_t H5F_set_sohm_vers(H5F_t *f, unsigned vers);
+H5_DLL unsigned H5F_get_sohm_nindexes(const H5F_t *f);
+H5_DLL herr_t H5F_set_sohm_nindexes(H5F_t *f, unsigned nindexes);
+H5_DLL hid_t H5F_get_fcpl(const H5F_t *f);
+H5_DLL H5F_close_degree_t H5F_get_fc_degree(const H5F_t *f);
 H5_DLL size_t H5F_rdcc_nbytes(const H5F_t *f);
 H5_DLL size_t H5F_rdcc_nslots(const H5F_t *f);
 H5_DLL double H5F_rdcc_w0(const H5F_t *f);
-H5_DLL haddr_t H5F_get_base_addr(const H5F_t *f);
-H5_DLL struct H5RC_t *H5F_grp_btree_shared(const H5F_t *f);
 H5_DLL size_t H5F_sieve_buf_size(const H5F_t *f);
 H5_DLL unsigned H5F_gc_ref(const H5F_t *f);
 H5_DLL hbool_t H5F_use_latest_format(const H5F_t *f);
-H5_DLL H5F_close_degree_t H5F_get_fc_degree(const H5F_t *f);
 H5_DLL hbool_t H5F_store_msg_crt_idx(const H5F_t *f);
-H5_DLL hbool_t H5F_is_tmp_addr(const H5F_t *f, haddr_t addr);
+H5_DLL herr_t H5F_set_store_msg_crt_idx(H5F_t *f, hbool_t flag);
+H5_DLL struct H5RC_t *H5F_grp_btree_shared(const H5F_t *f);
+H5_DLL herr_t H5F_set_grp_btree_shared(H5F_t *f, struct H5RC_t *rc);
 H5_DLL hbool_t H5F_use_tmp_space(const H5F_t *f);
+H5_DLL hbool_t H5F_is_tmp_addr(const H5F_t *f, haddr_t addr);
 
 /* Functions that retrieve values from VFD layer */
-H5_DLL hbool_t H5F_has_feature(const H5F_t *f, unsigned feature);
 H5_DLL hid_t H5F_get_driver_id(const H5F_t *f);
 H5_DLL herr_t H5F_get_fileno(const H5F_t *f, unsigned long *filenum);
+H5_DLL hbool_t H5F_has_feature(const H5F_t *f, unsigned feature);
 H5_DLL haddr_t H5F_get_eoa(const H5F_t *f, H5FD_mem_t type);
 H5_DLL herr_t H5F_get_vfd_handle(const H5F_t *file, hid_t fapl,
     void **file_handle);
 
-/* Functions than check file mounting information */
+/* Functions that check file mounting information */
 H5_DLL hbool_t H5F_is_mount(const H5F_t *file);
 H5_DLL hbool_t H5F_has_mount(const H5F_t *file);
+H5_DLL herr_t H5F_traverse_mount(struct H5O_loc_t *oloc/*in,out*/);
 
 /* Functions that operate on blocks of bytes wrt super block */
 H5_DLL herr_t H5F_block_read(const H5F_t *f, H5FD_mem_t type, haddr_t addr,
@@ -544,6 +597,13 @@ H5_DLL H5F_t *H5F_efc_open(H5F_t *parent, const char *name, unsigned flags,
     hid_t fcpl_id, hid_t fapl_id, hid_t dxpl_id);
 H5_DLL herr_t H5F_efc_close(H5F_t *parent, H5F_t *file);
 
+/* Global heap CWFS routines */
+H5_DLL herr_t H5F_cwfs_add(H5F_t *f, struct H5HG_heap_t *heap);
+H5_DLL herr_t H5F_cwfs_find_free_heap(H5F_t *f, hid_t dxpl_id, size_t need, haddr_t *addr);
+H5_DLL herr_t H5F_cwfs_advance_heap(H5F_t *f, struct H5HG_heap_t *heap,
+    hbool_t add_heap);
+H5_DLL herr_t H5F_cwfs_remove_heap(H5F_file_t *shared, struct H5HG_heap_t *heap);
+
 /* Debugging functions */
 H5_DLL herr_t H5F_debug(H5F_t *f, FILE * stream, int indent, int fwidth);
 
diff --git a/src/H5Fpublic.h b/src/H5Fpublic.h
index f89db0a..054a296 100644
--- a/src/H5Fpublic.h
+++ b/src/H5Fpublic.h
@@ -113,18 +113,27 @@ typedef struct H5F_info_t {
  * 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.
+ *
+ * Note: please change the log VFD flavors array if you change this
+ * enumeration.
  */
 typedef enum H5F_mem_t {
-    H5FD_MEM_NOLIST	= -1,			/*must be negative*/
-    H5FD_MEM_DEFAULT	= 0,			/*must be zero*/
-    H5FD_MEM_SUPER      = 1,
-    H5FD_MEM_BTREE      = 2,
-    H5FD_MEM_DRAW       = 3,
-    H5FD_MEM_GHEAP      = 4,
-    H5FD_MEM_LHEAP      = 5,
-    H5FD_MEM_OHDR       = 6,
-
-    H5FD_MEM_NTYPES				/*must be last*/
+    H5FD_MEM_NOLIST     = -1,   /* Data should not appear in the free list.
+                                 * Must be negative.
+                                 */
+    H5FD_MEM_DEFAULT    = 0,    /* Value not yet set.  Can also be the
+                                 * datatype set in a larger allocation
+                                 * that will be suballocated by the library.
+                                 * Must be zero.
+                                 */
+    H5FD_MEM_SUPER      = 1,    /* Superblock data */
+    H5FD_MEM_BTREE      = 2,    /* B-tree data */
+    H5FD_MEM_DRAW       = 3,    /* Raw data (content of datasets, etc.) */
+    H5FD_MEM_GHEAP      = 4,    /* Global heap data */
+    H5FD_MEM_LHEAP      = 5,    /* Local heap data */
+    H5FD_MEM_OHDR       = 6,    /* Object header data */
+
+    H5FD_MEM_NTYPES             /* Sentinel value - must be last */
 } H5F_mem_t;
 
 /* Library's file format versions */
diff --git a/src/H5Fquery.c b/src/H5Fquery.c
index c5ecf6b..4c05066 100644
--- a/src/H5Fquery.c
+++ b/src/H5Fquery.c
@@ -181,6 +181,147 @@ H5F_get_extpath(const H5F_t *f)
 
 
 /*-------------------------------------------------------------------------
+ * Function:	H5F_get_shared
+ *
+ * Purpose:	Retrieve the file's 'shared' pointer
+ *
+ * Return:	'shared' on success/abort on failure (shouldn't fail)
+ *
+ * Programmer:	Quincey Koziol, July 20, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+H5F_file_t *
+H5F_get_shared(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_get_shared)
+
+    HDassert(f);
+
+    FUNC_LEAVE_NOAPI(f->shared)
+} /* end H5F_get_shared() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_same_shared
+ *
+ * Purpose:	Determine if two files have the same shared file pointer
+ *
+ * Return:	TRUE/FALSE on success/abort on failure (shouldn't fail)
+ *
+ * Programmer:	Quincey Koziol, July 19, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+hbool_t
+H5F_same_shared(const H5F_t *f1, const H5F_t *f2)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_same_shared)
+
+    HDassert(f1);
+    HDassert(f1->shared);
+    HDassert(f2);
+    HDassert(f2->shared);
+
+    FUNC_LEAVE_NOAPI(f1->shared == f2->shared)
+} /* end H5F_same_shared() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_get_nopen_objs
+ *
+ * Purpose:	Retrieve the file's 'nopen_objs' value
+ *
+ * Return:	'nopen_objs' on success/abort on failure (shouldn't fail)
+ *
+ * Programmer:	Quincey Koziol, July 20, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+unsigned
+H5F_get_nopen_objs(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_get_nopen_objs)
+
+    HDassert(f);
+
+    FUNC_LEAVE_NOAPI(f->nopen_objs)
+} /* end H5F_get_nopen_objs() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_get_file_id
+ *
+ * Purpose:	Retrieve the file's 'file_id' value
+ *
+ * Return:	'file_id' on success/abort on failure (shouldn't fail)
+ *
+ * Programmer:	Quincey Koziol, July 20, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+hid_t
+H5F_get_file_id(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_get_file_id)
+
+    HDassert(f);
+
+    FUNC_LEAVE_NOAPI(f->file_id)
+} /* end H5F_get_file_id() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_get_parent
+ *
+ * Purpose:	Retrieve the file's 'parent' pointer
+ *
+ * Return:	'parent' on success/abort on failure (shouldn't fail)
+ *
+ * Programmer:	Quincey Koziol, July 19, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+H5F_t *
+H5F_get_parent(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_get_parent)
+
+    HDassert(f);
+
+    FUNC_LEAVE_NOAPI(f->parent)
+} /* end H5F_get_parent() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_get_nmounts
+ *
+ * Purpose:	Retrieve the file's 'nmounts' value
+ *
+ * Return:	'nmounts' on success/abort on failure (shouldn't fail)
+ *
+ * Programmer:	Quincey Koziol, July 20, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+unsigned
+H5F_get_nmounts(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_get_nmounts)
+
+    HDassert(f);
+
+    FUNC_LEAVE_NOAPI(f->nmounts)
+} /* end H5F_get_nmounts() */
+
+
+/*-------------------------------------------------------------------------
  * Function:	H5F_get_fcpl
  *
  * Purpose:	Retrieve the value of a file's FCPL.
@@ -263,6 +404,78 @@ H5F_sizeof_size(const H5F_t *f)
 
 
 /*-------------------------------------------------------------------------
+ * Function:	H5F_get_sohm_addr
+ *
+ * Purpose:	Retrieve the file's 'sohm_addr' value
+ *
+ * Return:	'sohm_addr' on success/abort on failure (shouldn't fail)
+ *
+ * Programmer:	Quincey Koziol, July 20, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5F_get_sohm_addr(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_get_sohm_addr)
+
+    HDassert(f);
+    HDassert(f->shared);
+
+    FUNC_LEAVE_NOAPI(f->shared->sohm_addr)
+} /* end H5F_get_sohm_addr() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_get_sohm_vers
+ *
+ * Purpose:	Retrieve the file's 'sohm_vers' value
+ *
+ * Return:	'sohm_vers' on success/abort on failure (shouldn't fail)
+ *
+ * Programmer:	Quincey Koziol, July 20, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+unsigned
+H5F_get_sohm_vers(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_get_sohm_vers)
+
+    HDassert(f);
+    HDassert(f->shared);
+
+    FUNC_LEAVE_NOAPI(f->shared->sohm_vers)
+} /* end H5F_get_sohm_vers() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5F_get_sohm_nindexes
+ *
+ * Purpose:	Retrieve the file's 'sohm_nindexes' value
+ *
+ * Return:	'sohm_nindexes' on success/abort on failure (shouldn't fail)
+ *
+ * Programmer:	Quincey Koziol, July 20, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+unsigned
+H5F_get_sohm_nindexes(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_get_sohm_nindexes)
+
+    HDassert(f);
+    HDassert(f->shared);
+
+    FUNC_LEAVE_NOAPI(f->shared->sohm_nindexes)
+} /* end H5F_get_sohm_nindexes() */
+
+
+/*-------------------------------------------------------------------------
  * Function:	H5F_sym_leaf_k
  *
  * Purpose:	Replaced a macro to retrieve the symbol table leaf size,
@@ -328,6 +541,30 @@ H5F_Kvalue(const H5F_t *f, const H5B_class_t *type)
 
 
 /*-------------------------------------------------------------------------
+ * Function:	H5F_get_nrefs
+ *
+ * Purpose:	Retrieve the file's 'nrefs' value
+ *
+ * Return:	'nrefs' on success/abort on failure (shouldn't fail)
+ *
+ * Programmer:	Quincey Koziol, July 20, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+unsigned
+H5F_get_nrefs(const H5F_t *f)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5F_get_nrefs)
+
+    HDassert(f);
+    HDassert(f->shared);
+
+    FUNC_LEAVE_NOAPI(f->shared->nrefs)
+} /* end H5F_get_nrefs() */
+
+
+/*-------------------------------------------------------------------------
  * Function:	H5F_rdcc_nslots
  *
  * Purpose:	Replaced a macro to retrieve the raw data cache number of slots,
diff --git a/src/H5Fsuper_cache.c b/src/H5Fsuper_cache.c
index 5a093a0..834c1c5 100644
--- a/src/H5Fsuper_cache.c
+++ b/src/H5Fsuper_cache.c
@@ -468,7 +468,7 @@ H5F_sblock_load(H5F_t *f, hid_t dxpl_id, haddr_t UNUSED addr, void *_udata)
 
     /* (Account for the stored EOA being absolute offset -QAK) */
     if((eof + sblock->base_addr) < stored_eoa)
-        HGOTO_ERROR(H5E_FILE, H5E_TRUNCATED, NULL, "truncated file")
+        HGOTO_ERROR(H5E_FILE, H5E_TRUNCATED, NULL, "truncated file: eof = %llu, sblock->base_addr = %llu, stored_eoa = %llu", (unsigned long long)eof, (unsigned long long)sblock->base_addr, (unsigned long long)stored_eoa)
 
     /*
      * Tell the file driver how much address space has already been
diff --git a/src/H5G.c b/src/H5G.c
index 1f561bd..32d3b28 100644
--- a/src/H5G.c
+++ b/src/H5G.c
@@ -75,27 +75,41 @@
  *-------------------------------------------------------------------------
  */
 
-#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+/****************/
+/* Module Setup */
+/****************/
+
 #define H5G_PACKAGE		/*suppress error about including H5Gpkg   */
 
 /* Interface initialization */
 #define H5_INTERFACE_INIT_FUNC	H5G_init_interface
 
-/* Packages needed by this file... */
+
+/***********/
+/* Headers */
+/***********/
 #include "H5private.h"		/* Generic Functions			*/
 #include "H5ACprivate.h"	/* Metadata cache			*/
 #include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fpkg.h"		/* File access				*/
+#include "H5Fprivate.h"		/* File access				*/
+#include "H5FOprivate.h"        /* File objects                         */
 #include "H5Gpkg.h"		/* Groups		  		*/
 #include "H5Iprivate.h"		/* IDs			  		*/
 #include "H5Lprivate.h"         /* Links                                */
 #include "H5MMprivate.h"	/* Memory management			*/
 #include "H5Pprivate.h"         /* Property lists                       */
 
-/* Local macros */
+
+/****************/
+/* Local Macros */
+/****************/
+
 #define H5G_RESERVED_ATOMS	0
 
-/* Local typedefs */
+
+/******************/
+/* Local Typedefs */
+/******************/
 
 /* User data for path traversal routine for "insertion file" routine */
 typedef struct {
@@ -126,10 +140,21 @@ typedef struct {
 } H5G_iter_visit_ud_t;
 
 
-/* Package variables */
+/********************/
+/* Package Typedefs */
+/********************/
+
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+static herr_t H5G_open_oid(H5G_t *grp, hid_t dxpl_id);
 
 
-/* Local variables */
+/*********************/
+/* Package Variables */
+/*********************/
 
 /* Declare a free list to manage the H5G_t struct */
 H5FL_DEFINE(H5G_t);
@@ -139,8 +164,15 @@ H5FL_DEFINE(H5G_shared_t);
 H5FL_DEFINE(H5_obj_t);
 
 
-/* Private prototypes */
-static herr_t H5G_open_oid(H5G_t *grp, hid_t dxpl_id);
+/*****************************/
+/* Library Private Variables */
+/*****************************/
+
+
+/*******************/
+/* Local Variables */
+/*******************/
+
 
 
 /*-------------------------------------------------------------------------
@@ -1737,6 +1769,9 @@ H5G_visit(hid_t loc_id, const char *group_name, H5_index_t idx_type,
     unsigned    rc;		    /* Reference count of object    */
     herr_t      ret_value;          /* Return value */
 
+    /* Portably clear udata struct (before FUNC_ENTER) */
+    HDmemset(&udata, 0, sizeof(udata));
+
     FUNC_ENTER_NOAPI(H5G_visit, FAIL)
 
     /* Check args */
diff --git a/src/H5Gent.c b/src/H5Gent.c
index cec788c..ad4c058 100644
--- a/src/H5Gent.c
+++ b/src/H5Gent.c
@@ -17,25 +17,63 @@
  * Programmer: Robb Matzke <matzke at llnl.gov>
  *             Friday, September 19, 1997
  */
+
+/****************/
+/* Module Setup */
+/****************/
+
 #define H5G_PACKAGE		/*suppress error about including H5Gpkg	  */
-#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
 
 
-/* Packages needed by this file... */
+/***********/
+/* Headers */
+/***********/
 #include "H5private.h"		/* Generic Functions			*/
 #include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fpkg.h"             /* File access				*/
+#include "H5Fprivate.h"         /* File access				*/
 #include "H5FLprivate.h"	/* Free Lists                           */
 #include "H5Gpkg.h"		/* Groups		  		*/
 #include "H5HLprivate.h"	/* Local Heaps				*/
 
-/* Private macros */
 
-/* Private prototypes */
+/****************/
+/* Local Macros */
+/****************/
+
+
+/******************/
+/* Local Typedefs */
+/******************/
+
+
+/********************/
+/* Package Typedefs */
+/********************/
+
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+
+/*********************/
+/* Package Variables */
+/*********************/
 
 /* Declare extern the PQ free list for the wrapped strings */
 H5FL_BLK_EXTERN(str_buf);
 
+
+/*****************************/
+/* Library Private Variables */
+/*****************************/
+
+
+/*******************/
+/* Local Variables */
+/*******************/
+
+
 
 /*-------------------------------------------------------------------------
  * Function:    H5G_ent_decode_vec
@@ -249,7 +287,7 @@ H5G_ent_encode(const H5F_t *f, uint8_t **pp, const H5G_entry_t *ent)
 
     /* fill with zero */
     if(*pp < p_ret)
-        HDmemset(*pp, 0, (p_ret - *pp));
+        HDmemset(*pp, 0, (size_t)(p_ret - *pp));
     *pp = p_ret;
 
 done:
diff --git a/src/H5Gname.c b/src/H5Gname.c
index 0c8981d..18723a9 100644
--- a/src/H5Gname.c
+++ b/src/H5Gname.c
@@ -23,22 +23,36 @@
  *
  *-------------------------------------------------------------------------
  */
-#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+/****************/
+/* Module Setup */
+/****************/
+
 #define H5G_PACKAGE		/*suppress error about including H5Gpkg	  */
 
 
-/* Packages needed by this file... */
+/***********/
+/* Headers */
+/***********/
 #include "H5private.h"		/* Generic Functions			*/
 #include "H5Dprivate.h"		/* Datasets				*/
 #include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fpkg.h"		/* File access				*/
+#include "H5Fprivate.h"		/* File access				*/
 #include "H5FLprivate.h"	/* Free Lists                           */
 #include "H5Gpkg.h"		/* Groups		  		*/
 #include "H5Iprivate.h"		/* IDs			  		*/
 #include "H5Lprivate.h"		/* Links                                */
 #include "H5MMprivate.h"	/* Memory wrappers			*/
 
-/* Private typedefs */
+
+/****************/
+/* Local Macros */
+/****************/
+
+
+/******************/
+/* Local Typedefs */
+/******************/
 
 /* Struct used by change name callback function */
 typedef struct H5G_names_t {
@@ -60,14 +74,15 @@ typedef struct H5G_gnba_iter_t {
     char *path;                 /* Name of the object */
 } H5G_gnba_iter_t;
 
-/* Private macros */
+/********************/
+/* Package Typedefs */
+/********************/
 
-/* Local variables */
 
-/* Declare extern the PQ free list for the wrapped strings */
-H5FL_BLK_EXTERN(str_buf);
+/********************/
+/* Local Prototypes */
+/********************/
 
-/* PRIVATE PROTOTYPES */
 static htri_t H5G_common_path(const H5RS_str_t *fullpath_r, const H5RS_str_t *prefix_r);
 static H5RS_str_t *H5G_build_fullpath(const char *prefix, const char *name);
 #ifdef NOT_YET
@@ -77,6 +92,25 @@ static herr_t H5G_name_move_path(H5RS_str_t **path_r_ptr,
     const char *full_suffix, const char *src_path, const char *dst_path);
 static int H5G_name_replace_cb(void *obj_ptr, hid_t obj_id, void *key);
 
+
+/*********************/
+/* Package Variables */
+/*********************/
+
+/* Declare extern the PQ free list for the wrapped strings */
+H5FL_BLK_EXTERN(str_buf);
+
+
+/*****************************/
+/* Library Private Variables */
+/*****************************/
+
+
+/*******************/
+/* Local Variables */
+/*******************/
+
+
 
 /*-------------------------------------------------------------------------
  * Function: H5G_common_path
@@ -719,30 +753,30 @@ H5G_name_replace_cb(void *obj_ptr, hid_t obj_id, void *key)
         HGOTO_DONE(SUCCEED)     /* No need to look at object, it's path is already invalid */
 
     /* Find the top file in object's mount hier. */
-    if(oloc->file->parent) {
+    if(H5F_PARENT(oloc->file)) {
         /* Check if object is in child file (for mount & unmount operations) */
-        if(names->dst_file && oloc->file->shared == names->dst_file->shared)
+        if(names->dst_file && H5F_SAME_SHARED(oloc->file, names->dst_file))
             obj_in_child = TRUE;
 
         /* Find the "top" file in the chain of mounted files */
-        top_obj_file = oloc->file->parent;
-        while(top_obj_file->parent != NULL) {
+        top_obj_file = H5F_PARENT(oloc->file);
+        while(H5F_PARENT(top_obj_file) != NULL) {
             /* Check if object is in child mount hier. (for mount & unmount operations) */
-            if(names->dst_file && top_obj_file->shared == names->dst_file->shared)
+            if(names->dst_file && H5F_SAME_SHARED(top_obj_file, names->dst_file))
                 obj_in_child = TRUE;
 
-            top_obj_file = top_obj_file->parent;
+            top_obj_file = H5F_PARENT(top_obj_file);
         } /* end while */
     } /* end if */
     else
         top_obj_file = oloc->file;
 
     /* Check if object is in top of child mount hier. (for mount & unmount operations) */
-    if(names->dst_file && top_obj_file->shared == names->dst_file->shared)
+    if(names->dst_file && H5F_SAME_SHARED(top_obj_file, names->dst_file))
         obj_in_child = TRUE;
 
     /* Check if the object is in same file mount hier. */
-    if(top_obj_file->shared != names->src_file->shared)
+    if(!H5F_SAME_SHARED(top_obj_file, names->src_file))
         HGOTO_DONE(SUCCEED)     /* No need to look at object, it's path is already invalid */
 
     switch(names->op) {
@@ -1022,8 +1056,8 @@ H5G_name_replace(const H5O_link_t *lnk, H5G_names_op_t op, H5F_t *src_file,
             H5G_names_t names;          /* Structure to hold operation information for callback */
 
             /* Find top file in src location's mount hierarchy */
-            while(src_file->parent)
-                src_file = src_file->parent;
+            while(H5F_PARENT(src_file))
+                src_file = H5F_PARENT(src_file);
 
             /* Set up common information for callback */
             names.src_file = src_file;
@@ -1105,7 +1139,8 @@ H5G_get_name_by_addr_cb(hid_t gid, const char *path, const H5L_info_t *linfo,
         /* Check for object in same file (handles mounted files) */
         /* (re-verify address, in case we traversed a file mount) */
         if(udata->loc->addr == obj_loc.oloc->addr && udata->loc->file == obj_loc.oloc->file) {
-            udata->path = H5MM_strdup(path);
+            if(NULL == (udata->path = H5MM_strdup(path)))
+                HGOTO_ERROR(H5E_SYM, H5E_CANTALLOC, H5_ITER_ERROR, "can't duplicate path string")
 
             /* We found a match so we return immediately */
             HGOTO_DONE(H5_ITER_STOP)
@@ -1145,6 +1180,9 @@ H5G_get_name_by_addr(hid_t file, hid_t lapl_id, hid_t dxpl_id, const H5O_loc_t *
     herr_t status;              /* Status from iteration */
     ssize_t ret_value;          /* Return value */
 
+    /* Portably clear udata struct (before FUNC_ENTER) */
+    HDmemset(&udata, 0, sizeof(udata));
+
     FUNC_ENTER_NOAPI(H5G_get_name_by_addr, FAIL)
 
     /* Construct the link info for the file's root group */
@@ -1153,7 +1191,8 @@ H5G_get_name_by_addr(hid_t file, hid_t lapl_id, hid_t dxpl_id, const H5O_loc_t *
 
     /* Check for root group being the object looked for */
     if(root_loc.oloc->addr == loc->addr && root_loc.oloc->file == loc->file) {
-        udata.path = H5MM_strdup("");
+        if(NULL == (udata.path = H5MM_strdup("")))
+            HGOTO_ERROR(H5E_SYM, H5E_CANTALLOC, FAIL, "can't duplicate path string")
         found_obj = TRUE;
     } /* end if */
     else {
diff --git a/src/H5Gnode.c b/src/H5Gnode.c
index a33dfc7..611694b 100644
--- a/src/H5Gnode.c
+++ b/src/H5Gnode.c
@@ -26,15 +26,21 @@
  *
  *-------------------------------------------------------------------------
  */
+
+/****************/
+/* Module Setup */
+/****************/
+
 #define H5G_PACKAGE		/*suppress error about including H5Gpkg   */
-#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
 
 
-/* Packages needed by this file... */
+/***********/
+/* Headers */
+/***********/
 #include "H5private.h"		/* Generic Functions			*/
 #include "H5ACprivate.h"	/* Metadata cache			*/
 #include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fpkg.h"		/* File access				*/
+#include "H5Fprivate.h"		/* File access				*/
 #include "H5FLprivate.h"	/* Free Lists                           */
 #include "H5Gpkg.h"		/* Groups		  		*/
 #include "H5HLprivate.h"	/* Local Heaps				*/
@@ -42,7 +48,15 @@
 #include "H5MMprivate.h"	/* Memory management			*/
 #include "H5Ppublic.h"		/* Property Lists                       */
 
-/* Private typedefs */
+
+/****************/
+/* Local Macros */
+/****************/
+
+
+/******************/
+/* Local Typedefs */
+/******************/
 
 /*
  * Each key field of the B-link tree that points to symbol table
@@ -53,9 +67,14 @@ typedef struct H5G_node_key_t {
 } H5G_node_key_t;
 
 
-/* Private macros */
+/********************/
+/* Package Typedefs */
+/********************/
+
 
-/* PRIVATE PROTOTYPES */
+/********************/
+/* Local Prototypes */
+/********************/
 
 /* B-tree callbacks */
 static H5RC_t *H5G_node_get_shared(const H5F_t *f, const void *_udata);
@@ -79,6 +98,11 @@ static herr_t H5G_node_encode_key(const H5B_shared_t *shared, uint8_t *raw, cons
 static herr_t H5G_node_debug_key(FILE *stream, int indent, int fwidth,
     const void *key, const void *udata);
 
+
+/*********************/
+/* Package Variables */
+/*********************/
+
 /* H5G inherits B-tree like properties from H5B */
 H5B_class_t H5B_SNODE[1] = {{
     H5B_SNODE_ID,		/*id			*/
@@ -104,6 +128,16 @@ H5FL_DEFINE(H5G_node_t);
 /* Declare a free list to manage sequences of H5G_entry_t's */
 H5FL_SEQ_DEFINE(H5G_entry_t);
 
+
+/*****************************/
+/* Library Private Variables */
+/*****************************/
+
+
+/*******************/
+/* Local Variables */
+/*******************/
+
 
 /*-------------------------------------------------------------------------
  * Function:	H5G_node_get_shared
@@ -701,8 +735,9 @@ H5G_node_insert(H5F_t *f, hid_t dxpl_id, haddr_t addr,
     } /* end else */
 
     /* Move entries down to make room for new entry */
+    HDassert(idx >= 0);
     HDmemmove(insert_into->entry + idx + 1, insert_into->entry + idx,
-	      (insert_into->nsyms - idx) * sizeof(H5G_entry_t));
+	      (insert_into->nsyms - (unsigned)idx) * sizeof(H5G_entry_t));
 
     /* Copy new entry into table */
     H5G_ent_copy(&(insert_into->entry[idx]), &ent, H5_COPY_SHALLOW);
@@ -1154,8 +1189,8 @@ H5G_node_init(H5F_t *f)
         /* <none> */
 
     /* Make shared B-tree info reference counted */
-    if(NULL == (f->shared->grp_btree_shared = H5RC_create(shared, H5B_shared_free)))
-	HGOTO_ERROR (H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't create ref-count wrapper for shared B-tree info")
+    if(H5F_SET_GRP_BTREE_SHARED(f, H5RC_create(shared, H5B_shared_free)) < 0)
+	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't create ref-count wrapper for shared B-tree info")
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5Gobj.c b/src/H5Gobj.c
index 16b202a..8580508 100644
--- a/src/H5Gobj.c
+++ b/src/H5Gobj.c
@@ -28,7 +28,6 @@
 /* Module Setup */
 /****************/
 
-#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
 #define H5G_PACKAGE		/*suppress error about including H5Gpkg  */
 
 
@@ -37,7 +36,7 @@
 /***********/
 #include "H5private.h"		/* Generic Functions			*/
 #include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fpkg.h"		/* File access				*/
+#include "H5Fprivate.h"		/* File access				*/
 #include "H5Gpkg.h"		/* Groups		  		*/
 #include "H5HLprivate.h"	/* Local Heaps				*/
 #include "H5Iprivate.h"		/* IDs			  		*/
@@ -81,6 +80,7 @@ typedef struct {
     hid_t       dxpl_id;                /* DXPL during insertion */
 } H5G_obj_stab_it_ud1_t;
 
+
 /********************/
 /* Package Typedefs */
 /********************/
@@ -202,7 +202,7 @@ H5G_obj_create_real(H5F_t *f, hid_t dxpl_id, const H5O_ginfo_t *ginfo,
     HDassert(oloc);
 
     /* Check for invalid access request */
-    if(0 == (f->intent & H5F_ACC_RDWR))
+    if(0 == (H5F_INTENT(f) & H5F_ACC_RDWR))
 	HGOTO_ERROR(H5E_CACHE, H5E_BADVALUE, FAIL, "no write intent on file")
 
     /* Check for using the latest version of the group format */
@@ -268,16 +268,19 @@ H5G_obj_create_real(H5F_t *f, hid_t dxpl_id, const H5O_ginfo_t *ginfo,
     /* Check for format of group to create */
     if(use_latest_format) {
         /* Insert link info message */
-        if(H5O_msg_create(oloc, H5O_LINFO_ID, 0, H5O_UPDATE_TIME, linfo, dxpl_id) < 0)
+        /* (Casting away const OK - QAK) */
+        if(H5O_msg_create(oloc, H5O_LINFO_ID, 0, H5O_UPDATE_TIME, (void *)linfo, dxpl_id) < 0)
             HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't create message")
 
         /* Insert group info message */
-        if(H5O_msg_create(oloc, H5O_GINFO_ID, H5O_MSG_FLAG_CONSTANT, 0, ginfo, dxpl_id) < 0)
+        /* (Casting away const OK - QAK) */
+        if(H5O_msg_create(oloc, H5O_GINFO_ID, H5O_MSG_FLAG_CONSTANT, 0, (void *)ginfo, dxpl_id) < 0)
             HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't create message")
 
         /* Insert pipeline message */
         if(pline && pline->nused)
-            if(H5O_msg_create(oloc, H5O_PLINE_ID, H5O_MSG_FLAG_CONSTANT, 0, pline, dxpl_id) < 0)
+            /* (Casting away const OK - QAK) */
+            if(H5O_msg_create(oloc, H5O_PLINE_ID, H5O_MSG_FLAG_CONSTANT, 0, (void *)pline, dxpl_id) < 0)
                 HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "can't create message")
     } /* end if */
     else {
diff --git a/src/H5Gpkg.h b/src/H5Gpkg.h
index c966e16..b8f5f42 100644
--- a/src/H5Gpkg.h
+++ b/src/H5Gpkg.h
@@ -252,7 +252,7 @@ typedef struct H5G_bt_it_cpy_t {
     const H5O_loc_t *src_oloc;  /* Source object location */
     haddr_t     src_heap_addr;  /* Heap address of the source symbol table  */
     H5F_t       *dst_file;      /* File of destination group */
-    H5O_stab_t  *dst_stab;      /* Symbol table message for destination group */
+    const H5O_stab_t *dst_stab; /* Symbol table message for destination group */
     H5O_copy_t  *cpy_info;      /* Information for copy operation */
 } H5G_bt_it_cpy_t;
 
@@ -416,9 +416,9 @@ H5_DLL herr_t H5G_stab_create_components(H5F_t *f, H5O_stab_t *stab, size_t size
 H5_DLL herr_t H5G_stab_insert(const H5O_loc_t *grp_oloc, const char *name,
     H5O_link_t *obj_lnk, H5O_type_t obj_type, const void *crt_info,
     hid_t dxpl_id);
-H5_DLL herr_t H5G_stab_insert_real(H5F_t *f, H5O_stab_t *stab, const char *name,
-    H5O_link_t *obj_lnk, H5O_type_t obj_type, const void *crt_info,
-    hid_t dxpl_id);
+H5_DLL herr_t H5G_stab_insert_real(H5F_t *f, const H5O_stab_t *stab,
+    const char *name, H5O_link_t *obj_lnk, H5O_type_t obj_type,
+    const void *crt_info, hid_t dxpl_id);
 H5_DLL herr_t H5G_stab_delete(H5F_t *f, hid_t dxpl_id, const H5O_stab_t *stab);
 H5_DLL herr_t H5G_stab_iterate(const H5O_loc_t *oloc, hid_t dxpl_id, H5_iter_order_t order,
     hsize_t skip, hsize_t *last_lnk, H5G_lib_iterate_t op, void *op_data);
diff --git a/src/H5Groot.c b/src/H5Groot.c
index a7d7e29..9a567e1 100644
--- a/src/H5Groot.c
+++ b/src/H5Groot.c
@@ -44,6 +44,41 @@
 #include "H5Pprivate.h"         /* Property Lists			*/
 
 
+/****************/
+/* Local Macros */
+/****************/
+
+
+/******************/
+/* Local Typedefs */
+/******************/
+
+
+/********************/
+/* Package Typedefs */
+/********************/
+
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+
+/*********************/
+/* Package Variables */
+/*********************/
+
+
+/*****************************/
+/* Library Private Variables */
+/*****************************/
+
+
+/*******************/
+/* Local Variables */
+/*******************/
+
+
 
 /*-------------------------------------------------------------------------
  * Function:	H5G_rootof
diff --git a/src/H5Gstab.c b/src/H5Gstab.c
index 238f894..81c2d6a 100644
--- a/src/H5Gstab.c
+++ b/src/H5Gstab.c
@@ -17,19 +17,34 @@
  *	       Friday, September 19, 1997
  *
  */
-#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+/****************/
+/* Module Setup */
+/****************/
+
 #define H5G_PACKAGE		/*suppress error about including H5Gpkg	  */
 
 
-/* Packages needed by this file... */
+/***********/
+/* Headers */
+/***********/
 #include "H5private.h"		/* Generic Functions			*/
 #include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fpkg.h"		/* File access				*/
+#include "H5Fprivate.h"		/* File access				*/
 #include "H5Gpkg.h"		/* Groups		  		*/
 #include "H5HLprivate.h"	/* Local Heaps				*/
 #include "H5MMprivate.h"	/* Memory management			*/
 
-/* Private typedefs */
+
+/****************/
+/* Local Macros */
+/****************/
+
+
+/******************/
+/* Local Typedefs */
+/******************/
+
 /* User data for finding link information from B-tree */
 typedef struct {
     /* downward */
@@ -74,7 +89,31 @@ typedef struct H5G_bt_it_lbi_t {
     hbool_t     found;      	/*whether we found the link                  */
 } H5G_bt_it_lbi_t;
 
-/* Private prototypes */
+
+/********************/
+/* Package Typedefs */
+/********************/
+
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+
+/*********************/
+/* Package Variables */
+/*********************/
+
+
+/*****************************/
+/* Library Private Variables */
+/*****************************/
+
+
+/*******************/
+/* Local Variables */
+/*******************/
+
 
 
 /*-------------------------------------------------------------------------
@@ -220,7 +259,7 @@ done:
  *-------------------------------------------------------------------------
  */
 herr_t
-H5G_stab_insert_real(H5F_t *f, H5O_stab_t *stab, const char *name,
+H5G_stab_insert_real(H5F_t *f, const H5O_stab_t *stab, const char *name,
     H5O_link_t *obj_lnk, H5O_type_t obj_type, const void *crt_info,
     hid_t dxpl_id)
 {
@@ -714,6 +753,9 @@ H5G_stab_get_name_by_idx(H5O_loc_t *oloc, H5_iter_order_t order, hsize_t n,
     hbool_t udata_valid = FALSE;        /* Whether iteration information is valid */
     ssize_t ret_value;          /* Return value */
 
+    /* Portably clear udata struct (before FUNC_ENTER) */
+    HDmemset(&udata, 0, sizeof(udata));
+
     FUNC_ENTER_NOAPI(H5G_stab_get_name_by_idx, FAIL)
 
     /* Sanity check */
@@ -996,6 +1038,12 @@ done:
  *              addresses in the group's stab message are invalid, and
  *              the stab message will be updated if necessary.
  *
+ *              NOTE: This function is only called when strict format
+ *              checks are disabled.  This is so that, when strict
+ *              format checks are enabled,  errors in the symbol table
+ *              messages are not fixed by this function and are instead
+ *              reported by the library.
+ *
  * Return:	Non-negative on success/Negative on failure
  *
  * Programmer:	Neil Fortner
diff --git a/src/H5Gtraverse.c b/src/H5Gtraverse.c
index 9519f32..c04d7a2 100644
--- a/src/H5Gtraverse.c
+++ b/src/H5Gtraverse.c
@@ -23,15 +23,21 @@
  *
  *-------------------------------------------------------------------------
  */
-#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
+
+/****************/
+/* Module Setup */
+/****************/
+
 #define H5G_PACKAGE		/*suppress error about including H5Gpkg	  */
 
 
-/* Packages needed by this file... */
+/***********/
+/* Headers */
+/***********/
 #include "H5private.h"		/* Generic Functions			*/
 #include "H5Dprivate.h"         /* Datasets                             */
 #include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fpkg.h"		/* File access				*/
+#include "H5Fprivate.h"		/* File access				*/
 #include "H5Gpkg.h"		/* Groups		  		*/
 #include "H5HLprivate.h"	/* Local Heaps				*/
 #include "H5Iprivate.h"		/* IDs					*/
@@ -40,7 +46,15 @@
 #include "H5Ppublic.h"		/* Property Lists			*/
 #include "H5WBprivate.h"        /* Wrapped Buffers                      */
 
-/* Private typedefs */
+
+/****************/
+/* Local Macros */
+/****************/
+
+
+/******************/
+/* Local Typedefs */
+/******************/
 
 /* User data for path traversal routine */
 typedef struct {
@@ -52,11 +66,15 @@ typedef struct {
     hbool_t exists;             /* Indicate if object exists */
 } H5G_trav_slink_t;
 
-/* Private macros */
 
-/* Local variables */
+/********************/
+/* Package Typedefs */
+/********************/
 
-/* PRIVATE PROTOTYPES */
+
+/********************/
+/* Local Prototypes */
+/********************/
 static herr_t H5G_traverse_slink_cb(H5G_loc_t *grp_loc, const char *name,
     const H5O_link_t *lnk, H5G_loc_t *obj_loc, void *_udata/*in,out*/,
     H5G_own_loc_t *own_loc/*out*/);
@@ -66,11 +84,26 @@ static herr_t H5G_traverse_ud(const H5G_loc_t *grp_loc, const H5O_link_t *lnk,
 static herr_t H5G_traverse_slink(const H5G_loc_t *grp_loc, const H5O_link_t *lnk,
     H5G_loc_t *obj_loc/*in,out*/, unsigned target, size_t *nlinks/*in,out*/,
     hbool_t *obj_exists, hid_t lapl_id, hid_t dxpl_id);
-static herr_t H5G_traverse_mount(H5G_loc_t *loc/*in,out*/);
 static herr_t H5G_traverse_real(const H5G_loc_t *loc, const char *name,
     unsigned target, size_t *nlinks, H5G_traverse_t op, void *op_data,
     hid_t lapl_id, hid_t dxpl_id);
 
+
+/*********************/
+/* Package Variables */
+/*********************/
+
+
+/*****************************/
+/* Library Private Variables */
+/*****************************/
+
+
+/*******************/
+/* Local Variables */
+/*******************/
+
+
 
 /*-------------------------------------------------------------------------
  * Function:	H5G_traverse_slink_cb
@@ -347,86 +380,6 @@ done:
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5G_traverse_mount
- *
- * Purpose:	If LNK is a mount point then copy the entry for the root
- *		group of the mounted file into LNK.
- *
- * Return:	Non-negative on success/Negative on failure
- *
- * Programmer:	Robb Matzke
- *              Tuesday, October  6, 1998
- *
- *-------------------------------------------------------------------------
- */
-static herr_t
-H5G_traverse_mount(H5G_loc_t *obj_loc/*in,out*/)
-{
-    H5F_t	*parent = obj_loc->oloc->file,      /* File of object */
-            *child = NULL;                      /* Child file */
-    unsigned	lt, rt, md = 0;                 /* Binary search indices */
-    int cmp;
-    H5O_loc_t	*oloc = NULL;           /* Object location for mount points */
-    herr_t ret_value = SUCCEED;         /* Return value */
-
-    FUNC_ENTER_NOAPI(H5G_traverse_mount, FAIL)
-
-    /* Sanity check */
-    HDassert(obj_loc);
-
-    /*
-     * The loop is necessary because we might have file1 mounted at the root
-     * of file2, which is mounted somewhere in file3.
-     */
-    do {
-	/*
-	 * Use a binary search to find the potential mount point in the mount
-	 * table for the parent
-	 */
-	lt = 0;
-	rt = parent->shared->mtab.nmounts;
-	cmp = -1;
-	while(lt < rt && cmp) {
-	    md = (lt + rt) / 2;
-	    oloc = H5G_oloc(parent->shared->mtab.child[md].group);
-	    cmp = H5F_addr_cmp(obj_loc->oloc->addr, oloc->addr);
-	    if(cmp < 0)
-		rt = md;
-	    else
-		lt = md + 1;
-	} /* end while */
-
-	/* Copy root info over to ENT */
-    if(0 == cmp) {
-        /* Get the child file */
-        child = parent->shared->mtab.child[md].file;
-
-        /* Get the location for the root group in the child's file */
-        oloc = H5G_oloc(child->shared->root_grp);
-
-        /* Release the mount point */
-        if(H5O_loc_free(obj_loc->oloc) < 0)
-            HGOTO_ERROR(H5E_FILE, H5E_CANTFREE, FAIL, "unable to free object location")
-
-        /* Copy the entry for the root group */
-        if(H5O_loc_copy(obj_loc->oloc, oloc, H5_COPY_DEEP) < 0)
-            HGOTO_ERROR(H5E_FILE, H5E_CANTCOPY, FAIL, "unable to copy object location")
-
-        /* In case the shared root group info points to a different file handle
-         * than the child, modify obj_loc */
-        obj_loc->oloc->file = child;
-
-        /* Switch to child's file */
-        parent = child;
-    } /* end if */
-    } while(!cmp);
-
-done:
-    FUNC_LEAVE_NOAPI(ret_value)
-} /* end H5G_traverse_mount() */
-
-
-/*-------------------------------------------------------------------------
  * Function:	H5G_traverse_special
  *
  * Purpose:	Handle traversing special link situations
@@ -493,7 +446,7 @@ H5G_traverse_special(const H5G_loc_t *grp_loc, const H5O_link_t *lnk,
      */
     if(H5F_addr_defined(obj_loc->oloc->addr) &&
             (0 == (target & H5G_TARGET_MOUNT) || !last_comp)) {
-        if(H5G_traverse_mount(obj_loc/*in,out*/) < 0)
+        if(H5F_traverse_mount(obj_loc->oloc/*in,out*/) < 0)
             HGOTO_ERROR(H5E_SYM, H5E_NOTFOUND, FAIL, "mount point traversal failed")
     } /* end if */
 
@@ -786,13 +739,16 @@ H5G_traverse_real(const H5G_loc_t *_loc, const char *name, unsigned target,
 
                 /* Reset any non-default object header messages */
                 if(ginfo != &def_ginfo)
-                    if(H5O_msg_reset(H5O_GINFO_ID, ginfo) < 0)
+                    /* (Casting away const OK - QAK) */
+                    if(H5O_msg_reset(H5O_GINFO_ID, (void *)ginfo) < 0)
                         HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to reset group info message")
                 if(linfo != &def_linfo)
-                    if(H5O_msg_reset(H5O_LINFO_ID, linfo) < 0)
+                    /* (Casting away const OK - QAK) */
+                    if(H5O_msg_reset(H5O_LINFO_ID, (void *)linfo) < 0)
                         HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to reset link info message")
                 if(pline != &def_pline)
-                    if(H5O_msg_reset(H5O_PLINE_ID, pline) < 0)
+                    /* (Casting away const OK - QAK) */
+                    if(H5O_msg_reset(H5O_PLINE_ID, (void *)pline) < 0)
                         HGOTO_ERROR(H5E_SYM, H5E_CANTRELEASE, FAIL, "unable to reset I/O pipeline message")
             } /* end if */
             else
diff --git a/src/H5HG.c b/src/H5HG.c
index 8f4bd89..5feff8b 100644
--- a/src/H5HG.c
+++ b/src/H5HG.c
@@ -41,7 +41,6 @@
 /* Module Setup */
 /****************/
 
-#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
 #define H5HG_PACKAGE		/*suppress error about including H5HGpkg	  */
 
 
@@ -50,7 +49,7 @@
 /***********/
 #include "H5private.h"		/* Generic Functions			*/
 #include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fpkg.h"             /* File access				*/
+#include "H5Fprivate.h"         /* File access				*/
 #include "H5HGpkg.h"		/* Global heaps				*/
 #include "H5MFprivate.h"	/* File memory management		*/
 #include "H5MMprivate.h"	/* Memory management			*/
@@ -61,13 +60,6 @@
 /****************/
 
 /*
- * Limit global heap collections to the some reasonable size.  This is
- * fairly arbitrary, but needs to be small enough that no more than H5HG_MAXIDX
- * objects will be allocated from a single heap.
- */
-#define H5HG_MAXSIZE	65536
-
-/*
  * The maximum number of links allowed to a global heap object.
  */
 #define H5HG_MAXLINK	65535
@@ -164,7 +156,7 @@ H5HG_create(H5F_t *f, hid_t dxpl_id, size_t size)
 	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "memory allocation failed")
     heap->addr = addr;
     heap->size = size;
-    heap->shared = f->shared;
+    heap->shared = H5F_SHARED(f);
 
     if(NULL == (heap->chunk = H5FL_BLK_MALLOC(gheap_chunk, size)))
 	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "memory allocation failed")
@@ -212,19 +204,8 @@ HDmemset(heap->chunk, 0, size);
 #endif /* OLD_WAY */
 
     /* Add this heap to the beginning of the CWFS list */
-    if(NULL == f->shared->cwfs) {
-	f->shared->cwfs = (H5HG_heap_t **)H5MM_malloc(H5HG_NCWFS * sizeof(H5HG_heap_t *));
-	if(NULL == (f->shared->cwfs))
-	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, HADDR_UNDEF, "memory allocation failed")
-	f->shared->cwfs[0] = heap;
-	f->shared->ncwfs = 1;
-    } /* end if */
-    else {
-	HDmemmove(f->shared->cwfs + 1, f->shared->cwfs,
-                   MIN(f->shared->ncwfs, H5HG_NCWFS - 1) * sizeof(H5HG_heap_t *));
-	f->shared->cwfs[0] = heap;
-	f->shared->ncwfs = MIN(H5HG_NCWFS, f->shared->ncwfs + 1);
-    } /* end else */
+    if(H5F_cwfs_add(f, heap) < 0)
+	HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, HADDR_UNDEF, "unable to add global heap collection to file's CWFS")
 
     /* Add the heap to the cache */
     if(H5AC_insert_entry(f, dxpl_id, H5AC_GHEAP, addr, heap, H5AC__NO_FLAGS_SET)<0)
@@ -441,7 +422,7 @@ done:
  *
  *-------------------------------------------------------------------------
  */
-static herr_t
+herr_t
 H5HG_extend(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t need)
 {
     H5HG_heap_t *heap = NULL;       /* Pointer to heap to extend */
@@ -537,12 +518,10 @@ herr_t
 H5HG_insert(H5F_t *f, hid_t dxpl_id, size_t size, void *obj, H5HG_t *hobj/*out*/)
 {
     size_t	need;		/*total space needed for object		*/
-    unsigned    cwfsno;
     size_t	idx;
-    haddr_t	addr = HADDR_UNDEF;
+    haddr_t	addr;           /* Address of heap to add object within */
     H5HG_heap_t	*heap = NULL;
     unsigned 	heap_flags = H5AC__NO_FLAGS_SET;
-    hbool_t     found = FALSE;          /* Flag to indicate a heap with enough space was found */
     herr_t      ret_value = SUCCEED;    /* Return value */
 
     FUNC_ENTER_NOAPI(H5HG_insert, FAIL)
@@ -552,87 +531,29 @@ H5HG_insert(H5F_t *f, hid_t dxpl_id, size_t size, void *obj, H5HG_t *hobj/*out*/
     HDassert(0 == size || obj);
     HDassert(hobj);
 
-    if(0 == (f->intent & H5F_ACC_RDWR))
+    if(0 == (H5F_INTENT(f) & H5F_ACC_RDWR))
 	HGOTO_ERROR(H5E_HEAP, H5E_WRITEERROR, FAIL, "no write intent on file")
 
     /* Find a large enough collection on the CWFS list */
     need = H5HG_SIZEOF_OBJHDR(f) + H5HG_ALIGN(size);
 
-    /* Note that we don't have metadata cache locks on the entries in
-     * f->shared->cwfs.
-     *
-     * In the current situation, this doesn't matter, as we are single
-     * threaded, and as best I can tell, entries are added to and deleted
-     * from f->shared->cwfs as they are added to and deleted from the
-     * metadata cache.
-     *
-     * To be proper, we should either lock each entry in f->shared->cwfs
-     * as we examine it, or lock the whole array.  However, at present
-     * I don't see the point as there will be significant overhead,
-     * and protecting and unprotecting all the collections in the global
-     * heap on a regular basis will skew the replacement policy.
-     *
-     *                                        JRM - 5/24/04
-     */
-    for(cwfsno = 0; cwfsno < f->shared->ncwfs; cwfsno++)
-	if(f->shared->cwfs[cwfsno]->obj[0].size >= need) {
-	    addr = f->shared->cwfs[cwfsno]->addr;
-            found = TRUE;
-	    break;
-	} /* end if */
-
-    /*
-     * If we didn't find any collection with enough free space the check if
-     * we can extend any of the collections to make enough room.
-     */
-    if(!found) {
-        size_t new_need;
-
-        for(cwfsno = 0; cwfsno < f->shared->ncwfs; cwfsno++) {
-            new_need = need;
-            new_need -= f->shared->cwfs[cwfsno]->obj[0].size;
-            new_need = MAX(f->shared->cwfs[cwfsno]->size, new_need);
-
-            if((f->shared->cwfs[cwfsno]->size + new_need) <= H5HG_MAXSIZE) {
-                htri_t extended;        /* Whether the heap was extended */
-
-                extended = H5MF_try_extend(f, dxpl_id, H5FD_MEM_GHEAP, f->shared->cwfs[cwfsno]->addr, (hsize_t)f->shared->cwfs[cwfsno]->size, (hsize_t)new_need);
-                if(extended < 0)
-                    HGOTO_ERROR(H5E_HEAP, H5E_CANTEXTEND, FAIL, "error trying to extend heap")
-                else if(extended == TRUE) {
-                    if(H5HG_extend(f, dxpl_id, f->shared->cwfs[cwfsno]->addr, new_need) < 0)
-                        HGOTO_ERROR(H5E_HEAP, H5E_CANTRESIZE, FAIL, "unable to extend global heap collection")
-                    addr = f->shared->cwfs[cwfsno]->addr;
-                    found = TRUE;
-                    break;
-                } /* end if */
-            } /* end if */
-        } /* end for */
-    } /* end if */
+    /* Look for a heap in the file's CWFS that has enough space for the object */
+    addr = HADDR_UNDEF;
+    if(H5F_cwfs_find_free_heap(f, dxpl_id, need, &addr) < 0)
+        HGOTO_ERROR(H5E_HEAP, H5E_NOTFOUND, FAIL, "error trying to locate heap")
 
     /*
      * If we didn't find any collection with enough free space then allocate a
      * new collection large enough for the message plus the collection header.
      */
-    if(!found) {
-        addr = H5HG_create(f, dxpl_id, need+H5HG_SIZEOF_HDR (f));
+    if(!H5F_addr_defined(addr)) {
+        addr = H5HG_create(f, dxpl_id, need + H5HG_SIZEOF_HDR(f));
 
         if(!H5F_addr_defined(addr))
 	    HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, FAIL, "unable to allocate a global heap collection")
     } /* end if */
-    else {
-        /* Move the collection forward in the CWFS list, if it's not
-         * already at the front
-         */
-        if(cwfsno > 0) {
-            H5HG_heap_t *tmp = f->shared->cwfs[cwfsno];
-
-            f->shared->cwfs[cwfsno] = f->shared->cwfs[cwfsno - 1];
-            f->shared->cwfs[cwfsno - 1] = tmp;
-            --cwfsno;
-        } /* end if */
-    } /* end else */
     HDassert(H5F_addr_defined(addr));
+
     if(NULL == (heap = H5HG_protect(f, dxpl_id, addr, H5AC_WRITE)))
         HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, "unable to protect global heap")
 
@@ -715,16 +636,8 @@ H5HG_read(H5F_t *f, hid_t dxpl_id, H5HG_t *hobj, void *object/*out*/,
      * with the H5AC_protect(), but it won't hurt to do it twice.
      */
     if(heap->obj[0].begin) {
-        unsigned u;     /* Local index variable */
-
-	for(u = 0; u < f->shared->ncwfs; u++)
-	    if(f->shared->cwfs[u] == heap) {
-		if(u) {
-		    f->shared->cwfs[u] = f->shared->cwfs[u - 1];
-		    f->shared->cwfs[u - 1] = heap;
-		} /* end if */
-		break;
-	    } /* end if */
+        if(H5F_cwfs_advance_heap(f, heap, FALSE) < 0)
+            HGOTO_ERROR(H5E_HEAP, H5E_CANTMODIFY, NULL, "can't adjust file's CWFS")
     } /* end if */
 
     /* If the caller would like to know the heap object's size, set that */
@@ -775,7 +688,7 @@ H5HG_link(H5F_t *f, hid_t dxpl_id, const H5HG_t *hobj, int adjust)
     /* Check args */
     HDassert(f);
     HDassert(hobj);
-    if(0 == (f->intent & H5F_ACC_RDWR))
+    if(0 == (H5F_INTENT(f) & H5F_ACC_RDWR))
 	HGOTO_ERROR(H5E_HEAP, H5E_WRITEERROR, FAIL, "no write intent on file")
 
     /* Load the heap */
@@ -838,7 +751,7 @@ H5HG_remove (H5F_t *f, hid_t dxpl_id, H5HG_t *hobj)
     /* Check args */
     HDassert(f);
     HDassert(hobj);
-    if(0 == (f->intent & H5F_ACC_RDWR))
+    if(0 == (H5F_INTENT(f) & H5F_ACC_RDWR))
         HGOTO_ERROR(H5E_HEAP, H5E_WRITEERROR, FAIL, "no write intent on file")
 
     /* Load the heap */
@@ -887,18 +800,8 @@ H5HG_remove (H5F_t *f, hid_t dxpl_id, H5HG_t *hobj)
          * H5AC_protect() might have done that too, but that's okay.  If the
          * heap isn't on the CWFS list then add it to the end.
          */
-        for(u = 0; u < f->shared->ncwfs; u++)
-            if(f->shared->cwfs[u] == heap) {
-                if(u) {
-                    f->shared->cwfs[u] = f->shared->cwfs[u - 1];
-                    f->shared->cwfs[u - 1] = heap;
-                } /* end if */
-                break;
-            } /* end if */
-        if(u >= f->shared->ncwfs) {
-            f->shared->ncwfs = MIN(f->shared->ncwfs + 1, H5HG_NCWFS);
-            f->shared->cwfs[f->shared->ncwfs - 1] = heap;
-        } /* end if */
+        if(H5F_cwfs_advance_heap(f, heap, TRUE) < 0)
+            HGOTO_ERROR(H5E_HEAP, H5E_CANTMODIFY, FAIL, "can't adjust file's CWFS")
     } /* end else */
 
 done:
@@ -924,21 +827,16 @@ done:
 herr_t
 H5HG_free(H5HG_heap_t *heap)
 {
-    unsigned u;         /* Local index variable */
+    herr_t ret_value = SUCCEED;         /* Return value */
 
-    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5HG_free)
+    FUNC_ENTER_NOAPI(H5HG_free, FAIL)
 
     /* Check arguments */
     HDassert(heap);
 
     /* Remove the heap from the CWFS list */
-    for(u = 0; u < heap->shared->ncwfs; u++) {
-        if(heap->shared->cwfs[u] == heap) {
-            heap->shared->ncwfs -= 1;
-            HDmemmove(heap->shared->cwfs + u, heap->shared->cwfs + u + 1, (heap->shared->ncwfs - u) * sizeof(H5HG_heap_t *));
-            break;
-        } /* end if */
-    } /* end for */
+    if(H5F_cwfs_remove_heap(heap->shared, heap) < 0)
+        HGOTO_ERROR(H5E_HEAP, H5E_CANTREMOVE, FAIL, "can't remove heap from file's CWFS")
 
     if(heap->chunk)
         heap->chunk = H5FL_BLK_FREE(gheap_chunk, heap->chunk);
@@ -946,6 +844,7 @@ H5HG_free(H5HG_heap_t *heap)
         heap->obj = H5FL_SEQ_FREE(H5HG_obj_t, heap->obj);
     heap = H5FL_FREE(H5HG_heap_t, heap);
 
-    FUNC_LEAVE_NOAPI(SUCCEED)
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
 } /* H5HG_free() */
 
diff --git a/src/H5HGcache.c b/src/H5HGcache.c
index 280d70e..eb71dfb 100644
--- a/src/H5HGcache.c
+++ b/src/H5HGcache.c
@@ -28,7 +28,6 @@
 /* Module Setup */
 /****************/
 
-#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
 #define H5HG_PACKAGE		/*suppress error about including H5HGpkg  */
 
 
@@ -37,7 +36,7 @@
 /***********/
 #include "H5private.h"		/* Generic Functions			*/
 #include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fpkg.h"             /* File access				*/
+#include "H5Fprivate.h"		/* File access				*/
 #include "H5HGpkg.h"		/* Global heaps				*/
 #include "H5MFprivate.h"	/* File memory management		*/
 #include "H5MMprivate.h"	/* Memory management			*/
@@ -130,7 +129,7 @@ H5HG_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *udata)
     /* Read the initial 4k page */
     if(NULL == (heap = H5FL_CALLOC(H5HG_heap_t)))
 	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
-    heap->shared = f->shared;
+    heap->shared = H5F_SHARED(f);
     if(NULL == (heap->chunk = H5FL_BLK_MALLOC(gheap_chunk, (size_t)H5HG_MINSIZE)))
 	HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
     if(H5F_block_read(f, H5FD_MEM_GHEAP, addr, (size_t)H5HG_MINSIZE, dxpl_id, heap->chunk) < 0)
@@ -251,30 +250,9 @@ H5HG_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *udata)
 
     HDassert(max_idx < heap->nused);
 
-    /*
-     * Add the new heap to the CWFS list, removing some other entry if
-     * necessary to make room. We remove the right-most entry that has less
-     * free space than this heap.
-     */
-    if(!f->shared->cwfs) {
-        if(NULL == (f->shared->cwfs = (H5HG_heap_t **)H5MM_malloc(H5HG_NCWFS * sizeof(H5HG_heap_t *))))
-            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
-        f->shared->ncwfs = 1;
-        f->shared->cwfs[0] = heap;
-    } else if(H5HG_NCWFS == f->shared->ncwfs) {
-        int i;          /* Local index variable */
-
-        for(i = H5HG_NCWFS - 1; i >= 0; --i)
-            if(f->shared->cwfs[i]->obj[0].size < heap->obj[0].size) {
-                HDmemmove(f->shared->cwfs + 1, f->shared->cwfs, i * sizeof(H5HG_heap_t *));
-                f->shared->cwfs[0] = heap;
-                break;
-            } /* end if */
-    } else {
-        HDmemmove(f->shared->cwfs + 1, f->shared->cwfs, f->shared->ncwfs * sizeof(H5HG_heap_t *));
-        f->shared->ncwfs += 1;
-        f->shared->cwfs[0] = heap;
-    } /* end else */
+    /* Add the new heap to the CWFS list for the file */
+    if(H5F_cwfs_add(f, heap) < 0)
+	HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, NULL, "unable to add global heap collection to file's CWFS")
 
     ret_value = heap;
 
diff --git a/src/H5HGdbg.c b/src/H5HGdbg.c
index f301701..c263155 100644
--- a/src/H5HGdbg.c
+++ b/src/H5HGdbg.c
@@ -18,15 +18,58 @@
  *
  * Purpose:	Global Heap object debugging functions.
  */
+
+/****************/
+/* Module Setup */
+/****************/
+
 #define H5HG_PACKAGE		/*suppress error about including H5HGpkg	  */
 
 
+/***********/
+/* Headers */
+/***********/
 #include "H5private.h"		/* Generic Functions			*/
 #include "H5ACprivate.h"	/* Metadata cache			*/
 #include "H5Eprivate.h"		/* Error handling		        */
 #include "H5HGpkg.h"		/* Global heaps				*/
 #include "H5Iprivate.h"		/* ID Functions		                */
 
+/****************/
+/* Local Macros */
+/****************/
+
+
+/******************/
+/* Local Typedefs */
+/******************/
+
+
+/********************/
+/* Package Typedefs */
+/********************/
+
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+
+/*********************/
+/* Package Variables */
+/*********************/
+
+
+/*****************************/
+/* Library Private Variables */
+/*****************************/
+
+
+/*******************/
+/* Local Variables */
+/*******************/
+
+
 
 /*-------------------------------------------------------------------------
  * Function:	H5HG_debug
@@ -39,18 +82,6 @@
  *		matzke at llnl.gov
  *		Mar 27, 1998
  *
- * Modifications:
- *		Robb Matzke, 1999-07-28
- *		The ADDR argument is passed by value.
- *
- *              Robb Matzke, LLNL, 2003-06-05
- *              The size does not include the object header, just the data.
- *
- *              John Mainzer, 6/17/05
- *              Modified the function to use the new dirtied parameter of
- *              of H5AC_unprotect() instead of modifying the is_dirty
- *              field of the cache info.
- *
  *-------------------------------------------------------------------------
  */
 herr_t
@@ -142,4 +173,5 @@ done:
         HDONE_ERROR(H5E_HEAP, H5E_PROTECT, FAIL, "unable to release object header");
 
     FUNC_LEAVE_NOAPI(ret_value);
-}
+} /* end H5HG_debug() */
+
diff --git a/src/H5HGpkg.h b/src/H5HGpkg.h
index 6c60656..5d4234f 100644
--- a/src/H5HGpkg.h
+++ b/src/H5HGpkg.h
@@ -71,12 +71,6 @@ H5FL_BLK_EXTERN(gheap_chunk);
 #define H5HG_MINSIZE	4096
 
 /*
- * Maximum length of the CWFS list, the list of remembered collections that
- * have free space.
- */
-#define H5HG_NCWFS	16
-
-/*
  * Pad all global heap messages to a multiple of eight bytes so we can load
  * the entire collection into memory and operate on it there.  Eight should
  * be sufficient for machines that have alignment constraints because our
diff --git a/src/H5HGprivate.h b/src/H5HGprivate.h
index b6cdb4a..3765c47 100644
--- a/src/H5HGprivate.h
+++ b/src/H5HGprivate.h
@@ -35,14 +35,44 @@ typedef struct H5HG_t {
 /* Typedef for heap in memory (defined in H5HGpkg.h) */
 typedef struct H5HG_heap_t H5HG_heap_t;
 
+
+/*
+ * Limit global heap collections to the some reasonable size.  This is
+ * fairly arbitrary, but needs to be small enough that no more than H5HG_MAXIDX
+ * objects will be allocated from a single heap.
+ */
+#define H5HG_MAXSIZE	65536
+
+/* If the module using this macro is allowed access to the private variables, access them directly */
+#ifdef H5HG_PACKAGE
+#define H5HG_ADDR(H)            ((H)->addr)
+#define H5HG_SIZE(H)            ((H)->size)
+#define H5HG_FREE_SIZE(H)       ((H)->obj[0].size)
+#else /* H5HG_PACKAGE */
+#define H5HG_ADDR(H)            (H5HG_get_addr(H))
+#define H5HG_SIZE(H)            (H5HG_get_size(H))
+#define H5HG_FREE_SIZE(H)       (H5HG_get_free_size(H))
+#endif /* H5HG_PACKAGE */
+
+
+/* Main global heap routines */
 H5_DLL herr_t H5HG_insert(H5F_t *f, hid_t dxpl_id, size_t size, void *obj,
 			   H5HG_t *hobj/*out*/);
 H5_DLL void *H5HG_read(H5F_t *f, hid_t dxpl_id, H5HG_t *hobj, void *object, size_t *buf_size/*out*/);
 H5_DLL int H5HG_link(H5F_t *f, hid_t dxpl_id, const H5HG_t *hobj, int adjust);
 H5_DLL herr_t H5HG_remove(H5F_t *f, hid_t dxpl_id, H5HG_t *hobj);
 
+/* Support routines */
+H5_DLL herr_t H5HG_extend(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t need);
+
+/* Query routines */
+H5_DLL haddr_t H5HG_get_addr(const H5HG_heap_t *h);
+H5_DLL size_t H5HG_get_size(const H5HG_heap_t *h);
+H5_DLL size_t H5HG_get_free_size(const H5HG_heap_t *h);
+
 /* Debugging functions */
 H5_DLL herr_t H5HG_debug(H5F_t *f, hid_t dxpl_id, haddr_t addr, FILE *stream, int indent,
 			  int fwidth);
 
-#endif
+#endif /* _H5HGprivate_H */
+
diff --git a/src/H5HGquery.c b/src/H5HGquery.c
new file mode 100644
index 0000000..ae0a2b7
--- /dev/null
+++ b/src/H5HGquery.c
@@ -0,0 +1,145 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help at hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+/*
+ * Programmer:  Quincey Koziol <koziol at hdfgroup.org>
+ *              Wednesday, July 20, 2011
+ *
+ * Purpose:	Query routines for global heaps.
+ *
+ */
+
+/****************/
+/* Module Setup */
+/****************/
+
+#define H5HG_PACKAGE		/*suppress error about including H5HGpkg	  */
+
+
+/***********/
+/* Headers */
+/***********/
+#include "H5private.h"		/* Generic Functions			*/
+#include "H5Eprivate.h"		/* Error handling		  	*/
+#include "H5HGpkg.h"		/* Global heaps				*/
+
+
+/****************/
+/* Local Macros */
+/****************/
+
+
+/******************/
+/* Local Typedefs */
+/******************/
+
+
+/********************/
+/* Package Typedefs */
+/********************/
+
+
+/********************/
+/* Local Prototypes */
+/********************/
+
+
+/*********************/
+/* Package Variables */
+/*********************/
+
+
+/*****************************/
+/* Library Private Variables */
+/*****************************/
+
+
+/*******************/
+/* Local Variables */
+/*******************/
+
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HG_get_addr
+ *
+ * Purpose:	Query the address of a global heap object.
+ *
+ * Return:	Address of heap on success/abort on failure (shouldn't fail)
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, July 20, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+haddr_t
+H5HG_get_addr(const H5HG_heap_t *heap)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5HG_get_addr)
+
+    HDassert(heap);
+
+    FUNC_LEAVE_NOAPI(heap->addr)
+} /* H5HG_get_addr() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HG_get_size
+ *
+ * Purpose:	Query the size of a global heap object.
+ *
+ * Return:	Size of heap on success/abort on failure (shouldn't fail)
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, July 20, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5HG_get_size(const H5HG_heap_t *heap)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5HG_get_size)
+
+    HDassert(heap);
+
+    FUNC_LEAVE_NOAPI(heap->size)
+} /* H5HG_get_size() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5HG_get_free_size
+ *
+ * Purpose:	Query the free size of a global heap object.
+ *
+ * Return:	Free size of heap on success/abort on failure (shouldn't fail)
+ *
+ * Programmer:	Quincey Koziol
+ *              Wednesday, July 20, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+size_t
+H5HG_get_free_size(const H5HG_heap_t *heap)
+{
+    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
+    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5HG_get_free_size)
+
+    HDassert(heap);
+
+    FUNC_LEAVE_NOAPI(heap->obj[0].size)
+} /* H5HG_get_free_size() */
+
diff --git a/src/H5HL.c b/src/H5HL.c
index 4665474..e37eb9f 100644
--- a/src/H5HL.c
+++ b/src/H5HL.c
@@ -29,7 +29,6 @@
 /* Module Setup */
 /****************/
 
-#define H5F_PACKAGE		/* Suppress error about including H5Fpkg  */
 #define H5HL_PACKAGE		/* Suppress error about including H5HLpkg */
 
 
@@ -38,7 +37,7 @@
 /***********/
 #include "H5private.h"		/* Generic Functions			*/
 #include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fpkg.h"             /* File access				*/
+#include "H5Fprivate.h"         /* File access				*/
 #include "H5HLpkg.h"		/* Local Heaps				*/
 #include "H5MFprivate.h"	/* File memory management		*/
 
@@ -154,9 +153,12 @@ H5HL_create(H5F_t *f, hid_t dxpl_id, size_t size_hint, haddr_t *addr_p/*out*/)
 	heap->freelist->offset = 0;
 	heap->freelist->size = size_hint;
 	heap->freelist->prev = heap->freelist->next = NULL;
+        heap->free_block = 0;
     } /* end if */
-    else
+    else {
 	heap->freelist = NULL;
+        heap->free_block = H5HL_FREE_NULL;
+    } /* end else */
 
     /* Allocate the heap prefix */
     if(NULL == (prfx = H5HL_prfx_new(heap)))
@@ -460,8 +462,6 @@ H5HL_protect(H5F_t *f, hid_t dxpl_id, haddr_t addr, H5AC_protect_t rw)
     prfx_udata.sizeof_addr = H5F_SIZEOF_ADDR(f);
     prfx_udata.prfx_addr = addr;
     prfx_udata.sizeof_prfx = H5HL_SIZEOF_HDR(f);
-    prfx_udata.loaded = FALSE;
-    prfx_udata.free_block = H5HL_FREE_NULL;
 
     /* Protect the local heap prefix */
     if(NULL == (prfx = (H5HL_prfx_t *)H5AC_protect(f, dxpl_id, H5AC_LHEAP_PRFX, addr, &prfx_udata, rw)))
@@ -483,8 +483,6 @@ H5HL_protect(H5F_t *f, hid_t dxpl_id, haddr_t addr, H5AC_protect_t rw)
 
             /* Construct the user data for protect callback */
             dblk_udata.heap = heap;
-            dblk_udata.free_block = prfx_udata.loaded ? prfx_udata.free_block :
-                    (heap->freelist ? heap->freelist->offset : H5HL_FREE_NULL);
             dblk_udata.loaded = FALSE;
 
             /* Protect the local heap data block */
@@ -1077,8 +1075,6 @@ H5HL_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr)
     prfx_udata.sizeof_addr = H5F_SIZEOF_ADDR(f);
     prfx_udata.prfx_addr = addr;
     prfx_udata.sizeof_prfx = H5HL_SIZEOF_HDR(f);
-    prfx_udata.loaded = FALSE;
-    prfx_udata.free_block = H5HL_FREE_NULL;
 
     /* Protect the local heap prefix */
     if(NULL == (prfx = (H5HL_prfx_t *)H5AC_protect(f, dxpl_id, H5AC_LHEAP_PRFX, addr, &prfx_udata, H5AC_WRITE)))
@@ -1093,8 +1089,6 @@ H5HL_delete(H5F_t *f, hid_t dxpl_id, haddr_t addr)
 
         /* Construct the user data for protect callback */
         dblk_udata.heap = heap;
-        dblk_udata.free_block = prfx_udata.loaded ? prfx_udata.free_block :
-                (heap->freelist ? heap->freelist->offset : H5HL_FREE_NULL);
         dblk_udata.loaded = FALSE;
 
         /* Protect the local heap data block */
@@ -1157,8 +1151,6 @@ H5HL_get_size(H5F_t *f, hid_t dxpl_id, haddr_t addr, size_t *size)
     prfx_udata.sizeof_addr = H5F_SIZEOF_ADDR(f);
     prfx_udata.prfx_addr = addr;
     prfx_udata.sizeof_prfx = H5HL_SIZEOF_HDR(f);
-    prfx_udata.loaded = FALSE;
-    prfx_udata.free_block = H5HL_FREE_NULL;
 
     /* Protect the local heap prefix */
     if(NULL == (prfx = (H5HL_prfx_t *)H5AC_protect(f, dxpl_id, H5AC_LHEAP_PRFX, addr, &prfx_udata, H5AC_READ)))
@@ -1211,8 +1203,6 @@ H5HL_heapsize(H5F_t *f, hid_t dxpl_id, haddr_t addr, hsize_t *heap_size)
     prfx_udata.sizeof_addr = H5F_SIZEOF_ADDR(f);
     prfx_udata.prfx_addr = addr;
     prfx_udata.sizeof_prfx = H5HL_SIZEOF_HDR(f);
-    prfx_udata.loaded = FALSE;
-    prfx_udata.free_block = H5HL_FREE_NULL;
 
     /* Protect the local heap prefix */
     if(NULL == (prfx = (H5HL_prfx_t *)H5AC_protect(f, dxpl_id, H5AC_LHEAP_PRFX, addr, &prfx_udata, H5AC_READ)))
diff --git a/src/H5HLcache.c b/src/H5HLcache.c
index 01532ca..34673d5 100644
--- a/src/H5HLcache.c
+++ b/src/H5HLcache.c
@@ -132,9 +132,10 @@ const H5AC_class_t H5AC_LHEAP_DBLK[1] = {{
  *-------------------------------------------------------------------------
  */
 static herr_t
-H5HL_fl_deserialize(H5HL_t *heap, hsize_t free_block)
+H5HL_fl_deserialize(H5HL_t *heap)
 {
     H5HL_free_t *fl = NULL, *tail = NULL;      /* Heap free block nodes */
+    hsize_t free_block;                 /* Offset of free block */
     herr_t ret_value = SUCCEED;         /* Return value */
 
     FUNC_ENTER_NOAPI_NOINIT(H5HL_fl_deserialize)
@@ -144,6 +145,7 @@ H5HL_fl_deserialize(H5HL_t *heap, hsize_t free_block)
     HDassert(!heap->freelist);
 
     /* Build free list */
+    free_block = heap->free_block;
     while(H5HL_FREE_NULL != free_block) {
         const uint8_t *p;               /* Pointer into image buffer */
 
@@ -308,8 +310,8 @@ H5HL_prefix_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
     H5F_DECODE_LENGTH_LEN(p, heap->dblk_size, udata->sizeof_size);
 
     /* Free list head */
-    H5F_DECODE_LENGTH_LEN(p, udata->free_block, udata->sizeof_size);
-    if(udata->free_block != H5HL_FREE_NULL && udata->free_block >= heap->dblk_size)
+    H5F_DECODE_LENGTH_LEN(p, heap->free_block, udata->sizeof_size);
+    if(heap->free_block != H5HL_FREE_NULL && heap->free_block >= heap->dblk_size)
 	HGOTO_ERROR(H5E_HEAP, H5E_BADVALUE, NULL, "bad heap free list")
 
     /* Heap data address */
@@ -343,7 +345,7 @@ H5HL_prefix_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
             } /* end else */
 
             /* Build free list */
-            if(H5HL_fl_deserialize(heap, udata->free_block) < 0)
+            if(H5HL_fl_deserialize(heap) < 0)
                 HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, NULL, "can't initialize free list")
         } /* end if */
         else
@@ -351,9 +353,6 @@ H5HL_prefix_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
             heap->single_cache_obj = FALSE;
     } /* end if */
 
-    /* Set flag to indicate prefix from loaded from file */
-    udata->loaded = TRUE;
-
     /* Set return value */
     ret_value = prfx;
 
@@ -406,7 +405,6 @@ H5HL_prefix_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
 
     if(prfx->cache_info.is_dirty) {
         H5HL_t *heap = prfx->heap; /* Pointer to the local heap */
-        H5HL_free_t *fl = heap->freelist; /* Pointer to heap's free list */
         uint8_t *buf;           /* Pointer to heap buffer */
         size_t buf_size;        /* Size of buffer for encoding & writing heap info */
         uint8_t *p;             /* Pointer into raw data buffer */
@@ -424,6 +422,9 @@ H5HL_prefix_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
         if(NULL == (buf = (uint8_t *)H5WB_actual(wb, buf_size)))
             HGOTO_ERROR(H5E_HEAP, H5E_NOSPACE, FAIL, "can't get actual buffer")
 
+        /* Update the free block value from the free list */
+        heap->free_block = heap->freelist ? heap->freelist->offset : H5HL_FREE_NULL;
+
         /* Serialize the heap prefix */
         p = buf;
         HDmemcpy(p, H5HL_MAGIC, (size_t)H5_SIZEOF_MAGIC);
@@ -433,18 +434,18 @@ H5HL_prefix_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
         *p++ = 0;	/*reserved*/
         *p++ = 0;	/*reserved*/
         H5F_ENCODE_LENGTH_LEN(p, heap->dblk_size, heap->sizeof_size);
-        H5F_ENCODE_LENGTH_LEN(p, fl ? fl->offset : H5HL_FREE_NULL, heap->sizeof_size);
+        H5F_ENCODE_LENGTH_LEN(p, heap->free_block, heap->sizeof_size);
         H5F_addr_encode_len(heap->sizeof_addr, &p, heap->dblk_addr);
 
         /* Check if the local heap is a single object in cache */
         if(heap->single_cache_obj) {
-            if((p - buf) < heap->prfx_size) {
+            if((size_t)(p - buf) < heap->prfx_size) {
                 size_t gap;         /* Size of gap between prefix and data block */
 
                 /* Set p to the start of the data block.  This is necessary because
                  * there may be a gap between the used portion of the prefix and the
                  * data block due to alignment constraints. */
-                gap = heap->prfx_size - (p - buf);
+                gap = heap->prfx_size - (size_t)(p - buf);
                 HDmemset(p, 0, gap);
                 p += gap;
             } /* end if */
@@ -652,7 +653,7 @@ H5HL_datablock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
             HGOTO_ERROR(H5E_HEAP, H5E_READERROR, NULL, "unable to read local heap data block")
 
         /* Build free list */
-        if(H5HL_fl_deserialize(udata->heap, udata->free_block) < 0)
+        if(H5HL_fl_deserialize(udata->heap) < 0)
             HGOTO_ERROR(H5E_HEAP, H5E_CANTINIT, NULL, "can't initialize free list")
     } /* end if */
 
@@ -705,6 +706,9 @@ H5HL_datablock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
     if(dblk->cache_info.is_dirty) {
         H5HL_t *heap = dblk->heap;      /* Pointer to the local heap */
 
+        /* Update the free block value from the free list */
+        heap->free_block = heap->freelist ? heap->freelist->offset : H5HL_FREE_NULL;
+
         /* Serialize the free list into the heap data's image */
         H5HL_fl_serialize(heap);
 
diff --git a/src/H5HLpkg.h b/src/H5HLpkg.h
index b7e0ece..bf9be2c 100644
--- a/src/H5HLpkg.h
+++ b/src/H5HLpkg.h
@@ -90,18 +90,19 @@ struct H5HL_t {
     size_t                  sizeof_size; /* Size of file sizes */
     size_t                  sizeof_addr; /* Size of file addresses */
     hbool_t                 single_cache_obj;   /* Indicate if the heap is a single object in the cache */
+    H5HL_free_t		   *freelist;	/*the free list			*/
 
     /* Prefix-specific fields */
     H5HL_prfx_t            *prfx;       /* The prefix object for the heap */
     haddr_t                 prfx_addr;  /* address of heap prefix */
     size_t                  prfx_size;  /* size of heap prefix */
+    hsize_t                 free_block; /* Address of first free block */
 
     /* Data block-specific fields */
     H5HL_dblk_t            *dblk;       /* The data block object for the heap */
     haddr_t		    dblk_addr;	/* address of data block	*/
     size_t		    dblk_size;	/* size of heap data block on disk and in mem */
     uint8_t		   *dblk_image;	/* The data block image */
-    H5HL_free_t		   *freelist;	/*the free list			*/
 };
 
 /* Struct for heap data block */
@@ -127,15 +128,12 @@ typedef struct H5HL_cache_prfx_ud_t {
     size_t sizeof_prfx;                 /* Size of heap prefix */
 
     /* Upwards */
-    hbool_t loaded;                     /* Whether prefix was loaded from file */
-    hsize_t free_block;                 /* First free block in heap */
 } H5HL_cache_prfx_ud_t;
 
 /* Callback information for loading local heap data block from disk */
 typedef struct H5HL_cache_dblk_ud_t {
     /* Downwards */
     H5HL_t *heap;                       /* Local heap */
-    hsize_t free_block;                 /* First free block in heap */
 
     /* Upwards */
     hbool_t loaded;                     /* Whether data block was loaded from file */
diff --git a/src/H5HLprivate.h b/src/H5HLprivate.h
index 8679bee..0b044b6 100644
--- a/src/H5HLprivate.h
+++ b/src/H5HLprivate.h
@@ -44,7 +44,7 @@
 #  undef H5HL_DEBUG
 #endif
 
-#define H5HL_ALIGN(X)	(((X)+7)&(unsigned)(~0x07)) /*align on 8-byte boundary	*/
+#define H5HL_ALIGN(X)	((((unsigned)X)+7)&(unsigned)(~0x07)) /*align on 8-byte boundary	*/
 
 #define H5HL_SIZEOF_FREE(F)						      \
     H5HL_ALIGN(H5F_SIZEOF_SIZE (F) +	/*ptr to next free block	*/    \
diff --git a/src/H5L.c b/src/H5L.c
index 0b25928..bdfae2e 100644
--- a/src/H5L.c
+++ b/src/H5L.c
@@ -17,7 +17,6 @@
 /* Module Setup */
 /****************/
 
-#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
 #define H5G_PACKAGE		/*suppress error about including H5Gpkg   */
 #define H5L_PACKAGE		/*suppress error about including H5Lpkg   */
 
@@ -32,7 +31,7 @@
 #include "H5Dprivate.h"         /* Datasets                             */
 #include "H5Eprivate.h"         /* Error handling                       */
 #include "H5Gpkg.h"             /* Groups                               */
-#include "H5Fpkg.h"             /* File access                          */
+#include "H5Fprivate.h"		/* File access                          */
 #include "H5Iprivate.h"         /* IDs                                  */
 #include "H5Lpkg.h"             /* Links                                */
 #include "H5MMprivate.h"        /* Memory management                    */
@@ -1697,7 +1696,7 @@ H5L_link_cb(H5G_loc_t *grp_loc/*in*/, const char *name, const H5O_link_t UNUSED
         } /* end if */
         else {
             /* Check that both objects are in same file */
-            if(grp_loc->oloc->file->shared != udata->file->shared)
+            if(!H5F_SAME_SHARED(grp_loc->oloc->file, udata->file))
                 HGOTO_ERROR(H5E_SYM, H5E_BADVALUE, FAIL, "interfile hard links are not allowed")
         } /* end else */
     } /* end if */
@@ -1776,7 +1775,7 @@ done:
         oloc.file = grp_loc->oloc->file;
         oloc.addr = udata->lnk->u.hard.addr;
 
-        /* Decrement refcount on superblock extension's object header in memory */
+        /* Decrement refcount on new object's object header in memory */
         if(H5O_dec_rc_by_loc(&oloc, udata->dxpl_id) < 0)
            HDONE_ERROR(H5E_LINK, H5E_CANTDEC, FAIL, "unable to decrement refcount on newly created object")
     } /* end if */
@@ -2429,7 +2428,7 @@ H5L_move_dest_cb(H5G_loc_t *grp_loc/*in*/, const char *name,
     /* Check for crossing file boundaries with a new hard link */
     if(udata->lnk->type == H5L_TYPE_HARD) {
         /* Check that both objects are in same file */
-        if(grp_loc->oloc->file->shared != udata->file->shared)
+        if(!H5F_SAME_SHARED(grp_loc->oloc->file, udata->file))
             HGOTO_ERROR(H5E_SYM, H5E_CANTINIT, FAIL, "moving a link across files is not allowed")
     } /* end if */
 
diff --git a/src/H5Lexternal.c b/src/H5Lexternal.c
index 74ef46b..02213d1 100644
--- a/src/H5Lexternal.c
+++ b/src/H5Lexternal.c
@@ -146,10 +146,9 @@ H5L_build_name(char *prefix, char *file_name, char **full_name/*out*/)
 
     /* Copy the prefix into the buffer */
     HDstrcpy(*full_name, prefix);
-#ifndef H5_VMS
+
     if (!CHECK_DELIMITER(prefix[prefix_len-1]))
         HDstrcat(*full_name, DIR_SEPS);
-#endif
 
     /* Add the external link's filename to the prefix supplied */
     HDstrcat(*full_name, file_name);
diff --git a/src/H5MFaggr.c b/src/H5MFaggr.c
index dc3adf1..1e43bfb 100644
--- a/src/H5MFaggr.c
+++ b/src/H5MFaggr.c
@@ -34,7 +34,7 @@
 /***********/
 #include "H5private.h"		/* Generic Functions			*/
 #include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fpkg.h"             /* File access				*/
+#include "H5Fpkg.h"		/* File access				*/
 #include "H5MFpkg.h"		/* File memory management		*/
 
 
diff --git a/src/H5MM.c b/src/H5MM.c
index 1de4880..5555fc9 100644
--- a/src/H5MM.c
+++ b/src/H5MM.c
@@ -110,7 +110,8 @@ H5MM_calloc(size_t size)
  *		H5MM_realloc (NULL, 0)	  <==> NULL
  *
  * Return:	Success:	Ptr to new memory or NULL if the memory
- *				was freed.
+ *				was freed or HDrealloc couldn't allocate
+ *				memory.
  *
  *		Failure:	NULL
  *
@@ -130,37 +131,32 @@ H5MM_realloc(void *mem, size_t size)
 
     if(NULL == mem) {
 	if(0 == size)
-            mem = NULL;
+            ret_value = NULL;
         else
-            mem = H5MM_malloc(size);
+            ret_value = H5MM_malloc(size);
     } /* end if */
     else if(0 == size)
-	mem = H5MM_xfree(mem);
+	ret_value = H5MM_xfree(mem);
     else
-	mem = HDrealloc(mem, size);
-
-    /* Set return value */
-    ret_value = mem;
+	ret_value = HDrealloc(mem, size);
 
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5MM_realloc() */
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5MM_xstrdup
- *
- * Purpose:	Duplicates a string.  If the string to be duplicated is the
- *		null pointer, then return null.	 If the string to be duplicated
- *		is the empty string then return a new empty string.
+ * Function:    H5MM_xstrdup
  *
- * Return:	Success:	Ptr to a new string (or null if no string).
+ * Purpose:     Duplicates a string, including memory allocation.
+ *              NULL is an acceptable value for the input string.
  *
- *		Failure:	abort()
+ * Return:      Success:    Pointer to a new string (NULL if s is NULL).
  *
- * Programmer:	Robb Matzke
- *		matzke at llnl.gov
- *		Jul 10 1997
+ *              Failure:    abort()
  *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Jul 10 1997
  *-------------------------------------------------------------------------
  */
 char *
@@ -168,36 +164,35 @@ H5MM_xstrdup(const char *s)
 {
     char	*ret_value = NULL;
 
-    /* Use FUNC_ENTER_NOAPI_NOINIT_NOFUNC here to avoid performance issues */
-    FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5MM_xstrdup)
+    FUNC_ENTER_NOAPI(H5MM_xstrdup, NULL)
 
     if(s) {
-        ret_value = (char *)H5MM_malloc(HDstrlen(s) + 1);
-        HDassert(ret_value);
+        if(NULL == (ret_value = (char *)H5MM_malloc(HDstrlen(s) + 1)))
+            HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed")
         HDstrcpy(ret_value, s);
     } /* end if */
 
+done:
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5MM_xstrdup() */
 
 
 /*-------------------------------------------------------------------------
- * Function:	H5MM_strdup
- *
- * Purpose:	Duplicates a string.  If the string to be duplicated is the
- *		null pointer, then return null.	 If the string to be duplicated
- *		is the empty string then return a new empty string.
+ * Function:    H5MM_strdup
  *
- * Return:	Success:	Ptr to a new string (or null if no string).
+ * Purpose:     Duplicates a string, including memory allocation.
+ *              NULL is NOT an acceptable value for the input string.
  *
- *		Failure:	abort()
+ *              If the string to be duplicated is the NULL pointer, then
+ *              an error will be raised.
  *
- * Programmer:	Robb Matzke
- *		matzke at llnl.gov
- *		Jul 10 1997
+ * Return:      Success:    Pointer to a new string
  *
- * Modifications:
+ *              Failure:    abort()
  *
+ * Programmer:  Robb Matzke
+ *              matzke at llnl.gov
+ *              Jul 10 1997
  *-------------------------------------------------------------------------
  */
 char *
diff --git a/src/H5O.c b/src/H5O.c
index 41b9865..59f09b7 100644
--- a/src/H5O.c
+++ b/src/H5O.c
@@ -28,7 +28,6 @@
 /* Module Setup */
 /****************/
 
-#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
 #define H5O_PACKAGE		/*suppress error about including H5Opkg	  */
 
 /* Interface initialization */
@@ -39,8 +38,9 @@
 /***********/
 #include "H5private.h"		/* Generic Functions			*/
 #include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fpkg.h"		/* File access				*/
+#include "H5Fprivate.h"		/* File access				*/
 #include "H5FLprivate.h"	/* Free lists                           */
+#include "H5FOprivate.h"        /* File objects                         */
 #include "H5Iprivate.h"		/* IDs			  		*/
 #include "H5Lprivate.h"		/* Links				*/
 #include "H5MFprivate.h"	/* File memory management		*/
@@ -1121,7 +1121,7 @@ H5O_create(H5F_t *f, hid_t dxpl_id, size_t size_hint, size_t initial_rc,
 
     /* check args */
     HDassert(f);
-    HDassert(f->intent & H5F_ACC_RDWR);
+    HDassert(H5F_INTENT(f) & H5F_ACC_RDWR);
     HDassert(loc);
     HDassert(TRUE == H5P_isa_class(ocpl_id, H5P_OBJECT_CREATE));
 
@@ -1310,7 +1310,7 @@ H5O_open(H5O_loc_t *loc)
     if(loc->holding_file)
      	loc->holding_file = FALSE;
     else
-        loc->file->nopen_objs++;
+        H5F_INCR_NOPEN_OBJS(loc->file);
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
@@ -1427,17 +1427,17 @@ H5O_close(H5O_loc_t *loc)
     /* Check args */
     HDassert(loc);
     HDassert(loc->file);
-    HDassert(loc->file->nopen_objs > 0);
+    HDassert(H5F_NOPEN_OBJS(loc->file) > 0);
 
     /* Decrement open-lock counters */
-    --loc->file->nopen_objs;
+    H5F_DECR_NOPEN_OBJS(loc->file);
 
 #ifdef H5O_DEBUG
     if(H5DEBUG(O)) {
-	if(loc->file->file_id < 0 && 1 == loc->file->shared->nrefs)
+	if(H5F_FILE_ID(loc->file)< 0 && 1 == H5F_NREFS(loc->file))
 	    HDfprintf(H5DEBUG(O), "< %a auto %lu remaining\n",
 		      loc->addr,
-		      (unsigned long)(loc->file->nopen_objs));
+		      (unsigned long)H5F_NOPEN_OBJS(loc->file));
 	else
 	    HDfprintf(H5DEBUG(O), "< %a\n", loc->addr);
     } /* end if */
@@ -1447,7 +1447,7 @@ H5O_close(H5O_loc_t *loc)
      * If the file open object count has reached the number of open mount points
      * (each of which has a group open in the file) attempt to close the file.
      */
-    if(loc->file->nopen_objs == loc->file->nmounts)
+    if(H5F_NOPEN_OBJS(loc->file) == H5F_NMOUNTS(loc->file))
         /* Attempt to close down the file hierarchy */
         if(H5F_try_close(loc->file) < 0)
             HGOTO_ERROR(H5E_OHDR, H5E_CANTCLOSEFILE, FAIL, "problem attempting file close")
@@ -2550,7 +2550,7 @@ H5O_loc_copy(H5O_loc_t *dst, H5O_loc_t *src, H5_copy_depth_t depth)
          * hold it open, too.
          */
         if(src->holding_file)
-            dst->file->nopen_objs++;
+            H5F_INCR_NOPEN_OBJS(dst->file);
     } else if(depth == H5_COPY_SHALLOW) {
         H5O_loc_reset(src);
     } /* end if */
@@ -2584,7 +2584,7 @@ H5O_loc_hold_file(H5O_loc_t *loc)
 
     /* If this location is not already holding its file open, do so. */
     if(!loc->holding_file) {
-        loc->file->nopen_objs++;
+        H5F_INCR_NOPEN_OBJS(loc->file);
         loc->holding_file = TRUE;
     } /* end if */
 
@@ -2619,9 +2619,9 @@ H5O_loc_free(H5O_loc_t *loc)
 
     /* If this location is holding its file open try to close the file. */
     if(loc->holding_file) {
-        loc->file->nopen_objs--;
+        H5F_DECR_NOPEN_OBJS(loc->file);
         loc->holding_file = FALSE;
-        if(loc->file->nopen_objs <= 0) {
+        if(H5F_NOPEN_OBJS(loc->file) <= 0) {
             if(H5F_try_close(loc->file) < 0)
                 HGOTO_ERROR(H5E_FILE, H5E_CANTCLOSEFILE, FAIL, "can't close file")
         } /* end if */
diff --git a/src/H5Oainfo.c b/src/H5Oainfo.c
index 158f795..20ebf26 100644
--- a/src/H5Oainfo.c
+++ b/src/H5Oainfo.c
@@ -403,7 +403,7 @@ H5O_ainfo_pre_copy_file(H5F_t UNUSED *file_src, const void UNUSED *native_src,
  */
 static void *
 H5O_ainfo_copy_file(H5F_t *file_src, void *mesg_src, H5F_t *file_dst,
-    hbool_t *recompute_size, H5O_copy_t *cpy_info, void UNUSED *udata, hid_t dxpl_id)
+    hbool_t UNUSED *recompute_size, H5O_copy_t *cpy_info, void UNUSED *udata, hid_t dxpl_id)
 {
     H5O_ainfo_t *ainfo_src = (H5O_ainfo_t *)mesg_src;
     H5O_ainfo_t *ainfo_dst = NULL;
@@ -430,9 +430,6 @@ H5O_ainfo_copy_file(H5F_t *file_src, void *mesg_src, H5F_t *file_dst,
 
         if(H5A_dense_create(file_dst, dxpl_id, ainfo_dst) < 0)
             HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to create dense storage for attributes")
-
-        if((H5A_dense_copy_file_all(file_src, ainfo_src, file_dst, ainfo_dst, recompute_size, cpy_info, dxpl_id)) < 0)
-            HGOTO_ERROR(H5E_OHDR, H5E_CANTINIT, NULL, "unable to create dense storage for attributes")
     } /* end if */
 
     /* Set return value */
@@ -452,7 +449,7 @@ done:
  *
  * Purpose:     Finish copying a message from between files.
  *              We have to copy the values of a reference attribute in the
- *              post copy because H5O_post_copy_file() fails at the case that
+ *              post copy because H5O_post_copy_file() fails in the case that
  *              an object may have a reference attribute that points to the
  *              object itself.
  *
@@ -475,10 +472,10 @@ H5O_ainfo_post_copy_file(const H5O_loc_t *src_oloc, const void *mesg_src,
     HDassert(ainfo_src);
 
     if(H5F_addr_defined(ainfo_src->fheap_addr)) {
-        if ( H5A_dense_post_copy_file_all(src_oloc, ainfo_src, dst_oloc,
-            (H5O_ainfo_t *)mesg_dst, dxpl_id, cpy_info) < 0)
-            HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, FAIL, "can't copy attribute")
-    }
+        if(H5A_dense_post_copy_file_all(src_oloc, ainfo_src, dst_oloc,
+                (H5O_ainfo_t *)mesg_dst, dxpl_id, cpy_info) < 0)
+        HGOTO_ERROR(H5E_ATTR, H5E_CANTCOPY, FAIL, "can't copy attribute")
+    } /* end if */
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5Oattribute.c b/src/H5Oattribute.c
index 8bb3670..e3a3973 100644
--- a/src/H5Oattribute.c
+++ b/src/H5Oattribute.c
@@ -169,11 +169,15 @@ static htri_t H5O_attr_find_opened_attr(const H5O_loc_t *loc, H5A_t **attr,
  *		koziol at hdfgroup.org
  *		Dec  4 2006
  *
+ * Modifications:
+ *      Vailin Choi; Sept 2011
+ *      Indicate that the object header is modified and might possibly need
+ *      to condense messages in the object header
  *-------------------------------------------------------------------------
  */
 static herr_t
 H5O_attr_to_dense_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/,
-    unsigned UNUSED sequence, hbool_t *oh_modified, void *_udata/*in,out*/)
+    unsigned UNUSED sequence, unsigned *oh_modified, void *_udata/*in,out*/)
 {
     H5O_iter_cvt_t *udata = (H5O_iter_cvt_t *)_udata;   /* Operator user data */
     H5A_t *attr = (H5A_t *)mesg->native;        /* Pointer to attribute to insert */
@@ -199,7 +203,7 @@ H5O_attr_to_dense_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/,
         HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, H5_ITER_ERROR, "unable to convert into null message")
 
     /* Indicate that the object header was modified */
-    *oh_modified = TRUE;
+    *oh_modified = H5O_MODIFY_CONDENSE;
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
@@ -415,11 +419,15 @@ done:
  *		koziol at hdfgroup.org
  *		Dec 11 2006
  *
+ * Modifications:
+ *	Vailin Choi; September 2011
+ *      Change oh_modified from boolean to unsigned
+ *      (See H5Oprivate.h for possible flags)
  *-------------------------------------------------------------------------
  */
 static herr_t
 H5O_attr_open_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/, unsigned sequence,
-    hbool_t UNUSED *oh_modified, void *_udata/*in,out*/)
+    unsigned UNUSED *oh_modified, void *_udata/*in,out*/)
 {
     H5O_iter_opn_t *udata = (H5O_iter_opn_t *)_udata;   /* Operator user data */
     herr_t ret_value = H5_ITER_CONT;   /* Return value */
@@ -527,7 +535,7 @@ H5O_attr_open_by_name(const H5O_loc_t *loc, const char *name, hid_t dxpl_id)
 
             /* Check that we found the attribute */
             if(!udata.attr)
-                HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, NULL, "can't locate attribute")
+                HGOTO_ERROR(H5E_ATTR, H5E_NOTFOUND, NULL, "can't locate attribute: '%s'", name)
 
             /* Get attribute opened from object header */
             HDassert(udata.attr);
@@ -788,7 +796,7 @@ H5O_attr_update_shared(H5F_t *f, hid_t dxpl_id, H5O_t *oh, H5A_t *attr,
 
     /* Store new version of message as a SOHM */
     /* (should always work, since we're not changing the size of the attribute) */
-    if((shared_mesg = H5SM_try_share(f, dxpl_id, oh, H5O_ATTR_ID, attr, NULL)) == 0)
+    if((shared_mesg = H5SM_try_share(f, dxpl_id, oh, 0, H5O_ATTR_ID, attr, NULL)) == 0)
         HGOTO_ERROR(H5E_ATTR, H5E_BADMESG, FAIL, "attribute changed sharing status")
     else if(shared_mesg < 0)
         HGOTO_ERROR(H5E_ATTR, H5E_BADMESG, FAIL, "can't share attribute")
@@ -842,11 +850,16 @@ done:
  *              4 June 2008
  *              Took out the data copying part because the attribute data
  *              is shared between attribute handle and object header.
+ *
+ * Modifications:
+ *      Vailin Choi; Sept 2011
+ *      Indicate that the object header is modified but does not need to
+ *	condense messages in the object header
  *-------------------------------------------------------------------------
  */
 static herr_t
 H5O_attr_write_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/,
-    unsigned UNUSED sequence, hbool_t *oh_modified, void *_udata/*in,out*/)
+    unsigned UNUSED sequence, unsigned *oh_modified, void *_udata/*in,out*/)
 {
     H5O_iter_wrt_t *udata = (H5O_iter_wrt_t *)_udata;   /* Operator user data */
     H5O_chunk_proxy_t *chk_proxy = NULL;        /* Chunk that message is in */
@@ -895,7 +908,7 @@ H5O_attr_write_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/,
                 HGOTO_ERROR(H5E_ATTR, H5E_CANTUPDATE, H5_ITER_ERROR, "unable to update attribute in shared storage")
 
         /* Indicate that the object header was modified */
-        *oh_modified = TRUE;
+        *oh_modified = H5O_MODIFY;
 
         /* Indicate that the attribute was found */
         udata->found = TRUE;
@@ -1001,11 +1014,15 @@ done:
  *		koziol at hdfgroup.org
  *		Dec  5 2006
  *
+ * Modifications:
+ *      Vailin Choi; September 2011
+ *      Change "oh_modified" from boolean to unsigned
+ *      (See H5Oprivate.h for possible flags)
  *-------------------------------------------------------------------------
  */
 static herr_t
 H5O_attr_rename_chk_cb(H5O_t UNUSED *oh, H5O_mesg_t *mesg/*in,out*/,
-    unsigned UNUSED sequence, hbool_t UNUSED *oh_modified, void *_udata/*in,out*/)
+    unsigned UNUSED sequence, unsigned UNUSED *oh_modified, void *_udata/*in,out*/)
 {
     H5O_iter_ren_t *udata = (H5O_iter_ren_t *)_udata;   /* Operator user data */
     herr_t ret_value = H5_ITER_CONT;   /* Return value */
@@ -1047,11 +1064,15 @@ H5O_attr_rename_chk_cb(H5O_t UNUSED *oh, H5O_mesg_t *mesg/*in,out*/,
  *		koziol at hdfgroup.org
  *		Dec  5 2006
  *
+ * Modifications:
+ *      Vailin Choi; Sept 2011
+ *      Indicate that the object header is modified and might possibly need
+ *      to condense messages in the object header
  *-------------------------------------------------------------------------
  */
 static herr_t
 H5O_attr_rename_mod_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/,
-    unsigned UNUSED sequence, hbool_t *oh_modified, void *_udata/*in,out*/)
+    unsigned UNUSED sequence, unsigned *oh_modified, void *_udata/*in,out*/)
 {
     H5O_iter_ren_t *udata = (H5O_iter_ren_t *)_udata;   /* Operator user data */
     H5O_chunk_proxy_t *chk_proxy = NULL;        /* Chunk that message is in */
@@ -1125,6 +1146,8 @@ H5O_attr_rename_mod_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/,
                 if(H5O_release_mesg(udata->f, udata->dxpl_id, oh, mesg, FALSE) < 0)
                     HGOTO_ERROR(H5E_ATTR, H5E_CANTDELETE, H5_ITER_ERROR, "unable to release previous attribute")
 
+		*oh_modified = H5O_MODIFY_CONDENSE;
+
                 /* Append renamed attribute to object header */
                 /* (Don't let it become shared) */
                 if(H5O_msg_append_real(udata->f, udata->dxpl_id, oh, H5O_MSG_ATTR, (mesg->flags | H5O_MSG_FLAG_DONTSHARE), 0, attr) < 0)
@@ -1139,7 +1162,7 @@ H5O_attr_rename_mod_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/,
         } /* end else */
 
         /* Indicate that the object header was modified */
-        *oh_modified = TRUE;
+        *oh_modified |= H5O_MODIFY;
 
         /* Indicate that we found an existing attribute with the old name */
         udata->found = TRUE;
@@ -1507,11 +1530,15 @@ done:
  *		koziol at hdfgroup.org
  *		Dec 11 2006
  *
+ * Modifications:
+ *      Vailin Choi; Sept 2011
+ *      Indicate that the object header is modified and might possibly need
+ *      to condense messages in the object header
  *-------------------------------------------------------------------------
  */
 static herr_t
 H5O_attr_remove_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/,
-    unsigned UNUSED sequence, hbool_t *oh_modified, void *_udata/*in,out*/)
+    unsigned UNUSED sequence, unsigned *oh_modified, void *_udata/*in,out*/)
 {
     H5O_iter_rm_t *udata = (H5O_iter_rm_t *)_udata;   /* Operator user data */
     herr_t ret_value = H5_ITER_CONT;    /* Return value */
@@ -1530,7 +1557,7 @@ H5O_attr_remove_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/,
             HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, H5_ITER_ERROR, "unable to convert into null message")
 
         /* Indicate that the object header was modified */
-        *oh_modified = TRUE;
+        *oh_modified = H5O_MODIFY_CONDENSE;
 
         /* Indicate that this message is the attribute to be deleted */
         udata->found = TRUE;
@@ -1786,11 +1813,15 @@ done:
  *		koziol at hdfgroup.org
  *		Dec 11 2006
  *
+ * Modifications:
+ *      Vailin Choi; September 2011
+ *      Change "oh_modified" from boolean to unsigned
+ *      (See H5Oprivate.h for possible flags)
  *-------------------------------------------------------------------------
  */
 static herr_t
 H5O_attr_exists_cb(H5O_t UNUSED *oh, H5O_mesg_t *mesg/*in,out*/,
-    unsigned UNUSED sequence, hbool_t UNUSED *oh_modified, void *_udata/*in,out*/)
+    unsigned UNUSED sequence, unsigned UNUSED *oh_modified, void *_udata/*in,out*/)
 {
     H5O_iter_rm_t *udata = (H5O_iter_rm_t *)_udata;   /* Operator user data */
     herr_t ret_value = H5_ITER_CONT;    /* Return value */
diff --git a/src/H5Ocopy.c b/src/H5Ocopy.c
index fcca34a..184bf74 100644
--- a/src/H5Ocopy.c
+++ b/src/H5Ocopy.c
@@ -293,6 +293,7 @@ H5O_copy_header_real(const H5O_loc_t *oloc_src, H5O_loc_t *oloc_dst /*out */,
     unsigned               mesgno = 0;
     haddr_t                addr_new = HADDR_UNDEF;
     hbool_t                *deleted = NULL;      /* Array of flags indicating whether messages should be copied */
+    hbool_t                inserted = FALSE;        /* Whether the destination object header has been inserted into the cache */
     size_t                 null_msgs;               /* Number of NULL messages found in each loop */
     size_t                 orig_dst_msgs;           /* Original # of messages in dest. object */
     H5O_mesg_t             *mesg_src;               /* Message in source object header */
@@ -370,9 +371,9 @@ H5O_copy_header_real(const H5O_loc_t *oloc_src, H5O_loc_t *oloc_dst /*out */,
     /* Allocate memory for "deleted" array.  This array marks the message in
      * the source that shouldn't be copied to the destination.
      */
-     if(NULL == (deleted = (hbool_t *)HDmalloc(sizeof(hbool_t) * oh_src->nmesgs)))
+    if(NULL == (deleted = (hbool_t *)HDmalloc(sizeof(hbool_t) * oh_src->nmesgs)))
         HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "memory allocation failed")
-     HDmemset(deleted, FALSE, sizeof(hbool_t) * oh_src->nmesgs);
+    HDmemset(deleted, FALSE, sizeof(hbool_t) * oh_src->nmesgs);
 
     /* "pre copy" pass over messages, to gather information for actual message copy operation
      * (for messages which depend on information from other messages)
@@ -742,6 +743,7 @@ H5O_copy_header_real(const H5O_loc_t *oloc_src, H5O_loc_t *oloc_dst /*out */,
     if(H5AC_insert_entry(oloc_dst->file, dxpl_id, H5AC_OHDR, oloc_dst->addr, oh_dst, H5AC__NO_FLAGS_SET) < 0)
         HGOTO_ERROR(H5E_OHDR, H5E_CANTINSERT, FAIL, "unable to cache object header")
     oh_dst = NULL;
+    inserted = TRUE;
 
     /* Set obj_type and udata, if requested */
     if(obj_type) {
@@ -759,9 +761,13 @@ done:
     if(oh_src && H5O_unprotect(oloc_src, dxpl_id, oh_src, H5AC__NO_FLAGS_SET) < 0)
         HDONE_ERROR(H5E_OHDR, H5E_CANTUNPROTECT, FAIL, "unable to release object header")
 
-    /* Release pointer to destination object header */
-    if(ret_value < 0 && oh_dst && H5O_free(oh_dst) < 0)
-        HDONE_ERROR(H5E_OHDR, H5E_CANTFREE, FAIL, "unable to destroy object header data")
+    /* Free destination object header on failure */
+    if(ret_value < 0 && oh_dst && !inserted) {
+        if(H5O_free(oh_dst) < 0)
+            HDONE_ERROR(H5E_OHDR, H5E_CANTFREE, FAIL, "unable to destroy object header data")
+        if(H5O_loc_reset(oloc_dst) < 0)
+            HDONE_ERROR(H5E_OHDR, H5E_CANTFREE, FAIL, "unable to destroy object header data")
+    } /* end if */
 
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5O_copy_header_real() */
diff --git a/src/H5Odtype.c b/src/H5Odtype.c
index f419e44..39c97cb 100644
--- a/src/H5Odtype.c
+++ b/src/H5Odtype.c
@@ -104,7 +104,7 @@ const H5O_msg_class_t H5O_MSG_DTYPE[1] = {{
     H5O_dtype_can_share,	/* can share method		*/
     H5O_dtype_pre_copy_file,	/* pre copy native value to file */
     H5O_dtype_shared_copy_file,	/* copy native value to file    */
-    NULL,			/* post copy native value to file */
+    H5O_dtype_shared_post_copy_file,	/* post copy native value to file */
     NULL,			/* get creation index		*/
     NULL,			/* set creation index		*/
     H5O_dtype_shared_debug	/* debug the message		*/
diff --git a/src/H5Ofill.c b/src/H5Ofill.c
index c7c743a..f333410 100644
--- a/src/H5Ofill.c
+++ b/src/H5Ofill.c
@@ -120,7 +120,7 @@ const H5O_msg_class_t H5O_MSG_FILL[1] = {{
     NULL,		    	/*can share method		*/
     NULL,			/* pre copy native value to file	*/
     H5O_fill_shared_copy_file,	/* copy native value to file		*/
-    NULL,			/* post copy native value to file	*/
+    H5O_fill_shared_post_copy_file,	/* post copy native value to file	*/
     NULL,			/* get creation index		*/
     NULL,			/* set creation index		*/
     H5O_fill_shared_debug       /*debug the message			*/
@@ -144,7 +144,7 @@ const H5O_msg_class_t H5O_MSG_FILL_NEW[1] = {{
     NULL,		    	/*can share method		*/
     NULL,			/* pre copy native value to file	*/
     H5O_fill_new_shared_copy_file, /* copy native value to file		*/
-    NULL,			/* post copy native value to file	*/
+    H5O_fill_new_shared_post_copy_file,	/* post copy native value to file	*/
     NULL,			/* get creation index		*/
     NULL,			/* set creation index		*/
     H5O_fill_new_shared_debug	/*debug the message			*/
diff --git a/src/H5Omessage.c b/src/H5Omessage.c
index 62a1e1c..467df3d 100644
--- a/src/H5Omessage.c
+++ b/src/H5Omessage.c
@@ -75,7 +75,7 @@ typedef struct {
 
 static herr_t H5O_msg_reset_real(const H5O_msg_class_t *type, void *native);
 static herr_t H5O_msg_remove_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/,
-    unsigned sequence, hbool_t *oh_modified, void *_udata/*in,out*/);
+    unsigned sequence, unsigned *oh_modified, void *_udata/*in,out*/);
 static herr_t H5O_copy_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *oh, unsigned idx,
     const H5O_msg_class_t *type, const void *mesg, unsigned mesg_flags,
     unsigned update_flags);
@@ -419,7 +419,7 @@ H5O_msg_write_real(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5O_msg_class_t *ty
          * XXX: This doesn't handle freeing extra space in object header from
          *      a message shrinking.
          */
-        if((status = H5SM_try_share(f, dxpl_id, ((mesg_flags & H5O_MSG_FLAG_SHARED) ? NULL : oh), idx_msg->type->id, mesg, &mesg_flags)) < 0)
+        if((status = H5SM_try_share(f, dxpl_id, ((mesg_flags & H5O_MSG_FLAG_SHARED) ? NULL : oh), 0, idx_msg->type->id, mesg, &mesg_flags)) < 0)
             HGOTO_ERROR(H5E_OHDR, H5E_BADMESG, FAIL, "error while trying to share message")
         if(status == FALSE && (mesg_flags & H5O_MSG_FLAG_SHARED))
             HGOTO_ERROR(H5E_OHDR, H5E_BADMESG, FAIL, "message changed sharing status")
@@ -1059,11 +1059,15 @@ done:
  *		koziol at ncsa.uiuc.edu
  *		Sep  6 2005
  *
+ * Modifications:
+ *	Vailin Choi; Sept 2011
+ *	Indicate that the object header is modified and might possibly need
+ *	to condense messages in the object header 
  *-------------------------------------------------------------------------
  */
 static herr_t
 H5O_msg_remove_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/, unsigned sequence,
-    hbool_t *oh_modified, void *_udata/*in,out*/)
+    unsigned *oh_modified, void *_udata/*in,out*/)
 {
     H5O_iter_rm_t *udata = (H5O_iter_rm_t *)_udata;   /* Operator user data */
     htri_t try_remove = FALSE;         /* Whether to try removing a message */
@@ -1097,8 +1101,8 @@ H5O_msg_remove_cb(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/, unsigned sequence,
         if(H5O_release_mesg(udata->f, udata->dxpl_id, oh, mesg, udata->adj_link) < 0)
             HGOTO_ERROR(H5E_OHDR, H5E_CANTDELETE, H5_ITER_ERROR, "unable to release message")
 
-        /* Indicate that the object header was modified */
-        *oh_modified = TRUE;
+        /* Indicate that the object header was modified & might need to condense messages in object header */
+        *oh_modified = H5O_MODIFY_CONDENSE;
 
         /* Break out now, if we've found the correct message */
         if(udata->sequence == H5O_FIRST || udata->sequence != H5O_ALL)
@@ -1266,6 +1270,12 @@ done:
  *      C. Negative causes the iterator to immediately return that value,
  *          indicating failure.
  *
+ * Modifications:
+ *	Vailin Choi; September 2011
+ *	Change "oh_modified" from boolean to unsigned so as to know:
+ *	1) object header is just modified
+ *	2) object header is modified and possibly need to condense messages there
+ *
  *-------------------------------------------------------------------------
  */
 herr_t
@@ -1275,7 +1285,7 @@ H5O_msg_iterate_real(H5F_t *f, H5O_t *oh, const H5O_msg_class_t *type,
     H5O_mesg_t         *idx_msg;        /* Pointer to current message */
     unsigned		idx;            /* Absolute index of current message in all messages */
     unsigned		sequence;       /* Relative index of current message for messages of type */
-    hbool_t             oh_modified = FALSE;    /* Whether the callback modified the object header */
+    unsigned		oh_modified = 0;    /* Whether the callback modified the object header */
     herr_t              ret_value = H5_ITER_CONT;      /* Return value */
 
     FUNC_ENTER_NOAPI_NOINIT(H5O_msg_iterate_real)
@@ -1315,13 +1325,15 @@ H5O_msg_iterate_real(H5F_t *f, H5O_t *oh, const H5O_msg_class_t *type,
 done:
     /* Check if object message was modified */
     if(oh_modified) {
-        /* Try to condense object header info */
+        /* Try to condense object header info if the flag indicates so */
         /* (Since this routine is used to remove messages from an
          *  object header, the header will be condensed after each
          *  message removal)
          */
-        if(H5O_condense_header(f, oh, dxpl_id) < 0)
-            HDONE_ERROR(H5E_OHDR, H5E_CANTPACK, FAIL, "can't pack object header")
+	if(oh_modified & H5O_MODIFY_CONDENSE) {
+	    if(H5O_condense_header(f, oh, dxpl_id) < 0)
+		HDONE_ERROR(H5E_OHDR, H5E_CANTPACK, FAIL, "can't pack object header")
+	}
 
         /* Mark object header as changed */
         if(H5O_touch_oh(f, dxpl_id, oh, FALSE) < 0)
@@ -1534,6 +1546,10 @@ H5O_msg_can_share(unsigned type_id, const void *mesg)
         ret_value = (type->share_flags & H5O_SHARE_IS_SHARABLE) ? TRUE : FALSE;
     } /* end else */
 
+    /* If the message is shareable, both copy_file and post_copy_file must be
+     * defined */
+    HDassert((type->post_copy_file && type->copy_file) || ret_value == FALSE);
+
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5O_msg_can_share() */
 
@@ -1916,7 +1932,7 @@ H5O_msg_alloc(H5F_t *f, hid_t dxpl_id, H5O_t *oh, const H5O_msg_class_t *type,
     } /* end if */
     else {
         /* Attempt to share message */
-        if(H5SM_try_share(f, dxpl_id, oh, type->id, native, mesg_flags) < 0)
+        if(H5SM_try_share(f, dxpl_id, oh, 0, type->id, native, mesg_flags) < 0)
             HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "error determining if message should be shared")
     } /* end else */
 
diff --git a/src/H5Opkg.h b/src/H5Opkg.h
index dd91eb1..7fefde6 100644
--- a/src/H5Opkg.h
+++ b/src/H5Opkg.h
@@ -584,7 +584,9 @@ H5_DLL herr_t H5O_shared_link(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
 H5_DLL herr_t H5O_shared_copy_file(H5F_t *file_src, H5F_t *file_dst,
     const H5O_msg_class_t *mesg_type, const void *_native_src, void *_native_dst,
     hbool_t *recompute_size, H5O_copy_t *cpy_info, void *udata, hid_t dxpl_id);
-H5_DLL herr_t H5O_shared_post_copy_file (H5F_t *f, hid_t dxpl_id, H5O_t *oh, void *mesg);
+H5_DLL herr_t H5O_shared_post_copy_file (H5F_t *f,
+    const H5O_msg_class_t *mesg_type, const H5O_shared_t *shared_src,
+    H5O_shared_t *shared_dst, hid_t dxpl_id, H5O_copy_t *cpy_info);
 H5_DLL herr_t H5O_shared_debug(const H5O_shared_t *mesg, FILE *stream,
     int indent, int fwidth);
 
diff --git a/src/H5Opline.c b/src/H5Opline.c
index 89bdd36..518bcdf 100644
--- a/src/H5Opline.c
+++ b/src/H5Opline.c
@@ -83,7 +83,7 @@ const H5O_msg_class_t H5O_MSG_PLINE[1] = {{
     NULL,		    	/*can share method		*/
     H5O_pline_pre_copy_file,	/* pre copy native value to file */
     H5O_pline_shared_copy_file,	/* copy native value to file    */
-    NULL,			/* post copy native value to file    */
+    H5O_pline_shared_post_copy_file,	/* post copy native value to file    */
     NULL,			/* get creation index		*/
     NULL,			/* set creation index		*/
     H5O_pline_shared_debug	/* debug the message		*/
diff --git a/src/H5Oprivate.h b/src/H5Oprivate.h
index 7cbad3d..2640dee 100644
--- a/src/H5Oprivate.h
+++ b/src/H5Oprivate.h
@@ -110,11 +110,13 @@ typedef struct H5O_t H5O_t;
 
 /* Set the fields in a shared message structure */
 #define H5O_UPDATE_SHARED(SH_MESG, SH_TYPE, F, MSG_TYPE, CRT_IDX, OH_ADDR)    \
-    (SH_MESG)->type = (SH_TYPE);                                              \
-    (SH_MESG)->file = (F);                                                    \
-    (SH_MESG)->msg_type_id = (MSG_TYPE);                                      \
-    (SH_MESG)->u.loc.index = (CRT_IDX);                                       \
-    (SH_MESG)->u.loc.oh_addr = (OH_ADDR);
+    {                                                                         \
+        (SH_MESG)->type = (SH_TYPE);                                          \
+        (SH_MESG)->file = (F);                                                \
+        (SH_MESG)->msg_type_id = (MSG_TYPE);                                  \
+        (SH_MESG)->u.loc.index = (CRT_IDX);                                   \
+        (SH_MESG)->u.loc.oh_addr = (OH_ADDR);                                 \
+    } /* end block */
 
 
 /* Fractal heap ID type for shared message & attribute heap IDs. */
@@ -570,7 +572,7 @@ typedef herr_t (*H5O_operator_t)(const void *mesg/*in*/, unsigned idx,
 
 /* Typedef for "internal library" iteration operations */
 typedef herr_t (*H5O_lib_operator_t)(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/,
-    unsigned sequence, hbool_t *oh_modified/*out*/, void *operator_data/*in,out*/);
+    unsigned sequence, unsigned *oh_modified/*out*/, void *operator_data/*in,out*/);
 
 /* Some syntactic sugar to make the compiler happy with two different kinds of iterator callbacks */
 typedef enum H5O_mesg_operator_type_t {
@@ -578,6 +580,11 @@ typedef enum H5O_mesg_operator_type_t {
     H5O_MESG_OP_LIB             /* Library internal callback */
 } H5O_mesg_operator_type_t;
 
+/* To indicate that the object header is just modified */
+#define H5O_MODIFY		0x01
+/* To indicate that the object header is modified and might possibly need to condense messages */
+#define H5O_MODIFY_CONDENSE	0x02
+
 typedef struct {
     H5O_mesg_operator_type_t op_type;
     union {
diff --git a/src/H5Osdspace.c b/src/H5Osdspace.c
index 323bec9..62d5b63 100644
--- a/src/H5Osdspace.c
+++ b/src/H5Osdspace.c
@@ -77,7 +77,7 @@ const H5O_msg_class_t H5O_MSG_SDSPACE[1] = {{
     NULL,		    	/*can share method		*/
     H5O_sdspace_pre_copy_file,	/* pre copy native value to file */
     H5O_sdspace_shared_copy_file,/* copy native value to file    */
-    NULL,			/* post copy native value to file    */
+    H5O_sdspace_shared_post_copy_file,/* post copy native value to file    */
     NULL,			/* get creation index		*/
     NULL,			/* set creation index		*/
     H5O_sdspace_shared_debug	/* debug the message		    	*/
diff --git a/src/H5Oshared.c b/src/H5Oshared.c
index a5e3efc..864c364 100644
--- a/src/H5Oshared.c
+++ b/src/H5Oshared.c
@@ -30,7 +30,6 @@
 /* Module Setup */
 /****************/
 
-#define H5F_PACKAGE		/*suppress error about including H5Fpkg	  */
 #define H5O_PACKAGE		/*suppress error about including H5Opkg	  */
 
 
@@ -39,7 +38,7 @@
 /***********/
 #include "H5private.h"		/* Generic Functions			*/
 #include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fpkg.h"             /* File access				*/
+#include "H5Fprivate.h"		/* File access				*/
 #include "H5Gprivate.h"		/* Groups				*/
 #include "H5HFprivate.h"        /* Fractal heap				*/
 #include "H5Opkg.h"             /* Object headers			*/
@@ -243,8 +242,17 @@ H5O_shared_link_adj(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
          * new object header. Adjust the reference count on that
          * object header.
          */
-        if(shared->file->shared != f->shared)
-            HGOTO_ERROR(H5E_LINK, H5E_CANTINIT, FAIL, "interfile hard links are not allowed")
+        /* Unfortunately, it is possible for the shared->file pointer to become
+         * invalid if the oh is kept in cache (which is contained in
+         * shared->file->shared while shared->file is closed.  Just ignore
+         * shared->file until the "top-level" file pointer is removed at some
+         * point in the future.  -NAF */
+        /* This is related to Jira issue #7638 and should be uncommented after
+         * the library has been refactored to shift to using shared file
+         * pointers for file operations, instead of using top file pointers.
+         * -QAK */
+        /*if(shared->file->shared != f->shared)
+            HGOTO_ERROR(H5E_LINK, H5E_CANTINIT, FAIL, "interfile hard links are not allowed")*/
 
         /* Build the object location for the shared message's object header */
         oloc.file = f;
@@ -277,7 +285,7 @@ H5O_shared_link_adj(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
         } /* end if */
         /* Check for incrementing reference count on message */
         else if(adjust > 0) {
-            if(H5SM_try_share(f, dxpl_id, open_oh, type->id, shared, NULL) < 0)
+            if(H5SM_try_share(f, dxpl_id, open_oh, 0, type->id, shared, NULL) < 0)
                 HGOTO_ERROR(H5E_OHDR, H5E_CANTINC, FAIL, "error trying to share message")
         } /* end if */
     } /* end else */
@@ -409,8 +417,8 @@ H5O_shared_encode(const H5F_t *f, uint8_t *buf/*out*/, const H5O_shared_t *sh_me
         version = H5O_SHARED_VERSION_2; /* version 1 is no longer used */
     } /* end else */
 
-    *buf++ = version;
-    *buf++ = (unsigned)sh_mesg->type;
+    *buf++ = (uint8_t)version;
+    *buf++ = (uint8_t)sh_mesg->type;
 
     /* Encode either the heap ID of the message or the address of the
      * object header that holds it.
@@ -474,9 +482,9 @@ H5O_shared_size(const H5F_t *f, const H5O_shared_t *sh_mesg)
     FUNC_ENTER_NOAPI_NOINIT_NOFUNC(H5O_shared_size)
 
     if(sh_mesg->type == H5O_SHARE_TYPE_COMMITTED) {
-        ret_value = 1 +			/*version			*/
-            1 +				/*the type field		*/
-            H5F_SIZEOF_ADDR(f);		/*sharing by another obj hdr	*/
+        ret_value = (size_t)1 +		/*version			*/
+            (size_t)1 +			/*the type field		*/
+            (size_t)H5F_SIZEOF_ADDR(f);	/*sharing by another obj hdr	*/
     } /* end if */
     else {
         HDassert(sh_mesg->type == H5O_SHARE_TYPE_SOHM);
@@ -579,7 +587,7 @@ done:
  *-------------------------------------------------------------------------
  */
 herr_t
-H5O_shared_copy_file(H5F_t UNUSED *file_src, H5F_t *file_dst,
+H5O_shared_copy_file(H5F_t *file_src, H5F_t *file_dst,
     const H5O_msg_class_t *mesg_type, const void *_native_src, void *_native_dst,
     hbool_t UNUSED *recompute_size, H5O_copy_t *cpy_info, void UNUSED *udata,
     hid_t dxpl_id)
@@ -602,31 +610,21 @@ H5O_shared_copy_file(H5F_t UNUSED *file_src, H5F_t *file_dst,
     /* Committed shared messages create a shared message at the destination
      * and also copy the committed object that they point to.
      *
-     * SOHMs try to share the destination message.
+     * Other messages simulate sharing the destination message to determine how
+     * it will eventually be shared (if at all), but do not actually share the
+     * message until "post copy".  The "H5O_shared_t" part of the message will
+     * be updated (to allow calculation of the final size) but the message is
+     * not actually shared.
      */
-    if(shared_src->type == H5O_SHARE_TYPE_COMMITTED) {
-        H5O_loc_t dst_oloc;
-        H5O_loc_t src_oloc;
-
-        /* Copy the shared object from source to destination */
-        dst_oloc.file = file_dst;
-        src_oloc.file = shared_src->file;
-        src_oloc.addr = shared_src->u.loc.oh_addr;
-        if(H5O_copy_header_map(&src_oloc, &dst_oloc, dxpl_id, cpy_info, FALSE,
-                NULL, NULL) < 0)
-            HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, FAIL, "unable to copy object")
-
-        /* Set up destination message's shared info */
-        H5O_UPDATE_SHARED(shared_dst, H5O_SHARE_TYPE_COMMITTED, file_dst, mesg_type->id, 0, dst_oloc.addr)
+    if(shared_src->type != H5O_SHARE_TYPE_COMMITTED) {
+        /* Simulate trying to share new message in the destination file. */
+        if(H5SM_try_share(file_dst, dxpl_id, NULL, H5SM_DEFER, mesg_type->id, _native_dst, NULL) < 0)
+            HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to determine if message should be shared")
     } /* end if */
-    else {
-        /* Try to share new message in the destination file. */
-        /* Message is always shared in heap in dest. file because the dest.
-         *      object header doesn't quite exist yet - JML
+    else
+        /* Mark the message as committed - as it will be committed in post copy
          */
-        if(H5SM_try_share(file_dst, dxpl_id, NULL, mesg_type->id, _native_dst, NULL) < 0)
-            HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to determine if message should be shared")
-    } /* end else */
+        H5O_UPDATE_SHARED(shared_dst, H5O_SHARE_TYPE_COMMITTED, file_dst, mesg_type->id, 0, HADDR_UNDEF)
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
@@ -652,40 +650,45 @@ done:
  *-------------------------------------------------------------------------
  */
 herr_t
-H5O_shared_post_copy_file(H5F_t *f, hid_t dxpl_id, H5O_t *oh, void *mesg)
+H5O_shared_post_copy_file(H5F_t *f, const H5O_msg_class_t *mesg_type,
+    const H5O_shared_t *shared_src, H5O_shared_t *shared_dst, hid_t dxpl_id,
+    H5O_copy_t *cpy_info)
 {
-    H5O_shared_t *old_sh_mesg;
-    htri_t shared_mesg;                 /* Whether the message should be shared */
-    unsigned msg_type_id;               /* Message's type ID */
     herr_t ret_value = SUCCEED;         /* Return value */
 
     FUNC_ENTER_NOAPI_NOINIT(H5O_shared_post_copy_file)
 
     /* check args */
     HDassert(f);
-    HDassert(mesg);
-
-    /* the old shared message */
-    old_sh_mesg = (H5O_shared_t *) mesg;
+    HDassert(shared_src);
+    HDassert(shared_dst);
 
-    /* save the type id for later use */
-    msg_type_id = old_sh_mesg->msg_type_id;
+    /* Copy the target of committed messages, try to share others */
+    if(shared_src->type == H5O_SHARE_TYPE_COMMITTED) {
+        H5O_loc_t dst_oloc;
+        H5O_loc_t src_oloc;
 
-    /* Remove the old message from the SOHM storage */
-    if(H5SM_delete(f, dxpl_id, oh, old_sh_mesg) < 0)
-        HGOTO_ERROR(H5E_OHDR, H5E_CANTFREE, FAIL, "unable to find attribute information for object")
+        /* Copy the shared object from source to destination */
+        dst_oloc.file = f;
+        src_oloc.file = shared_src->file;
+        src_oloc.addr = shared_src->u.loc.oh_addr;
+        if(H5O_copy_header_map(&src_oloc, &dst_oloc, dxpl_id, cpy_info, FALSE,
+                NULL, NULL) < 0)
+            HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, FAIL, "unable to copy object")
 
-    /* Add the new message */
-    if((shared_mesg = H5SM_try_share(f, dxpl_id, oh, msg_type_id, mesg, NULL)) == 0)
-        HGOTO_ERROR(H5E_OHDR, H5E_BADMESG, FAIL, "message changed sharing status")
-    else if(shared_mesg < 0)
-        HGOTO_ERROR(H5E_OHDR, H5E_BADMESG, FAIL, "can't share message")
+        /* Set up destination message's shared info */
+        H5O_UPDATE_SHARED(shared_dst, H5O_SHARE_TYPE_COMMITTED, f, mesg_type->id, 0, dst_oloc.addr)
+    } /* end if */
+    else
+        /* Share the message */
+        if(H5SM_try_share(f, dxpl_id, NULL, H5SM_WAS_DEFERRED, mesg_type->id,
+                shared_dst, NULL) < 0)
+            HGOTO_ERROR(H5E_OHDR, H5E_BADMESG, FAIL, "can't share message")
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5O_shared_post_copy_file() */
 
-
 
 /*-------------------------------------------------------------------------
  * Function:	H5O_shared_debug
diff --git a/src/H5Oshared.h b/src/H5Oshared.h
index c0f5cd6..70b54dc 100644
--- a/src/H5Oshared.h
+++ b/src/H5Oshared.h
@@ -385,8 +385,9 @@ static H5_inline herr_t
 H5O_SHARED_POST_COPY_FILE(const H5O_loc_t *oloc_src, const void *mesg_src,
     H5O_loc_t *oloc_dst, void *mesg_dst, hid_t dxpl_id, H5O_copy_t *cpy_info)
 {
-    const H5O_shared_t  *shared_dst = (const H5O_shared_t *)mesg_dst; /* Alias to shared info in native source */
-    herr_t ret_value = SUCCEED;         /* Return value */
+    const H5O_shared_t  *shared_src = (const H5O_shared_t *)mesg_src; /* Alias to shared info in native source */
+    H5O_shared_t        *shared_dst = (H5O_shared_t *)mesg_dst; /* Alias to shared info in native destination */
+    herr_t              ret_value = SUCCEED;         /* Return value */
 
     FUNC_ENTER_NOAPI_NOINIT(H5O_SHARED_POST_COPY_FILE)
 
@@ -394,6 +395,7 @@ H5O_SHARED_POST_COPY_FILE(const H5O_loc_t *oloc_src, const void *mesg_src,
     HDassert(oloc_dst->file);
     HDassert(mesg_src);
     HDassert(mesg_dst);
+    HDassert(cpy_info);
 
 #ifndef H5O_SHARED_TYPE
 #error "Need to define H5O_SHARED_TYPE macro!"
@@ -408,11 +410,17 @@ H5O_SHARED_POST_COPY_FILE(const H5O_loc_t *oloc_src, const void *mesg_src,
         HGOTO_ERROR(H5E_OHDR, H5E_CANTCOPY, FAIL, "unable to copy native message to another file")
 #endif /* H5O_SHARED_POST_COPY_FILE_REAL */
 
-    /* update only shared message after the post copy */
-    if(H5O_msg_is_shared(shared_dst->msg_type_id, mesg_dst)) {
-        if(H5O_shared_post_copy_file(oloc_dst->file, dxpl_id, cpy_info->oh_dst, mesg_dst) < 0)
-            HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to fix shared message in post copy")
-    }
+    /* Update shared message after the post copy - will short circuit in
+     * production if the DEFER pass determined it will not be shared; debug mode
+     * verifies that it is indeed the case */
+    if(H5O_shared_post_copy_file(oloc_dst->file, H5O_SHARED_TYPE,
+            shared_src, shared_dst, dxpl_id, cpy_info) < 0)
+        HGOTO_ERROR(H5E_OHDR, H5E_WRITEERROR, FAIL, "unable to fix shared message in post copy")
+
+    /* Make sure that if the the source or destination is committed, both are
+     * committed */
+    HDassert((shared_src->type == H5O_SHARE_TYPE_COMMITTED)
+            == (shared_dst->type == H5O_SHARE_TYPE_COMMITTED));
 
 done:
     FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5Ounknown.c b/src/H5Ounknown.c
index d4a3801..68bb64b 100644
--- a/src/H5Ounknown.c
+++ b/src/H5Ounknown.c
@@ -40,7 +40,7 @@ const H5O_msg_class_t H5O_MSG_UNKNOWN[1] = {{
     H5O_UNKNOWN_ID,           	/*message id number             */
     "unknown",                	/*message name for debugging    */
     0,				/*native message size           */
-    FALSE,			/* messages are sharable?       */
+    0,			        /* messages are sharable?       */
     NULL,			/*decode message                */
     NULL,			/*encode message                */
     NULL,			/*copy the native value         */
diff --git a/src/H5Pdxpl.c b/src/H5Pdxpl.c
index 1186868..15668e0 100644
--- a/src/H5Pdxpl.c
+++ b/src/H5Pdxpl.c
@@ -97,14 +97,20 @@
 #define H5D_XFER_MPIO_CHUNK_OPT_HARD_DEF        H5FD_MPIO_CHUNK_DEFAULT
 #define H5D_XFER_MPIO_CHUNK_OPT_NUM_SIZE        sizeof(unsigned)
 #define H5D_XFER_MPIO_CHUNK_OPT_NUM_DEF         H5D_ONE_LINK_CHUNK_IO_THRESHOLD
-#define H5D_XFER_MPIO_CHUNK_OPT_RATIO_SIZE       sizeof(unsigned)
+#define H5D_XFER_MPIO_CHUNK_OPT_RATIO_SIZE      sizeof(unsigned)
 #define H5D_XFER_MPIO_CHUNK_OPT_RATIO_DEF       H5D_MULTI_CHUNK_IO_COL_THRESHOLD
+/* Definitions for chunk opt mode property. */
+#define H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_SIZE     sizeof(H5D_mpio_actual_chunk_opt_mode_t)
+#define H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_DEF      H5D_MPIO_NO_CHUNK_OPTIMIZATION
+/* Definitions for chunk io mode property. */
+#define H5D_MPIO_ACTUAL_IO_MODE_SIZE    sizeof(H5D_mpio_actual_io_mode_t)
+#define H5D_MPIO_ACTUAL_IO_MODE_DEF     H5D_MPIO_NO_COLLECTIVE
 /* Definitions for EDC property */
-#define H5D_XFER_EDC_SIZE       sizeof(H5Z_EDC_t)
-#define H5D_XFER_EDC_DEF        H5Z_ENABLE_EDC
+#define H5D_XFER_EDC_SIZE           sizeof(H5Z_EDC_t)
+#define H5D_XFER_EDC_DEF            H5Z_ENABLE_EDC
 /* Definitions for filter callback function property */
-#define H5D_XFER_FILTER_CB_SIZE       sizeof(H5Z_cb_t)
-#define H5D_XFER_FILTER_CB_DEF        {NULL,NULL}
+#define H5D_XFER_FILTER_CB_SIZE     sizeof(H5Z_cb_t)
+#define H5D_XFER_FILTER_CB_DEF      {NULL,NULL}
 /* Definitions for type conversion callback function property */
 #define H5D_XFER_CONV_CB_SIZE       sizeof(H5T_conv_cb_t)
 #define H5D_XFER_CONV_CB_DEF        {NULL,NULL}
@@ -200,6 +206,8 @@ H5P_dxfr_reg_prop(H5P_genclass_t *pclass)
     H5FD_mpio_collective_opt_t def_mpio_collective_opt_mode = H5D_XFER_MPIO_COLLECTIVE_OPT_DEF;
     unsigned def_mpio_chunk_opt_num = H5D_XFER_MPIO_CHUNK_OPT_NUM_DEF;
     unsigned def_mpio_chunk_opt_ratio = H5D_XFER_MPIO_CHUNK_OPT_RATIO_DEF;
+    H5D_mpio_actual_chunk_opt_mode_t def_mpio_actual_chunk_opt_mode = H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_DEF;
+    H5D_mpio_actual_io_mode_t def_mpio_actual_io_mode = H5D_MPIO_ACTUAL_IO_MODE_DEF;
 #endif /* H5_HAVE_PARALLEL */
     H5Z_EDC_t enable_edc = H5D_XFER_EDC_DEF;            /* Default value for EDC property */
     H5Z_cb_t filter_cb = H5D_XFER_FILTER_CB_DEF;        /* Default value for filter callback */
@@ -258,7 +266,7 @@ H5P_dxfr_reg_prop(H5P_genclass_t *pclass)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
 
 #ifdef H5_HAVE_PARALLEL
-    /* Register the I/O transfer mode property */
+    /* Register the I/O transfer mode properties */
     if(H5P_register_real(pclass, H5D_XFER_IO_XFER_MODE_NAME, H5D_XFER_IO_XFER_MODE_SIZE, &def_io_xfer_mode, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
     if(H5P_register_real(pclass, H5D_XFER_MPIO_COLLECTIVE_OPT_NAME, H5D_XFER_MPIO_COLLECTIVE_OPT_SIZE, &def_mpio_collective_opt_mode, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
@@ -269,6 +277,14 @@ H5P_dxfr_reg_prop(H5P_genclass_t *pclass)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
     if(H5P_register_real(pclass, H5D_XFER_MPIO_CHUNK_OPT_RATIO_NAME, H5D_XFER_MPIO_CHUNK_OPT_RATIO_SIZE, &def_mpio_chunk_opt_ratio, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
         HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+    /* Register the chunk optimization mode property. */
+    if(H5P_register_real(pclass, H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_NAME, H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_SIZE, &def_mpio_actual_chunk_opt_mode, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
+
+    /* Register the actual io mode property. */
+    if(H5P_register_real(pclass, H5D_MPIO_ACTUAL_IO_MODE_NAME, H5D_MPIO_ACTUAL_IO_MODE_SIZE, &def_mpio_actual_io_mode, NULL, NULL, NULL, NULL, NULL, NULL, NULL) < 0)
+        HGOTO_ERROR(H5E_PLIST, H5E_CANTINSERT, FAIL, "can't insert property into class")
 #endif /* H5_HAVE_PARALLEL */
 
     /* Register the EDC property */
@@ -1392,3 +1408,74 @@ done:
     FUNC_LEAVE_API(ret_value)
 } /* end H5Pget_hyper_vector_size() */
 
+
+#ifdef H5_HAVE_PARALLEL
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_mpio_actual_chunk_opt_mode
+ *
+ * Purpose:	Retrieves the chunked io optimization scheme that library chose
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Jacob Gruber
+ *              Wednesday, May 4, 2011
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_mpio_actual_chunk_opt_mode(hid_t plist_id, H5D_mpio_actual_chunk_opt_mode_t *actual_chunk_opt_mode)
+{
+    H5P_genplist_t     *plist;
+    herr_t ret_value = SUCCEED;   /* return value */
+    
+    FUNC_ENTER_API(H5Pget_mpio_actual_chunk_opt_mode, FAIL)
+    H5TRACE2("e", "i*Do", plist_id, actual_chunk_opt_mode);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
+
+    /* Return values */
+    if(actual_chunk_opt_mode)
+        if(H5P_get(plist, H5D_MPIO_ACTUAL_CHUNK_OPT_MODE_NAME, actual_chunk_opt_mode) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* end H5Pget_mpio_actual_chunk_opt_mode() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	H5Pget_mpio_actual_io_mode
+ *
+ * Purpose:	Retrieves the type of I/O actually preformed when collective I/O
+ *		is requested.
+ *
+ * Return:	Non-negative on success/Negative on failure
+ *
+ * Programmer:	Jacob Gruber
+ *              Wednesday, May 4, 2011
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5Pget_mpio_actual_io_mode(hid_t plist_id, H5D_mpio_actual_io_mode_t *actual_io_mode)
+{
+    H5P_genplist_t     *plist;
+    herr_t ret_value = SUCCEED;   /* return value */
+    
+    FUNC_ENTER_API(H5Pget_mpio_actual_io_mode, FAIL)
+    H5TRACE2("e", "i*Di", plist_id, actual_io_mode);
+
+    /* Get the plist structure */
+    if(NULL == (plist = H5P_object_verify(plist_id, H5P_DATASET_XFER)))
+        HGOTO_ERROR(H5E_ATOM, H5E_BADATOM, FAIL, "can't find object for ID")
+
+    /* Return values */
+    if(actual_io_mode)
+        if(H5P_get(plist, H5D_MPIO_ACTUAL_IO_MODE_NAME, actual_io_mode) < 0)
+            HGOTO_ERROR(H5E_PLIST, H5E_CANTGET, FAIL, "unable to get value")
+
+done:
+    FUNC_LEAVE_API(ret_value)
+} /* end H5Pget_mpio_actual_io_mode() */
+#endif /* H5_HAVE_PARALLEL */
+
diff --git a/src/H5Ppublic.h b/src/H5Ppublic.h
index 75781cd..53818f1 100644
--- a/src/H5Ppublic.h
+++ b/src/H5Ppublic.h
@@ -120,6 +120,38 @@ typedef H5P_prp_cb1_t H5P_prp_close_func_t;
 /* Define property list iteration function type */
 typedef herr_t (*H5P_iterate_t)(hid_t id, const char *name, void *iter_data);
 
+/* Actual IO mode property */
+typedef enum H5D_mpio_actual_chunk_opt_mode_t {
+    /* The default value, H5D_MPIO_NO_CHUNK_OPTIMIZATION, is used for all I/O
+     * operations that do not use chunk optimizations, including non-collective
+     * I/O and contiguous collective I/O.
+     */
+    H5D_MPIO_NO_CHUNK_OPTIMIZATION = 0,
+    H5D_MPIO_LINK_CHUNK,
+    H5D_MPIO_MULTI_CHUNK,
+    H5D_MPIO_MULTI_CHUNK_NO_OPT
+}  H5D_mpio_actual_chunk_opt_mode_t;
+
+typedef enum H5D_mpio_actual_io_mode_t {
+    /* 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. 
+     * 
+     * NO_COLLECTIVE means that either collective I/O wasn't requested or that 
+     * no I/O took place.
+     *
+     * CHUNK_INDEPENDENT means that collective I/O was requested, but the
+     * chunk optimization scheme chose independent I/O for each chunk.
+     */
+    H5D_MPIO_NO_COLLECTIVE = 0x0,
+    H5D_MPIO_CHUNK_INDEPENDENT = 0x1,
+    H5D_MPIO_CHUNK_COLLECTIVE = 0x2,
+    H5D_MPIO_CHUNK_MIXED = 0x1 | 0x2,
+
+    /* The contiguous case is separate from the bit field. */
+    H5D_MPIO_CONTIGUOUS_COLLECTIVE = 0x4
+} H5D_mpio_actual_io_mode_t; 
+
 /********************/
 /* Public Variables */
 /********************/
@@ -358,6 +390,10 @@ H5_DLL herr_t H5Pset_hyper_vector_size(hid_t fapl_id, size_t size);
 H5_DLL herr_t H5Pget_hyper_vector_size(hid_t fapl_id, size_t *size/*out*/);
 H5_DLL herr_t H5Pset_type_conv_cb(hid_t dxpl_id, H5T_conv_except_func_t op, void* operate_data);
 H5_DLL herr_t H5Pget_type_conv_cb(hid_t dxpl_id, H5T_conv_except_func_t *op, void** operate_data);
+#ifdef H5_HAVE_PARALLEL
+H5_DLL herr_t H5Pget_mpio_actual_chunk_opt_mode(hid_t plist_id, H5D_mpio_actual_chunk_opt_mode_t *actual_chunk_opt_mode);
+H5_DLL herr_t H5Pget_mpio_actual_io_mode(hid_t plist_id, H5D_mpio_actual_io_mode_t *actual_io_mode);
+#endif /* H5_HAVE_PARALLEL */
 
 /* Link creation property list (LCPL) routines */
 H5_DLL herr_t H5Pset_create_intermediate_group(hid_t plist_id, unsigned crt_intmd);
diff --git a/src/H5SM.c b/src/H5SM.c
index f59e4fb..468ce55 100755
--- a/src/H5SM.c
+++ b/src/H5SM.c
@@ -17,7 +17,6 @@
 /* Module Setup */
 /****************/
 
-#define H5F_PACKAGE		/*suppress error about including H5Fpkg 	  */
 #define H5O_PACKAGE		/*suppress error about including H5Opkg 	  */
 #define H5SM_PACKAGE		/*suppress error about including H5SMpkg	  */
 
@@ -26,7 +25,7 @@
 /***********/
 #include "H5private.h"		/* Generic Functions			*/
 #include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fpkg.h"		/* File access                          */
+#include "H5Fprivate.h"		/* File access                          */
 #include "H5FLprivate.h"	/* Free Lists                           */
 #include "H5MFprivate.h"        /* File memory management		*/
 #include "H5MMprivate.h"	/* Memory management			*/
@@ -66,7 +65,7 @@ static herr_t H5SM_convert_list_to_btree(H5F_t * f, H5SM_index_header_t * header
 static herr_t H5SM_convert_btree_to_list(H5F_t * f, H5SM_index_header_t * header, hid_t dxpl_id);
 static herr_t H5SM_incr_ref(void *record, void *_op_data, hbool_t *changed);
 static herr_t H5SM_write_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
-    H5SM_index_header_t *header, unsigned type_id, void *mesg,
+    H5SM_index_header_t *header, hbool_t defer, unsigned type_id, void *mesg,
     unsigned *cache_flags_ptr);
 static herr_t H5SM_decr_ref(void *record, void *op_data, hbool_t *changed);
 static herr_t H5SM_delete_from_index(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
@@ -74,7 +73,7 @@ static herr_t H5SM_delete_from_index(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
     unsigned *cache_flags, void ** /*out*/ encoded_mesg);
 static herr_t H5SM_type_to_flag(unsigned type_id, unsigned *type_flag);
 static herr_t H5SM_read_iter_op(H5O_t *oh, H5O_mesg_t *mesg, unsigned sequence,
-    hbool_t *oh_modified, void *_udata);
+    unsigned *oh_modified, void *_udata);
 static herr_t H5SM_read_mesg_fh_cb(const void *obj, size_t obj_len, void *_udata);
 static herr_t H5SM_read_mesg(H5F_t *f, const H5SM_sohm_t *mesg, H5HF_t *fheap,
                H5O_t * open_oh, hid_t dxpl_id, size_t *encoding_size /*out*/,
@@ -135,12 +134,12 @@ H5SM_init(H5F_t *f, H5P_genplist_t * fc_plist, const H5O_loc_t *ext_loc, hid_t d
 
     HDassert(f);
     /* File should not already have a SOHM table */
-    HDassert(f->shared->sohm_addr == HADDR_UNDEF);
+    HDassert(!H5F_addr_defined(H5F_SOHM_ADDR(f)));
 
     /* Initialize master table */
     if(NULL == (table = H5FL_MALLOC(H5SM_master_table_t)))
 	HGOTO_ERROR(H5E_SOHM, H5E_CANTALLOC, FAIL, "memory allocation failed for SOHM table")
-    table->num_indexes = f->shared->sohm_nindexes;
+    table->num_indexes = H5F_SOHM_NINDEXES(f);
     table->table_size = H5SM_TABLE_SIZE(f);
 
     /* Get information from fcpl */
@@ -213,18 +212,18 @@ H5SM_init(H5F_t *f, H5P_genplist_t * fc_plist, const H5O_loc_t *ext_loc, hid_t d
 	HGOTO_ERROR(H5E_SOHM, H5E_CANTINS, FAIL, "can't add SOHM table to cache")
 
     /* Record the address of the master table in the file */
-    f->shared->sohm_addr = table_addr;
+    H5F_SET_SOHM_ADDR(f, table_addr);
 
     /* Check for sharing attributes in this file, which means that creation
      *  indices must be tracked on object header message in the file.
      */
     if(type_flags_used & H5O_SHMESG_ATTR_FLAG)
-        f->shared->store_msg_crt_idx = TRUE;
+        H5F_SET_STORE_MSG_CRT_IDX(f, TRUE);
 
     /* Write shared message information to the superblock extension */
-    sohm_table.addr = f->shared->sohm_addr;
-    sohm_table.version = f->shared->sohm_vers;
-    sohm_table.nindexes = f->shared->sohm_nindexes;
+    sohm_table.addr = H5F_SOHM_ADDR(f);
+    sohm_table.version = H5F_SOHM_VERS(f);
+    sohm_table.nindexes = H5F_SOHM_NINDEXES(f);
     if(H5O_msg_create(ext_loc, H5O_SHMESG_ID, H5O_MSG_FLAG_CONSTANT | H5O_MSG_FLAG_DONTSHARE, H5O_UPDATE_TIME, &sohm_table, dxpl_id) < 0)
         HGOTO_ERROR(H5E_SOHM, H5E_CANTINIT, FAIL, "unable to update SOHM header message")
 
@@ -353,13 +352,13 @@ H5SM_type_shared(H5F_t *f, unsigned type_id, hid_t dxpl_id)
         HGOTO_ERROR(H5E_SOHM, H5E_CANTGET, FAIL, "can't map message type to flag")
 
     /* Look up the master SOHM table */
-    if(H5F_addr_defined(f->shared->sohm_addr)) {
+    if(H5F_addr_defined(H5F_SOHM_ADDR(f))) {
         H5SM_table_cache_ud_t cache_udata;      /* User-data for callback */
 
         /* Set up user data for callback */
         cache_udata.f = f;
 
-        if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, &cache_udata, H5AC_READ)))
+        if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), &cache_udata, H5AC_READ)))
             HGOTO_ERROR(H5E_SOHM, H5E_CANTPROTECT, FAIL, "unable to load SOHM master table")
     } /* end if */
     else
@@ -375,7 +374,7 @@ H5SM_type_shared(H5F_t *f, unsigned type_id, hid_t dxpl_id)
 
 done:
     /* Release the master SOHM table */
-    if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, table, H5AC__NO_FLAGS_SET) < 0)
+    if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), table, H5AC__NO_FLAGS_SET) < 0)
 	HDONE_ERROR(H5E_SOHM, H5E_CANTUNPROTECT, FAIL, "unable to close SOHM master table")
 
     FUNC_LEAVE_NOAPI(ret_value)
@@ -413,7 +412,7 @@ H5SM_get_fheap_addr(H5F_t *f, hid_t dxpl_id, unsigned type_id, haddr_t *fheap_ad
     cache_udata.f = f;
 
     /* Look up the master SOHM table */
-    if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, &cache_udata, H5AC_READ)))
+    if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), &cache_udata, H5AC_READ)))
 	HGOTO_ERROR(H5E_SOHM, H5E_CANTPROTECT, FAIL, "unable to load SOHM master table")
 
     /* Look up index for message type */
@@ -425,7 +424,7 @@ H5SM_get_fheap_addr(H5F_t *f, hid_t dxpl_id, unsigned type_id, haddr_t *fheap_ad
 
 done:
     /* Release the master SOHM table */
-    if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, table, H5AC__NO_FLAGS_SET) < 0)
+    if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), table, H5AC__NO_FLAGS_SET) < 0)
 	HDONE_ERROR(H5E_SOHM, H5E_CANTUNPROTECT, FAIL, "unable to close SOHM master table")
 
     FUNC_LEAVE_NOAPI(ret_value)
@@ -478,8 +477,8 @@ H5SM_create_index(H5F_t *f, H5SM_index_header_t *header, hid_t dxpl_id)
 
         /* Create the v2 B-tree index */
         bt2_cparam.cls = H5SM_INDEX;
-        bt2_cparam.node_size = (size_t)H5SM_B2_NODE_SIZE;
-        bt2_cparam.rrec_size = (size_t)H5SM_SOHM_ENTRY_SIZE(f);
+        bt2_cparam.node_size = (uint32_t)H5SM_B2_NODE_SIZE;
+        bt2_cparam.rrec_size = (uint32_t)H5SM_SOHM_ENTRY_SIZE(f);
         bt2_cparam.split_percent = H5SM_B2_SPLIT_PERCENT;
         bt2_cparam.merge_percent = H5SM_B2_MERGE_PERCENT;
         if(NULL == (bt2 = H5B2_create(f, dxpl_id, &bt2_cparam, f)))
@@ -721,8 +720,8 @@ H5SM_convert_list_to_btree(H5F_t *f, H5SM_index_header_t *header,
 
     /* Create the new v2 B-tree for tracking the messages */
     bt2_cparam.cls = H5SM_INDEX;
-    bt2_cparam.node_size = (size_t)H5SM_B2_NODE_SIZE;
-    bt2_cparam.rrec_size = (size_t)H5SM_SOHM_ENTRY_SIZE(f);
+    bt2_cparam.node_size = (uint32_t)H5SM_B2_NODE_SIZE;
+    bt2_cparam.rrec_size = (uint32_t)H5SM_SOHM_ENTRY_SIZE(f);
     bt2_cparam.split_percent = H5SM_B2_SPLIT_PERCENT;
     bt2_cparam.merge_percent = H5SM_B2_MERGE_PERCENT;
     if(NULL == (bt2 = H5B2_create(f, dxpl_id, &bt2_cparam, f)))
@@ -877,7 +876,7 @@ H5SM_can_share_common(const H5F_t *f, unsigned type_id, const void *mesg)
 
     /* Check whether this message ought to be shared or not */
     /* If sharing is disabled in this file, don't share the message */
-    if(!H5F_addr_defined(f->shared->sohm_addr))
+    if(!H5F_addr_defined(H5F_SOHM_ADDR(f)))
         HGOTO_DONE(FALSE)
 
     /* Type-specific check */
@@ -940,7 +939,7 @@ H5SM_can_share(H5F_t *f, hid_t dxpl_id, H5SM_master_table_t *table,
         /* Set up user data for callback */
         cache_udata.f = f;
 
-        if(NULL == (my_table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, &cache_udata, H5AC_READ)))
+        if(NULL == (my_table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), &cache_udata, H5AC_READ)))
             HGOTO_ERROR(H5E_SOHM, H5E_CANTPROTECT, FAIL, "unable to load SOHM master table")
     } /* end if */
 
@@ -964,7 +963,7 @@ H5SM_can_share(H5F_t *f, hid_t dxpl_id, H5SM_master_table_t *table,
 
 done:
     /* Release the master SOHM table, if we protected it */
-    if(my_table && my_table != table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, my_table, H5AC__NO_FLAGS_SET) < 0)
+    if(my_table && my_table != table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), my_table, H5AC__NO_FLAGS_SET) < 0)
 	HDONE_ERROR(H5E_SOHM, H5E_CANTUNPROTECT, FAIL, "unable to close SOHM master table")
 
     FUNC_LEAVE_NOAPI(ret_value)
@@ -989,6 +988,12 @@ done:
  *              header it needs (which can cause an error if that OH is
  *              already protected!).
  *
+ *              DEFER_FLAGS indicates whether the sharing operation should
+ *              actually occur, or whether this is just a set up call for a
+ *              future sharing operation.  In the latter case this argument
+ *              should be H5SM_DEFER.  If the message was previously deferred
+ *              this argument should be H5SM_WAS_DEFERRED.
+ *
  *              MESG_FLAGS will have the H5O_MSG_FLAG_SHAREABLE or
  *              H5O_MSG_FLAG_SHARED flag set if one is appropriate.  This is
  *              the only way to tell the difference between a message that
@@ -1026,18 +1031,34 @@ done:
  *-------------------------------------------------------------------------
  */
 htri_t
-H5SM_try_share(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, unsigned type_id,
-    void *mesg, unsigned *mesg_flags)
+H5SM_try_share(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, unsigned defer_flags,
+    unsigned type_id, void *mesg, unsigned *mesg_flags)
 {
     H5SM_master_table_t *table = NULL;
     H5SM_table_cache_ud_t cache_udata;      /* User-data for callback */
     unsigned            cache_flags = H5AC__NO_FLAGS_SET;
     ssize_t             index_num;
     htri_t              tri_ret;
+#ifndef NDEBUG
+    unsigned            deferred_type = -1u;
+#endif
     htri_t              ret_value = TRUE;
 
     FUNC_ENTER_NOAPI(H5SM_try_share, FAIL)
 
+    /* If we previously deferred this operation, the saved message type should
+     * be the same as the one we get here.  In debug mode, we make sure this
+     * holds true; otherwise we can leave now if it wasn't shared in the DEFER
+     * pass. */
+    if(defer_flags & H5SM_WAS_DEFERRED)
+#ifndef NDEBUG
+        deferred_type = ((H5O_shared_t *)mesg)->type;
+#else /* NDEBUG */
+        if((((H5O_shared_t *)mesg)->type != H5O_SHARE_TYPE_HERE)
+                && (((H5O_shared_t *)mesg)->type != H5O_SHARE_TYPE_SOHM))
+            HGOTO_DONE(FALSE);
+#endif /* NDEBUG */
+
     /* "trivial" sharing checks */
     if(mesg_flags && (*mesg_flags & H5O_MSG_FLAG_DONTSHARE))
         HGOTO_DONE(FALSE)
@@ -1050,7 +1071,7 @@ H5SM_try_share(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, unsigned type_id,
     cache_udata.f = f;
 
     /* Look up the master SOHM table */
-    if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, &cache_udata, H5AC_WRITE)))
+    if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), &cache_udata, H5AC_WRITE)))
 	HGOTO_ERROR(H5E_SOHM, H5E_CANTPROTECT, FAIL, "unable to load SOHM master table")
 
     /* "complex" sharing checks */
@@ -1072,22 +1093,33 @@ H5SM_try_share(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, unsigned type_id,
      * message to become shared (if it is unique, it will not be shared).
      */
     if(H5SM_write_mesg(f, dxpl_id, open_oh, &(table->indexes[index_num]),
-            type_id, mesg, &cache_flags) < 0)
+            (defer_flags & H5SM_DEFER) != 0, type_id, mesg, &cache_flags) < 0)
 	HGOTO_ERROR(H5E_SOHM, H5E_CANTINSERT, FAIL, "can't write shared message")
 
-    /* Set flags if this message was "written" without error; it is now
-     * either fully shared or "shareable".
+    /* Set flags if this message was "written" without error and wasn't a
+     * 'defer' attempt; it is now either fully shared or "shareable".
      */
-    if(mesg_flags) {
+    if(mesg_flags && !(defer_flags & H5SM_DEFER)) {
         if(((H5O_shared_t *)mesg)->type == H5O_SHARE_TYPE_HERE)
             *mesg_flags |= H5O_MSG_FLAG_SHAREABLE;
-        else
+        else {
+            HDassert(((H5O_shared_t *)mesg)->type == H5O_SHARE_TYPE_SOHM);
             *mesg_flags |= H5O_MSG_FLAG_SHARED;
+        } /* end else */
     } /* end if */
 
 done:
+    HDassert(!ret_value || ((H5O_shared_t *)mesg)->type == H5O_SHARE_TYPE_HERE
+            || ((H5O_shared_t *)mesg)->type == H5O_SHARE_TYPE_SOHM);
+#ifndef NDEBUG
+    /* If we previously deferred this operation, make sure the saved message
+     * type is the same as the one we get here. */
+    if(defer_flags & H5SM_WAS_DEFERRED)
+        HDassert(deferred_type == ((H5O_shared_t *)mesg)->type);
+#endif /* NDEBUG */
+
     /* Release the master SOHM table */
-    if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, table, cache_flags) < 0)
+    if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), table, cache_flags) < 0)
 	HDONE_ERROR(H5E_SOHM, H5E_CANTUNPROTECT, FAIL, "unable to close SOHM master table")
 
     FUNC_LEAVE_NOAPI(ret_value)
@@ -1158,19 +1190,28 @@ done:
 /*-------------------------------------------------------------------------
  * Function:    H5SM_write_mesg
  *
- * Purpose:     Adds a shareable message to an index.  If this is the first
- *              such message and we have an object header location for this
- *              message, we record it in the index but don't modify the
- *              message passed in.
- *
- *              If the message is already in the index or we don't have an
- *              object header location for it, it is shared in the heap
- *              and this function sets its sharing struct to reflect this.
+ * Purpose:     This routine adds a shareable message to an index.
+ *              The behavior is controlled by the DEFER parameter:
+ *
+ *              If DEFER is TRUE, this routine Simulates adding a shareable
+ *              message to an index.  It determines what the outcome would
+ *              be with DEFER set the FALSE and updates the shared message
+ *              info, but does not actually add the message to a heap, list,
+ *              or b-tree.  Assumes that an open object header will be
+ *              available when H5SM_write_mesg is called with DEFER set to
+ *              FALSE.
+ *
+ *              If DEFER is FALSE, this routine adds a shareable message to
+ *              an index.  If this is the first such message and we have an
+ *              object header location for this message, we record it in the
+ *              index but don't modify the message passed in.  If the message
+ *              is already in the index or we don't have an object header
+ *              location for it, it is shared in the heap and this function
+ *              sets its sharing struct to reflect this.
  *
  *              The index could be a list or a B-tree.
  *
- * Return:      TRUE if message is now shared
- *              FALSE if message is in index but is not shared
+ * Return:      Non-negative on success
  *              Negative on failure
  *
  * Programmer:  James Laird
@@ -1180,7 +1221,7 @@ done:
  */
 static herr_t
 H5SM_write_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
-    H5SM_index_header_t *header, unsigned type_id, void *mesg,
+    H5SM_index_header_t *header, hbool_t defer, unsigned type_id, void *mesg,
     unsigned *cache_flags_ptr)
 {
     H5SM_list_t           *list = NULL;     /* List index */
@@ -1235,7 +1276,7 @@ H5SM_write_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
         cache_udata.header = header;
 
         /* The index is a list; get it from the cache */
-        if(NULL == (list = (H5SM_list_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_LIST, header->index_addr, &cache_udata, H5AC_WRITE)))
+        if(NULL == (list = (H5SM_list_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_LIST, header->index_addr, &cache_udata, defer ? H5AC_READ : H5AC_WRITE)))
 	    HGOTO_ERROR(H5E_SOHM, H5E_CANTPROTECT, FAIL, "unable to load SOHM index")
 
         /* See if the message is already in the index and get its location.
@@ -1243,55 +1284,75 @@ H5SM_write_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
          * later.
          */
         list_pos = H5SM_find_in_list(list, &key, &empty_pos);
-        if(list_pos != UFAIL) {
-            /* If the message was previously shared in an object header, share
-             * it in the heap now.
-             */
-            if(list->messages[list_pos].location == H5SM_IN_OH) {
-                /* Put the message in the heap and record its new heap ID */
-                if(H5HF_insert(fheap, dxpl_id, key.encoding_size, key.encoding, &shared.u.heap_id) < 0)
-                    HGOTO_ERROR(H5E_SOHM, H5E_CANTINSERT, FAIL, "unable to insert message into fractal heap")
-
-                list->messages[list_pos].location = H5SM_IN_HEAP;
-                list->messages[list_pos].u.heap_loc.fheap_id = shared.u.heap_id;
-                list->messages[list_pos].u.heap_loc.ref_count = 2;
-            } /* end if */
-            else {
-                /* If the message was already in the heap, increase its ref count */
-                HDassert(list->messages[list_pos].location == H5SM_IN_HEAP);
-                ++(list->messages[list_pos].u.heap_loc.ref_count);
-            } /* end else */
-
-            /* Set up the shared location to point to the shared location */
-            shared.u.heap_id = list->messages[list_pos].u.heap_loc.fheap_id;
-            found = TRUE;
+        if(defer) {
+            if(list_pos != UFAIL)
+                found = TRUE;
         } /* end if */
+        else {
+            if(list_pos != UFAIL) {
+                /* If the message was previously shared in an object header, share
+                 * it in the heap now.
+                 */
+                if(list->messages[list_pos].location == H5SM_IN_OH) {
+                    /* Put the message in the heap and record its new heap ID */
+                    if(H5HF_insert(fheap, dxpl_id, key.encoding_size, key.encoding, &shared.u.heap_id) < 0)
+                        HGOTO_ERROR(H5E_SOHM, H5E_CANTINSERT, FAIL, "unable to insert message into fractal heap")
+
+                    list->messages[list_pos].location = H5SM_IN_HEAP;
+                    list->messages[list_pos].u.heap_loc.fheap_id = shared.u.heap_id;
+                    list->messages[list_pos].u.heap_loc.ref_count = 2;
+                } /* end if */
+                else {
+                    /* If the message was already in the heap, increase its ref count */
+                    HDassert(list->messages[list_pos].location == H5SM_IN_HEAP);
+                    ++(list->messages[list_pos].u.heap_loc.ref_count);
+                } /* end else */
+
+                /* Set up the shared location to point to the shared location */
+                shared.u.heap_id = list->messages[list_pos].u.heap_loc.fheap_id;
+                found = TRUE;
+            } /* end if */
+        } /* end else */
     } /* end if */
     /* Index is a B-tree */
     else {
-        H5SM_incr_ref_opdata op_data;
-
         HDassert(header->index_type == H5SM_BTREE);
 
         /* Open the index v2 B-tree */
         if(NULL == (bt2 = H5B2_open(f, dxpl_id, header->index_addr, f)))
             HGOTO_ERROR(H5E_SOHM, H5E_CANTOPENOBJ, FAIL, "unable to open v2 B-tree for SOHM index")
 
-        /* Set up callback info */
-        op_data.key = &key;
-        op_data.dxpl_id = dxpl_id;
+        if(defer) {
+            htri_t bt2_find;  /* Result from searching in the v2 B-tree */
 
-        /* If this returns failure, it means that the message wasn't found. */
-        /* If it succeeds, set the heap_id in the shared struct.  It will
-         * return a heap ID, since a message with a reference count greater
-         * than 1 is always shared in the heap.
-         */
-        if(H5B2_modify(bt2, dxpl_id, &key, H5SM_incr_ref, &op_data) >= 0) {
-            shared.u.heap_id = op_data.fheap_id;
-            found = TRUE;
+            /* If this returns 0, it means that the message wasn't found. */
+            /* If it return 1, set the heap_id in the shared struct.  It will
+             * return a heap ID, since a message with a reference count greater
+             * than 1 is always shared in the heap.
+             */
+            if((bt2_find = H5B2_find(bt2, dxpl_id, &key, NULL, NULL)) < 0)
+                HGOTO_ERROR(H5E_SOHM, H5E_NOTFOUND, FAIL, "can't search for message in index")
+            found = (hbool_t)bt2_find;
         } /* end if */
-        else
-            H5E_clear_stack(NULL); /*ignore error*/
+        else {
+            H5SM_incr_ref_opdata op_data;
+
+            /* Set up callback info */
+            op_data.key = &key;
+            op_data.dxpl_id = dxpl_id;
+
+            /* If this returns failure, it means that the message wasn't found. */
+            /* If it succeeds, set the heap_id in the shared struct.  It will
+             * return a heap ID, since a message with a reference count greater
+             * than 1 is always shared in the heap.
+             */
+            if(H5B2_modify(bt2, dxpl_id, &key, H5SM_incr_ref, &op_data) >= 0) {
+                shared.u.heap_id = op_data.fheap_id;
+                found = TRUE;
+            } /* end if */
+            else
+                H5E_clear_stack(NULL); /*ignore error*/
+        } /* end else */
     } /* end else */
 
     if(found)
@@ -1309,11 +1370,21 @@ H5SM_write_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
             HGOTO_ERROR(H5E_SOHM, H5E_BADTYPE, FAIL, "'share in ohdr' check returned error")
 
         /* If this message can be shared in an object header location, it is
-         *      "shareable" but not shared in the heap.  Insert it in the index
-         *      but don't modify the original message.
+         *      "shareable" but not shared in the heap.
+         *
+         * If 'defer' flag is set:
+         *      We will insert it in the index but not modify the original
+         *              message.
+         *      If it can't be shared in an object header location, we will
+         *              insert it in the heap.  Note that we will only share
+         *              the message in the object header if there is an
+         *              "open_oh" available.
          *
-         * If it can't be shared in an object header location or there's no
-         *      object header location available, insert it in the heap.
+         * If 'defer' flag is not set:
+         *      Insert it in the index but don't modify the original message.
+         *      If it can't be shared in an object header location or there's
+         *              no object header location available, insert it in the
+         *              heap.
          */
         if(share_in_ohdr && open_oh) {
             /* Set up shared component info */
@@ -1322,62 +1393,71 @@ H5SM_write_mesg(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
             /* Retrieve any creation index from the native message */
             if(H5O_msg_get_crt_index(type_id, mesg, &shared.u.loc.index) < 0)
                 HGOTO_ERROR(H5E_SOHM, H5E_CANTGET, FAIL, "unable to retrieve creation index")
-            shared.u.loc.oh_addr = H5O_OH_GET_ADDR(open_oh);
 
-            /* Copy shared component info into key for inserting into index */
-            key.message.location = H5SM_IN_OH;
-            key.message.u.mesg_loc = shared.u.loc;
+            if(defer)
+                shared.u.loc.oh_addr = HADDR_UNDEF;
+            else {
+                shared.u.loc.oh_addr = H5O_OH_GET_ADDR(open_oh);
+
+                /* Copy shared component info into key for inserting into index */
+                key.message.location = H5SM_IN_OH;
+                key.message.u.mesg_loc = shared.u.loc;
+            } /* end else */
         } /* end if */
         else {
-            /* Put the message in the heap and record its new heap ID */
-            if(H5HF_insert(fheap, dxpl_id, key.encoding_size, key.encoding, &shared.u.heap_id) < 0)
-                HGOTO_ERROR(H5E_SOHM, H5E_CANTINSERT, FAIL, "unable to insert message into fractal heap")
-
             /* Set up shared component info */
-            /* (heap ID set above) */
+            /* (heap ID set below, if not deferred) */
             shared.type = H5O_SHARE_TYPE_SOHM;
 
-            key.message.location = H5SM_IN_HEAP;
-            key.message.u.heap_loc.fheap_id = shared.u.heap_id;
-            key.message.u.heap_loc.ref_count = 1;
-        } /* end else */
-
-        /* Set common information */
-        key.message.msg_type_id = type_id;
+            if(!defer) {
+                /* Put the message in the heap and record its new heap ID */
+                if(H5HF_insert(fheap, dxpl_id, key.encoding_size, key.encoding, &shared.u.heap_id) < 0)
+                    HGOTO_ERROR(H5E_SOHM, H5E_CANTINSERT, FAIL, "unable to insert message into fractal heap")
 
-        /* Check whether the list has grown enough that it needs to become a B-tree */
-        if(header->index_type == H5SM_LIST && header->num_messages >= header->list_max)
-            if(H5SM_convert_list_to_btree(f, header, &list, fheap, open_oh, dxpl_id) < 0)
-                HGOTO_ERROR(H5E_SOHM, H5E_CANTDELETE, FAIL, "unable to convert list to B-tree")
-
-        /* Insert the new message into the SOHM index */
-        if(header->index_type == H5SM_LIST) {
-            /* Index is a list.  Find an empty spot if we haven't already */
-            if(empty_pos == UFAIL)
-                if((H5SM_find_in_list(list, NULL, &empty_pos) == UFAIL) || empty_pos == UFAIL)
-                    HGOTO_ERROR(H5E_SOHM, H5E_CANTINSERT, FAIL, "unable to find empty entry in list")
-
-            /* Insert message into list */
-            HDassert(list->messages[empty_pos].location == H5SM_NO_LOC);
-            HDassert(key.message.location != H5SM_NO_LOC);
-            list->messages[empty_pos] = key.message;
-        } /* end if */
-        /* Index is a B-tree */
-        else {
-            HDassert(header->index_type == H5SM_BTREE);
+                key.message.location = H5SM_IN_HEAP;
+                key.message.u.heap_loc.fheap_id = shared.u.heap_id;
+                key.message.u.heap_loc.ref_count = 1;
+            } /* end if */
+        } /* end else */
 
-            /* Open the index v2 B-tree, if it isn't already */
-            if(NULL == bt2) {
-                if(NULL == (bt2 = H5B2_open(f, dxpl_id, header->index_addr, f)))
-                    HGOTO_ERROR(H5E_SOHM, H5E_CANTOPENOBJ, FAIL, "unable to open v2 B-tree for SOHM index")
+        if(!defer) {
+            /* Set common information */
+            key.message.msg_type_id = type_id;
+
+            /* Check whether the list has grown enough that it needs to become a B-tree */
+            if(header->index_type == H5SM_LIST && header->num_messages >= header->list_max)
+                if(H5SM_convert_list_to_btree(f, header, &list, fheap, open_oh, dxpl_id) < 0)
+                    HGOTO_ERROR(H5E_SOHM, H5E_CANTDELETE, FAIL, "unable to convert list to B-tree")
+
+            /* Insert the new message into the SOHM index */
+            if(header->index_type == H5SM_LIST) {
+                /* Index is a list.  Find an empty spot if we haven't already */
+                if(empty_pos == UFAIL)
+                    if((H5SM_find_in_list(list, NULL, &empty_pos) == UFAIL) || empty_pos == UFAIL)
+                        HGOTO_ERROR(H5E_SOHM, H5E_CANTINSERT, FAIL, "unable to find empty entry in list")
+
+                /* Insert message into list */
+                HDassert(list->messages[empty_pos].location == H5SM_NO_LOC);
+                HDassert(key.message.location != H5SM_NO_LOC);
+                list->messages[empty_pos] = key.message;
             } /* end if */
+            /* Index is a B-tree */
+            else {
+                HDassert(header->index_type == H5SM_BTREE);
 
-            if(H5B2_insert(bt2, dxpl_id, &key) < 0)
-                HGOTO_ERROR(H5E_SOHM, H5E_CANTINSERT, FAIL, "couldn't add SOHM to B-tree")
-        } /* end else */
+                /* Open the index v2 B-tree, if it isn't already */
+                if(NULL == bt2) {
+                    if(NULL == (bt2 = H5B2_open(f, dxpl_id, header->index_addr, f)))
+                        HGOTO_ERROR(H5E_SOHM, H5E_CANTOPENOBJ, FAIL, "unable to open v2 B-tree for SOHM index")
+                } /* end if */
+
+                if(H5B2_insert(bt2, dxpl_id, &key) < 0)
+                    HGOTO_ERROR(H5E_SOHM, H5E_CANTINSERT, FAIL, "couldn't add SOHM to B-tree")
+            } /* end else */
 
-        ++(header->num_messages);
-        (*cache_flags_ptr) |= H5AC__DIRTIED_FLAG;
+            ++(header->num_messages);
+            (*cache_flags_ptr) |= H5AC__DIRTIED_FLAG;
+        } /* end if */
     } /* end else */
 
     /* Set the file pointer & message type for the shared component */
@@ -1396,7 +1476,7 @@ done:
         HDONE_ERROR(H5E_SOHM, H5E_CANTCLOSEOBJ, FAIL, "can't close v2 B-tree for SOHM index")
 
     /* If we got a list out of the cache, release it (it is always dirty after writing a message) */
-    if(list && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_LIST, header->index_addr, list, H5AC__DIRTIED_FLAG) < 0)
+    if(list && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_LIST, header->index_addr, list, defer ? H5AC__NO_FLAGS_SET : H5AC__DIRTIED_FLAG) < 0)
 	HDONE_ERROR(H5E_SOHM, H5E_CANTUNPROTECT, FAIL, "unable to close SOHM index")
 
     if(encoding_buf)
@@ -1439,7 +1519,7 @@ H5SM_delete(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, H5O_shared_t *sh_mesg)
     FUNC_ENTER_NOAPI(H5SM_delete, FAIL)
 
     HDassert(f);
-    HDassert(f->shared->sohm_addr != HADDR_UNDEF);
+    HDassert(H5F_addr_defined(H5F_SOHM_ADDR(f)));
     HDassert(sh_mesg);
 
     /* Get message type */
@@ -1449,7 +1529,7 @@ H5SM_delete(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, H5O_shared_t *sh_mesg)
     cache_udata.f = f;
 
     /* Look up the master SOHM table */
-    if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, &cache_udata, H5AC_WRITE)))
+    if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), &cache_udata, H5AC_WRITE)))
 	HGOTO_ERROR(H5E_SOHM, H5E_CANTPROTECT, FAIL, "unable to load SOHM master table")
 
     /* Find the correct index and try to delete from it */
@@ -1464,7 +1544,7 @@ H5SM_delete(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, H5O_shared_t *sh_mesg)
 	HGOTO_ERROR(H5E_SOHM, H5E_CANTDELETE, FAIL, "unable to delete mesage from SOHM index")
 
     /* Release the master SOHM table */
-    if(H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, table, cache_flags) < 0)
+    if(H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), table, cache_flags) < 0)
 	HGOTO_ERROR(H5E_SOHM, H5E_CANTUNPROTECT, FAIL, "unable to close SOHM master table")
     table = NULL;
 
@@ -1482,7 +1562,7 @@ H5SM_delete(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh, H5O_shared_t *sh_mesg)
 
 done:
     /* Release the master SOHM table (should only happen on error) */
-    if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, table, cache_flags) < 0)
+    if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), table, cache_flags) < 0)
 	HDONE_ERROR(H5E_SOHM, H5E_CANTUNPROTECT, FAIL, "unable to close SOHM master table")
 
     /* Release any native message we decoded */
@@ -1538,7 +1618,7 @@ H5SM_find_in_list(const H5SM_list_t *list, const H5SM_mesg_key_t *key, size_t *e
      * Also record the first empty position we find.
      */
     for(x = 0; x < list->header->list_max; x++) {
-        if(key && (list->messages[x].location != H5SM_NO_LOC) &&
+        if((list->messages[x].location != H5SM_NO_LOC) &&
                 (0 == H5SM_message_compare(key, &(list->messages[x]))))
             HGOTO_DONE(x)
         else if(empty_pos && list->messages[x].location == H5SM_NO_LOC) {
@@ -1846,9 +1926,9 @@ herr_t
 H5SM_get_info(const H5O_loc_t *ext_loc, H5P_genplist_t *fc_plist, hid_t dxpl_id)
 {
     H5F_t *f = ext_loc->file;           /* File pointer (convenience variable) */
-    H5F_file_t *shared = f->shared;     /* Shared file info (convenience variable) */
     H5O_shmesg_table_t sohm_table;      /* SOHM message from superblock extension */
     H5SM_master_table_t *table = NULL;  /* SOHM master table */
+    unsigned tmp_sohm_nindexes;		/* Number of shared messages indexes in the table */
     htri_t status;                      /* Status for message existing */
     herr_t ret_value = SUCCEED;         /* Return value */
 
@@ -1856,7 +1936,7 @@ H5SM_get_info(const H5O_loc_t *ext_loc, H5P_genplist_t *fc_plist, hid_t dxpl_id)
 
     /* Sanity check */
     HDassert(ext_loc);
-    HDassert(f && shared);
+    HDassert(f);
     HDassert(fc_plist);
 
     /* Check for the extension having a 'shared message info' message */
@@ -1879,28 +1959,28 @@ H5SM_get_info(const H5O_loc_t *ext_loc, H5P_genplist_t *fc_plist, hid_t dxpl_id)
         HDmemset(minsizes, 0, sizeof(minsizes));
 
         /* Set SOHM info from file */
-        shared->sohm_addr = sohm_table.addr;
-        shared->sohm_vers = sohm_table.version;
-        shared->sohm_nindexes = sohm_table.nindexes;
-        HDassert(H5F_addr_defined(shared->sohm_addr));
-        HDassert(shared->sohm_nindexes > 0 && shared->sohm_nindexes <= H5O_SHMESG_MAX_NINDEXES);
+        H5F_SET_SOHM_ADDR(f, sohm_table.addr);
+        H5F_SET_SOHM_VERS(f, sohm_table.version);
+        H5F_SET_SOHM_NINDEXES(f, sohm_table.nindexes);
+        HDassert(H5F_addr_defined(H5F_SOHM_ADDR(f)));
+        HDassert(H5F_SOHM_NINDEXES(f) > 0 && H5F_SOHM_NINDEXES(f) <= H5O_SHMESG_MAX_NINDEXES);
 
         /* Set up user data for callback */
         cache_udata.f = f;
 
         /* Read the rest of the SOHM table information from the cache */
-        if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, shared->sohm_addr, &cache_udata, H5AC_READ)))
+        if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), &cache_udata, H5AC_READ)))
             HGOTO_ERROR(H5E_SOHM, H5E_CANTPROTECT, FAIL, "unable to load SOHM master table")
 
         /* Get index conversion limits */
-        sohm_l2b = table->indexes[0].list_max;
-        sohm_b2l = table->indexes[0].btree_min;
+        sohm_l2b = (unsigned)table->indexes[0].list_max;
+        sohm_b2l = (unsigned)table->indexes[0].btree_min;
 
         /* Iterate through all indices */
         for(u = 0; u < table->num_indexes; ++u) {
             /* Pack information about the individual SOHM index */
             index_flags[u] = table->indexes[u].mesg_types;
-            minsizes[u] = table->indexes[u].min_mesg_size;
+            minsizes[u] = (unsigned)table->indexes[u].min_mesg_size;
 
             /* Sanity check */
             HDassert(sohm_l2b == table->indexes[u].list_max);
@@ -1910,11 +1990,12 @@ H5SM_get_info(const H5O_loc_t *ext_loc, H5P_genplist_t *fc_plist, hid_t dxpl_id)
              *  indices must be tracked on object header message in the file.
              */
             if(index_flags[u] & H5O_SHMESG_ATTR_FLAG)
-                shared->store_msg_crt_idx = TRUE;
+                H5F_SET_STORE_MSG_CRT_IDX(f, TRUE);
         } /* end for */
 
         /* Set values in the property list */
-        if(H5P_set(fc_plist, H5F_CRT_SHMSG_NINDEXES_NAME, &shared->sohm_nindexes) < 0)
+        tmp_sohm_nindexes = H5F_SOHM_NINDEXES(f);
+        if(H5P_set(fc_plist, H5F_CRT_SHMSG_NINDEXES_NAME, &tmp_sohm_nindexes) < 0)
             HGOTO_ERROR(H5E_SOHM, H5E_CANTSET, FAIL, "can't set number of SOHM indexes")
         if(H5P_set(fc_plist, H5F_CRT_SHMSG_INDEX_TYPES_NAME, index_flags) < 0)
             HGOTO_ERROR(H5E_SOHM, H5E_CANTSET, FAIL, "can't set type flags for indexes")
@@ -1927,18 +2008,19 @@ H5SM_get_info(const H5O_loc_t *ext_loc, H5P_genplist_t *fc_plist, hid_t dxpl_id)
     } /* end if */
     else {
         /* No SOHM info in file */
-        shared->sohm_addr = HADDR_UNDEF;
-        shared->sohm_nindexes = 0;
-        shared->sohm_vers = 0;
+        H5F_SET_SOHM_ADDR(f, HADDR_UNDEF);
+        H5F_SET_SOHM_VERS(f, 0);
+        H5F_SET_SOHM_NINDEXES(f, 0);
 
         /* Shared object header messages are disabled */
-        if(H5P_set(fc_plist, H5F_CRT_SHMSG_NINDEXES_NAME, &shared->sohm_nindexes) < 0)
+        tmp_sohm_nindexes = H5F_SOHM_NINDEXES(f);
+        if(H5P_set(fc_plist, H5F_CRT_SHMSG_NINDEXES_NAME, &tmp_sohm_nindexes) < 0)
             HGOTO_ERROR(H5E_SOHM, H5E_CANTSET, FAIL, "can't set number of SOHM indexes")
     } /* end else */
 
 done:
     /* Release the master SOHM table if we took it out of the cache */
-    if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, shared->sohm_addr, table, H5AC__NO_FLAGS_SET) < 0)
+    if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), table, H5AC__NO_FLAGS_SET) < 0)
 	HDONE_ERROR(H5E_SOHM, H5E_CANTUNPROTECT, FAIL, "unable to close SOHM master table")
 
     FUNC_LEAVE_NOAPI(ret_value)
@@ -2050,7 +2132,7 @@ H5SM_get_refcount(H5F_t *f, hid_t dxpl_id, unsigned type_id,
     tbl_cache_udata.f = f;
 
     /* Look up the master SOHM table */
-    if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, &tbl_cache_udata, H5AC_READ)))
+    if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), &tbl_cache_udata, H5AC_READ)))
 	HGOTO_ERROR(H5E_SOHM, H5E_CANTPROTECT, FAIL, "unable to load SOHM master table")
 
     /* Find the correct index and find the message in it */
@@ -2124,7 +2206,7 @@ done:
     /* Release resources */
     if(list && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_LIST, header->index_addr, list, H5AC__NO_FLAGS_SET) < 0)
 	HDONE_ERROR(H5E_SOHM, H5E_CANTUNPROTECT, FAIL, "unable to close SOHM index")
-    if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, table, H5AC__NO_FLAGS_SET) < 0)
+    if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), table, H5AC__NO_FLAGS_SET) < 0)
 	HDONE_ERROR(H5E_SOHM, H5E_CANTUNPROTECT, FAIL, "unable to close SOHM master table")
     if(fheap && H5HF_close(fheap, dxpl_id) < 0)
         HDONE_ERROR(H5E_SOHM, H5E_CANTCLOSEOBJ, FAIL, "can't close fractal heap")
@@ -2153,11 +2235,15 @@ done:
  * Programmer:	James Laird
  *              Wednesday, February 21, 2006
  *
+ * Modifications:
+ *      Vailin Choi; September 2011
+ *      Change "oh_modified" from boolean to unsigned
+ *      (See H5Oprivate.h for possible flags)
  *-------------------------------------------------------------------------
  */
 static herr_t
 H5SM_read_iter_op(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/, unsigned sequence,
-    hbool_t UNUSED *oh_modified, void *_udata/*in,out*/)
+    unsigned UNUSED *oh_modified, void *_udata/*in,out*/)
 {
     H5SM_read_udata_t *udata = (H5SM_read_udata_t *) _udata;
     herr_t ret_value = H5_ITER_CONT;
@@ -2429,12 +2515,12 @@ H5SM_table_debug(H5F_t *f, hid_t dxpl_id, haddr_t table_addr,
      * userblock
      */
     if(table_vers == UFAIL)
-        table_vers = f->shared->sohm_vers;
-    else if(table_vers != f->shared->sohm_vers)
+        table_vers = H5F_SOHM_VERS(f);
+    else if(table_vers != H5F_SOHM_VERS(f))
 	HDfprintf(stream, "*** SOHM TABLE VERSION DOESN'T MATCH VERSION IN SUPERBLOCK!\n");
     if(num_indexes == UFAIL)
-        num_indexes = f->shared->sohm_nindexes;
-    else if(num_indexes != f->shared->sohm_nindexes)
+        num_indexes = H5F_SOHM_NINDEXES(f);
+    else if(num_indexes != H5F_SOHM_NINDEXES(f))
 	HDfprintf(stream, "*** NUMBER OF SOHM INDEXES DOESN'T MATCH VALUE IN SUPERBLOCK!\n");
 
     /* Check arguments.  Version must be 0, the only version implemented so far */
@@ -2602,14 +2688,14 @@ H5SM_ih_size(H5F_t *f, hid_t dxpl_id, H5F_info_t *finfo)
 
     /* Sanity check */
     HDassert(f);
-    HDassert(H5F_addr_defined(f->shared->sohm_addr));
+    HDassert(H5F_addr_defined(H5F_SOHM_ADDR(f)));
     HDassert(finfo);
 
     /* Set up user data for callback */
     cache_udata.f = f;
 
     /* Look up the master SOHM table */
-    if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, &cache_udata, H5AC_READ)))
+    if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), &cache_udata, H5AC_READ)))
 	HGOTO_ERROR(H5E_SOHM, H5E_CANTPROTECT, FAIL, "unable to load SOHM master table")
 
     /* Get SOHM header size */
@@ -2661,7 +2747,7 @@ done:
         HDONE_ERROR(H5E_SOHM, H5E_CANTCLOSEOBJ, FAIL, "can't close fractal heap")
     if(bt2 && H5B2_close(bt2, dxpl_id) < 0)
         HDONE_ERROR(H5E_SOHM, H5E_CANTCLOSEOBJ, FAIL, "can't close v2 B-tree for SOHM index")
-    if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, table, H5AC__NO_FLAGS_SET) < 0)
+    if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), table, H5AC__NO_FLAGS_SET) < 0)
         HDONE_ERROR(H5E_SOHM, H5E_CANTUNPROTECT, FAIL, "unable to close SOHM master table")
 
     FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5SMcache.c b/src/H5SMcache.c
index ad89c85..1dfbaab 100644
--- a/src/H5SMcache.c
+++ b/src/H5SMcache.c
@@ -17,7 +17,6 @@
 /* Module Setup */
 /****************/
 
-#define H5F_PACKAGE		/*suppress error about including H5Fpkg 	  */
 #define H5SM_PACKAGE		/*suppress error about including H5SMpkg	  */
 
 
@@ -25,7 +24,7 @@
 /* Headers */
 /***********/
 #include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fpkg.h"		/* File access                          */
+#include "H5Fprivate.h"		/* File access                          */
 #include "H5FLprivate.h"	/* Free Lists                           */
 #include "H5MFprivate.h"        /* File memory management		*/
 #include "H5MMprivate.h"	/* Memory management			*/
@@ -131,16 +130,16 @@ H5SM_table_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void UNUSED *udata)
     /* Verify that we're reading version 0 of the table; this is the only
      * version defined so far.
      */
-    HDassert(f->shared->sohm_vers == HDF5_SHAREDHEADER_VERSION);
+    HDassert(H5F_SOHM_VERS(f) == HDF5_SHAREDHEADER_VERSION);
 
     /* Allocate space for the master table in memory */
     if(NULL == (table = H5FL_CALLOC(H5SM_master_table_t)))
 	HGOTO_ERROR(H5E_SOHM, H5E_NOSPACE, NULL, "memory allocation failed")
 
     /* Read number of indexes and version from file superblock */
-    table->num_indexes = f->shared->sohm_nindexes;
+    table->num_indexes = H5F_SOHM_NINDEXES(f);
 
-    HDassert(addr == f->shared->sohm_addr);
+    HDassert(addr == H5F_SOHM_ADDR(f));
     HDassert(addr != HADDR_UNDEF);
     HDassert(table->num_indexes > 0);
 
@@ -271,7 +270,7 @@ H5SM_table_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5SM_ma
         /* Verify that we're writing version 0 of the table; this is the only
          * version defined so far.
          */
-        HDassert(f->shared->sohm_vers == HDF5_SHAREDHEADER_VERSION);
+        HDassert(H5F_SOHM_VERS(f) == HDF5_SHAREDHEADER_VERSION);
 
         /* Wrap the local buffer for serialized header info */
         if(NULL == (wb = H5WB_wrap(tbl_buf, sizeof(tbl_buf))))
@@ -613,7 +612,7 @@ H5SM_list_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5SM_lis
         computed_chksum = H5_checksum_metadata(buf, (size_t)(p - buf), 0);
         UINT32ENCODE(p, computed_chksum);
 #ifdef H5_CLEAR_MEMORY
-HDmemset(p, 0, (list->header->list_size - (p - buf)));
+HDmemset(p, 0, (list->header->list_size - (size_t)(p - buf)));
 #endif /* H5_CLEAR_MEMORY */
 
         /* Write the list to disk */
diff --git a/src/H5SMmessage.c b/src/H5SMmessage.c
index 0d41a09..b3dbeb3 100644
--- a/src/H5SMmessage.c
+++ b/src/H5SMmessage.c
@@ -52,7 +52,7 @@ typedef struct H5SM_compare_udata_t {
 /********************/
 static herr_t H5SM_compare_cb(const void *obj, size_t obj_len, void *udata);
 static herr_t H5SM_compare_iter_op(H5O_t *oh, H5O_mesg_t *mesg, unsigned sequence,
-    hbool_t *oh_modified, void *udata);
+    unsigned *oh_modified, void *udata);
 
 
 /*********************/
@@ -121,11 +121,15 @@ H5SM_compare_cb(const void *obj, size_t obj_len, void *_udata)
  * Programmer:	James Laird
  *              Wednesday, February 7, 2007
  *
+ * Modifications:
+ *      Vailin Choi; September 2011
+ *      Change "oh_modified" from boolean to unsigned
+ *      (See H5Oprivate.h for possible flags)
  *-------------------------------------------------------------------------
  */
 static herr_t
 H5SM_compare_iter_op(H5O_t *oh, H5O_mesg_t *mesg/*in,out*/, unsigned sequence,
-    hbool_t UNUSED *oh_modified, void *_udata/*in,out*/)
+    unsigned UNUSED *oh_modified, void *_udata/*in,out*/)
 {
     H5SM_compare_udata_t *udata = (H5SM_compare_udata_t *) _udata;
     herr_t ret_value = H5_ITER_CONT;
diff --git a/src/H5SMpkg.h b/src/H5SMpkg.h
index 84c2bf4..68dc484 100755
--- a/src/H5SMpkg.h
+++ b/src/H5SMpkg.h
@@ -83,7 +83,7 @@
     H5SM_METADATA_PREFIX_SIZE                                                 \
                                                                               \
     /* Indices */                                                             \
-    + ((f)->shared->sohm_nindexes * H5SM_INDEX_HEADER_SIZE(f))                \
+    + (H5F_SOHM_NINDEXES(f) * H5SM_INDEX_HEADER_SIZE(f))                      \
     )
 
 #define H5SM_LIST_SIZE(f, num_mesg) (                                         \
diff --git a/src/H5SMprivate.h b/src/H5SMprivate.h
index 1465357..dddc0a8 100755
--- a/src/H5SMprivate.h
+++ b/src/H5SMprivate.h
@@ -26,6 +26,16 @@
 #include "H5Oprivate.h"		/* Object headers			*/
 #include "H5Pprivate.h"		/* Property lists			*/
 
+/**************************/
+/* Library Private Macros */
+/**************************/
+
+/* Flags for the "defer_flags" argument to H5SM_try_share
+ */
+#define H5SM_DEFER              0x01u   /* Don't actually write shared message to index, heap; just update shared info */
+#define H5SM_WAS_DEFERRED       0x02u   /* Message was previously updated by a call to H5SM_try_share with H5SM_DEFER */
+
+
 /****************************/
 /* Library Private Typedefs */
 /****************************/
@@ -44,7 +54,7 @@ H5_DLL herr_t H5SM_init(H5F_t *f, H5P_genplist_t *fc_plist,
 H5_DLL htri_t H5SM_can_share(H5F_t *f, hid_t dxpl_id, H5SM_master_table_t *table,
     ssize_t *sohm_index_num, unsigned type_id, const void *mesg);
 H5_DLL htri_t H5SM_try_share(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
-    unsigned type_id, void *mesg, unsigned *mesg_flags);
+    unsigned defer_flags, unsigned type_id, void *mesg, unsigned *mesg_flags);
 H5_DLL herr_t H5SM_delete(H5F_t *f, hid_t dxpl_id, H5O_t *open_oh,
     H5O_shared_t *sh_mesg);
 H5_DLL herr_t H5SM_get_info(const H5O_loc_t *ext_loc, H5P_genplist_t *fc_plist,
diff --git a/src/H5SMtest.c b/src/H5SMtest.c
index a22e9cc..d754f62 100644
--- a/src/H5SMtest.c
+++ b/src/H5SMtest.c
@@ -17,7 +17,6 @@
 /* Module Setup */
 /****************/
 
-#define H5F_PACKAGE		/*suppress error about including H5Fpkg 	  */
 #define H5SM_PACKAGE		/*suppress error about including H5SMpkg	  */
 #define H5SM_TESTING		/*suppress warning about H5SM testing funcs*/
 
@@ -28,7 +27,8 @@
 #include "H5private.h"		/* Generic Functions			*/
 #include "H5ACprivate.h"	/* Metadata cache			*/
 #include "H5Eprivate.h"		/* Error handling		  	*/
-#include "H5Fpkg.h"		/* File access                          */
+#include "H5Fprivate.h"		/* File access                          */
+#include "H5FLprivate.h"	/* Free Lists                           */
 #include "H5SMpkg.h"            /* Shared object header messages        */
 
 
@@ -89,7 +89,7 @@ H5SM_get_mesg_count_test(H5F_t *f, hid_t dxpl_id, unsigned type_id,
     HDassert(mesg_count);
 
     /* Check for shared messages being enabled */
-    if(H5F_addr_defined(f->shared->sohm_addr)) {
+    if(H5F_addr_defined(H5F_SOHM_ADDR(f))) {
         H5SM_index_header_t *header;        /* Index header for message type */
         H5SM_table_cache_ud_t cache_udata;  /* User-data for callback */
         ssize_t index_num;                  /* Table index for message type */
@@ -98,7 +98,7 @@ H5SM_get_mesg_count_test(H5F_t *f, hid_t dxpl_id, unsigned type_id,
         cache_udata.f = f;
 
         /* Look up the master SOHM table */
-        if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, &cache_udata, H5AC_READ)))
+        if(NULL == (table = (H5SM_master_table_t *)H5AC_protect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), &cache_udata, H5AC_READ)))
             HGOTO_ERROR(H5E_SOHM, H5E_CANTPROTECT, FAIL, "unable to load SOHM master table")
 
         /* Find the correct index for this message type */
@@ -115,7 +115,7 @@ H5SM_get_mesg_count_test(H5F_t *f, hid_t dxpl_id, unsigned type_id,
 
 done:
     /* Release resources */
-    if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, f->shared->sohm_addr, table, H5AC__NO_FLAGS_SET) < 0)
+    if(table && H5AC_unprotect(f, dxpl_id, H5AC_SOHM_TABLE, H5F_SOHM_ADDR(f), table, H5AC__NO_FLAGS_SET) < 0)
 	HDONE_ERROR(H5E_SOHM, H5E_CANTUNPROTECT, FAIL, "unable to close SOHM master table")
 
     FUNC_LEAVE_NOAPI(ret_value)
diff --git a/src/H5T.c b/src/H5T.c
index a34783a..ed54051 100644
--- a/src/H5T.c
+++ b/src/H5T.c
@@ -1588,9 +1588,9 @@ H5Tcreate(H5T_class_t type, size_t size)
     FUNC_ENTER_API(H5Tcreate, FAIL)
     H5TRACE2("i", "Ttz", type, size);
 
-    /* check args */
-    if(size == 0)
-	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "invalid size")
+    /* check args. We support string (fixed-size or variable-length) now. */
+    if(size <= 0 && size != H5T_VARIABLE)
+	HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, "size must be positive")
 
     /* create the type */
     if(NULL == (dt = H5T_create(type, size)))
@@ -2155,8 +2155,6 @@ H5Tset_size(hid_t type_id, size_t size)
 	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not allowed after members are defined")
     if(H5T_REFERENCE == dt->shared->type)
 	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "operation not defined for this datatype")
-    if(size == 0)
-	HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "can't adjust size to 0")
 
     /* Modify the datatype */
     if(H5T_set_size(dt, size) < 0)
@@ -2970,7 +2968,9 @@ done:
  *		Friday, December  5, 1997
  *
  * Modifications:
- *
+ *              Raymond Lu
+ *              19 May 2011
+ *              We support fixed size or variable-length string now.
  *-------------------------------------------------------------------------
  */
 H5T_t *
@@ -2986,6 +2986,22 @@ H5T_create(H5T_class_t type, size_t size)
         case H5T_FLOAT:
         case H5T_TIME:
         case H5T_STRING:
+            {
+                H5T_t *origin_dt = NULL;
+
+		if(NULL == (origin_dt = (H5T_t *)H5I_object(H5T_C_S1)))
+		    HGOTO_ERROR(H5E_DATATYPE, H5E_BADTYPE, NULL, "can't get structure for string type")
+
+		/* Copy the default string datatype */
+		if(NULL == (dt = H5T_copy(origin_dt, H5T_COPY_TRANSIENT)))
+		    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to copy");
+
+		/* Modify the datatype */
+		if(H5T_set_size(dt, size) < 0)
+		    HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to set size for string type")
+            }
+            break;
+
         case H5T_BITFIELD:
             HGOTO_ERROR(H5E_DATATYPE, H5E_UNSUPPORTED, NULL, "type class is not appropriate - use H5Tcopy()")
 
@@ -3045,7 +3061,9 @@ H5T_create(H5T_class_t type, size_t size)
             HGOTO_ERROR(H5E_INTERNAL, H5E_UNSUPPORTED, NULL, "unknown data type class")
     } /* end switch */
 
-    dt->shared->size = size;
+    /* Set the size except VL string */
+    if(H5T_STRING != type || H5T_VARIABLE != size)
+        dt->shared->size = size;
 
     /* Set return value */
     ret_value = dt;
@@ -5283,3 +5301,39 @@ done:
     FUNC_LEAVE_NOAPI(ret_value)
 } /* end H5T_set_latest_version() */
 
+
+/*-------------------------------------------------------------------------
+ * Function:    H5T_patch_file
+ *
+ * Purpose:     Patch the top-level file pointers contained in dt to point
+ *              to f, if dt is a committed type.  This is possible because
+ *              the top-level file pointer can be closed out from under
+ *              dt while dt is contained in the shared file's cache.
+ *
+ * Return:      SUCCEED
+ *
+ * Programmer:  Neil Fortner
+ *              Thursday, July 14, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+H5T_patch_file(H5T_t *dt, H5F_t *f)
+{
+    herr_t ret_value = SUCCEED;
+
+    FUNC_ENTER_NOAPI(H5T_patch_file, FAIL)
+
+    /* Sanity check */
+    HDassert(dt);
+    HDassert(f);
+
+    if(H5T_STATE_OPEN == dt->shared->state || H5T_STATE_NAMED == dt->shared->state) {
+        dt->oloc.file = f;
+        dt->sh_loc.file = f;
+    } /* end if */
+
+done:
+    FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5T_patch_file() */
+
diff --git a/src/H5TS.c b/src/H5TS.c
index 480bc2d..97a743f 100644
--- a/src/H5TS.c
+++ b/src/H5TS.c
@@ -14,9 +14,9 @@
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
 /* private headers */
-#include "H5private.h"		/*library                 		*/
-#include "H5Eprivate.h"		/*error handling          		*/
-#include "H5MMprivate.h"	/*memory management functions		*/
+#include "H5private.h"    /*library                     */
+#include "H5Eprivate.h"    /*error handling              */
+#include "H5MMprivate.h"  /*memory management functions    */
 
 #ifdef H5_HAVE_THREADSAFE
 
@@ -126,6 +126,12 @@ void
 H5TS_pthread_first_thread_init(void)
 {
     H5_g.H5_libinit_g = FALSE;
+    
+#ifdef H5_HAVE_WIN32_API
+# ifdef PTW32_STATIC_LIB
+    pthread_win32_process_attach_np();
+# endif
+#endif
 
     /* initialize global API mutex lock */
     pthread_mutex_init(&H5_g.init_lock.atomic_lock, NULL);
@@ -171,7 +177,7 @@ H5TS_pthread_first_thread_init(void)
 herr_t
 H5TS_mutex_lock(H5TS_mutex_t *mutex)
 {
-#ifdef	H5_HAVE_WIN_THREADS
+#ifdef  H5_HAVE_WIN_THREADS
     EnterCriticalSection( &mutex->CriticalSection); 
     return 0;
 #else /* H5_HAVE_WIN_THREADS */
@@ -226,7 +232,7 @@ H5TS_mutex_lock(H5TS_mutex_t *mutex)
 herr_t
 H5TS_mutex_unlock(H5TS_mutex_t *mutex)
 {
-#ifdef	H5_HAVE_WIN_THREADS
+#ifdef  H5_HAVE_WIN_THREADS
     /* Releases ownership of the specified critical section object. */
     LeaveCriticalSection(&mutex->CriticalSection);
     return 0; 
@@ -285,7 +291,7 @@ H5TS_mutex_unlock(H5TS_mutex_t *mutex)
 herr_t
 H5TS_cancel_count_inc(void)
 {
-#ifdef	H5_HAVE_WIN_THREADS
+#ifdef  H5_HAVE_WIN_THREADS
     /* unsupported; just return 0 */
     return SUCCEED;
 #else /* H5_HAVE_WIN_THREADS */
@@ -296,25 +302,25 @@ H5TS_cancel_count_inc(void)
 
     if (!cancel_counter) {
         /*
-	 * First time thread calls library - create new counter and associate
+   * First time thread calls library - create new counter and associate
          * with key
          */
-	cancel_counter = (H5TS_cancel_t *)H5MM_calloc(sizeof(H5TS_cancel_t));
+  cancel_counter = (H5TS_cancel_t *)H5MM_calloc(sizeof(H5TS_cancel_t));
 
-	if (!cancel_counter) {
-	    H5E_push_stack(NULL, "H5TS_cancel_count_inc",
-		     __FILE__, __LINE__, H5E_ERR_CLS_g, H5E_RESOURCE, H5E_NOSPACE, "memory allocation failed");
-	    return FAIL;
-	}
+  if (!cancel_counter) {
+      H5E_push_stack(NULL, "H5TS_cancel_count_inc",
+         __FILE__, __LINE__, H5E_ERR_CLS_g, H5E_RESOURCE, H5E_NOSPACE, "memory allocation failed");
+      return FAIL;
+  }
 
         ret_value = pthread_setspecific(H5TS_cancel_key_g,
-					(void *)cancel_counter);
+          (void *)cancel_counter);
     }
 
     if (cancel_counter->cancel_count == 0)
         /* thread entering library */
         ret_value = pthread_setcancelstate(PTHREAD_CANCEL_DISABLE,
-					   &cancel_counter->previous_state);
+             &cancel_counter->previous_state);
 
     ++cancel_counter->cancel_count;
 
@@ -352,7 +358,7 @@ H5TS_cancel_count_inc(void)
 herr_t
 H5TS_cancel_count_dec(void)
 {
-#ifdef	H5_HAVE_WIN_THREADS 
+#ifdef  H5_HAVE_WIN_THREADS 
     /* unsupported; will just return 0 */
     return SUCCEED;
 #else /* H5_HAVE_WIN_THREADS */
@@ -391,7 +397,7 @@ H5TS_create_thread(void * func, H5TS_attr_t * attr, void*udata)
 {
     H5TS_thread_t ret_value;
 
-#ifdef	H5_HAVE_WIN_THREADS 
+#ifdef  H5_HAVE_WIN_THREADS 
 
     ret_value = CreateThread(NULL, 0, func, udata, 0, NULL);
 
@@ -405,4 +411,4 @@ H5TS_create_thread(void * func, H5TS_attr_t * attr, void*udata)
 
 } /* H5TS_create_thread */
 
-#endif	/* H5_HAVE_THREADSAFE */
+#endif  /* H5_HAVE_THREADSAFE */
diff --git a/src/H5Tconv.c b/src/H5Tconv.c
index 927a9dc..0de54c9 100644
--- a/src/H5Tconv.c
+++ b/src/H5Tconv.c
@@ -2614,6 +2614,15 @@ H5T_conv_enum_init(H5T_t *src, H5T_t *dst, H5T_cdata_t *cdata)
      * a native integer type as an index into the `val2dst'. The values of
      * that array are the index numbers in the destination type or negative
      * if the entry is unused.
+     *
+     * (This optimized algorithm doesn't work when the byte orders are different.  
+     * The code such as "n = *((int*)(src->shared->u.enumer.value+i*src->shared->size));"
+     * can change the value significantly. i.g. if the source value is big-endian 0x0000000f,
+     * executing the casting on little-endian machine will get a big number 0x0f000000.
+     * Then it can't meet the condition 
+     * "if(src->shared->u.enumer.nmembs<2 || (double)length/src->shared->u.enumer.nmembs<1.2)"
+     * Because this is the optimized code, we won't fix it. It should still work in some 
+     * situations. SLU - 2011/5/24) 
      */
     if (1==src->shared->size || sizeof(short)==src->shared->size || sizeof(int)==src->shared->size) {
 	for (i=0; i<src->shared->u.enumer.nmembs; i++) {
@@ -2690,13 +2699,6 @@ done:
  *
  * Programmer:	Robb Matzke
  *              Monday, January  4, 1999
- *
- * Modifications:
- *		Robb Matzke, 1999-06-16
- *		Added support for non-zero strides. If BUF_STRIDE is non-zero
- *		then convert one value at each memory location advancing
- *		BUF_STRIDE bytes each time; otherwise assume both source and
- *		destination values are packed.
  *-------------------------------------------------------------------------
  */
 herr_t
@@ -2706,6 +2708,7 @@ H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
 {
     uint8_t	*buf = (uint8_t*)_buf;	/*cast for pointer arithmetic	*/
     H5T_t	*src = NULL, *dst = NULL;	/*src and dst datatypes	*/
+    H5T_t	*src_super = NULL, *dst_super = NULL;	/*parent types for src and dst*/
     uint8_t	*s = NULL, *d = NULL;	/*src and dst BUF pointers	*/
     int	src_delta, dst_delta;	/*conversion strides		*/
     int	n;			/*src value cast as native int	*/
@@ -2796,6 +2799,12 @@ H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
             for(i = 0; i < nelmts; i++, s += src_delta, d += dst_delta) {
                 if(priv->length) {
                     /* Use O(1) lookup */
+                    /* (The casting won't work when the byte orders are different. i.g. if the source value
+                     * is big-endian 0x0000000f, the direct casting "n = *((int*)s);" will make it a big
+                     * number 0x0f000000 on little-endian machine. But we won't fix it because it's an 
+                     * optimization code. Please also see the comment in the H5T_conv_enum_init() function.
+                     * SLU - 2011/5/24)
+                     */
                     if(1 == src->shared->size)
                         n = *((signed char*)s);
                     else if(sizeof(short) == src->shared->size)
@@ -2856,6 +2865,7 @@ H5T_conv_enum(hid_t src_id, hid_t dst_id, H5T_cdata_t *cdata, size_t nelmts,
                     } /* end else */
                 }
             }
+
             break;
 
         default:
diff --git a/src/H5Tprivate.h b/src/H5Tprivate.h
index c70eea0..0c96896 100644
--- a/src/H5Tprivate.h
+++ b/src/H5Tprivate.h
@@ -135,6 +135,7 @@ H5_DLL htri_t H5T_set_loc(H5T_t *dt, H5F_t *f, H5T_loc_t loc);
 H5_DLL htri_t H5T_is_sensible(const H5T_t *dt);
 H5_DLL uint32_t H5T_hash(H5F_t * file, const H5T_t *dt);
 H5_DLL herr_t H5T_set_latest_version(H5T_t *dt);
+H5_DLL herr_t H5T_patch_file(H5T_t *dt, H5F_t *f);
 H5_DLL htri_t H5T_is_variable_str(const H5T_t *dt);
 
 /* Reference specific functions */
diff --git a/src/H5Z.c b/src/H5Z.c
index b22863e..e04124e 100644
--- a/src/H5Z.c
+++ b/src/H5Z.c
@@ -97,8 +97,6 @@ H5Z_init_interface (void)
 #endif /* H5_HAVE_FILTER_FLETCHER32 */
 #ifdef H5_HAVE_FILTER_SZIP
     H5Z_SZIP->encoder_present = SZ_encoder_enabled();
-    if (H5Z_SZIP->encoder_present < 0)
-	HGOTO_ERROR (H5E_PLINE, H5E_CANTINIT, FAIL, "szip filter reports bad status")
     if (H5Z_register (H5Z_SZIP)<0)
 	HGOTO_ERROR (H5E_PLINE, H5E_CANTINIT, FAIL, "unable to register szip filter")
 #endif /* H5_HAVE_FILTER_SZIP */
@@ -1091,7 +1089,14 @@ H5Z_pipeline(const H5O_pline_t *pline, unsigned flags,
 		continue;/*filter excluded*/
 	    }
 	    if ((fclass_idx=H5Z_find_idx(pline->filter[idx].id))<0) {
-		HGOTO_ERROR(H5E_PLINE, H5E_READERROR, FAIL, "required filter is not registered")
+                /* Print out the filter name to give more info.  But the name is optional for 
+                 * the filter */
+                if(pline->filter[idx].name)
+		    HGOTO_ERROR(H5E_PLINE, H5E_READERROR, FAIL, "required filter '%s' is not registered", 
+                            pline->filter[idx].name)
+                else
+		    HGOTO_ERROR(H5E_PLINE, H5E_READERROR, FAIL, "required filter (name unavailable) is not registered")
+
 	    }
             fclass=&H5Z_table_g[fclass_idx];
 #ifdef H5Z_DEBUG
diff --git a/src/H5Ztrans.c b/src/H5Ztrans.c
index 8028123..e0f87ac 100644
--- a/src/H5Ztrans.c
+++ b/src/H5Ztrans.c
@@ -1383,7 +1383,7 @@ H5Z_xform_create(const char *expr)
      * we don't need to allocate any space since no array will have to be
      * stored */
     if(count > 0)
-	if((data_xform_prop->dat_val_pointers->ptr_dat_val = (void**) H5MM_calloc(count * sizeof(void**))) == NULL)
+	if(NULL == (data_xform_prop->dat_val_pointers->ptr_dat_val = (void *)H5MM_calloc(count * sizeof(void *))))
 	    HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "unable to allocate memory for pointers in transform array")
 
     /* Initialize the num_ptrs field, which will be used to keep track of the number of copies
@@ -1518,7 +1518,7 @@ H5Z_xform_copy(H5Z_data_xform_t **data_xform_prop)
 		count++;
 
 	if(count > 0)
-	    if((new_data_xform_prop->dat_val_pointers->ptr_dat_val = (void**) H5MM_calloc(count * sizeof(void**))) == NULL)
+	    if(NULL == (new_data_xform_prop->dat_val_pointers->ptr_dat_val = (void *)H5MM_calloc(count * sizeof(void *))))
 		HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "unable to allocate memory for pointers in transform array")
 
 	/* Zero out num_pointers prior to H5Z_xform_cop_tree call; that call will increment it to the right amount */
diff --git a/src/H5api_adpt.h b/src/H5api_adpt.h
index fc0b467..845a9a0 100644
--- a/src/H5api_adpt.h
+++ b/src/H5api_adpt.h
@@ -303,10 +303,10 @@
  * The Visual Studio project files will not be supported in the next major release of 1.10.
  */
 
-#if defined(_WIN32)
+#if defined(H5_HAVE_WIN32_API)
 
 #if defined(_HDF5DLL_)
-#pragma warning(disable: 4273)	/* Disable the dll linkage warnings */
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
 #define H5_DLL __declspec(dllexport)
 #define H5_DLLVAR extern __declspec(dllexport)
 #elif defined(_HDF5USEDLL_)
@@ -318,7 +318,7 @@
 #endif /* _HDF5DLL_ */
 
 #if defined(_HDF5TESTDLL_)
-#pragma warning(disable: 4273)	/* Disable the dll linkage warnings */
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
 #define H5TEST_DLL __declspec(dllexport)
 #define H5TEST_DLLVAR extern __declspec(dllexport)
 #elif defined(_HDF5TESTUSEDLL_)
@@ -330,7 +330,7 @@
 #endif /* _HDF5TESTDLL_ */
 
 #if defined(_HDF5TOOLSDLL_)
-#pragma warning(disable: 4273)	/* Disable the dll linkage warnings */
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
 #define H5TOOLS_DLL __declspec(dllexport)
 #define H5TOOLS_DLLVAR extern __declspec(dllexport)
 #elif defined(_HDF5TOOLSUSEDLL_)
@@ -342,7 +342,7 @@
 #endif /* _HDF5TOOLSDLL_ */
 
 #if defined(_HDF5_HLDLL_EXPORTS_)
-#pragma warning(disable: 4273)	/* Disable the dll linkage warnings */
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
 #define H5_HLDLL __declspec(dllexport)
 #elif defined(_HDF5USEHLDLL_)
 #define H5_HLDLL __declspec(dllimport)
@@ -351,7 +351,7 @@
 #endif /* _HDF5_HLDLL_EXPORTS */
 
 #if defined(HDF5_HL_CPPDLL_EXPORTS)
-#pragma warning(disable: 4273)	/* Disable the dll linkage warnings */
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
 #define H5_HLCPPDLL __declspec(dllexport)
 #elif defined(HDF5USE_HLCPPDLL)
 #define H5_HLCPPDLL __declspec(dllimport)
@@ -360,7 +360,7 @@
 #endif /*HDF5_HL_CPPDLL_EXPORTS*/
 
 #if defined(HDF5_HL_F90CSTUBDLL_EXPORTS)
-#pragma warning(disable: 4273)	/* Disable the dll linkage warnings */
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
 #define HDF5_HL_F90CSTUBDLL __declspec(dllexport)
 #elif defined(HDF5USE_HLF90CSTUBDLL)
 #define HDF5_HL_F90CSTUBDLL __declspec(dllimport)
@@ -370,7 +370,7 @@
 
 
 #if defined(HDF5FORT_CSTUB_DLL_EXPORTS)
-#pragma warning(disable: 4273)	/* Disable the dll linkage warnings */
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
 #define H5_FCDLL __declspec(dllexport)
 #define H5_FCDLLVAR extern __declspec(dllexport)
 #elif defined(HDF5FORT_CSTUB_USEDLL)
@@ -382,7 +382,7 @@
 #endif /* _HDF5_FORTRANDLL_EXPORTS_ */
 
 #if defined(HDF5FORTTEST_CSTUB_DLL_EXPORTS)
-#pragma warning(disable: 4273)	/* Disable the dll linkage warnings */
+#pragma warning(disable: 4273)  /* Disable the dll linkage warnings */
 #define H5_FCTESTDLL __declspec(dllexport)
 #define H5_FCTESTDLLVAR extern __declspec(dllexport)
 #elif defined(HDF5FORTTEST_CSTUB_USEDLL)
@@ -402,7 +402,7 @@
 #define H5_DLLCPP
 #endif /* HDF5_CPPDLL_EXPORTS */
 
-#else /*_WIN32*/
+#else /*H5_HAVE_WIN32_API*/
 #define H5_DLL
 #define H5_HLDLL
 #define H5_HLCPPDLL
@@ -417,7 +417,7 @@
 #define H5_FCDLLVAR extern
 #define H5_FCTESTDLL
 #define H5_FCTESTDLLVAR extern
-#endif
+#endif /*H5_HAVE_WIN32_API*/
 
 #endif /* H5API_ADPT_H */
 
diff --git a/src/H5config.h.in b/src/H5config.h.in
index 9a1bfd4..5603476 100644
--- a/src/H5config.h.in
+++ b/src/H5config.h.in
@@ -72,6 +72,9 @@
 /* Define if the compiler understands the __func__ keyword */
 #undef HAVE_C99_FUNC
 
+/* Define to 1 if you have the `clock_gettime' function. */
+#undef HAVE_CLOCK_GETTIME
+
 /* Define if the function stack tracing code is to be compiled in */
 #undef HAVE_CODESTACK
 
@@ -172,9 +175,6 @@
 /* Define to 1 if you have the <gpfs.h> header file. */
 #undef HAVE_GPFS_H
 
-/* Define if h5dump packed bits feature is enabled */
-#undef HAVE_H5DUMP_PACKED_BITS
-
 /* Define if library will contain instrumentation to detect correct
    optimization operation */
 #undef HAVE_INSTRUMENTED_LIBRARY
@@ -233,6 +233,9 @@
 /* Define to 1 if you have the `lstat' function. */
 #undef HAVE_LSTAT
 
+/* Define to 1 if you have the <mach/mach_time.h> header file. */
+#undef HAVE_MACH_MACH_TIME_H
+
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
@@ -468,17 +471,10 @@
 /* Define if the metadata trace file code is to be compiled in */
 #undef METADATA_TRACE_FILE
 
-/* Define if your system can handle complicated MPI derived datatype
-   correctly. */
-#undef MPI_COMPLEX_DERIVED_DATATYPE_WORKS
-
 /* Define if your system's `MPI_File_set_size' function works for files over
    2GB. */
 #undef MPI_FILE_SET_SIZE_BIG
 
-/* Define if your system can handle special collective IO properly. */
-#undef MPI_SPECIAL_COLLECTIVE_IO_WORKS
-
 /* Define if we can violate pointer alignment restrictions */
 #undef NO_ALIGNMENT_RESTRICTIONS
 
diff --git a/src/H5private.h b/src/H5private.h
index b465ff6..7129f72 100644
--- a/src/H5private.h
+++ b/src/H5private.h
@@ -13,28 +13,34 @@
  * access to either file, you may request a copy from help at hdfgroup.org.     *
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
-/* Programmer:	Robb Matzke <matzke at llnl.gov>
- *		Friday, October 30, 1998
+/* Programmer:  Robb Matzke <matzke at llnl.gov>
+ *    Friday, October 30, 1998
  *
- * Purpose:	This file is included by all HDF5 library source files to
- *		define common things which are not defined in the HDF5 API.
- *		The configuration constants like H5_HAVE_UNISTD_H etc. are
- *		defined in H5config.h which is included by H5public.h.
+ * Purpose:  This file is included by all HDF5 library source files to
+ *    define common things which are not defined in the HDF5 API.
+ *    The configuration constants like H5_HAVE_UNISTD_H etc. are
+ *    defined in H5config.h which is included by H5public.h.
  *
  */
 
 #ifndef _H5private_H
 #define _H5private_H
 
-#include "H5public.h"		/* Include Public Definitions		*/
+#include "H5public.h"    /* Include Public Definitions    */
 
 /* include the pthread header */
 #ifdef H5_HAVE_THREADSAFE
-#ifdef H5_HAVE_PTHREAD_H
-#include <pthread.h>
-#else /* H5_HAVE_PTHREAD_H */
-#define H5_HAVE_WIN_THREADS
-#endif /* H5_HAVE_PTHREAD_H */
+ #ifdef H5_HAVE_WIN32_API
+  #ifndef H5_HAVE_WIN_THREADS
+   #ifdef H5_HAVE_PTHREAD_H
+    #include <pthread.h>
+   #endif /* H5_HAVE_PTHREAD_H */
+  #endif /* H5_HAVE_WIN_THREADS */
+ #else /* H5_HAVE_WIN32_API */
+  #ifdef H5_HAVE_PTHREAD_H
+   #include <pthread.h>
+  #endif /* H5_HAVE_PTHREAD_H */
+ #endif /* H5_HAVE_WIN32_API */
 #endif /* H5_HAVE_THREADSAFE */
 
 /*
@@ -79,7 +85,7 @@
 
 /*
  * The `struct stat' data type for stat() and fstat(). This is a Posix file
- * but often apears on non-Posix systems also.	The `struct stat' is required
+ * but often apears on non-Posix systems also.  The `struct stat' is required
  * for hdf5 to compile, although only a few fields are actually used.
  */
 #ifdef H5_HAVE_SYS_STAT_H
@@ -121,7 +127,7 @@
 #endif
 
 /*
- * Unix ioctls.	 These are used by h5ls (and perhaps others) to determine a
+ * Unix ioctls.   These are used by h5ls (and perhaps others) to determine a
  * resonable output width.
  */
 #ifdef H5_HAVE_SYS_IOCTL_H
@@ -144,8 +150,8 @@
 #endif
 
 
-#ifdef _WIN32
-#define WIN32_LEAN_AND_MEAN		/*Exclude rarely-used stuff from Windows headers */
+#ifdef H5_HAVE_WIN32_API
+#define WIN32_LEAN_AND_MEAN    /*Exclude rarely-used stuff from Windows headers */
 
 #ifdef H5_HAVE_WINSOCK_H
 #include <winsock2.h>
@@ -154,7 +160,7 @@
 #include <windows.h>
 #include <direct.h>         /* For _getcwd() */
 
-#endif /*_WIN32*/
+#endif /*H5_HAVE_WIN32_API*/
 
 /* H5_inline */
 #ifndef H5_inline
@@ -163,7 +169,7 @@
 
 
 #ifndef F_OK
-#   define F_OK	00
+#   define F_OK  00
 #   define W_OK 02
 #   define R_OK 04
 #endif
@@ -201,14 +207,14 @@
  * BEGIN_MPE_LOG_COLOR variant). -QAK
  */
 #define BEGIN_MPE_LOG(func_name)                                              \
-  if (H5_MPEinit_g){							      \
-    if (eventa(func_name) == -1 && eventb(func_name) == -1) {		      \
-	const char* p_color = "red";					      \
+  if (H5_MPEinit_g){                    \
+    if (eventa(func_name) == -1 && eventb(func_name) == -1) {          \
+  const char* p_color = "red";                \
          eventa(func_name)=MPE_Log_get_event_number();                        \
          eventb(func_name)=MPE_Log_get_event_number();                        \
          MPE_Describe_state(eventa(func_name), eventb(func_name), (char *)p_end_funcname, (char *)p_color); \
     }                                                                         \
-    MPE_Log_event(eventa(func_name), 0, (char *)p_event_start); 	              \
+    MPE_Log_event(eventa(func_name), 0, (char *)p_event_start);                 \
   }
 
 
@@ -244,23 +250,23 @@
  * never be raised by the hdf5 library).
  */
 #ifndef SIGBUS
-#	define SIGBUS SIGILL
+#  define SIGBUS SIGILL
 #endif
 
 /*
  * Does the compiler support the __attribute__(()) syntax?  This is how gcc
- * suppresses warnings about unused function arguments.	 It's no big deal if
+ * suppresses warnings about unused function arguments.   It's no big deal if
  * we don't.
  */
 #ifdef __cplusplus
-#   define __attribute__(X)	/*void*/
-#   define UNUSED		/*void*/
+#   define __attribute__(X)  /*void*/
+#   define UNUSED    /*void*/
 #else /* __cplusplus */
 #ifdef H5_HAVE_ATTRIBUTE
-#   define UNUSED		__attribute__((unused))
+#   define UNUSED    __attribute__((unused))
 #else
-#   define __attribute__(X)	/*void*/
-#   define UNUSED		/*void*/
+#   define __attribute__(X)  /*void*/
+#   define UNUSED    /*void*/
 #endif
 #endif /* __cplusplus */
 
@@ -270,7 +276,7 @@
  * string.
  */
 #ifndef H5_HAVE_FUNCTION
-#   define __FUNCTION__	 "NoFunctionName"
+#   define __FUNCTION__   "NoFunctionName"
 #endif
 
 /*
@@ -282,45 +288,45 @@
  * function, remember to compare against zero and not one of these two
  * values.
  */
-#define SUCCEED		0
-#define FAIL		(-1)
-#define UFAIL		(unsigned)(-1)
+#define SUCCEED    0
+#define FAIL    (-1)
+#define UFAIL    (unsigned)(-1)
 
 /* number of members in an array */
 #ifndef NELMTS
-#    define NELMTS(X)		(sizeof(X)/sizeof(X[0]))
+#    define NELMTS(X)    (sizeof(X)/sizeof(X[0]))
 #endif
 
 /* minimum of two, three, or four values */
 #undef MIN
-#define MIN(a,b)		(((a)<(b)) ? (a) : (b))
-#define MIN2(a,b)		MIN(a,b)
-#define MIN3(a,b,c)		MIN(a,MIN(b,c))
-#define MIN4(a,b,c,d)		MIN(MIN(a,b),MIN(c,d))
+#define MIN(a,b)    (((a)<(b)) ? (a) : (b))
+#define MIN2(a,b)    MIN(a,b)
+#define MIN3(a,b,c)    MIN(a,MIN(b,c))
+#define MIN4(a,b,c,d)    MIN(MIN(a,b),MIN(c,d))
 
 /* maximum of two, three, or four values */
 #undef MAX
-#define MAX(a,b)		(((a)>(b)) ? (a) : (b))
-#define MAX2(a,b)		MAX(a,b)
-#define MAX3(a,b,c)		MAX(a,MAX(b,c))
-#define MAX4(a,b,c,d)		MAX(MAX(a,b),MAX(c,d))
+#define MAX(a,b)    (((a)>(b)) ? (a) : (b))
+#define MAX2(a,b)    MAX(a,b)
+#define MAX3(a,b,c)    MAX(a,MAX(b,c))
+#define MAX4(a,b,c,d)    MAX(MAX(a,b),MAX(c,d))
 
 /* limit the middle value to be within a range (inclusive) */
-#define RANGE(LO,X,HI)		MAX(LO,MIN(X,HI))
+#define RANGE(LO,X,HI)    MAX(LO,MIN(X,HI))
 
 /* absolute value */
 #ifndef ABS
-#   define ABS(a)		(((a)>=0) ? (a) : -(a))
+#   define ABS(a)    (((a)>=0) ? (a) : -(a))
 #endif
 
 /* sign of argument */
 #ifndef SIGN
-#   define SIGN(a)		((a)>0 ? 1 : (a)<0 ? -1 : 0)
+#   define SIGN(a)    ((a)>0 ? 1 : (a)<0 ? -1 : 0)
 #endif
 
 /* test for number that is a power of 2 */
 /* (from: http://graphics.stanford.edu/~seander/bithacks.html#DetermineIfPowerOf2) */
-#  define POWER_OF_TWO(n)	(!(n & (n - 1)) && n)
+#  define POWER_OF_TWO(n)  (!(n & (n - 1)) && n)
 
 /*
  * HDF Boolean type.
@@ -333,7 +339,7 @@
 #endif
 
 /*
- * Numeric data types.	Some of these might be defined in Posix.1g, otherwise
+ * Numeric data types.  Some of these might be defined in Posix.1g, otherwise
  * we define them with the closest available type which is at least as large
  * as the number of bits indicated in the type name.  The `int8' types *must*
  * be exactly one byte wide because we use it for pointer calculations to
@@ -401,28 +407,28 @@
 #endif
 
 /*
- * Maximum and minimum values.	These should be defined in <limits.h> for the
+ * Maximum and minimum values.  These should be defined in <limits.h> for the
  * most part.
  */
 #ifndef LLONG_MAX
-#   define LLONG_MAX	((long long)(((unsigned long long)1		      \
-				      <<(8*sizeof(long long)-1))-1))
+#   define LLONG_MAX  ((long long)(((unsigned long long)1          \
+              <<(8*sizeof(long long)-1))-1))
 #   define LLONG_MIN    ((long long)(-LLONG_MAX)-1)
 #endif
 #ifndef ULLONG_MAX
-#   define ULLONG_MAX	((unsigned long long)((long long)(-1)))
+#   define ULLONG_MAX  ((unsigned long long)((long long)(-1)))
 #endif
 #ifndef SIZET_MAX
-#   define SIZET_MAX	((size_t)(ssize_t)(-1))
-#   define SSIZET_MAX	((ssize_t)(((size_t)1<<(8*sizeof(ssize_t)-1))-1))
+#   define SIZET_MAX  ((size_t)(ssize_t)(-1))
+#   define SSIZET_MAX  ((ssize_t)(((size_t)1<<(8*sizeof(ssize_t)-1))-1))
 #endif
 
 /*
  * Maximum & minimum values for our typedefs.
  */
-#define	HSIZET_MAX	((hsize_t)ULLONG_MAX)
-#define	HSSIZET_MAX	((hssize_t)LLONG_MAX)
-#define HSSIZET_MIN	(~(HSSIZET_MAX))
+#define  HSIZET_MAX  ((hsize_t)ULLONG_MAX)
+#define  HSSIZET_MAX  ((hssize_t)LLONG_MAX)
+#define HSSIZET_MIN  (~(HSSIZET_MAX))
 
 /*
  * A macro to portably increment enumerated types.
@@ -442,15 +448,15 @@
  * Data types and functions for timing certain parts of the library.
  */
 typedef struct {
-    double	utime;		/*user time			*/
-    double	stime;		/*system time			*/
-    double	etime;		/*elapsed wall-clock time	*/
+    double  utime;    /*user time      */
+    double  stime;    /*system time      */
+    double  etime;    /*elapsed wall-clock time  */
 } H5_timer_t;
 
 H5_DLL void H5_timer_reset (H5_timer_t *timer);
 H5_DLL void H5_timer_begin (H5_timer_t *timer);
 H5_DLL void H5_timer_end (H5_timer_t *sum/*in,out*/,
-			   H5_timer_t *timer/*in,out*/);
+         H5_timer_t *timer/*in,out*/);
 H5_DLL void H5_bandwidth(char *buf/*out*/, double nbytes, double nseconds);
 H5_DLL time_t H5_now(void);
 
@@ -478,19 +484,19 @@ typedef struct {
 
 /* Put all platform-specific definitions in the following file */
 /* so that the following definitions are platform free. */
-#include "H5win32defs.h"	/* For Windows-specific definitions */
+#include "H5win32defs.h"  /* For Windows-specific definitions */
 
 #ifndef HDabort
-    #define HDabort()		abort()
+    #define HDabort()    abort()
 #endif /* HDabort */
 #ifndef HDabs
-    #define HDabs(X)		abs(X)
+    #define HDabs(X)    abs(X)
 #endif /* HDabs */
 #ifndef HDaccess
-    #define HDaccess(F,M)		access(F, M)
+    #define HDaccess(F,M)    access(F, M)
 #endif /* HDaccess */
 #ifndef HDacos
-    #define HDacos(X)		acos(X)
+    #define HDacos(X)    acos(X)
 #endif /* HDacos */
 #ifndef HDalarm
     #ifdef H5_HAVE_ALARM
@@ -500,229 +506,229 @@ typedef struct {
     #endif /* H5_HAVE_ALARM */
 #endif /* HDalarm */
 #ifndef HDasctime
-    #define HDasctime(T)		asctime(T)
+    #define HDasctime(T)    asctime(T)
 #endif /* HDasctime */
 #ifndef HDasin
-    #define HDasin(X)		asin(X)
+    #define HDasin(X)    asin(X)
 #endif /* HDasin */
 #ifndef HDassert
-    #define HDassert(X)		assert(X)
+    #define HDassert(X)    assert(X)
 #endif /* HDassert */
 #ifndef HDatan
-    #define HDatan(X)		atan(X)
+    #define HDatan(X)    atan(X)
 #endif /* HDatan */
 #ifndef HDatan2
-    #define HDatan2(X,Y)		atan2(X,Y)
+    #define HDatan2(X,Y)    atan2(X,Y)
 #endif /* HDatan2 */
 #ifndef HDatexit
-    #define HDatexit(F)		atexit(F)
+    #define HDatexit(F)    atexit(F)
 #endif /* HDatexit */
 #ifndef HDatof
-    #define HDatof(S)		atof(S)
+    #define HDatof(S)    atof(S)
 #endif /* HDatof */
 #ifndef HDatoi
-    #define HDatoi(S)		atoi(S)
+    #define HDatoi(S)    atoi(S)
 #endif /* HDatoi */
 #ifndef HDatol
-    #define HDatol(S)		atol(S)
+    #define HDatol(S)    atol(S)
 #endif /* HDatol */
 #ifndef HDBSDgettimeofday
-    #define HDBSDgettimeofday(S,P)	BSDgettimeofday(S,P)
+    #define HDBSDgettimeofday(S,P)  BSDgettimeofday(S,P)
 #endif /* HDBSDgettimeofday */
 #ifndef HDbsearch
-    #define HDbsearch(K,B,N,Z,F)	bsearch(K,B,N,Z,F)
+    #define HDbsearch(K,B,N,Z,F)  bsearch(K,B,N,Z,F)
 #endif /* HDbsearch */
 #ifndef HDcalloc
-    #define HDcalloc(N,Z)		calloc(N,Z)
+    #define HDcalloc(N,Z)    calloc(N,Z)
 #endif /* HDcalloc */
 #ifndef HDceil
-    #define HDceil(X)		ceil(X)
+    #define HDceil(X)    ceil(X)
 #endif /* HDceil */
 #ifndef HDcfgetispeed
-    #define HDcfgetispeed(T)	cfgetispeed(T)
+    #define HDcfgetispeed(T)  cfgetispeed(T)
 #endif /* HDcfgetispeed */
 #ifndef HDcfgetospeed
-    #define HDcfgetospeed(T)	cfgetospeed(T)
+    #define HDcfgetospeed(T)  cfgetospeed(T)
 #endif /* HDcfgetospeed */
 #ifndef HDcfsetispeed
-    #define HDcfsetispeed(T,S)	cfsetispeed(T,S)
+    #define HDcfsetispeed(T,S)  cfsetispeed(T,S)
 #endif /* HDcfsetispeed */
 #ifndef HDcfsetospeed
-    #define HDcfsetospeed(T,S)	cfsetospeed(T,S)
+    #define HDcfsetospeed(T,S)  cfsetospeed(T,S)
 #endif /* HDcfsetospeed */
 #ifndef HDchdir
-    #define HDchdir(S)		chdir(S)
+    #define HDchdir(S)    chdir(S)
 #endif /* HDchdir */
 #ifndef HDchmod
-    #define HDchmod(S,M)		chmod(S,M)
+    #define HDchmod(S,M)    chmod(S,M)
 #endif /* HDchmod */
 #ifndef HDchown
-    #define HDchown(S,O,G)		chown(S,O,G)
+    #define HDchown(S,O,G)    chown(S,O,G)
 #endif /* HDchown */
 #ifndef HDclearerr
-    #define HDclearerr(F)		clearerr(F)
+    #define HDclearerr(F)    clearerr(F)
 #endif /* HDclearerr */
 #ifndef HDclock
-    #define HDclock()		clock()
+    #define HDclock()    clock()
 #endif /* HDclock */
 #ifndef HDclose
-    #define HDclose(F)		close(F)
+    #define HDclose(F)    close(F)
 #endif /* HDclose */
 #ifndef HDclosedir
-    #define HDclosedir(D)		closedir(D)
+    #define HDclosedir(D)    closedir(D)
 #endif /* HDclosedir */
 #ifndef HDcos
-    #define HDcos(X)		cos(X)
+    #define HDcos(X)    cos(X)
 #endif /* HDcos */
 #ifndef HDcosh
-    #define HDcosh(X)		cosh(X)
+    #define HDcosh(X)    cosh(X)
 #endif /* HDcosh */
 #ifndef HDcreat
-    #define HDcreat(S,M)		creat(S,M)
+    #define HDcreat(S,M)    creat(S,M)
 #endif /* HDcreat */
 #ifndef HDctermid
-    #define HDctermid(S)		ctermid(S)
+    #define HDctermid(S)    ctermid(S)
 #endif /* HDctermid */
 #ifndef HDctime
-    #define HDctime(T)		ctime(T)
+    #define HDctime(T)    ctime(T)
 #endif /* HDctime */
 #ifndef HDcuserid
-    #define HDcuserid(S)		cuserid(S)
+    #define HDcuserid(S)    cuserid(S)
 #endif /* HDcuserid */
 #ifndef HDdifftime
     #ifdef H5_HAVE_DIFFTIME
-        #define HDdifftime(X,Y)		difftime(X,Y)
+        #define HDdifftime(X,Y)    difftime(X,Y)
     #else /* H5_HAVE_DIFFTIME */
-        #define HDdifftime(X,Y)		((double)(X)-(double)(Y))
+        #define HDdifftime(X,Y)    ((double)(X)-(double)(Y))
     #endif /* H5_HAVE_DIFFTIME */
 #endif /* HDdifftime */
 #ifndef HDdiv
-    #define HDdiv(X,Y)		div(X,Y)
+    #define HDdiv(X,Y)    div(X,Y)
 #endif /* HDdiv */
 #ifndef HDdup
-    #define HDdup(F)		dup(F)
+    #define HDdup(F)    dup(F)
 #endif /* HDdup */
 #ifndef HDdup2
-    #define HDdup2(F,I)		dup2(F,I)
+    #define HDdup2(F,I)    dup2(F,I)
 #endif /* HDdup2 */
 /* execl() variable arguments */
 /* execle() variable arguments */
 /* execlp() variable arguments */
 #ifndef HDexecv
-    #define HDexecv(S,AV)		execv(S,AV)
+    #define HDexecv(S,AV)    execv(S,AV)
 #endif /* HDexecv */
 #ifndef HDexecve
-    #define HDexecve(S,AV,E)	execve(S,AV,E)
+    #define HDexecve(S,AV,E)  execve(S,AV,E)
 #endif /* HDexecve */
 #ifndef HDexecvp
-    #define HDexecvp(S,AV)		execvp(S,AV)
+    #define HDexecvp(S,AV)    execvp(S,AV)
 #endif /* HDexecvp */
 #ifndef HDexit
-    #define HDexit(N)		exit(N)
+    #define HDexit(N)    exit(N)
 #endif /* HDexit */
 #ifndef HD_exit
-    #define HD_exit(N)		_exit(N)
+    #define HD_exit(N)    _exit(N)
 #endif /* HD_exit */
 #ifndef HDexp
-    #define HDexp(X)		exp(X)
+    #define HDexp(X)    exp(X)
 #endif /* HDexp */
 #ifndef HDfabs
-    #define HDfabs(X)		fabs(X)
+    #define HDfabs(X)    fabs(X)
 #endif /* HDfabs */
 /* use ABS() because fabsf() fabsl() are not common yet. */
 #ifndef HDfabsf
-    #define HDfabsf(X)		ABS(X)
+    #define HDfabsf(X)    ABS(X)
 #endif /* HDfabsf */
 #ifndef HDfabsl
-    #define HDfabsl(X)		ABS(X)
+    #define HDfabsl(X)    ABS(X)
 #endif /* HDfabsl */
 #ifndef HDfclose
-    #define HDfclose(F)		fclose(F)
+    #define HDfclose(F)    fclose(F)
 #endif /* HDfclose */
 /* fcntl() variable arguments */
 #ifndef HDfdopen
-    #define HDfdopen(N,S)		fdopen(N,S)
+    #define HDfdopen(N,S)    fdopen(N,S)
 #endif /* HDfdopen */
 #ifndef HDfeof
-    #define HDfeof(F)		feof(F)
+    #define HDfeof(F)    feof(F)
 #endif /* HDfeof */
 #ifndef HDferror
-    #define HDferror(F)		ferror(F)
+    #define HDferror(F)    ferror(F)
 #endif /* HDferror */
 #ifndef HDfflush
-    #define HDfflush(F)		fflush(F)
+    #define HDfflush(F)    fflush(F)
 #endif /* HDfflush */
 #ifndef HDfgetc
-    #define HDfgetc(F)		fgetc(F)
+    #define HDfgetc(F)    fgetc(F)
 #endif /* HDfgetc */
 #ifndef HDfgetpos
-    #define HDfgetpos(F,P)		fgetpos(F,P)
+    #define HDfgetpos(F,P)    fgetpos(F,P)
 #endif /* HDfgetpos */
 #ifndef HDfgets
-    #define HDfgets(S,N,F)		fgets(S,N,F)
+    #define HDfgets(S,N,F)    fgets(S,N,F)
 #endif /* HDfgets */
 #ifndef HDfileno
-    #define HDfileno(F)		fileno(F)
+    #define HDfileno(F)    fileno(F)
 #endif /* HDfileno */
 #ifndef HDfloor
-    #define HDfloor(X)		floor(X)
+    #define HDfloor(X)    floor(X)
 #endif /* HDfloor */
 #ifndef HDfmod
-    #define HDfmod(X,Y)		fmod(X,Y)
+    #define HDfmod(X,Y)    fmod(X,Y)
 #endif /* HDfmod */
 #ifndef HDfopen
-    #define HDfopen(S,M)		fopen(S,M)
+    #define HDfopen(S,M)    fopen(S,M)
 #endif /* HDfopen */
 #ifndef HDfork
-    #define HDfork()		fork()
+    #define HDfork()    fork()
 #endif /* HDfork */
 #ifndef HDfpathconf
-    #define HDfpathconf(F,N)	fpathconf(F,N)
+    #define HDfpathconf(F,N)  fpathconf(F,N)
 #endif /* HDfpathconf */
 H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
 #ifndef HDfputc
-    #define HDfputc(C,F)		fputc(C,F)
+    #define HDfputc(C,F)    fputc(C,F)
 #endif /* HDfputc */
 #ifndef HDfputs
-    #define HDfputs(S,F)		fputs(S,F)
+    #define HDfputs(S,F)    fputs(S,F)
 #endif /* HDfputs */
 #ifndef HDfread
-    #define HDfread(M,Z,N,F)	fread(M,Z,N,F)
+    #define HDfread(M,Z,N,F)  fread(M,Z,N,F)
 #endif /* HDfread */
 #ifndef HDfree
-    #define HDfree(M)		free(M)
+    #define HDfree(M)    free(M)
 #endif /* HDfree */
 #ifndef HDfreopen
-    #define HDfreopen(S,M,F)	freopen(S,M,F)
+    #define HDfreopen(S,M,F)  freopen(S,M,F)
 #endif /* HDfreopen */
 #ifndef HDfrexp
-    #define HDfrexp(X,N)		frexp(X,N)
+    #define HDfrexp(X,N)    frexp(X,N)
 #endif /* HDfrexp */
 /* Check for Cray-specific 'frexpf()' and 'frexpl()' routines */
 #ifndef HDfrexpf
     #ifdef H5_HAVE_FREXPF
-        #define HDfrexpf(X,N)		frexpf(X,N)
+        #define HDfrexpf(X,N)    frexpf(X,N)
     #else /* H5_HAVE_FREXPF */
-        #define HDfrexpf(X,N)		frexp(X,N)
+        #define HDfrexpf(X,N)    frexp(X,N)
     #endif /* H5_HAVE_FREXPF */
 #endif /* HDfrexpf */
 #ifndef HDfrexpl
     #ifdef H5_HAVE_FREXPL
-        #define HDfrexpl(X,N)		frexpl(X,N)
+        #define HDfrexpl(X,N)    frexpl(X,N)
     #else /* H5_HAVE_FREXPL */
-        #define HDfrexpl(X,N)		frexp(X,N)
+        #define HDfrexpl(X,N)    frexp(X,N)
     #endif /* H5_HAVE_FREXPL */
 #endif /* HDfrexpl */
 /* fscanf() variable arguments */
 #ifndef HDfseek
     #ifdef H5_HAVE_FSEEKO
-             #define HDfseek(F,O,W)	fseeko(F,O,W)
+             #define HDfseek(F,O,W)  fseeko(F,O,W)
     #else /* H5_HAVE_FSEEKO */
-             #define HDfseek(F,O,W)	fseek(F,O,W)
+             #define HDfseek(F,O,W)  fseek(F,O,W)
     #endif /* H5_HAVE_FSEEKO */
 #endif /* HDfseek */
 #ifndef HDfsetpos
-    #define HDfsetpos(F,P)		fsetpos(F,P)
+    #define HDfsetpos(F,P)    fsetpos(F,P)
 #endif /* HDfsetpos */
 /* definitions related to the file stat utilities.
  * For Unix, if off_t is not 64bit big, try use the pseudo-standard
@@ -734,10 +740,10 @@ H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
             #define HDfstat(F,B)        fstat64(F,B)
         #endif /* HDfstat */
         #ifndef HDlstat
-            #define HDlstat(S,B)  	lstat64(S,B)
+            #define HDlstat(S,B)    lstat64(S,B)
         #endif /* HDlstat */
         #ifndef HDstat
-            #define HDstat(S,B)  	stat64(S,B)
+            #define HDstat(S,B)    stat64(S,B)
         #endif /* HDstat */
         typedef struct stat64       h5_stat_t;
         typedef off64_t             h5_stat_size_t;
@@ -747,10 +753,10 @@ H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
             #define HDfstat(F,B)        fstat(F,B)
         #endif /* HDfstat */
         #ifndef HDlstat
-            #define HDlstat(S,B)  	lstat(S,B)
+            #define HDlstat(S,B)    lstat(S,B)
         #endif /* HDlstat */
         #ifndef HDstat
-            #define HDstat(S,B)  	stat(S,B)
+            #define HDstat(S,B)    stat(S,B)
         #endif /* HDstat */
         typedef struct stat         h5_stat_t;
         typedef off_t               h5_stat_size_t;
@@ -759,7 +765,7 @@ H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
 #endif /* !defined(HDfstat) || !defined(HDstat) */
 
 #ifndef HDftell
-    #define HDftell(F)		ftell(F)
+    #define HDftell(F)    ftell(F)
 #endif /* HDftell */
 #ifndef HDftruncate
   #ifdef H5_HAVE_FTRUNCATE64
@@ -769,273 +775,273 @@ H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
   #endif
 #endif /* HDftruncate */
 #ifndef HDfwrite
-    #define HDfwrite(M,Z,N,F)	fwrite(M,Z,N,F)
+    #define HDfwrite(M,Z,N,F)  fwrite(M,Z,N,F)
 #endif /* HDfwrite */
 #ifndef HDgetc
-    #define HDgetc(F)		getc(F)
+    #define HDgetc(F)    getc(F)
 #endif /* HDgetc */
 #ifndef HDgetchar
-    #define HDgetchar()		getchar()
+    #define HDgetchar()    getchar()
 #endif /* HDgetchar */
 #ifndef HDgetcwd
-    #define HDgetcwd(S,Z)		getcwd(S,Z)
+    #define HDgetcwd(S,Z)    getcwd(S,Z)
 #endif /* HDgetcwd */
 #ifndef HDgetdcwd
-    #define HDgetdcwd(D,S,Z)	getcwd(S,Z)
+    #define HDgetdcwd(D,S,Z)  getcwd(S,Z)
 #endif /* HDgetdcwd */
 #ifndef HDgetdrive
-    #define HDgetdrive()		0
+    #define HDgetdrive()    0
 #endif /* HDgetdrive */
 #ifndef HDgetegid
-    #define HDgetegid()		getegid()
+    #define HDgetegid()    getegid()
 #endif /* HDgetegid() */
 #ifndef HDgetenv
-    #define HDgetenv(S)		getenv(S)
+    #define HDgetenv(S)    getenv(S)
 #endif /* HDgetenv */
 #ifndef HDgeteuid
-    #define HDgeteuid()		geteuid()
+    #define HDgeteuid()    geteuid()
 #endif /* HDgeteuid */
 #ifndef HDgetgid
-    #define HDgetgid()		getgid()
+    #define HDgetgid()    getgid()
 #endif /* HDgetgid */
 #ifndef HDgetgrgid
-    #define HDgetgrgid(G)		getgrgid(G)
+    #define HDgetgrgid(G)    getgrgid(G)
 #endif /* HDgetgrgid */
 #ifndef HDgetgrnam
-    #define HDgetgrnam(S)		getgrnam(S)
+    #define HDgetgrnam(S)    getgrnam(S)
 #endif /* HDgetgrnam */
 #ifndef HDgetgroups
-    #define HDgetgroups(Z,G)	getgroups(Z,G)
+    #define HDgetgroups(Z,G)  getgroups(Z,G)
 #endif /* HDgetgroups */
 #ifndef HDgetlogin
-    #define HDgetlogin()		getlogin()
+    #define HDgetlogin()    getlogin()
 #endif /* HDgetlogin */
 #ifndef HDgetpgrp
-    #define HDgetpgrp()		getpgrp()
+    #define HDgetpgrp()    getpgrp()
 #endif /* HDgetpgrp */
 #ifndef HDgetpid
-    #define HDgetpid()		getpid()
+    #define HDgetpid()    getpid()
 #endif /* HDgetpid */
 #ifndef HDgetppid
-    #define HDgetppid()		getppid()
+    #define HDgetppid()    getppid()
 #endif /* HDgetppid */
 #ifndef HDgetpwnam
-    #define HDgetpwnam(S)		getpwnam(S)
+    #define HDgetpwnam(S)    getpwnam(S)
 #endif /* HDgetpwnam */
 #ifndef HDgetpwuid
-    #define HDgetpwuid(U)		getpwuid(U)
+    #define HDgetpwuid(U)    getpwuid(U)
 #endif /* HDgetpwuid */
 #ifndef HDgetrusage
-    #define HDgetrusage(X,S)	getrusage(X,S)
+    #define HDgetrusage(X,S)  getrusage(X,S)
 #endif /* HDgetrusage */
 #ifndef HDgets
-    #define HDgets(S)		gets(S)
+    #define HDgets(S)    gets(S)
 #endif /* HDgets */
 #ifndef HDgettimeofday
-    #define HDgettimeofday(S,P)	gettimeofday(S,P)
+    #define HDgettimeofday(S,P)  gettimeofday(S,P)
 #endif /* HDgettimeofday */
 #ifndef HDgetuid
-    #define HDgetuid()		getuid()
+    #define HDgetuid()    getuid()
 #endif /* HDgetuid */
 #ifndef HDgmtime
-    #define HDgmtime(T)		gmtime(T)
+    #define HDgmtime(T)    gmtime(T)
 #endif /* HDgmtime */
 #ifndef HDisalnum
-    #define HDisalnum(C)		isalnum((int)(C)) /*cast for solaris warning*/
+    #define HDisalnum(C)    isalnum((int)(C)) /*cast for solaris warning*/
 #endif /* HDisalnum */
 #ifndef HDisalpha
-    #define HDisalpha(C)		isalpha((int)(C)) /*cast for solaris warning*/
+    #define HDisalpha(C)    isalpha((int)(C)) /*cast for solaris warning*/
 #endif /* HDisalpha */
 #ifndef HDisatty
-    #define HDisatty(F)		isatty(F)
+    #define HDisatty(F)    isatty(F)
 #endif /* HDisatty */
 #ifndef HDiscntrl
-    #define HDiscntrl(C)		iscntrl((int)(C)) /*cast for solaris warning*/
+    #define HDiscntrl(C)    iscntrl((int)(C)) /*cast for solaris warning*/
 #endif /* HDiscntrl */
 #ifndef HDisdigit
-    #define HDisdigit(C)		isdigit((int)(C)) /*cast for solaris warning*/
+    #define HDisdigit(C)    isdigit((int)(C)) /*cast for solaris warning*/
 #endif /* HDisdigit */
 #ifndef HDisgraph
-    #define HDisgraph(C)		isgraph((int)(C)) /*cast for solaris warning*/
+    #define HDisgraph(C)    isgraph((int)(C)) /*cast for solaris warning*/
 #endif /* HDisgraph */
 #ifndef HDislower
-    #define HDislower(C)		islower((int)(C)) /*cast for solaris warning*/
+    #define HDislower(C)    islower((int)(C)) /*cast for solaris warning*/
 #endif /* HDislower */
 #ifndef HDisprint
-    #define HDisprint(C)		isprint((int)(C)) /*cast for solaris warning*/
+    #define HDisprint(C)    isprint((int)(C)) /*cast for solaris warning*/
 #endif /* HDisprint */
 #ifndef HDispunct
-    #define HDispunct(C)		ispunct((int)(C)) /*cast for solaris warning*/
+    #define HDispunct(C)    ispunct((int)(C)) /*cast for solaris warning*/
 #endif /* HDispunct */
 #ifndef HDisspace
-    #define HDisspace(C)		isspace((int)(C)) /*cast for solaris warning*/
+    #define HDisspace(C)    isspace((int)(C)) /*cast for solaris warning*/
 #endif /* HDisspace */
 #ifndef HDisupper
-    #define HDisupper(C)		isupper((int)(C)) /*cast for solaris warning*/
+    #define HDisupper(C)    isupper((int)(C)) /*cast for solaris warning*/
 #endif /* HDisupper */
 #ifndef HDisxdigit
-    #define HDisxdigit(C)		isxdigit((int)(C)) /*cast for solaris warning*/
+    #define HDisxdigit(C)    isxdigit((int)(C)) /*cast for solaris warning*/
 #endif /* HDisxdigit */
 #ifndef HDkill
-    #define HDkill(P,S)		kill(P,S)
+    #define HDkill(P,S)    kill(P,S)
 #endif /* HDkill */
 #ifndef HDlabs
-    #define HDlabs(X)		labs(X)
+    #define HDlabs(X)    labs(X)
 #endif /* HDlabs */
 #ifndef HDldexp
-    #define HDldexp(X,N)		ldexp(X,N)
+    #define HDldexp(X,N)    ldexp(X,N)
 #endif /* HDldexp */
 #ifndef HDldiv
-    #define HDldiv(X,Y)		ldiv(X,Y)
+    #define HDldiv(X,Y)    ldiv(X,Y)
 #endif /* HDldiv */
 #ifndef HDlink
-    #define HDlink(OLD,NEW)		link(OLD,NEW)
+    #define HDlink(OLD,NEW)    link(OLD,NEW)
 #endif /* HDlink */
 #ifndef HDlocaleconv
-    #define HDlocaleconv()		localeconv()
+    #define HDlocaleconv()    localeconv()
 #endif /* HDlocaleconv */
 #ifndef HDlocaltime
-    #define HDlocaltime(T)		localtime(T)
+    #define HDlocaltime(T)    localtime(T)
 #endif /* HDlocaltime */
 #ifndef HDlog
-    #define HDlog(X)		log(X)
+    #define HDlog(X)    log(X)
 #endif /* HDlog */
 #ifndef HDlog10
-    #define HDlog10(X)		log10(X)
+    #define HDlog10(X)    log10(X)
 #endif /* HDlog10 */
 #ifndef HDlongjmp
-    #define HDlongjmp(J,N)		longjmp(J,N)
+    #define HDlongjmp(J,N)    longjmp(J,N)
 #endif /* HDlongjmp */
 /* HDlseek and HDoff_t must be defined together for consistency. */
 #ifndef HDlseek
     #ifdef H5_HAVE_LSEEK64
-        #define HDlseek(F,O,W)	lseek64(F,O,W)
-        #define HDoff_t		off64_t
+        #define HDlseek(F,O,W)  lseek64(F,O,W)
+        #define HDoff_t    off64_t
     #else
-        #define HDlseek(F,O,W)	lseek(F,O,W)
-	#define HDoff_t		off_t
+        #define HDlseek(F,O,W)  lseek(F,O,W)
+  #define HDoff_t    off_t
     #endif
 #endif /* HDlseek */
 #ifndef HDmalloc
-    #define HDmalloc(Z)		malloc(Z)
+    #define HDmalloc(Z)    malloc(Z)
 #endif /* HDmalloc */
 #ifndef HDposix_memalign
     #define HDposix_memalign(P,A,Z) posix_memalign(P,A,Z)
 #endif /* HDposix_memalign */
 #ifndef HDmblen
-    #define HDmblen(S,N)		mblen(S,N)
+    #define HDmblen(S,N)    mblen(S,N)
 #endif /* HDmblen */
 #ifndef HDmbstowcs
-    #define HDmbstowcs(P,S,Z)	mbstowcs(P,S,Z)
+    #define HDmbstowcs(P,S,Z)  mbstowcs(P,S,Z)
 #endif /* HDmbstowcs */
 #ifndef HDmbtowc
-    #define HDmbtowc(P,S,Z)		mbtowc(P,S,Z)
+    #define HDmbtowc(P,S,Z)    mbtowc(P,S,Z)
 #endif /* HDmbtowc */
 #ifndef HDmemchr
-    #define HDmemchr(S,C,Z)		memchr(S,C,Z)
+    #define HDmemchr(S,C,Z)    memchr(S,C,Z)
 #endif /* HDmemchr */
 #ifndef HDmemcmp
-    #define HDmemcmp(X,Y,Z)		memcmp(X,Y,Z)
+    #define HDmemcmp(X,Y,Z)    memcmp(X,Y,Z)
 #endif /* HDmemcmp */
 /*
  * The (char*) casts are required for the DEC when optimizations are turned
  * on and the source and/or destination are not aligned.
  */
 #ifndef HDmemcpy
-    #define HDmemcpy(X,Y,Z)		memcpy((char*)(X),(const char*)(Y),Z)
+    #define HDmemcpy(X,Y,Z)    memcpy((char*)(X),(const char*)(Y),Z)
 #endif /* HDmemcpy */
 #ifndef HDmemmove
-    #define HDmemmove(X,Y,Z)	memmove((char*)(X),(const char*)(Y),Z)
+    #define HDmemmove(X,Y,Z)  memmove((char*)(X),(const char*)(Y),Z)
 #endif /* HDmemmove */
 #ifndef HDmemset
-    #define HDmemset(X,C,Z)		memset(X,C,Z)
+    #define HDmemset(X,C,Z)    memset(X,C,Z)
 #endif /* HDmemset */
 #ifndef HDmkdir
-    #define HDmkdir(S,M)		mkdir(S,M)
+    #define HDmkdir(S,M)    mkdir(S,M)
 #endif /* HDmkdir */
 #ifndef HDmkfifo
-    #define HDmkfifo(S,M)		mkfifo(S,M)
+    #define HDmkfifo(S,M)    mkfifo(S,M)
 #endif /* HDmkfifo */
 #ifndef HDmktime
-    #define HDmktime(T)		mktime(T)
+    #define HDmktime(T)    mktime(T)
 #endif /* HDmktime */
 #ifndef HDmodf
-    #define HDmodf(X,Y)		modf(X,Y)
+    #define HDmodf(X,Y)    modf(X,Y)
 #endif /* HDmodf */
 #ifndef HDopen
     #ifdef _O_BINARY
-        #define HDopen(S,F,M)		open(S,F|_O_BINARY,M)
+        #define HDopen(S,F,M)    open(S,F|_O_BINARY,M)
     #else
-        #define HDopen(S,F,M)		open(S,F,M)
+        #define HDopen(S,F,M)    open(S,F,M)
     #endif
 #endif /* HDopen */
 #ifndef HDopendir
-    #define HDopendir(S)		opendir(S)
+    #define HDopendir(S)    opendir(S)
 #endif /* HDopendir */
 #ifndef HDpathconf
-    #define HDpathconf(S,N)		pathconf(S,N)
+    #define HDpathconf(S,N)    pathconf(S,N)
 #endif /* HDpathconf */
 #ifndef HDpause
-    #define HDpause()		pause()
+    #define HDpause()    pause()
 #endif /* HDpause */
 #ifndef HDperror
-    #define HDperror(S)		perror(S)
+    #define HDperror(S)    perror(S)
 #endif /* HDperror */
 #ifndef HDpipe
-    #define HDpipe(F)		pipe(F)
+    #define HDpipe(F)    pipe(F)
 #endif /* HDpipe */
 #ifndef HDpow
-    #define HDpow(X,Y)		pow(X,Y)
+    #define HDpow(X,Y)    pow(X,Y)
 #endif /* HDpow */
 /* printf() variable arguments */
 #ifndef HDputc
-    #define HDputc(C,F)		putc(C,F)
+    #define HDputc(C,F)    putc(C,F)
 #endif /* HDputc*/
 #ifndef HDputchar
-    #define HDputchar(C)		putchar(C)
+    #define HDputchar(C)    putchar(C)
 #endif /* HDputchar */
 #ifndef HDputs
-    #define HDputs(S)		puts(S)
+    #define HDputs(S)    puts(S)
 #endif /* HDputs */
 #ifndef HDqsort
-    #define HDqsort(M,N,Z,F)	qsort(M,N,Z,F)
+    #define HDqsort(M,N,Z,F)  qsort(M,N,Z,F)
 #endif /* HDqsort*/
 #ifndef HDraise
-    #define HDraise(N)		raise(N)
+    #define HDraise(N)    raise(N)
 #endif /* HDraise */
 
 #ifdef H5_HAVE_RAND_R
     #ifndef HDrandom
-        #define HDrandom()		HDrand()
+        #define HDrandom()    HDrand()
     #endif /* HDrandom */
     H5_DLL int HDrand(void);
 #elif H5_HAVE_RANDOM
     #ifndef HDrand
-        #define HDrand()		random()
+        #define HDrand()    random()
     #endif /* HDrand */
     #ifndef HDrandom
-        #define HDrandom()		random()
+        #define HDrandom()    random()
     #endif /* HDrandom */
 #else /* H5_HAVE_RANDOM */
     #ifndef HDrand
-        #define HDrand()		rand()
+        #define HDrand()    rand()
     #endif /* HDrand */
     #ifndef HDrandom
-        #define HDrandom()		rand()
+        #define HDrandom()    rand()
     #endif /* HDrandom */
 #endif /* H5_HAVE_RANDOM */
 
 #ifndef HDread
-    #define HDread(F,M,Z)		read(F,M,Z)
+    #define HDread(F,M,Z)    read(F,M,Z)
 #endif /* HDread */
 #ifndef HDreaddir
-    #define HDreaddir(D)		readdir(D)
+    #define HDreaddir(D)    readdir(D)
 #endif /* HDreaddir */
 #ifndef HDrealloc
-    #define HDrealloc(M,Z)		realloc(M,Z)
+    #define HDrealloc(M,Z)    realloc(M,Z)
 #endif /* HDrealloc */
 #ifndef HDrealpath
-    #define HDrealpath(F1,F2)		realpath(F1,F2)
+    #define HDrealpath(F1,F2)    realpath(F1,F2)
 #endif /* HDrealloc */
 #ifdef H5_VMS
     #ifdef __cplusplus
@@ -1046,309 +1052,309 @@ H5_DLL int HDfprintf (FILE *stream, const char *fmt, ...);
         }
     #endif /* __cplusplus */
     #ifndef HDremove
-        #define HDremove(S) 		HDremove_all(S)
+        #define HDremove(S)     HDremove_all(S)
     #endif /* HDremove */
 #else /* H5_VMS */
     #ifndef HDremove
-        #define HDremove(S)		remove(S)
+        #define HDremove(S)    remove(S)
     #endif /* HDremove */
 #endif /*H5_VMS*/
 #ifndef HDrename
-    #define HDrename(OLD,NEW)	rename(OLD,NEW)
+    #define HDrename(OLD,NEW)  rename(OLD,NEW)
 #endif /* HDrename */
 #ifndef HDrewind
-    #define HDrewind(F)		rewind(F)
+    #define HDrewind(F)    rewind(F)
 #endif /* HDrewind */
 #ifndef HDrewinddir
-    #define HDrewinddir(D)		rewinddir(D)
+    #define HDrewinddir(D)    rewinddir(D)
 #endif /* HDrewinddir */
 #ifndef HDrmdir
-    #define HDrmdir(S)		rmdir(S)
+    #define HDrmdir(S)    rmdir(S)
 #endif /* HDrmdir */
 /* scanf() variable arguments */
 #ifndef HDsetbuf
-    #define HDsetbuf(F,S)		setbuf(F,S)
+    #define HDsetbuf(F,S)    setbuf(F,S)
 #endif /* HDsetbuf */
 #ifndef HDsetgid
-    #define HDsetgid(G)		setgid(G)
+    #define HDsetgid(G)    setgid(G)
 #endif /* HDsetgid */
 #ifndef HDsetjmp
-    #define HDsetjmp(J)		setjmp(J)
+    #define HDsetjmp(J)    setjmp(J)
 #endif /* HDsetjmp */
 #ifndef HDsetlocale
-    #define HDsetlocale(N,S)	setlocale(N,S)
+    #define HDsetlocale(N,S)  setlocale(N,S)
 #endif /* HDsetlocale */
 #ifndef HDsetpgid
-    #define HDsetpgid(P,PG)		setpgid(P,PG)
+    #define HDsetpgid(P,PG)    setpgid(P,PG)
 #endif /* HDsetpgid */
 #ifndef HDsetsid
-    #define HDsetsid()		setsid()
+    #define HDsetsid()    setsid()
 #endif /* HDsetsid */
 #ifndef HDsetuid
-    #define HDsetuid(U)		setuid(U)
+    #define HDsetuid(U)    setuid(U)
 #endif /* HDsetuid */
 #ifndef HDsetvbuf
-    #define HDsetvbuf(F,S,M,Z)	setvbuf(F,S,M,Z)
+    #define HDsetvbuf(F,S,M,Z)  setvbuf(F,S,M,Z)
 #endif /* HDsetvbuf */
 #ifndef HDsigaddset
-    #define HDsigaddset(S,N)	sigaddset(S,N)
+    #define HDsigaddset(S,N)  sigaddset(S,N)
 #endif /* HDsigaddset */
 #ifndef HDsigdelset
-    #define HDsigdelset(S,N)	sigdelset(S,N)
+    #define HDsigdelset(S,N)  sigdelset(S,N)
 #endif /* HDsigdelset */
 #ifndef HDsigemptyset
-    #define HDsigemptyset(S)	sigemptyset(S)
+    #define HDsigemptyset(S)  sigemptyset(S)
 #endif /* HDsigemptyset */
 #ifndef HDsigfillset
-    #define HDsigfillset(S)		sigfillset(S)
+    #define HDsigfillset(S)    sigfillset(S)
 #endif /* HDsigfillset */
 #ifndef HDsigismember
-    #define HDsigismember(S,N)	sigismember(S,N)
+    #define HDsigismember(S,N)  sigismember(S,N)
 #endif /* HDsigismember */
 #ifndef HDsiglongjmp
-    #define HDsiglongjmp(J,N)	siglongjmp(J,N)
+    #define HDsiglongjmp(J,N)  siglongjmp(J,N)
 #endif /* HDsiglongjmp */
 #ifndef HDsignal
-    #define HDsignal(N,F)		signal(N,F)
+    #define HDsignal(N,F)    signal(N,F)
 #endif /* HDsignal */
 #ifndef HDsigpending
-    #define HDsigpending(S)		sigpending(S)
+    #define HDsigpending(S)    sigpending(S)
 #endif /* HDsigpending */
 #ifndef HDsigprocmask
-    #define HDsigprocmask(H,S,O)	sigprocmask(H,S,O)
+    #define HDsigprocmask(H,S,O)  sigprocmask(H,S,O)
 #endif /* HDsigprocmask */
 #ifndef HDsigsetjmp
-    #define HDsigsetjmp(J,N)	sigsetjmp(J,N)
+    #define HDsigsetjmp(J,N)  sigsetjmp(J,N)
 #endif /* HDsigsetjmp */
 #ifndef HDsigsuspend
-    #define HDsigsuspend(S)		sigsuspend(S)
+    #define HDsigsuspend(S)    sigsuspend(S)
 #endif /* HDsigsuspend */
 #ifndef HDsin
-    #define HDsin(X)		sin(X)
+    #define HDsin(X)    sin(X)
 #endif /* HDsin */
 #ifndef HDsinh
-    #define HDsinh(X)		sinh(X)
+    #define HDsinh(X)    sinh(X)
 #endif /* HDsinh */
 #ifndef HDsleep
-    #define HDsleep(N)		sleep(N)
+    #define HDsleep(N)    sleep(N)
 #endif /* HDsleep */
 #ifndef HDsnprintf
-    #define HDsnprintf		snprintf /*varargs*/
+    #define HDsnprintf    snprintf /*varargs*/
 #endif /* HDsnprintf */
 /* sprintf() variable arguments */
 #ifndef HDsqrt
-    #define HDsqrt(X)		sqrt(X)
+    #define HDsqrt(X)    sqrt(X)
 #endif /* HDsqrt */
 #ifdef H5_HAVE_RAND_R
     H5_DLL void HDsrand(unsigned int seed);
     #ifndef HDsrandom
-        #define HDsrandom(S)		HDsrand(S)
+        #define HDsrandom(S)    HDsrand(S)
     #endif /* HDsrandom */
 #elif H5_HAVE_RANDOM
     #ifndef HDsrand
-        #define HDsrand(S)		srandom(S)
+        #define HDsrand(S)    srandom(S)
     #endif /* HDsrand */
     #ifndef HDsrandom
-        #define HDsrandom(S)		srandom(S)
+        #define HDsrandom(S)    srandom(S)
     #endif /* HDsrandom */
 #else /* H5_HAVE_RAND_R */
     #ifndef HDsrand
-        #define HDsrand(S)		srand(S)
+        #define HDsrand(S)    srand(S)
     #endif /* HDsrand */
     #ifndef HDsrandom
-        #define HDsrandom(S)		srand(S)
+        #define HDsrandom(S)    srand(S)
     #endif /* HDsrandom */
 #endif /* H5_HAVE_RAND_R */
 /* sscanf() variable arguments */
 
 #ifndef HDstrcat
-    #define HDstrcat(X,Y)		strcat(X,Y)
+    #define HDstrcat(X,Y)    strcat(X,Y)
 #endif /* HDstrcat */
 #ifndef HDstrchr
-    #define HDstrchr(S,C)		strchr(S,C)
+    #define HDstrchr(S,C)    strchr(S,C)
 #endif /* HDstrchr */
 #ifndef HDstrcmp
-    #define HDstrcmp(X,Y)		strcmp(X,Y)
+    #define HDstrcmp(X,Y)    strcmp(X,Y)
 #endif /* HDstrcmp */
 #ifndef HDstrcasecmp
     #define HDstrcasecmp(X,Y)       strcasecmp(X,Y)
 #endif /* HDstrcasecmp */
 #ifndef HDstrcoll
-    #define HDstrcoll(X,Y)		strcoll(X,Y)
+    #define HDstrcoll(X,Y)    strcoll(X,Y)
 #endif /* HDstrcoll */
 #ifndef HDstrcpy
-    #define HDstrcpy(X,Y)		strcpy(X,Y)
+    #define HDstrcpy(X,Y)    strcpy(X,Y)
 #endif /* HDstrcpy */
 #ifndef HDstrcspn
-    #define HDstrcspn(X,Y)		strcspn(X,Y)
+    #define HDstrcspn(X,Y)    strcspn(X,Y)
 #endif /* HDstrcspn */
 #ifndef HDstrerror
-    #define HDstrerror(N)		strerror(N)
+    #define HDstrerror(N)    strerror(N)
 #endif /* HDstrerror */
 #ifndef HDstrftime
-    #define HDstrftime(S,Z,F,T)	strftime(S,Z,F,T)
+    #define HDstrftime(S,Z,F,T)  strftime(S,Z,F,T)
 #endif /* HDstrftime */
 #ifndef HDstrlen
-    #define HDstrlen(S)		strlen(S)
+    #define HDstrlen(S)    strlen(S)
 #endif /* HDstrlen */
 #ifndef HDstrncat
-    #define HDstrncat(X,Y,Z)	strncat(X,Y,Z)
+    #define HDstrncat(X,Y,Z)  strncat(X,Y,Z)
 #endif /* HDstrncat */
 #ifndef HDstrncmp
-    #define HDstrncmp(X,Y,Z)	strncmp(X,Y,Z)
+    #define HDstrncmp(X,Y,Z)  strncmp(X,Y,Z)
 #endif /* HDstrncmp */
 #ifndef HDstrncpy
-    #define HDstrncpy(X,Y,Z)	strncpy(X,Y,Z)
+    #define HDstrncpy(X,Y,Z)  strncpy(X,Y,Z)
 #endif /* HDstrncpy */
 #ifndef HDstrpbrk
-    #define HDstrpbrk(X,Y)		strpbrk(X,Y)
+    #define HDstrpbrk(X,Y)    strpbrk(X,Y)
 #endif /* HDstrpbrk */
 #ifndef HDstrrchr
-    #define HDstrrchr(S,C)		strrchr(S,C)
+    #define HDstrrchr(S,C)    strrchr(S,C)
 #endif /* HDstrrchr */
 #ifndef HDstrspn
-    #define HDstrspn(X,Y)		strspn(X,Y)
+    #define HDstrspn(X,Y)    strspn(X,Y)
 #endif /* HDstrspn */
 #ifndef HDstrstr
-    #define HDstrstr(X,Y)		strstr(X,Y)
+    #define HDstrstr(X,Y)    strstr(X,Y)
 #endif /* HDstrstr */
 #ifndef HDstrtod
-    #define HDstrtod(S,R)		strtod(S,R)
+    #define HDstrtod(S,R)    strtod(S,R)
 #endif /* HDstrtod */
 #ifndef HDstrtok
-    #define HDstrtok(X,Y)		strtok(X,Y)
+    #define HDstrtok(X,Y)    strtok(X,Y)
 #endif /* HDstrtok */
 #ifndef HDstrtol
-    #define HDstrtol(S,R,N)		strtol(S,R,N)
+    #define HDstrtol(S,R,N)    strtol(S,R,N)
 #endif /* HDstrtol */
 H5_DLL int64_t HDstrtoll (const char *s, const char **rest, int base);
 #ifndef HDstrtoul
-    #define HDstrtoul(S,R,N)	strtoul(S,R,N)
+    #define HDstrtoul(S,R,N)  strtoul(S,R,N)
 #endif /* HDstrtoul */
 #ifndef HDstrtoull
-    #define HDstrtoull(S,R,N)	strtoull(S,R,N)
+    #define HDstrtoull(S,R,N)  strtoull(S,R,N)
 #endif /* HDstrtoul */
 #ifndef HDstrxfrm
-    #define HDstrxfrm(X,Y,Z)	strxfrm(X,Y,Z)
+    #define HDstrxfrm(X,Y,Z)  strxfrm(X,Y,Z)
 #endif /* HDstrxfrm */
 #ifdef H5_HAVE_SYMLINK
     #ifndef HDsymlink
-        #define HDsymlink(F1,F2)	symlink(F1,F2)
+        #define HDsymlink(F1,F2)  symlink(F1,F2)
     #endif /* HDsymlink */
 #endif /* H5_HAVE_SYMLINK */
 #ifndef HDsysconf
-    #define HDsysconf(N)		sysconf(N)
+    #define HDsysconf(N)    sysconf(N)
 #endif /* HDsysconf */
 #ifndef HDsystem
-    #define HDsystem(S)		system(S)
+    #define HDsystem(S)    system(S)
 #endif /* HDsystem */
 #ifndef HDtan
-    #define HDtan(X)		tan(X)
+    #define HDtan(X)    tan(X)
 #endif /* HDtan */
 #ifndef HDtanh
-    #define HDtanh(X)		tanh(X)
+    #define HDtanh(X)    tanh(X)
 #endif /* HDtanh */
 #ifndef HDtcdrain
-    #define HDtcdrain(F)		tcdrain(F)
+    #define HDtcdrain(F)    tcdrain(F)
 #endif /* HDtcdrain */
 #ifndef HDtcflow
-    #define HDtcflow(F,A)		tcflow(F,A)
+    #define HDtcflow(F,A)    tcflow(F,A)
 #endif /* HDtcflow */
 #ifndef HDtcflush
-    #define HDtcflush(F,N)		tcflush(F,N)
+    #define HDtcflush(F,N)    tcflush(F,N)
 #endif /* HDtcflush */
 #ifndef HDtcgetattr
-    #define HDtcgetattr(F,T)	tcgetattr(F,T)
+    #define HDtcgetattr(F,T)  tcgetattr(F,T)
 #endif /* HDtcgetattr */
 #ifndef HDtcgetpgrp
-    #define HDtcgetpgrp(F)		tcgetpgrp(F)
+    #define HDtcgetpgrp(F)    tcgetpgrp(F)
 #endif /* HDtcgetpgrp */
 #ifndef HDtcsendbreak
-    #define HDtcsendbreak(F,N)	tcsendbreak(F,N)
+    #define HDtcsendbreak(F,N)  tcsendbreak(F,N)
 #endif /* HDtcsendbreak */
 #ifndef HDtcsetattr
-    #define HDtcsetattr(F,O,T)	tcsetattr(F,O,T)
+    #define HDtcsetattr(F,O,T)  tcsetattr(F,O,T)
 #endif /* HDtcsetattr */
 #ifndef HDtcsetpgrp
-    #define HDtcsetpgrp(F,N)	tcsetpgrp(F,N)
+    #define HDtcsetpgrp(F,N)  tcsetpgrp(F,N)
 #endif /* HDtcsetpgrp */
 #ifndef HDtime
-    #define HDtime(T)		time(T)
+    #define HDtime(T)    time(T)
 #endif /* HDtime */
 #ifndef HDtimes
-    #define HDtimes(T)		times(T)
+    #define HDtimes(T)    times(T)
 #endif /* HDtimes*/
 #ifndef HDtmpfile
-    #define HDtmpfile()		tmpfile()
+    #define HDtmpfile()    tmpfile()
 #endif /* HDtmpfile */
 #ifndef HDtmpnam
-    #define HDtmpnam(S)		tmpnam(S)
+    #define HDtmpnam(S)    tmpnam(S)
 #endif /* HDtmpnam */
 #ifndef HDtolower
-    #define HDtolower(C)		tolower(C)
+    #define HDtolower(C)    tolower(C)
 #endif /* HDtolower */
 #ifndef HDtoupper
-    #define HDtoupper(C)		toupper(C)
+    #define HDtoupper(C)    toupper(C)
 #endif /* HDtoupper */
 #ifndef HDttyname
-    #define HDttyname(F)		ttyname(F)
+    #define HDttyname(F)    ttyname(F)
 #endif /* HDttyname */
 #ifndef HDtzset
-    #define HDtzset()		tzset()
+    #define HDtzset()    tzset()
 #endif /* HDtzset */
 #ifndef HDumask
-    #define HDumask(N)		umask(N)
+    #define HDumask(N)    umask(N)
 #endif /* HDumask */
 #ifndef HDuname
-    #define HDuname(S)		uname(S)
+    #define HDuname(S)    uname(S)
 #endif /* HDuname */
 #ifndef HDungetc
-    #define HDungetc(C,F)		ungetc(C,F)
+    #define HDungetc(C,F)    ungetc(C,F)
 #endif /* HDungetc */
 #ifndef HDunlink
-    #define HDunlink(S)		unlink(S)
+    #define HDunlink(S)    unlink(S)
 #endif /* HDunlink */
 #ifndef HDutime
-    #define HDutime(S,T)		utime(S,T)
+    #define HDutime(S,T)    utime(S,T)
 #endif /* HDutime */
 #ifndef HDva_arg
-    #define HDva_arg(A,T)		va_arg(A,T)
+    #define HDva_arg(A,T)    va_arg(A,T)
 #endif /* HDva_arg */
 #ifndef HDva_end
-    #define HDva_end(A)		va_end(A)
+    #define HDva_end(A)    va_end(A)
 #endif /* HDva_end */
 #ifndef HDva_start
-    #define HDva_start(A,P)		va_start(A,P)
+    #define HDva_start(A,P)    va_start(A,P)
 #endif /* HDva_start */
 #ifndef HDvasprintf
     #define HDvasprintf(RET,FMT,A)  vasprintf(RET,FMT,A)
 #endif /* HDvasprintf */
 #ifndef HDvfprintf
-    #define HDvfprintf(F,FMT,A)	vfprintf(F,FMT,A)
+    #define HDvfprintf(F,FMT,A)  vfprintf(F,FMT,A)
 #endif /* HDvfprintf */
 #ifndef HDvprintf
-    #define HDvprintf(FMT,A)	vprintf(FMT,A)
+    #define HDvprintf(FMT,A)  vprintf(FMT,A)
 #endif /* HDvprintf */
 #ifndef HDvsprintf
-    #define HDvsprintf(S,FMT,A)	vsprintf(S,FMT,A)
+    #define HDvsprintf(S,FMT,A)  vsprintf(S,FMT,A)
 #endif /* HDvsprintf */
 #ifndef HDvsnprintf
     #define HDvsnprintf(S,N,FMT,A) vsnprintf(S,N,FMT,A)
 #endif /* HDvsnprintf */
 #ifndef HDwait
-    #define HDwait(W)		wait(W)
+    #define HDwait(W)    wait(W)
 #endif /* HDwait */
 #ifndef HDwaitpid
-    #define HDwaitpid(P,W,O)	waitpid(P,W,O)
+    #define HDwaitpid(P,W,O)  waitpid(P,W,O)
 #endif /* HDwaitpid */
 #ifndef HDwcstombs
-    #define HDwcstombs(S,P,Z)	wcstombs(S,P,Z)
+    #define HDwcstombs(S,P,Z)  wcstombs(S,P,Z)
 #endif /* HDwcstombs */
 #ifndef HDwctomb
-    #define HDwctomb(S,C)		wctomb(S,C)
+    #define HDwctomb(S,C)    wctomb(S,C)
 #endif /* HDwctomb */
 #ifndef HDwrite
-    #define HDwrite(F,M,Z)		write(F,M,Z)
+    #define HDwrite(F,M,Z)    write(F,M,Z)
 #endif /* HDwrite */
 
 /*
@@ -1447,9 +1453,9 @@ extern char *strdup(const char *s);
 #if defined(H5_HAVE_WINDOW_PATH)
 
 /* directory delimiter for Windows: slash and backslash are acceptable on Windows */
-#define	DIR_SLASH_SEPC 		'/'
-#define	DIR_SEPC 		'\\'
-#define	DIR_SEPS 		"\\"
+#define  DIR_SLASH_SEPC     '/'
+#define  DIR_SEPC     '\\'
+#define  DIR_SEPS     "\\"
 #define CHECK_DELIMITER(SS)     ((SS == DIR_SEPC)||(SS == DIR_SLASH_SEPC))
 #define CHECK_ABSOLUTE(NAME)    ((isalpha(NAME[0])) && (NAME[1] == ':') && (CHECK_DELIMITER(NAME[2])))
 #define CHECK_ABS_DRIVE(NAME)   ((isalpha(NAME[0])) && (NAME[1] == ':'))
@@ -1469,59 +1475,59 @@ extern char *strdup(const char *s);
 
 /* OpenVMS pathname: <disk name>$<partition>:[path]<file name>
  *     i.g. SYS$SYSUSERS:[LU.HDF5.SRC]H5system.c */
-#define		DIR_SEPC	'.'
-#define		DIR_SEPS	"."
+#define    DIR_SEPC  ']'
+#define    DIR_SEPS  "]"
 #define         CHECK_DELIMITER(SS)             (SS == DIR_SEPC)
 #define         CHECK_ABSOLUTE(NAME)            (strrchr(NAME, ':') && strrchr(NAME, '['))
-#define 	CHECK_ABS_DRIVE(NAME)           (0)
-#define 	CHECK_ABS_PATH(NAME)    	(0)
-#define         GET_LAST_DELIMITER(NAME, ptr)   ptr = strrchr(NAME, ']');
+#define   CHECK_ABS_DRIVE(NAME)           (0)
+#define   CHECK_ABS_PATH(NAME)      (0)
+#define         GET_LAST_DELIMITER(NAME, ptr)   ptr = strrchr(NAME, DIR_SEPC);
 
 #else
 
-#define		DIR_SEPC	'/'
-#define		DIR_SEPS	"/"
+#define    DIR_SEPC  '/'
+#define    DIR_SEPS  "/"
 #define         CHECK_DELIMITER(SS)             (SS == DIR_SEPC)
 #define         CHECK_ABSOLUTE(NAME)            (CHECK_DELIMITER(*NAME))
-#define 	CHECK_ABS_DRIVE(NAME)   	(0)
-#define 	CHECK_ABS_PATH(NAME)    	(0)
+#define   CHECK_ABS_DRIVE(NAME)     (0)
+#define   CHECK_ABS_PATH(NAME)      (0)
 #define         GET_LAST_DELIMITER(NAME, ptr)   ptr = strrchr(NAME, DIR_SEPC);
 
 #endif
 
-#define 	COLON_SEPC	':'
+#define   COLON_SEPC  ':'
 
 
 /*
  * These macros check whether debugging has been requested for a certain
- * package at run-time.	 Code for debugging is conditionally compiled by
- * defining constants like `H5X_DEBUG'.	 In order to see the output though
+ * package at run-time.   Code for debugging is conditionally compiled by
+ * defining constants like `H5X_DEBUG'.   In order to see the output though
  * the code must be enabled at run-time with an environment variable
  * HDF5_DEBUG which is a list of packages to debug.
  *
  * Note:  If you add/remove items from this enum then be sure to update the
- *	  information about the package in H5_init_library().
+ *    information about the package in H5_init_library().
  */
 typedef enum {
-    H5_PKG_A,				/*Attributes			*/
-    H5_PKG_AC,				/*Meta data cache		*/
-    H5_PKG_B,				/*B-trees			*/
-    H5_PKG_D,				/*Datasets			*/
-    H5_PKG_E,				/*Error handling		*/
-    H5_PKG_F,				/*Files				*/
-    H5_PKG_G,				/*Groups			*/
-    H5_PKG_HG,				/*Global heap			*/
-    H5_PKG_HL,				/*Local heap			*/
-    H5_PKG_I,				/*Interface			*/
-    H5_PKG_MF,				/*File memory management	*/
-    H5_PKG_MM,				/*Core memory management	*/
-    H5_PKG_O,				/*Object headers		*/
-    H5_PKG_P,				/*Property lists		*/
-    H5_PKG_S,				/*Data spaces			*/
-    H5_PKG_T,				/*Data types			*/
-    H5_PKG_V,				/*Vector functions		*/
-    H5_PKG_Z,				/*Raw data filters		*/
-    H5_NPKGS				/*Must be last			*/
+    H5_PKG_A,        /*Attributes      */
+    H5_PKG_AC,        /*Meta data cache    */
+    H5_PKG_B,        /*B-trees      */
+    H5_PKG_D,        /*Datasets      */
+    H5_PKG_E,        /*Error handling    */
+    H5_PKG_F,        /*Files        */
+    H5_PKG_G,        /*Groups      */
+    H5_PKG_HG,        /*Global heap      */
+    H5_PKG_HL,        /*Local heap      */
+    H5_PKG_I,        /*Interface      */
+    H5_PKG_MF,        /*File memory management  */
+    H5_PKG_MM,        /*Core memory management  */
+    H5_PKG_O,        /*Object headers    */
+    H5_PKG_P,        /*Property lists    */
+    H5_PKG_S,        /*Data spaces      */
+    H5_PKG_T,        /*Data types      */
+    H5_PKG_V,        /*Vector functions    */
+    H5_PKG_Z,        /*Raw data filters    */
+    H5_NPKGS        /*Must be last      */
 } H5_pkg_t;
 
 typedef struct H5_debug_open_stream_t {
@@ -1530,58 +1536,58 @@ typedef struct H5_debug_open_stream_t {
 } H5_debug_open_stream_t;
 
 typedef struct H5_debug_t {
-    FILE		*trace;		/*API trace output stream	*/
+    FILE    *trace;    /*API trace output stream  */
     hbool_t             ttop;           /*Show only top-level calls?    */
     hbool_t             ttimes;         /*Show trace event times?       */
     struct {
-	const char	*name;		/*package name			*/
-	FILE		*stream;	/*output stream	or NULL		*/
+  const char  *name;    /*package name      */
+  FILE    *stream;  /*output stream  or NULL    */
     } pkg[H5_NPKGS];
     H5_debug_open_stream_t *open_stream; /* Stack of open output streams */
 } H5_debug_t;
 
-extern H5_debug_t		H5_debug_g;
-#define H5DEBUG(X)		(H5_debug_g.pkg[H5_PKG_##X].stream)
+extern H5_debug_t    H5_debug_g;
+#define H5DEBUG(X)    (H5_debug_g.pkg[H5_PKG_##X].stream)
 /* Do not use const else AIX strings does not show it. */
 extern char H5libhdf5_settings[]; /* embedded library information */
 
 /*-------------------------------------------------------------------------
- * Purpose:	These macros are inserted automatically just after the
- *		FUNC_ENTER() macro of API functions and are used to trace
- *		application program execution. Unless H5_DEBUG_API has been
- *		defined they are no-ops.
+ * Purpose:  These macros are inserted automatically just after the
+ *    FUNC_ENTER() macro of API functions and are used to trace
+ *    application program execution. Unless H5_DEBUG_API has been
+ *    defined they are no-ops.
  *
- * Arguments:	R	- Return type encoded as a string
- *		T	- Argument types encoded as a string
- *		A0-An	- Arguments.  The number at the end of the macro name
- *			  indicates the number of arguments.
+ * Arguments:  R  - Return type encoded as a string
+ *    T  - Argument types encoded as a string
+ *    A0-An  - Arguments.  The number at the end of the macro name
+ *        indicates the number of arguments.
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *
  * Modifications:
  *-------------------------------------------------------------------------
  */
 #ifdef H5_DEBUG_API
-#define H5TRACE_DECL			   const char *RTYPE=NULL;                                      \
+#define H5TRACE_DECL         const char *RTYPE=NULL;                                      \
                                            double CALLTIME;
-#define H5TRACE0(R,T)			   RTYPE=R;                                                     \
-					   CALLTIME=H5_trace(NULL,FUNC,T)
-#define H5TRACE1(R,T,A0)		   RTYPE=R;			                                \
-					   CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0)
-#define H5TRACE2(R,T,A0,A1)		   RTYPE=R;                                                     \
-					   CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1)
-#define H5TRACE3(R,T,A0,A1,A2)		   RTYPE=R;			                                \
-					   CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2)
-#define H5TRACE4(R,T,A0,A1,A2,A3)	   RTYPE=R;                                                     \
-					   CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3)
-#define H5TRACE5(R,T,A0,A1,A2,A3,A4)	   RTYPE=R;                                                     \
-					   CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,   \
+#define H5TRACE0(R,T)         RTYPE=R;                                                     \
+             CALLTIME=H5_trace(NULL,FUNC,T)
+#define H5TRACE1(R,T,A0)       RTYPE=R;                                      \
+             CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0)
+#define H5TRACE2(R,T,A0,A1)       RTYPE=R;                                                     \
+             CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1)
+#define H5TRACE3(R,T,A0,A1,A2)       RTYPE=R;                                      \
+             CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2)
+#define H5TRACE4(R,T,A0,A1,A2,A3)     RTYPE=R;                                                     \
+             CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3)
+#define H5TRACE5(R,T,A0,A1,A2,A3,A4)     RTYPE=R;                                                     \
+             CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,   \
                                                              #A4,A4)
-#define H5TRACE6(R,T,A0,A1,A2,A3,A4,A5)	   RTYPE=R;                                                     \
-					   CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,   \
+#define H5TRACE6(R,T,A0,A1,A2,A3,A4,A5)     RTYPE=R;                                                     \
+             CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,   \
                                                              #A4,A4,#A5,A5)
 #define H5TRACE7(R,T,A0,A1,A2,A3,A4,A5,A6) RTYPE=R;                                                     \
-					   CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,   \
+             CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,   \
                                                              #A4,A4,#A5,A5,#A6,A6)
 #define H5TRACE8(R,T,A0,A1,A2,A3,A4,A5,A6,A7) RTYPE=R;                                                  \
                                            CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,   \
@@ -1596,46 +1602,46 @@ extern char H5libhdf5_settings[]; /* embedded library information */
                                            CALLTIME=H5_trace(NULL,FUNC,T,#A0,A0,#A1,A1,#A2,A2,#A3,A3,   \
                                                              #A4,A4,#A5,A5,#A6,A6,#A7,A7,#A8,A8,#A9,A9, \
                                                              #A10,A10)
-#define H5TRACE_RETURN(V)		   if (RTYPE) {                                                 \
-					      H5_trace(&CALLTIME,FUNC,RTYPE,NULL,V);                    \
-					      RTYPE=NULL;                                               \
-					   }
+#define H5TRACE_RETURN(V)       if (RTYPE) {                                                 \
+                H5_trace(&CALLTIME,FUNC,RTYPE,NULL,V);                    \
+                RTYPE=NULL;                                               \
+             }
 #else
-#define H5TRACE_DECL			                /*void*/
-#define H5TRACE0(R,T)			                /*void*/
-#define H5TRACE1(R,T,A0)		                /*void*/
-#define H5TRACE2(R,T,A0,A1)		                /*void*/
-#define H5TRACE3(R,T,A0,A1,A2)		                /*void*/
-#define H5TRACE4(R,T,A0,A1,A2,A3)	                /*void*/
-#define H5TRACE5(R,T,A0,A1,A2,A3,A4)	                /*void*/
-#define H5TRACE6(R,T,A0,A1,A2,A3,A4,A5)	                /*void*/
+#define H5TRACE_DECL                      /*void*/
+#define H5TRACE0(R,T)                      /*void*/
+#define H5TRACE1(R,T,A0)                    /*void*/
+#define H5TRACE2(R,T,A0,A1)                    /*void*/
+#define H5TRACE3(R,T,A0,A1,A2)                    /*void*/
+#define H5TRACE4(R,T,A0,A1,A2,A3)                  /*void*/
+#define H5TRACE5(R,T,A0,A1,A2,A3,A4)                  /*void*/
+#define H5TRACE6(R,T,A0,A1,A2,A3,A4,A5)                  /*void*/
 #define H5TRACE7(R,T,A0,A1,A2,A3,A4,A5,A6)              /*void*/
 #define H5TRACE8(R,T,A0,A1,A2,A3,A4,A5,A6,A7)           /*void*/
 #define H5TRACE9(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8)        /*void*/
 #define H5TRACE10(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9)    /*void*/
 #define H5TRACE11(R,T,A0,A1,A2,A3,A4,A5,A6,A7,A8,A9,A10) /*void*/
-#define H5TRACE_RETURN(V)		                /*void*/
+#define H5TRACE_RETURN(V)                    /*void*/
 #endif
 
 H5_DLL double H5_trace(const double *calltime, const char *func, const char *type, ...);
 
 
 /*-------------------------------------------------------------------------
- * Purpose:	Register function entry for library initialization and code
- *		profiling.
+ * Purpose:  Register function entry for library initialization and code
+ *    profiling.
  *
- * Notes:	Every file must have a file-scope variable called
- *		`initialize_interface_g' of type hbool_t which is initialized
- *		to FALSE.
+ * Notes:  Every file must have a file-scope variable called
+ *    `initialize_interface_g' of type hbool_t which is initialized
+ *    to FALSE.
  *
- *		Don't use local variable initializers which contain
- *		calls to other library functions since the initializer
- *		would happen before the FUNC_ENTER() gets called.  Don't
- *		use initializers that require special cleanup code to
- *		execute if FUNC_ENTER() fails since a failing FUNC_ENTER()
- *		returns immediately without branching to the `done' label.
+ *    Don't use local variable initializers which contain
+ *    calls to other library functions since the initializer
+ *    would happen before the FUNC_ENTER() gets called.  Don't
+ *    use initializers that require special cleanup code to
+ *    execute if FUNC_ENTER() fails since a failing FUNC_ENTER()
+ *    returns immediately without branching to the `done' label.
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *
  * Modifications:
  *
@@ -1647,7 +1653,7 @@ H5_DLL double H5_trace(const double *calltime, const char *func, const char *typ
 #define H5_IS_API(S) ('_'!=((const char *)S)[2] && '_'!=((const char *)S)[3] && (!((const char *)S)[4] || '_'!=((const char *)S)[4]))
 
 /* global library version information string */
-extern char	H5_lib_vers_info_g[];
+extern char  H5_lib_vers_info_g[];
 
 /* Lock headers */
 #ifdef H5_HAVE_THREADSAFE
@@ -1734,17 +1740,17 @@ extern hbool_t H5_MPEinit_g;   /* Has the MPE Library been initialized? */
 
 /* Macros for defining interface initialization routines */
 #ifdef H5_INTERFACE_INIT_FUNC
-static int		H5_interface_initialize_g = 0;
-static herr_t		H5_INTERFACE_INIT_FUNC(void);
-#define H5_INTERFACE_INIT(err)						      \
-   /* Initialize this interface or bust */				      \
-   if (!H5_interface_initialize_g) {					      \
-      H5_interface_initialize_g = 1;					      \
-      if (H5_INTERFACE_INIT_FUNC()<0) {					      \
-         H5_interface_initialize_g = 0;				              \
-         HGOTO_ERROR (H5E_FUNC, H5E_CANTINIT, err,		              \
-            "interface initialization failed")		                      \
-      }								              \
+static int    H5_interface_initialize_g = 0;
+static herr_t    H5_INTERFACE_INIT_FUNC(void);
+#define H5_INTERFACE_INIT(err)                  \
+   /* Initialize this interface or bust */              \
+   if (!H5_interface_initialize_g) {                \
+      H5_interface_initialize_g = 1;                \
+      if (H5_INTERFACE_INIT_FUNC()<0) {                \
+         H5_interface_initialize_g = 0;                      \
+         HGOTO_ERROR (H5E_FUNC, H5E_CANTINIT, err,                  \
+            "interface initialization failed")                          \
+      }                              \
    }
 #else /* H5_INTERFACE_INIT_FUNC */
 #define H5_INTERFACE_INIT(err)
@@ -1753,17 +1759,17 @@ static herr_t		H5_INTERFACE_INIT_FUNC(void);
 
 #ifndef NDEBUG
 #define FUNC_ENTER_COMMON_NOFUNC(func_name,asrt)                              \
-    static hbool_t func_check = FALSE;          			      \
-									      \
-    if(!func_check) {			   				      \
-        /* Check API status */               				      \
-        HDassert(asrt);				                              \
-									      \
-        /* Check function name */               			      \
-        H5_CHECK_FUNCNAME(func_name);					      \
-									      \
-        /* Don't check again */                 			      \
-        func_check = TRUE;						      \
+    static hbool_t func_check = FALSE;                      \
+                        \
+    if(!func_check) {                       \
+        /* Check API status */                             \
+        HDassert(asrt);                                      \
+                        \
+        /* Check function name */                           \
+        H5_CHECK_FUNCNAME(func_name);                \
+                        \
+        /* Don't check again */                             \
+        func_check = TRUE;                  \
     } /* end if */
 #else /* NDEBUG */
 #define FUNC_ENTER_COMMON_NOFUNC(func_name,asrt)
@@ -1771,7 +1777,7 @@ static herr_t		H5_INTERFACE_INIT_FUNC(void);
 
 #define FUNC_ENTER_COMMON(func_name, asrt)                                    \
     static const char FUNC[] = #func_name;                                    \
-    hbool_t err_occurred = FALSE;					      \
+    hbool_t err_occurred = FALSE;                \
     FUNC_ENTER_COMMON_NOFUNC(func_name, asrt);
 
 #define FUNC_ENTER_COMMON_NOERR(func_name, asrt)                              \
@@ -1780,10 +1786,10 @@ static herr_t		H5_INTERFACE_INIT_FUNC(void);
 
 /* Threadsafety initialization code for API routines */
 #define FUNC_ENTER_API_THREADSAFE                                             \
-   /* Initialize the thread-safe code */				      \
+   /* Initialize the thread-safe code */              \
    H5_FIRST_THREAD_INIT                                                       \
-									      \
-   /* Grab the mutex for the library */ 				      \
+                        \
+   /* Grab the mutex for the library */               \
    H5_API_UNSET_CANCEL                                                        \
    H5_API_LOCK
 
@@ -1792,22 +1798,22 @@ static herr_t		H5_INTERFACE_INIT_FUNC(void);
     MPE_LOG_VARS(func_name)                                                   \
     H5TRACE_DECL
 
-#define FUNC_ENTER_API_COMMON(func_name)				      \
+#define FUNC_ENTER_API_COMMON(func_name)              \
     FUNC_ENTER_API_VARS(func_name)                                            \
     FUNC_ENTER_COMMON(func_name, H5_IS_API(#func_name));                      \
     FUNC_ENTER_API_THREADSAFE;
 
-#define FUNC_ENTER_API_INIT(func_name,err)			       	      \
-   /* Initialize the library */           				      \
+#define FUNC_ENTER_API_INIT(func_name,err)                     \
+   /* Initialize the library */                         \
    if(!(H5_INIT_GLOBAL)) {                                                    \
        H5_INIT_GLOBAL = TRUE;                                                 \
-       if(H5_init_library() < 0)  					      \
-          HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, err,		              \
-            "library initialization failed")		                      \
-   }								              \
+       if(H5_init_library() < 0)                  \
+          HGOTO_ERROR(H5E_FUNC, H5E_CANTINIT, err,                  \
+            "library initialization failed")                          \
+   }                              \
                                                                               \
-   /* Initialize the interface, if appropriate */		              \
-   H5_INTERFACE_INIT(err)						      \
+   /* Initialize the interface, if appropriate */                  \
+   H5_INTERFACE_INIT(err)                  \
                                                                               \
    /* Push the name of this function on the function stack */                 \
    H5_PUSH_FUNC(#func_name)                                                   \
@@ -1817,9 +1823,9 @@ static herr_t		H5_INTERFACE_INIT_FUNC(void);
 /* Use this macro for all "normal" API functions */
 #define FUNC_ENTER_API(func_name,err) {{                                      \
     FUNC_ENTER_API_COMMON(func_name)                                          \
-    FUNC_ENTER_API_INIT(func_name,err);			                      \
-    /* Clear thread error stack entering public functions */		      \
-    H5E_clear_stack(NULL);				                      \
+    FUNC_ENTER_API_INIT(func_name,err);                            \
+    /* Clear thread error stack entering public functions */          \
+    H5E_clear_stack(NULL);                              \
     {
 
 /*
@@ -1828,7 +1834,7 @@ static herr_t		H5_INTERFACE_INIT_FUNC(void);
  */
 #define FUNC_ENTER_API_NOCLEAR(func_name,err) {{                              \
     FUNC_ENTER_API_COMMON(func_name)                                          \
-    FUNC_ENTER_API_INIT(func_name,err);			                      \
+    FUNC_ENTER_API_INIT(func_name,err);                            \
     {
 
 /*
@@ -1853,14 +1859,14 @@ static herr_t		H5_INTERFACE_INIT_FUNC(void);
 #define FUNC_ENTER_API_NOINIT_NOERR_NOFS(func_name) {{                       \
     FUNC_ENTER_API_VARS(func_name)                                            \
     FUNC_ENTER_COMMON_NOERR(func_name, H5_IS_API(#func_name));                      \
-    FUNC_ENTER_API_THREADSAFE;						      \
+    FUNC_ENTER_API_THREADSAFE;                  \
     BEGIN_MPE_LOG(func_name);                                                 \
     {
 
 /* Note: this macro only works when there's _no_ interface initialization routine for the module */
-#define FUNC_ENTER_NOAPI_INIT(func_name,err)			       	      \
-   /* Initialize the interface, if appropriate */		              \
-   H5_INTERFACE_INIT(err)						      \
+#define FUNC_ENTER_NOAPI_INIT(func_name,err)                     \
+   /* Initialize the interface, if appropriate */                  \
+   H5_INTERFACE_INIT(err)                  \
                                                                               \
    /* Push the name of this function on the function stack */                 \
    H5_PUSH_FUNC(#func_name)
@@ -1868,19 +1874,19 @@ static herr_t		H5_INTERFACE_INIT_FUNC(void);
 /* Use this macro for all "normal" non-API functions */
 #define FUNC_ENTER_NOAPI(func_name,err) {                                     \
     FUNC_ENTER_COMMON(func_name, !H5_IS_API(#func_name));                     \
-    FUNC_ENTER_NOAPI_INIT(func_name,err)		                      \
+    FUNC_ENTER_NOAPI_INIT(func_name,err)                          \
     {
 
 /* Use this macro for all non-API functions, which propagate errors, but don't issue them */
 #define FUNC_ENTER_NOAPI_NOERR(func_name,err) {                               \
     FUNC_ENTER_COMMON_NOERR(func_name, !H5_IS_API(#func_name));               \
-    FUNC_ENTER_NOAPI_INIT(func_name,err)		                      \
+    FUNC_ENTER_NOAPI_INIT(func_name,err)                          \
     {
 
 /* Use this macro for all non-API functions which don't issue errors */
 #define FUNC_ENTER_NOAPI_NOFUNC(func_name) {                                  \
     FUNC_ENTER_COMMON_NOFUNC(func_name,!H5_IS_API(#func_name));               \
-    FUNC_ENTER_NOAPI_INIT(func_name,err)		                      \
+    FUNC_ENTER_NOAPI_INIT(func_name,err)                          \
     {
 
 /*
@@ -1941,10 +1947,10 @@ static herr_t		H5_INTERFACE_INIT_FUNC(void);
     {
 
 /*-------------------------------------------------------------------------
- * Purpose:	Register function exit for code profiling.  This should be
- *		the last statement executed by a function.
+ * Purpose:  Register function exit for code profiling.  This should be
+ *    the last statement executed by a function.
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *
  *-------------------------------------------------------------------------
  */
@@ -1955,33 +1961,33 @@ static herr_t		H5_INTERFACE_INIT_FUNC(void);
 
 #define FUNC_LEAVE_API(ret_value)                                             \
         FINISH_MPE_LOG;                                                       \
-        H5TRACE_RETURN(ret_value);					      \
+        H5TRACE_RETURN(ret_value);                \
         H5_POP_FUNC                                                           \
-        if(err_occurred)						      \
-           (void)H5E_dump_api_stack(TRUE);				      \
+        if(err_occurred)                  \
+           (void)H5E_dump_api_stack(TRUE);              \
         FUNC_LEAVE_API_THREADSAFE                                             \
-        return(ret_value);						      \
+        return(ret_value);                  \
     } /*end scope from end of FUNC_ENTER*/                                    \
 }} /*end scope from beginning of FUNC_ENTER*/
 
 /* Use this macro to match the FUNC_ENTER_API_NOFS macro */
 #define FUNC_LEAVE_API_NOFS(ret_value)                                        \
         FINISH_MPE_LOG;                                                       \
-        H5TRACE_RETURN(ret_value);					      \
+        H5TRACE_RETURN(ret_value);                \
         FUNC_LEAVE_API_THREADSAFE                                             \
-        return(ret_value);						      \
+        return(ret_value);                  \
     } /*end scope from end of FUNC_ENTER*/                                    \
 }} /*end scope from beginning of FUNC_ENTER*/
 
 #define FUNC_LEAVE_NOAPI(ret_value)                                           \
         H5_POP_FUNC                                                           \
-        return(ret_value);						      \
+        return(ret_value);                  \
     } /*end scope from end of FUNC_ENTER*/                                    \
 } /*end scope from beginning of FUNC_ENTER*/
 
 #define FUNC_LEAVE_NOAPI_VOID                                                 \
         H5_POP_FUNC                                                           \
-        return;						                      \
+        return;                                  \
     } /*end scope from end of FUNC_ENTER*/                                    \
 } /*end scope from beginning of FUNC_ENTER*/
 
@@ -1991,7 +1997,7 @@ static herr_t		H5_INTERFACE_INIT_FUNC(void);
  *              (so far, just the H5CS routines themselves)
  */
 #define FUNC_LEAVE_NOAPI_NOFS(ret_value)                                      \
-        return(ret_value);						      \
+        return(ret_value);                  \
     } /*end scope from end of FUNC_ENTER*/                                    \
 } /*end scope from beginning of FUNC_ENTER*/
 
diff --git a/src/H5public.h b/src/H5public.h
index 072bc94..420bbbe 100644
--- a/src/H5public.h
+++ b/src/H5public.h
@@ -75,10 +75,10 @@ extern "C" {
 /* Version numbers */
 #define H5_VERS_MAJOR	1	/* For major interface/format changes  	     */
 #define H5_VERS_MINOR	8	/* For minor interface/format changes  	     */
-#define H5_VERS_RELEASE	7	/* For tweaks, bug-fixes, or development     */
+#define H5_VERS_RELEASE	8	/* For tweaks, bug-fixes, or development     */
 #define H5_VERS_SUBRELEASE ""	/* For pre-releases like snap0       */
 				/* Empty string for real releases.           */
-#define H5_VERS_INFO    "HDF5 library version: 1.8.7"      /* Full version string */
+#define H5_VERS_INFO    "HDF5 library version: 1.8.8"      /* Full version string */
 
 #define H5check()	H5check_version(H5_VERS_MAJOR,H5_VERS_MINOR,	      \
 				        H5_VERS_RELEASE)
diff --git a/src/H5system.c b/src/H5system.c
index afe07b0..1f0ad29 100644
--- a/src/H5system.c
+++ b/src/H5system.c
@@ -15,11 +15,11 @@
 
 /*-------------------------------------------------------------------------
  *
- * Created:		H5system.c
- *			Aug 21 2006
- *			Quincey Koziol <koziol at hdfgroup.org>
+ * Created:    H5system.c
+ *      Aug 21 2006
+ *      Quincey Koziol <koziol at hdfgroup.org>
  *
- * Purpose:		System call wrapper implementations.
+ * Purpose:    System call wrapper implementations.
  *
  *-------------------------------------------------------------------------
  */
@@ -32,9 +32,9 @@
 /***********/
 /* Headers */
 /***********/
-#include "H5private.h"		/* Generic Functions			*/
-#include "H5Fprivate.h"		/* File access				*/
-#include "H5MMprivate.h"	/* Memory management			*/
+#include "H5private.h"    /* Generic Functions      */
+#include "H5Fprivate.h"    /* File access        */
+#include "H5MMprivate.h"  /* Memory management      */
 #include "H5Eprivate.h"
 
 
@@ -75,71 +75,71 @@
 
 
 /*-------------------------------------------------------------------------
- * Function:	HDfprintf
+ * Function:  HDfprintf
  *
- * Purpose:	Prints the optional arguments under the control of the format
- *		string FMT to the stream STREAM.  This function takes the
- *		same format as fprintf(3c) with a few added features:
+ * Purpose:  Prints the optional arguments under the control of the format
+ *    string FMT to the stream STREAM.  This function takes the
+ *    same format as fprintf(3c) with a few added features:
  *
- *		The conversion modifier `H' refers to the size of an
- *		`hsize_t' or `hssize_t' type.  For instance, "0x%018Hx"
- *		prints an `hsize_t' value as a hex number right justified and
- *		zero filled in an 18-character field.
+ *    The conversion modifier `H' refers to the size of an
+ *    `hsize_t' or `hssize_t' type.  For instance, "0x%018Hx"
+ *    prints an `hsize_t' value as a hex number right justified and
+ *    zero filled in an 18-character field.
  *
- *		The conversion `a' refers to an `haddr_t' type.
+ *    The conversion `a' refers to an `haddr_t' type.
  *
- * Return:	Success:	Number of characters printed
+ * Return:  Success:  Number of characters printed
  *
- *		Failure:	-1
+ *    Failure:  -1
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, April  9, 1998
  *
  * Modifications:
- *		Robb Matzke, 1999-07-27
- *		The `%a' format refers to an argument of `haddr_t' type
- *		instead of `haddr_t*' and the return value is correct.
+ *    Robb Matzke, 1999-07-27
+ *    The `%a' format refers to an argument of `haddr_t' type
+ *    instead of `haddr_t*' and the return value is correct.
  *-------------------------------------------------------------------------
  */
 int
 HDfprintf(FILE *stream, const char *fmt, ...)
 {
-    int		n=0, nout = 0;
-    int		fwidth, prec;
-    int		zerofill;
-    int		leftjust;
-    int		plussign;
-    int		ldspace;
-    int		prefix;
-    char	modifier[8];
-    int		conv;
-    char	*rest, format_templ[128];
-    const char	*s;
-    va_list	ap;
+    int    n=0, nout = 0;
+    int    fwidth, prec;
+    int    zerofill;
+    int    leftjust;
+    int    plussign;
+    int    ldspace;
+    int    prefix;
+    char  modifier[8];
+    int    conv;
+    char  *rest, format_templ[128];
+    const char  *s;
+    va_list  ap;
 
     assert (stream);
     assert (fmt);
 
     va_start (ap, fmt);
     while (*fmt) {
-	fwidth = prec = 0;
-	zerofill = 0;
-	leftjust = 0;
-	plussign = 0;
-	prefix = 0;
-	ldspace = 0;
-	modifier[0] = '\0';
-
-	if ('%'==fmt[0] && '%'==fmt[1]) {
-	    HDputc ('%', stream);
-	    fmt += 2;
-	    nout++;
-	} else if ('%'==fmt[0]) {
-	    s = fmt + 1;
-
-	    /* Flags */
-	    while(HDstrchr ("-+ #", *s)) {
-		switch(*s) {
+  fwidth = prec = 0;
+  zerofill = 0;
+  leftjust = 0;
+  plussign = 0;
+  prefix = 0;
+  ldspace = 0;
+  modifier[0] = '\0';
+
+  if ('%'==fmt[0] && '%'==fmt[1]) {
+      HDputc ('%', stream);
+      fmt += 2;
+      nout++;
+  } else if ('%'==fmt[0]) {
+      s = fmt + 1;
+
+      /* Flags */
+      while(HDstrchr ("-+ #", *s)) {
+    switch(*s) {
                     case '-':
                         leftjust = 1;
                         break;
@@ -155,61 +155,61 @@ HDfprintf(FILE *stream, const char *fmt, ...)
                     case '#':
                         prefix = 1;
                         break;
-		} /* end switch */ /*lint !e744 Switch statement doesn't _need_ default */
-		s++;
-	    } /* end while */
-
-	    /* Field width */
-	    if (HDisdigit (*s)) {
-		zerofill = ('0'==*s);
-		fwidth = (int)HDstrtol (s, &rest, 10);
-		s = rest;
-	    } else if ('*'==*s) {
-		fwidth = va_arg (ap, int);
-		if (fwidth<0) {
-		    leftjust = 1;
-		    fwidth = -fwidth;
-		}
-		s++;
-	    }
-
-	    /* Precision */
-	    if ('.'==*s) {
-		s++;
-		if (HDisdigit (*s)) {
-		    prec = (int)HDstrtol (s, &rest, 10);
-		    s = rest;
-		} else if ('*'==*s) {
-		    prec = va_arg (ap, int);
-		    s++;
-		}
-		if (prec<1) prec = 1;
-	    }
-
-	    /* Extra type modifiers */
-	    if (HDstrchr ("ZHhlqLI", *s)) {
-		switch (*s) {
+    } /* end switch */ /*lint !e744 Switch statement doesn't _need_ default */
+    s++;
+      } /* end while */
+
+      /* Field width */
+      if (HDisdigit (*s)) {
+    zerofill = ('0'==*s);
+    fwidth = (int)HDstrtol (s, &rest, 10);
+    s = rest;
+      } else if ('*'==*s) {
+    fwidth = va_arg (ap, int);
+    if (fwidth<0) {
+        leftjust = 1;
+        fwidth = -fwidth;
+    }
+    s++;
+      }
+
+      /* Precision */
+      if ('.'==*s) {
+    s++;
+    if (HDisdigit (*s)) {
+        prec = (int)HDstrtol (s, &rest, 10);
+        s = rest;
+    } else if ('*'==*s) {
+        prec = va_arg (ap, int);
+        s++;
+    }
+    if (prec<1) prec = 1;
+      }
+
+      /* Extra type modifiers */
+      if (HDstrchr ("ZHhlqLI", *s)) {
+    switch (*s) {
                 /*lint --e{506} Don't issue warnings about constant value booleans */
                 /*lint --e{774} Don't issue warnings boolean within 'if' always evaluates false/true */
-		case 'H':
-		    if (sizeof(hsize_t)<sizeof(long)) {
-			modifier[0] = '\0';
-		    } else if (sizeof(hsize_t)==sizeof(long)) {
-			HDstrcpy (modifier, "l");
-		    } else {
-			HDstrcpy (modifier, H5_PRINTF_LL_WIDTH);
-		    }
-		    break;
-		case 'Z':
-		    if (sizeof(size_t)<sizeof(long)) {
-			modifier[0] = '\0';
-		    } else if (sizeof(size_t)==sizeof(long)) {
-			HDstrcpy (modifier, "l");
-		    } else {
-			HDstrcpy (modifier, H5_PRINTF_LL_WIDTH);
-		    }
-		    break;
-		default:
+    case 'H':
+        if (sizeof(hsize_t)<sizeof(long)) {
+      modifier[0] = '\0';
+        } else if (sizeof(hsize_t)==sizeof(long)) {
+      HDstrcpy (modifier, "l");
+        } else {
+      HDstrcpy (modifier, H5_PRINTF_LL_WIDTH);
+        }
+        break;
+    case 'Z':
+        if (sizeof(size_t)<sizeof(long)) {
+      modifier[0] = '\0';
+        } else if (sizeof(size_t)==sizeof(long)) {
+      HDstrcpy (modifier, "l");
+        } else {
+      HDstrcpy (modifier, H5_PRINTF_LL_WIDTH);
+        }
+        break;
+    default:
                     /* Handle 'I64' modifier for Microsoft's "__int64" type */
                     if(*s=='I' && *(s+1)=='6' && *(s+2)=='4') {
                         modifier[0] = *s;
@@ -231,144 +231,144 @@ HDfprintf(FILE *stream, const char *fmt, ...)
                             modifier[1] = '\0';
                         } /* end else */
                     } /* end else */
-		    break;
-		}
-		s++;
-	    }
-
-	    /* Conversion */
-	    conv = *s++;
-
-	    /* Create the format template */
-	    sprintf (format_templ, "%%%s%s%s%s%s",
-		     leftjust?"-":"", plussign?"+":"",
-		     ldspace?" ":"", prefix?"#":"", zerofill?"0":"");
-	    if (fwidth>0)
-		sprintf (format_templ+HDstrlen(format_templ), "%d", fwidth);
-	    if (prec>0)
-		sprintf (format_templ+HDstrlen(format_templ), ".%d", prec);
-	    if (*modifier)
-		sprintf (format_templ+HDstrlen(format_templ), "%s", modifier);
-	    sprintf (format_templ+HDstrlen(format_templ), "%c", conv);
-
-
-	    /* Conversion */
-	    switch (conv) {
-	    case 'd':
-	    case 'i':
-		if (!HDstrcmp(modifier, "h")) {
-		    short x = (short)va_arg (ap, int);
-		    n = fprintf (stream, format_templ, x);
-		} else if (!*modifier) {
-		    int x = va_arg (ap, int);
-		    n = fprintf (stream, format_templ, x);
-		} else if (!HDstrcmp (modifier, "l")) {
-		    long x = va_arg (ap, long);
-		    n = fprintf (stream, format_templ, x);
-		} else {
-		    int64_t x = va_arg(ap, int64_t);
-		    n = fprintf (stream, format_templ, x);
-		}
-		break;
-
-	    case 'o':
-	    case 'u':
-	    case 'x':
-	    case 'X':
-		if (!HDstrcmp (modifier, "h")) {
-		    unsigned short x = (unsigned short)va_arg (ap, unsigned int);
-		    n = fprintf (stream, format_templ, x);
-		} else if (!*modifier) {
-		    unsigned int x = va_arg (ap, unsigned int); /*lint !e732 Loss of sign not really occuring */
-		    n = fprintf (stream, format_templ, x);
-		} else if (!HDstrcmp (modifier, "l")) {
-		    unsigned long x = va_arg (ap, unsigned long); /*lint !e732 Loss of sign not really occuring */
-		    n = fprintf (stream, format_templ, x);
-		} else {
-		    uint64_t x = va_arg(ap, uint64_t); /*lint !e732 Loss of sign not really occuring */
-		    n = fprintf (stream, format_templ, x);
-		}
-		break;
-
-	    case 'f':
-	    case 'e':
-	    case 'E':
-	    case 'g':
-	    case 'G':
-		if (!HDstrcmp (modifier, "h")) {
-		    float x = (float) va_arg (ap, double);
-		    n = fprintf (stream, format_templ, x);
-		} else if (!*modifier || !HDstrcmp (modifier, "l")) {
-		    double x = va_arg (ap, double);
-		    n = fprintf (stream, format_templ, x);
-		} else {
-		    /*
-		     * Some compilers complain when `long double' and
-		     * `double' are the same thing.
-		     */
+        break;
+    }
+    s++;
+      }
+
+      /* Conversion */
+      conv = *s++;
+
+      /* Create the format template */
+      sprintf (format_templ, "%%%s%s%s%s%s",
+         leftjust?"-":"", plussign?"+":"",
+         ldspace?" ":"", prefix?"#":"", zerofill?"0":"");
+      if (fwidth>0)
+    sprintf (format_templ+HDstrlen(format_templ), "%d", fwidth);
+      if (prec>0)
+    sprintf (format_templ+HDstrlen(format_templ), ".%d", prec);
+      if (*modifier)
+    sprintf (format_templ+HDstrlen(format_templ), "%s", modifier);
+      sprintf (format_templ+HDstrlen(format_templ), "%c", conv);
+
+
+      /* Conversion */
+      switch (conv) {
+      case 'd':
+      case 'i':
+    if (!HDstrcmp(modifier, "h")) {
+        short x = (short)va_arg (ap, int);
+        n = fprintf (stream, format_templ, x);
+    } else if (!*modifier) {
+        int x = va_arg (ap, int);
+        n = fprintf (stream, format_templ, x);
+    } else if (!HDstrcmp (modifier, "l")) {
+        long x = va_arg (ap, long);
+        n = fprintf (stream, format_templ, x);
+    } else {
+        int64_t x = va_arg(ap, int64_t);
+        n = fprintf (stream, format_templ, x);
+    }
+    break;
+
+      case 'o':
+      case 'u':
+      case 'x':
+      case 'X':
+    if (!HDstrcmp (modifier, "h")) {
+        unsigned short x = (unsigned short)va_arg (ap, unsigned int);
+        n = fprintf (stream, format_templ, x);
+    } else if (!*modifier) {
+        unsigned int x = va_arg (ap, unsigned int); /*lint !e732 Loss of sign not really occuring */
+        n = fprintf (stream, format_templ, x);
+    } else if (!HDstrcmp (modifier, "l")) {
+        unsigned long x = va_arg (ap, unsigned long); /*lint !e732 Loss of sign not really occuring */
+        n = fprintf (stream, format_templ, x);
+    } else {
+        uint64_t x = va_arg(ap, uint64_t); /*lint !e732 Loss of sign not really occuring */
+        n = fprintf (stream, format_templ, x);
+    }
+    break;
+
+      case 'f':
+      case 'e':
+      case 'E':
+      case 'g':
+      case 'G':
+    if (!HDstrcmp (modifier, "h")) {
+        float x = (float) va_arg (ap, double);
+        n = fprintf (stream, format_templ, x);
+    } else if (!*modifier || !HDstrcmp (modifier, "l")) {
+        double x = va_arg (ap, double);
+        n = fprintf (stream, format_templ, x);
+    } else {
+        /*
+         * Some compilers complain when `long double' and
+         * `double' are the same thing.
+         */
 #if H5_SIZEOF_LONG_DOUBLE != H5_SIZEOF_DOUBLE
-		    long double x = va_arg (ap, long double);
-		    n = fprintf (stream, format_templ, x);
+        long double x = va_arg (ap, long double);
+        n = fprintf (stream, format_templ, x);
 #else
-		    double x = va_arg (ap, double);
-		    n = fprintf (stream, format_templ, x);
+        double x = va_arg (ap, double);
+        n = fprintf (stream, format_templ, x);
 #endif
-		}
-		break;
+    }
+    break;
 
-	    case 'a':
+      case 'a':
                 {
-		    haddr_t x = va_arg (ap, haddr_t); /*lint !e732 Loss of sign not really occuring */
-		    if (H5F_addr_defined(x)) {
-			sprintf(format_templ, "%%%s%s%s%s%s",
-				leftjust?"-":"", plussign?"+":"",
-				ldspace?" ":"", prefix?"#":"",
-				zerofill?"0":"");
-			if (fwidth>0)
-			    sprintf(format_templ+HDstrlen(format_templ), "%d", fwidth);
+        haddr_t x = va_arg (ap, haddr_t); /*lint !e732 Loss of sign not really occuring */
+        if (H5F_addr_defined(x)) {
+      sprintf(format_templ, "%%%s%s%s%s%s",
+        leftjust?"-":"", plussign?"+":"",
+        ldspace?" ":"", prefix?"#":"",
+        zerofill?"0":"");
+      if (fwidth>0)
+          sprintf(format_templ+HDstrlen(format_templ), "%d", fwidth);
 
                         /*lint --e{506} Don't issue warnings about constant value booleans */
                         /*lint --e{774} Don't issue warnings boolean within 'if' always evaluates false/true */
-			if (sizeof(x)==H5_SIZEOF_INT) {
-			    HDstrcat(format_templ, "u");
-			} else if (sizeof(x)==H5_SIZEOF_LONG) {
-			    HDstrcat(format_templ, "lu");
-			} else if (sizeof(x)==H5_SIZEOF_LONG_LONG) {
-			    HDstrcat(format_templ, H5_PRINTF_LL_WIDTH);
-			    HDstrcat(format_templ, "u");
-			}
-			n = fprintf(stream, format_templ, x);
-		    } else {
-			HDstrcpy(format_templ, "%");
-			if (leftjust)
+      if (sizeof(x)==H5_SIZEOF_INT) {
+          HDstrcat(format_templ, "u");
+      } else if (sizeof(x)==H5_SIZEOF_LONG) {
+          HDstrcat(format_templ, "lu");
+      } else if (sizeof(x)==H5_SIZEOF_LONG_LONG) {
+          HDstrcat(format_templ, H5_PRINTF_LL_WIDTH);
+          HDstrcat(format_templ, "u");
+      }
+      n = fprintf(stream, format_templ, x);
+        } else {
+      HDstrcpy(format_templ, "%");
+      if (leftjust)
                             HDstrcat(format_templ, "-");
-			if (fwidth)
-			    sprintf(format_templ+HDstrlen(format_templ), "%d", fwidth);
-			HDstrcat(format_templ, "s");
-			fprintf(stream, format_templ, "UNDEF");
-		    }
-		}
-		break;
-
-	    case 'c':
+      if (fwidth)
+          sprintf(format_templ+HDstrlen(format_templ), "%d", fwidth);
+      HDstrcat(format_templ, "s");
+      fprintf(stream, format_templ, "UNDEF");
+        }
+    }
+    break;
+
+      case 'c':
                 {
-		    char x = (char)va_arg (ap, int);
-		    n = fprintf (stream, format_templ, x);
-		}
-		break;
+        char x = (char)va_arg (ap, int);
+        n = fprintf (stream, format_templ, x);
+    }
+    break;
 
-	    case 's':
-	    case 'p':
+      case 's':
+      case 'p':
                 {
-		    char *x = va_arg (ap, char*); /*lint !e64 Type mismatch not really occuring */
-		    n = fprintf (stream, format_templ, x);
-		}
-		break;
+        char *x = va_arg (ap, char*); /*lint !e64 Type mismatch not really occuring */
+        n = fprintf (stream, format_templ, x);
+    }
+    break;
 
-	    case 'n':
+      case 'n':
                 format_templ[HDstrlen(format_templ)-1] = 'u';
                 n = fprintf (stream, format_templ, nout);
-		break;
+    break;
 
             case 't':
                 {
@@ -379,18 +379,18 @@ HDfprintf(FILE *stream, const char *fmt, ...)
                 }
                 break;
 
-	    default:
-		HDfputs (format_templ, stream);
-		n = (int)HDstrlen (format_templ);
-		break;
-	    }
-	    nout += n;
-	    fmt = s;
-	} else {
-	    HDputc (*fmt, stream);
-	    fmt++;
-	    nout++;
-	}
+      default:
+    HDfputs (format_templ, stream);
+    n = (int)HDstrlen (format_templ);
+    break;
+      }
+      nout += n;
+      fmt = s;
+  } else {
+      HDputc (*fmt, stream);
+      fmt++;
+      nout++;
+  }
     }
     va_end (ap);
     return nout;
@@ -398,43 +398,43 @@ HDfprintf(FILE *stream, const char *fmt, ...)
 
 
 /*-------------------------------------------------------------------------
- * Function:	HDstrtoll
+ * Function:  HDstrtoll
  *
- * Purpose:	Converts the string S to an int64_t value according to the
- *		given BASE, which must be between 2 and 36 inclusive, or be
- *		the special value zero.
+ * Purpose:  Converts the string S to an int64_t value according to the
+ *    given BASE, which must be between 2 and 36 inclusive, or be
+ *    the special value zero.
  *
- *		The string must begin with an arbitrary amount of white space
- *		(as determined by isspace(3c)) followed by a single optional
+ *    The string must begin with an arbitrary amount of white space
+ *    (as determined by isspace(3c)) followed by a single optional
  *              `+' or `-' sign.  If BASE is zero or 16 the string may then
- *		include a `0x' or `0X' prefix, and the number will be read in
- *		base 16; otherwise a zero BASE is taken as 10 (decimal)
- *		unless the next character is a `0', in which case it is taken
- *		as 8 (octal).
- *
- *		The remainder of the string is converted to an int64_t in the
- *		obvious manner, stopping at the first character which is not
- *		a valid digit in the given base.  (In bases above 10, the
- *		letter `A' in either upper or lower case represetns 10, `B'
- *		represents 11, and so forth, with `Z' representing 35.)
- *
- *		If REST is not null, the address of the first invalid
- *		character in S is stored in *REST.  If there were no digits
- *		at all, the original value of S is stored in *REST.  Thus, if
- *		*S is not `\0' but **REST is `\0' on return the entire string
- *		was valid.
- *
- * Return:	Success:	The result.
- *
- *		Failure:	If the input string does not contain any
- *				digits then zero is returned and REST points
- *				to the original value of S.  If an overflow
- *				or underflow occurs then the maximum or
- *				minimum possible value is returned and the
- *				global `errno' is set to ERANGE.  If BASE is
- *				incorrect then zero is returned.
- *
- * Programmer:	Robb Matzke
+ *    include a `0x' or `0X' prefix, and the number will be read in
+ *    base 16; otherwise a zero BASE is taken as 10 (decimal)
+ *    unless the next character is a `0', in which case it is taken
+ *    as 8 (octal).
+ *
+ *    The remainder of the string is converted to an int64_t in the
+ *    obvious manner, stopping at the first character which is not
+ *    a valid digit in the given base.  (In bases above 10, the
+ *    letter `A' in either upper or lower case represetns 10, `B'
+ *    represents 11, and so forth, with `Z' representing 35.)
+ *
+ *    If REST is not null, the address of the first invalid
+ *    character in S is stored in *REST.  If there were no digits
+ *    at all, the original value of S is stored in *REST.  Thus, if
+ *    *S is not `\0' but **REST is `\0' on return the entire string
+ *    was valid.
+ *
+ * Return:  Success:  The result.
+ *
+ *    Failure:  If the input string does not contain any
+ *        digits then zero is returned and REST points
+ *        to the original value of S.  If an overflow
+ *        or underflow occurs then the maximum or
+ *        minimum possible value is returned and the
+ *        global `errno' is set to ERANGE.  If BASE is
+ *        incorrect then zero is returned.
+ *
+ * Programmer:  Robb Matzke
  *              Thursday, April  9, 1998
  *
  * Modifications:
@@ -444,13 +444,13 @@ HDfprintf(FILE *stream, const char *fmt, ...)
 int64_t
 HDstrtoll(const char *s, const char **rest, int base)
 {
-    int64_t	sign=1, acc=0;
-    hbool_t	overflow = FALSE;
+    int64_t  sign=1, acc=0;
+    hbool_t  overflow = FALSE;
 
     errno = 0;
     if (!s || (base && (base<2 || base>36))) {
-	if (rest) *rest = s;
-	return 0;
+  if (rest) *rest = s;
+  return 0;
     }
 
     /* Skip white space */
@@ -458,51 +458,51 @@ HDstrtoll(const char *s, const char **rest, int base)
 
     /* Optional minus or plus sign */
     if ('+'==*s) {
-	s++;
+  s++;
     } else if ('-'==*s) {
-	sign = -1;
-	s++;
+  sign = -1;
+  s++;
     }
 
     /* Zero base prefix */
     if (0==base && '0'==*s && ('x'==s[1] || 'X'==s[1])) {
-	base = 16;
-	s += 2;
+  base = 16;
+  s += 2;
     } else if (0==base && '0'==*s) {
-	base = 8;
-	s++;
+  base = 8;
+  s++;
     } else if (0==base) {
-	base = 10;
+  base = 10;
     }
 
     /* Digits */
     while ((base<=10 && *s>='0' && *s<'0'+base) ||
-	   (base>10 && ((*s>='0' && *s<='9') ||
-			(*s>='a' && *s<'a'+base-10) ||
-			(*s>='A' && *s<'A'+base-10)))) {
-	if (!overflow) {
-	    int64_t digit = 0;
-	    if (*s>='0' && *s<='9') digit = *s - '0';
-	    else if (*s>='a' && *s<='z') digit = (*s-'a')+10;
-	    else digit = (*s-'A')+10;
-
-	    if (acc*base+digit < acc) {
-		overflow = TRUE;
-	    } else {
-		acc = acc*base + digit;
-	    }
-	}
-	s++;
+     (base>10 && ((*s>='0' && *s<='9') ||
+      (*s>='a' && *s<'a'+base-10) ||
+      (*s>='A' && *s<'A'+base-10)))) {
+  if (!overflow) {
+      int64_t digit = 0;
+      if (*s>='0' && *s<='9') digit = *s - '0';
+      else if (*s>='a' && *s<='z') digit = (*s-'a')+10;
+      else digit = (*s-'A')+10;
+
+      if (acc*base+digit < acc) {
+    overflow = TRUE;
+      } else {
+    acc = acc*base + digit;
+      }
+  }
+  s++;
     }
 
     /* Overflow */
     if (overflow) {
-	if (sign>0) {
-	    acc = ((uint64_t)1<<(8*sizeof(int64_t)-1))-1;
-	} else {
-	    acc = (int64_t)((uint64_t)1<<(8*sizeof(int64_t)-1));
-	}
-	errno = ERANGE;
+  if (sign>0) {
+      acc = ((uint64_t)1<<(8*sizeof(int64_t)-1))-1;
+  } else {
+      acc = (int64_t)((uint64_t)1<<(8*sizeof(int64_t)-1));
+  }
+  errno = ERANGE;
     }
 
     /* Return values */
@@ -513,20 +513,20 @@ HDstrtoll(const char *s, const char **rest, int base)
 
 
 /*-------------------------------------------------------------------------
- * Function:	HDrand/HDsrand
+ * Function:  HDrand/HDsrand
  *
- * Purpose:	Wrapper function for rand.  If rand_r exists on this system,
- * 		use it.
+ * Purpose:  Wrapper function for rand.  If rand_r exists on this system,
+ *     use it.
  *
- * 		Wrapper function for srand.  If rand_r is available, it will keep
- * 		track of the seed locally instead of using srand() which modifies
- * 		global state and can break other programs.
+ *     Wrapper function for srand.  If rand_r is available, it will keep
+ *     track of the seed locally instead of using srand() which modifies
+ *     global state and can break other programs.
  *
- * Return:	Success:	Random number from 0 to RAND_MAX
+ * Return:  Success:  Random number from 0 to RAND_MAX
  *
- *		Failure:	Cannot fail.
+ *    Failure:  Cannot fail.
  *
- * Programmer:	Leon Arber
+ * Programmer:  Leon Arber
  *              March 6, 2006.
  *
  *-------------------------------------------------------------------------
@@ -548,17 +548,17 @@ void HDsrand(unsigned int seed)
 
 
 /*-------------------------------------------------------------------------
- * Function:	HDremove_all
+ * Function:  HDremove_all
  *
- * Purpose:	Wrapper function for remove on VMS systems
+ * Purpose:  Wrapper function for remove on VMS systems
  *
- * 		This function deletes all versions of a file
+ *     This function deletes all versions of a file
  *
- * Return:	Success:        0;
+ * Return:  Success:        0;
  *
- *		Failure:	-1
+ *    Failure:  -1
  *
- * Programmer:	Elena Pourmal
+ * Programmer:  Elena Pourmal
  *              March 22, 2006
  *
  *-------------------------------------------------------------------------
@@ -584,13 +584,13 @@ HDremove_all(const char *fname)
 #endif
 
 /*-------------------------------------------------------------------------
- * Function:	Wgettimeofday
+ * Function:  Wgettimeofday
  *
- * Purpose:	Wrapper function for gettimeofday on Windows systems
+ * Purpose:  Wrapper function for gettimeofday on Windows systems
  *
- * 		This function can get the time as well as a timezone
+ *     This function can get the time as well as a timezone
  *
- * Return:	0
+ * Return:  0
  *
  *      This implementation is taken from the Cygwin source distribution at
  *          src/winsup/mingw/mingwex/gettimeofday.c
@@ -599,12 +599,12 @@ HDremove_all(const char *fname)
  *          Danny Smith <dannysmith at users.sourceforge.net>
  *      and released in the public domain.
  *
- * Programmer:	Scott Wegner
+ * Programmer:  Scott Wegner
  *              May 19, 2009
  *
  *-------------------------------------------------------------------------
  */
-#ifdef _WIN32
+#ifdef H5_HAVE_VISUAL_STUDIO
 
 /* Offset between 1/1/1601 and 1/1/1970 in 100 nanosecond units */
 #define _W32_FT_OFFSET (116444736000000000ULL)
@@ -638,6 +638,27 @@ Wgettimeofday(struct timeval *tv, struct timezone *tz)
      Do not set errno on error.  */
   return 0;
 }
+
+#ifdef H5_HAVE_WINSOCK_H
+#pragma comment(lib, "advapi32.lib")
+#endif
+
+#define WloginBuffer_count 256
+static char Wlogin_buffer[WloginBuffer_count];
+
+char*
+Wgetlogin()
+{
+
+#ifdef H5_HAVE_WINSOCK_H
+    long bufferCount = WloginBuffer_count;
+    if (GetUserName(Wlogin_buffer, &bufferCount) == 0)
+        return (Wlogin_buffer);
+    else
+#endif /* H5_HAVE_WINSOCK_H */
+        return NULL;
+}
+
 #endif
 
 
@@ -645,16 +666,16 @@ Wgettimeofday(struct timeval *tv, struct timezone *tz)
  * Function: H5_build_extpath
  *
  * Purpose:  To build the path for later searching of target file for external
- *		link.  This path can be either:
+ *    link.  This path can be either:
  *                  1. The absolute path of NAME
  *                      or
  *                  2. The current working directory + relative path of NAME
  *
- * Return:	Success:        0
- *		Failure:	-1
+ * Return:  Success:        0
+ *    Failure:  -1
  *
- * Programmer:	Vailin Choi
- *		April 2, 2008
+ * Programmer:  Vailin Choi
+ *    April 2, 2008
  *
  *-------------------------------------------------------------------------
  */
@@ -692,23 +713,23 @@ H5_build_extpath(const char *name, char **extpath/*out*/)
         if(NULL == (new_name = (char *)H5MM_strdup(name)))
             HGOTO_ERROR(H5E_INTERNAL, H5E_NOSPACE, FAIL, "memory allocation failed")
 
-	/*
-	 * Windows: name[0-1] is "<drive-letter>:"
-	 * 	Get current working directory on the drive specified in NAME
-	 * Unix: does not apply
+  /*
+   * Windows: name[0-1] is "<drive-letter>:"
+   *   Get current working directory on the drive specified in NAME
+   * Unix: does not apply
          * OpenVMS: does not apply
-	 */
+   */
         if(CHECK_ABS_DRIVE(name)) {
             drive = name[0] - 'A' + 1;
             retcwd = HDgetdcwd(drive, cwdpath, MAX_PATH_LEN);
             HDstrcpy(new_name, &name[2]);
         } /* end if */
-	/*
-	 * Windows: name[0] is a '/' or '\'
-	 *	Get current drive
-	 * Unix: does not apply
+  /*
+   * Windows: name[0] is a '/' or '\'
+   *  Get current drive
+   * Unix: does not apply
          * OpenVMS: does not apply
-	 */
+   */
         else if(CHECK_ABS_PATH(name) && (0 != (drive = HDgetdrive()))) {
             sprintf(cwdpath, "%c:%c", (drive+'A'-1), name[0]);
             retcwd = cwdpath;
@@ -764,9 +785,9 @@ H5_build_extpath(const char *name, char **extpath/*out*/)
 done:
     /* Release resources */
     if(cwdpath)
-	H5MM_xfree(cwdpath);
+  H5MM_xfree(cwdpath);
     if(new_name)
-	H5MM_xfree(new_name);
+  H5MM_xfree(new_name);
 
     FUNC_LEAVE_NOAPI(ret_value)
 } /* H5_build_extpath() */
diff --git a/src/H5trace.c b/src/H5trace.c
index 870e881..ec2ac33 100644
--- a/src/H5trace.c
+++ b/src/H5trace.c
@@ -458,6 +458,44 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
                         } /* end else */
                         break;
 
+                    case 'i':
+                        if(ptr) {
+                            if(vp)
+                                fprintf(out, "0x%lx", (unsigned long)vp);
+                            else
+                                fprintf(out, "NULL");
+                        } /* end if */
+                        else {
+                            H5D_mpio_actual_io_mode_t actual_io_mode = (H5D_mpio_actual_io_mode_t)va_arg(ap, int);
+
+                            switch(actual_io_mode) {
+                                case H5D_MPIO_NO_COLLECTIVE:
+                                    fprintf(out, "H5D_MPIO_NO_COLLECTIVE");
+                                    break;
+
+                                case H5D_MPIO_CHUNK_INDEPENDENT:
+                                    fprintf(out, "H5D_MPIO_CHUNK_INDEPENDENT");
+                                    break;
+
+                                case H5D_MPIO_CHUNK_COLLECTIVE:
+                                    fprintf(out, "H5D_MPIO_CHUNK_COLLECTIVE");
+                                    break;
+
+                                case H5D_MPIO_CHUNK_MIXED:
+                                    fprintf(out, "H5D_MPIO_CHUNK_MIXED");
+                                    break;
+
+                                case H5D_MPIO_CONTIGUOUS_COLLECTIVE:
+                                    fprintf(out, "H5D_MPIO_CONTIGUOUS_COLLECTIVE");
+                                    break;
+
+                                default:
+                                    fprintf(out, "%ld", (long)actual_io_mode);
+                                    break;
+                            } /* end switch */
+                        } /* end else */
+                        break;
+
                     case 'l':
                         if(ptr) {
                             if(vp)
@@ -496,6 +534,40 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
                         } /* end else */
                         break;
 
+                    case 'o':
+                        if(ptr) {
+                            if(vp)
+                                fprintf(out, "0x%lx", (unsigned long)vp);
+                            else
+                                fprintf(out, "NULL");
+                        } /* end if */
+                        else {
+                            H5D_mpio_actual_chunk_opt_mode_t chunk_opt_mode = (H5D_mpio_actual_chunk_opt_mode_t)va_arg(ap, int);
+
+                            switch(chunk_opt_mode) {
+                                case H5D_MPIO_NO_CHUNK_OPTIMIZATION:
+                                    fprintf(out, "H5D_MPIO_NO_CHUNK_OPTIMIZATION");
+                                    break;
+
+                                case H5D_MPIO_LINK_CHUNK:
+                                    fprintf(out, "H5D_MPIO_LINK_CHUNK");
+                                    break;
+
+                                case H5D_MPIO_MULTI_CHUNK:
+                                    fprintf(out, "H5D_MPIO_MULTI_CHUNK");
+                                    break;
+
+                                case H5D_MPIO_MULTI_CHUNK_NO_OPT:
+                                    fprintf(out, "H5D_MPIO_MULTI_CHUNK_NO_OPT");
+                                    break;
+
+                                default:
+                                    fprintf(out, "%ld", (long)chunk_opt_mode);
+                                    break;
+                            } /* end switch */
+                        } /* end else */
+                        break;
+
                     case 's':
                         if(ptr) {
                             if(vp)
@@ -2167,6 +2239,62 @@ H5_trace(const double *returning, const char *func, const char *type, ...)
                 } /* end else */
                 break;
 
+            case 'U':
+                switch(type[1]) {
+                    case 'l':
+                        if(ptr) {
+                            if(vp) {
+                                fprintf(out, "0x%lx", (unsigned long)vp);
+                                if(asize_idx >= 0 && asize[asize_idx] >= 0) {
+                                    unsigned long *p = (unsigned long *)vp;
+
+                                    fprintf(out, " {");
+                                    for(i = 0; i < asize[asize_idx]; i++)
+                                        HDfprintf(out, "%s%lu", i?", ":"", p[i]);
+                                    fprintf(out, "}");
+                                } /* end if */
+                            } /* end if */
+                            else
+                                fprintf(out, "NULL");
+                        } /* end if */
+                        else {
+                            unsigned long iul = va_arg(ap, unsigned long); /*lint !e732 Loss of sign not really occuring */
+
+                            fprintf(out, "%lu", iul);
+                            asize[argno] = iul;
+                        } /* end else */
+                        break;
+
+                    case 'L':
+                        if(ptr) {
+                            if(vp) {
+                                fprintf(out, "0x%lx", (unsigned long)vp);
+                                if(asize_idx >= 0 && asize[asize_idx] >= 0) {
+                                    unsigned long long *p = (unsigned long long *)vp;
+
+                                    fprintf(out, " {");
+                                    for(i = 0; i < asize[asize_idx]; i++)
+                                        HDfprintf(out, "%s%llu", i?", ":"", p[i]);
+                                    fprintf(out, "}");
+                                } /* end if */
+                            } /* end if */
+                            else
+                                fprintf(out, "NULL");
+                        } /* end if */
+                        else {
+                            unsigned long long iull = va_arg(ap, unsigned long long); /*lint !e732 Loss of sign not really occuring */
+
+                            fprintf(out, "%llu", iull);
+                            asize[argno] = iull;
+                        } /* end else */
+                        break;
+
+                    default:
+                        fprintf (out, "BADTYPE(U%c)", type[1]);
+                        goto error;
+                } /* end switch */
+                break;
+
             case 'x':
                 if(ptr) {
                     if(vp) {
diff --git a/src/H5win32defs.h b/src/H5win32defs.h
index a428899..5f886d1 100644
--- a/src/H5win32defs.h
+++ b/src/H5win32defs.h
@@ -23,7 +23,7 @@
  *
  */
 
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
 
 typedef struct _stati64     h5_stat_t;
 typedef __int64             h5_stat_size_t;
@@ -33,41 +33,25 @@ typedef __int64             h5_stat_size_t;
 #define HDdup(F)            _dup(F)
 #define HDfdopen(N,S)       _fdopen(N,S)
 #define HDfileno(F)         _fileno(F)
-#if _MSC_VER > 1310 /* Newer than VS.NET 2003 */
-#define HDftruncate(F,L)    _chsize_s(F,L)
-#else
-#define HDftruncate(F,L)    chsize(F,L)
-#endif
+#define HDfseek(F,O,W)      _fseeki64(F,O,W)
 #define HDfstat(F,B)        _fstati64(F,B)
+#define HDftruncate(F,L)    _chsize_s(F,L)
 #define HDisatty(F)         _isatty(F)
-#define HDlstat(S,B)        _lstati64(S,B)
-#define HDstat(S,B)         _stati64(S,B)
 #define HDgetcwd(S,Z)       _getcwd(S,Z)
 #define HDgetdcwd(D,S,Z)    _getdcwd(D,S,Z)
-
-struct timezone {
-    int tz_minuteswest;
-    int tz_dsttime;
-};
-
-#ifdef __cplusplus
-        extern "C" {
-#endif /* __cplusplus */
-H5_DLL int Wgettimeofday(struct timeval *tv, struct timezone *tz);
-#ifdef __cplusplus
-        }
-#endif /* __cplusplus */
-#define HDgettimeofday(V,Z) Wgettimeofday(V,Z)
-
 #define HDgetdrive()        _getdrive()
 #define HDlseek(F,O,W)      _lseeki64(F,O,W)
-#define HDoff_t             __int64
-#define HDmemset(X,C,Z)     memset((void*)(X),C,Z)
+#define HDlstat(S,B)        _lstati64(S,B)
 #define HDmkdir(S,M)        _mkdir(S)
+#define HDoff_t             __int64
+/* _O_BINARY must be set in Windows to avoid CR-LF <-> LF EOL
+ * transformations when performing I/O.
+ */
 #define HDopen(S,F,M)       _open(S,F|_O_BINARY,M)
 #define HDread(F,M,Z)       _read(F,M,Z)
 #define HDsetvbuf(F,S,M,Z)  setvbuf(F,S,M,(Z>1?Z:2))
 #define HDsleep(S)          Sleep(S*1000)
+#define HDstat(S,B)         _stati64(S,B)
 #define HDstrcasecmp(A,B)   _stricmp(A,B)
 #define HDstrtoull(S,R,N)   _strtoui64(S,R,N)
 #define HDstrdup(S)         _strdup(S)
@@ -77,11 +61,34 @@ H5_DLL int Wgettimeofday(struct timeval *tv, struct timezone *tz);
 #define HDvsnprintf(S,N,FMT,A) _vsnprintf(S,N,FMT,A)
 #define HDwrite(F,M,Z)      _write(F,M,Z)
 
+#ifdef H5_HAVE_VISUAL_STUDIO
+/*
+ * The (void*) cast just avoids a compiler warning in H5_HAVE_VISUAL_STUDIO
+ */
+#define HDmemset(X,C,Z)     memset((void*)(X),C,Z)
+
+struct timezone {
+    int tz_minuteswest;
+    int tz_dsttime;
+};
+
+#ifdef __cplusplus
+        extern "C" {
+#endif /* __cplusplus */
+        H5_DLL int Wgettimeofday(struct timeval *tv, struct timezone *tz);
+        H5_DLL char* Wgetlogin();
+#ifdef __cplusplus
+        }
+#endif /* __cplusplus */
+#define HDgettimeofday(V,Z) Wgettimeofday(V,Z)
+#define HDgetlogin() Wgetlogin()
+        
+#endif /* H5_HAVE_VISUAL_STUDIO */
+
 /* Non-POSIX functions */
 
 /* Don't use actual pthread_self on Windows because the return
  * type cannot be cast as a ulong like other systems. */
 #define HDpthread_self_ulong() ((unsigned long)GetCurrentThreadId())
 
-
-#endif /* _WIN32 */
+#endif /* H5_HAVE_WIN32_API */
diff --git a/src/Makefile.am b/src/Makefile.am
index ebb376d..2dca6b0 100755
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -51,7 +51,8 @@ libhdf5_la_SOURCES= H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
         H5Dio.c H5Dlayout.c \
         H5Dmpio.c H5Doh.c H5Dscatgath.c H5Dselect.c H5Dtest.c \
         H5E.c H5Edeprec.c H5Eint.c \
-        H5F.c H5Faccum.c H5Fdbg.c H5Fefc.c H5Ffake.c H5Fio.c \
+        H5F.c H5Faccum.c H5Fcwfs.c \
+        H5Fdbg.c H5Fefc.c H5Ffake.c H5Fio.c \
         H5Fmount.c H5Fmpi.c H5Fquery.c \
         H5Fsfile.c H5Fsuper.c H5Fsuper_cache.c H5Ftest.c \
         H5FD.c H5FDcore.c  \
@@ -66,7 +67,7 @@ libhdf5_la_SOURCES= H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
         H5HF.c H5HFbtree2.c H5HFcache.c H5HFdbg.c H5HFdblock.c H5HFdtable.c \
         H5HFhdr.c H5HFhuge.c H5HFiblock.c H5HFiter.c H5HFman.c H5HFsection.c \
         H5HFspace.c H5HFstat.c H5HFtest.c H5HFtiny.c \
-        H5HG.c H5HGcache.c H5HGdbg.c \
+        H5HG.c H5HGcache.c H5HGdbg.c H5HGquery.c \
         H5HL.c H5HLcache.c H5HLdbg.c H5HLint.c \
         H5HP.c H5I.c H5Itest.c H5L.c H5Lexternal.c H5lib_settings.c \
         H5MF.c H5MFaggr.c H5MFdbg.c H5MFsection.c \
diff --git a/src/Makefile.in b/src/Makefile.in
index 9eb8c73..4f1b915 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -104,42 +104,43 @@ am_libhdf5_la_OBJECTS = H5.lo H5checksum.lo H5dbg.lo H5system.lo \
 	H5Ddeprec.lo H5Defl.lo H5Dfill.lo H5Dint.lo H5Dio.lo \
 	H5Dlayout.lo H5Dmpio.lo H5Doh.lo H5Dscatgath.lo H5Dselect.lo \
 	H5Dtest.lo H5E.lo H5Edeprec.lo H5Eint.lo H5F.lo H5Faccum.lo \
-	H5Fdbg.lo H5Fefc.lo H5Ffake.lo H5Fio.lo H5Fmount.lo H5Fmpi.lo \
-	H5Fquery.lo H5Fsfile.lo H5Fsuper.lo H5Fsuper_cache.lo \
-	H5Ftest.lo H5FD.lo H5FDcore.lo H5FDdirect.lo H5FDfamily.lo \
-	H5FDint.lo H5FDlog.lo H5FDmpi.lo H5FDmpio.lo H5FDmpiposix.lo \
-	H5FDmulti.lo H5FDsec2.lo H5FDspace.lo H5FDstdio.lo H5FL.lo \
-	H5FO.lo H5FS.lo H5FScache.lo H5FSdbg.lo H5FSsection.lo \
-	H5FSstat.lo H5FStest.lo H5G.lo H5Gbtree2.lo H5Gcache.lo \
-	H5Gcompact.lo H5Gdense.lo H5Gdeprec.lo H5Gent.lo H5Gint.lo \
-	H5Glink.lo H5Gloc.lo H5Gname.lo H5Gnode.lo H5Gobj.lo H5Goh.lo \
-	H5Groot.lo H5Gstab.lo H5Gtest.lo H5Gtraverse.lo H5HF.lo \
-	H5HFbtree2.lo H5HFcache.lo H5HFdbg.lo H5HFdblock.lo \
+	H5Fcwfs.lo H5Fdbg.lo H5Fefc.lo H5Ffake.lo H5Fio.lo H5Fmount.lo \
+	H5Fmpi.lo H5Fquery.lo H5Fsfile.lo H5Fsuper.lo \
+	H5Fsuper_cache.lo H5Ftest.lo H5FD.lo H5FDcore.lo H5FDdirect.lo \
+	H5FDfamily.lo H5FDint.lo H5FDlog.lo H5FDmpi.lo H5FDmpio.lo \
+	H5FDmpiposix.lo H5FDmulti.lo H5FDsec2.lo H5FDspace.lo \
+	H5FDstdio.lo H5FL.lo H5FO.lo H5FS.lo H5FScache.lo H5FSdbg.lo \
+	H5FSsection.lo H5FSstat.lo H5FStest.lo H5G.lo H5Gbtree2.lo \
+	H5Gcache.lo H5Gcompact.lo H5Gdense.lo H5Gdeprec.lo H5Gent.lo \
+	H5Gint.lo H5Glink.lo H5Gloc.lo H5Gname.lo H5Gnode.lo H5Gobj.lo \
+	H5Goh.lo H5Groot.lo H5Gstab.lo H5Gtest.lo H5Gtraverse.lo \
+	H5HF.lo H5HFbtree2.lo H5HFcache.lo H5HFdbg.lo H5HFdblock.lo \
 	H5HFdtable.lo H5HFhdr.lo H5HFhuge.lo H5HFiblock.lo H5HFiter.lo \
 	H5HFman.lo H5HFsection.lo H5HFspace.lo H5HFstat.lo H5HFtest.lo \
-	H5HFtiny.lo H5HG.lo H5HGcache.lo H5HGdbg.lo H5HL.lo \
-	H5HLcache.lo H5HLdbg.lo H5HLint.lo H5HP.lo H5I.lo H5Itest.lo \
-	H5L.lo H5Lexternal.lo H5lib_settings.lo H5MF.lo H5MFaggr.lo \
-	H5MFdbg.lo H5MFsection.lo H5MM.lo H5MP.lo H5MPtest.lo H5O.lo \
-	H5Oainfo.lo H5Oalloc.lo H5Oattr.lo H5Oattribute.lo H5Obogus.lo \
-	H5Obtreek.lo H5Ocache.lo H5Ochunk.lo H5Ocont.lo H5Ocopy.lo \
-	H5Odbg.lo H5Odrvinfo.lo H5Odtype.lo H5Oefl.lo H5Ofill.lo \
-	H5Oginfo.lo H5Olayout.lo H5Olinfo.lo H5Olink.lo H5Omessage.lo \
-	H5Omtime.lo H5Oname.lo H5Onull.lo H5Opline.lo H5Orefcount.lo \
-	H5Osdspace.lo H5Oshared.lo H5Ostab.lo H5Oshmesg.lo H5Otest.lo \
-	H5Ounknown.lo H5P.lo H5Pacpl.lo H5Pdapl.lo H5Pdcpl.lo \
-	H5Pdeprec.lo H5Pdxpl.lo H5Pfapl.lo H5Pfcpl.lo H5Pfmpl.lo \
-	H5Pgcpl.lo H5Pint.lo H5Plapl.lo H5Plcpl.lo H5Pocpl.lo \
-	H5Pocpypl.lo H5Pstrcpl.lo H5Ptest.lo H5R.lo H5Rdeprec.lo \
-	H5RC.lo H5RS.lo H5S.lo H5Sall.lo H5Sdbg.lo H5Shyper.lo \
-	H5Smpio.lo H5Snone.lo H5Spoint.lo H5Sselect.lo H5Stest.lo \
-	H5SL.lo H5SM.lo H5SMbtree2.lo H5SMcache.lo H5SMmessage.lo \
-	H5SMtest.lo H5ST.lo H5T.lo H5Tarray.lo H5Tbit.lo H5Tcommit.lo \
-	H5Tcompound.lo H5Tconv.lo H5Tcset.lo H5Tdbg.lo H5Tdeprec.lo \
-	H5Tenum.lo H5Tfields.lo H5Tfixed.lo H5Tfloat.lo H5Tinit.lo \
-	H5Tnative.lo H5Toffset.lo H5Toh.lo H5Topaque.lo H5Torder.lo \
-	H5Tpad.lo H5Tprecis.lo H5Tstrpad.lo H5Tvisit.lo H5Tvlen.lo \
-	H5TS.lo H5V.lo H5WB.lo H5Z.lo H5Zdeflate.lo H5Zfletcher32.lo \
+	H5HFtiny.lo H5HG.lo H5HGcache.lo H5HGdbg.lo H5HGquery.lo \
+	H5HL.lo H5HLcache.lo H5HLdbg.lo H5HLint.lo H5HP.lo H5I.lo \
+	H5Itest.lo H5L.lo H5Lexternal.lo H5lib_settings.lo H5MF.lo \
+	H5MFaggr.lo H5MFdbg.lo H5MFsection.lo H5MM.lo H5MP.lo \
+	H5MPtest.lo H5O.lo H5Oainfo.lo H5Oalloc.lo H5Oattr.lo \
+	H5Oattribute.lo H5Obogus.lo H5Obtreek.lo H5Ocache.lo \
+	H5Ochunk.lo H5Ocont.lo H5Ocopy.lo H5Odbg.lo H5Odrvinfo.lo \
+	H5Odtype.lo H5Oefl.lo H5Ofill.lo H5Oginfo.lo H5Olayout.lo \
+	H5Olinfo.lo H5Olink.lo H5Omessage.lo H5Omtime.lo H5Oname.lo \
+	H5Onull.lo H5Opline.lo H5Orefcount.lo H5Osdspace.lo \
+	H5Oshared.lo H5Ostab.lo H5Oshmesg.lo H5Otest.lo H5Ounknown.lo \
+	H5P.lo H5Pacpl.lo H5Pdapl.lo H5Pdcpl.lo H5Pdeprec.lo \
+	H5Pdxpl.lo H5Pfapl.lo H5Pfcpl.lo H5Pfmpl.lo H5Pgcpl.lo \
+	H5Pint.lo H5Plapl.lo H5Plcpl.lo H5Pocpl.lo H5Pocpypl.lo \
+	H5Pstrcpl.lo H5Ptest.lo H5R.lo H5Rdeprec.lo H5RC.lo H5RS.lo \
+	H5S.lo H5Sall.lo H5Sdbg.lo H5Shyper.lo H5Smpio.lo H5Snone.lo \
+	H5Spoint.lo H5Sselect.lo H5Stest.lo H5SL.lo H5SM.lo \
+	H5SMbtree2.lo H5SMcache.lo H5SMmessage.lo H5SMtest.lo H5ST.lo \
+	H5T.lo H5Tarray.lo H5Tbit.lo H5Tcommit.lo H5Tcompound.lo \
+	H5Tconv.lo H5Tcset.lo H5Tdbg.lo H5Tdeprec.lo H5Tenum.lo \
+	H5Tfields.lo H5Tfixed.lo H5Tfloat.lo H5Tinit.lo H5Tnative.lo \
+	H5Toffset.lo H5Toh.lo H5Topaque.lo H5Torder.lo H5Tpad.lo \
+	H5Tprecis.lo H5Tstrpad.lo H5Tvisit.lo H5Tvlen.lo H5TS.lo \
+	H5V.lo H5WB.lo H5Z.lo H5Zdeflate.lo H5Zfletcher32.lo \
 	H5Znbit.lo H5Zshuffle.lo H5Zszip.lo H5Zscaleoffset.lo \
 	H5Ztrans.lo
 libhdf5_la_OBJECTS = $(am_libhdf5_la_OBJECTS)
@@ -259,6 +260,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -279,10 +281,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -326,7 +330,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
@@ -477,7 +480,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
 # Add libtool shared library version numbers to the HDF5 library
 # See libtool versioning documentation online.
 LT_VERS_INTERFACE = 7
-LT_VERS_REVISION = 1
+LT_VERS_REVISION = 2
 LT_VERS_AGE = 0
 H5detect_CFLAGS = -g $(AM_CFLAGS)
 
@@ -503,7 +506,8 @@ libhdf5_la_SOURCES = H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
         H5Dio.c H5Dlayout.c \
         H5Dmpio.c H5Doh.c H5Dscatgath.c H5Dselect.c H5Dtest.c \
         H5E.c H5Edeprec.c H5Eint.c \
-        H5F.c H5Faccum.c H5Fdbg.c H5Fefc.c H5Ffake.c H5Fio.c \
+        H5F.c H5Faccum.c H5Fcwfs.c \
+        H5Fdbg.c H5Fefc.c H5Ffake.c H5Fio.c \
         H5Fmount.c H5Fmpi.c H5Fquery.c \
         H5Fsfile.c H5Fsuper.c H5Fsuper_cache.c H5Ftest.c \
         H5FD.c H5FDcore.c  \
@@ -518,7 +522,7 @@ libhdf5_la_SOURCES = H5.c H5checksum.c H5dbg.c H5system.c H5timer.c H5trace.c \
         H5HF.c H5HFbtree2.c H5HFcache.c H5HFdbg.c H5HFdblock.c H5HFdtable.c \
         H5HFhdr.c H5HFhuge.c H5HFiblock.c H5HFiter.c H5HFman.c H5HFsection.c \
         H5HFspace.c H5HFstat.c H5HFtest.c H5HFtiny.c \
-        H5HG.c H5HGcache.c H5HGdbg.c \
+        H5HG.c H5HGcache.c H5HGdbg.c H5HGquery.c \
         H5HL.c H5HLcache.c H5HLdbg.c H5HLint.c \
         H5HP.c H5I.c H5Itest.c H5L.c H5Lexternal.c H5lib_settings.c \
         H5MF.c H5MFaggr.c H5MFdbg.c H5MFsection.c \
@@ -758,6 +762,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5FSstat.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5FStest.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5Faccum.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5Fcwfs.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5Fdbg.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5Fefc.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5Ffake.Plo at am__quote@
@@ -806,6 +811,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5HG.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5HGcache.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5HGdbg.Plo at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5HGquery.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5HL.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5HLcache.Plo at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/H5HLdbg.Plo at am__quote@
diff --git a/src/libhdf5.settings.in b/src/libhdf5.settings.in
index 46d19a7..343fa34 100644
--- a/src/libhdf5.settings.in
+++ b/src/libhdf5.settings.in
@@ -39,6 +39,7 @@ Languages:
 ----------
                         Fortran: @HDF_FORTRAN@
 @BUILD_FORTRAN_CONDITIONAL_TRUE@               Fortran Compiler: @FC_VERSION@
+ at BUILD_FORTRAN_CONDITIONAL_TRUE@          Fortran 2003 Compiler: @HAVE_FORTRAN_2003@
 @BUILD_FORTRAN_CONDITIONAL_TRUE@                  Fortran Flags: @FCFLAGS@
 @BUILD_FORTRAN_CONDITIONAL_TRUE@               H5 Fortran Flags: @H5_FCFLAGS@
 @BUILD_FORTRAN_CONDITIONAL_TRUE@               AM Fortran Flags: @AM_FCFLAGS@
@@ -72,4 +73,3 @@ Clear file buffers before write: @CLEARFILEBUF@
       Strict File Format Checks: @STRICT_FORMAT_CHECKS@
    Optimization Instrumentation: @INSTRUMENT@
        Large File Support (LFS): @LARGEFILE@
-             H5dump Packed Bits: @PACKED_BITS@
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 8cb55a6..54e699c 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -29,7 +29,6 @@ IF (MINGW)
   TARGET_LINK_LIBRARIES (${HDF5_TEST_LIB_TARGET} "wsock32.lib")
 ENDIF (MINGW)
 TARGET_LINK_LIBRARIES (${HDF5_TEST_LIB_TARGET} ${HDF5_LIB_TARGET})
-SET_GLOBAL_VARIABLE (HDF5_LIBRARIES_TO_EXPORT "${HDF5_LIBRARIES_TO_EXPORT};${HDF5_TEST_LIB_TARGET}")
 H5_SET_LIB_OPTIONS (${HDF5_TEST_LIB_TARGET} ${HDF5_TEST_LIB_NAME} ${LIB_TYPE})
 
 # --------------------------------------------------------------------
@@ -87,11 +86,14 @@ SET (HDF5_REFERENCE_TEST_FILES
     family_v16_00003.h5
     fill_old.h5
     fixed_idx.h5
+    filter_error.h5
     group_old.h5
     le_data.h5
     le_extlink1.h5
     le_extlink2.h5
     mergemsg.h5
+    multi_file_v16-r.h5
+    multi_file_v16-s.h5
     noencoder.h5
     specmetaread.h5
     tarrold.h5
@@ -103,7 +105,6 @@ SET (HDF5_REFERENCE_TEST_FILES
     tlayouto.h5
     tmtimen.h5
     tmtimeo.h5
-    vms_data.h5
 )
 
 FOREACH (h5_file ${HDF5_REFERENCE_TEST_FILES})
@@ -150,7 +151,28 @@ ADD_EXECUTABLE (testhdf5 ${testhdf5_SRCS})
 TARGET_NAMING (testhdf5 ${LIB_TYPE})
 TARGET_LINK_LIBRARIES (testhdf5 ${HDF5_TEST_LIB_TARGET} ${HDF5_LIB_TARGET})
 
+# Remove any output file left over from previous test run
+ADD_TEST (
+    NAME h5test-clear-testhdf5-objects
+    COMMAND    ${CMAKE_COMMAND}
+        -E remove 
+        coord.h5
+        sys_file1
+        tattr.h5
+        tfile1.h5
+        tfile2.h5
+        tfile3.h5
+        tfile4.h5
+        tfile5.h5
+        th5o_file
+        th5s1.h5
+        tselect.h5
+        tsohm.h5
+        tsohm_dst.h5
+        tsohm_src.h5
+)
 ADD_TEST (NAME testhdf5 COMMAND $<TARGET_FILE:testhdf5>)
+SET_TESTS_PROPERTIES(testhdf5 PROPERTIES DEPENDS h5test-clear-testhdf5-objects)
   
 ##############################################################################
 ##############################################################################
@@ -171,8 +193,6 @@ ADD_TEST (
     NAME h5test-clear-objects
     COMMAND    ${CMAKE_COMMAND}
         -E remove 
-        cache_test.h5
-        coord.h5
         dt_arith1.h5
         dt_arith2.h5
         dtransform.h5
@@ -222,24 +242,10 @@ ADD_TEST (
         extlinks19B00027.h5
         extlinks19B00028.h5
         fheap.h5
-        objcopy_ext.h5
-        sys_file1
-        tattr.h5
+        new_multi_file_v16-r.h5
+        new_multi_file_v16-s.h5
+        objcopy_ext.dat
         testmeta.h5
-        tfile1.h5
-        tfile2.h5
-        tfile3.h5
-        tfile4.h5
-        tfile5.h5
-        th5o_file
-        th5s1.h5
-        th5s2.h5
-        th5s3.h5
-        tnullspace.h5
-        tselect.h5
-        tsohm.h5
-        tsohm_dst.h5
-        tsohm_src.h5
         tstint1.h5
         tstint2.h5
 )
@@ -312,16 +318,28 @@ SET_TESTS_PROPERTIES(flush2 PROPERTIES DEPENDS flush1)
 ADD_EXECUTABLE (cache ${HDF5_TEST_SOURCE_DIR}/cache.c ${HDF5_TEST_SOURCE_DIR}/cache_common.c)
 TARGET_NAMING (cache ${LIB_TYPE})
 TARGET_LINK_LIBRARIES (cache ${HDF5_LIB_TARGET} ${HDF5_TEST_LIB_TARGET})
-
+ADD_TEST (
+    NAME h5test-clear-cache-objects
+    COMMAND    ${CMAKE_COMMAND}
+        -E remove 
+        cache_test.h5
+)
 ADD_TEST (NAME cache COMMAND $<TARGET_FILE:cache>)
-SET_TESTS_PROPERTIES(cache PROPERTIES DEPENDS h5test-clear-objects)
+SET_TESTS_PROPERTIES(cache PROPERTIES DEPENDS h5test-clear-cache-objects)
 
 #-- Adding test for cache_api
 ADD_EXECUTABLE (cache_api ${HDF5_TEST_SOURCE_DIR}/cache_api.c ${HDF5_TEST_SOURCE_DIR}/cache_common.c)
 TARGET_NAMING (cache_api ${LIB_TYPE})
 TARGET_LINK_LIBRARIES (cache_api ${HDF5_LIB_TARGET} ${HDF5_TEST_LIB_TARGET})
 
+ADD_TEST (
+    NAME h5test-clear-cache_api-objects
+    COMMAND    ${CMAKE_COMMAND}
+        -E remove 
+        cache_api_test.h5
+)
 ADD_TEST (NAME cache_api COMMAND $<TARGET_FILE:cache_api>)
+SET_TESTS_PROPERTIES(cache_api PROPERTIES DEPENDS h5test-clear-cache_api-objects)
 
 #-- Adding test for ttsafe
 ADD_EXECUTABLE (ttsafe
@@ -334,7 +352,17 @@ ADD_EXECUTABLE (ttsafe
 TARGET_NAMING (ttsafe ${LIB_TYPE})
 TARGET_LINK_LIBRARIES (ttsafe ${HDF5_LIB_TARGET} ${HDF5_TEST_LIB_TARGET})
 
+ADD_TEST (
+    NAME h5test-clear-ttsafe-objects
+    COMMAND    ${CMAKE_COMMAND}
+        -E remove 
+        ttsafe_error.h5
+        ttsafe_dcreate.h5
+        ttsafe_cancel.h5
+        ttsafe_acreate.h5
+)
 ADD_TEST (NAME ttsafe COMMAND $<TARGET_FILE:ttsafe>)
+SET_TESTS_PROPERTIES(ttsafe PROPERTIES DEPENDS h5test-clear-ttsafe-objects)
 
 #-- Adding test for err_compat
 IF (HDF5_ENABLE_DEPRECATED_SYMBOLS)
@@ -342,6 +370,13 @@ IF (HDF5_ENABLE_DEPRECATED_SYMBOLS)
   TARGET_NAMING (err_compat ${LIB_TYPE})
   TARGET_LINK_LIBRARIES (err_compat ${HDF5_LIB_TARGET} ${HDF5_TEST_LIB_TARGET})
 
+  ADD_TEST (
+      NAME h5test-clear-err_compat-objects
+      COMMAND    ${CMAKE_COMMAND}
+          -E remove 
+          err_compat.txt
+          err_compat.txt.err
+  )
   ADD_TEST (NAME err_compat COMMAND "${CMAKE_COMMAND}"
       -D "TEST_PROGRAM=$<TARGET_FILE:err_compat>"
       -D "TEST_ARGS:STRING="
@@ -352,6 +387,7 @@ IF (HDF5_ENABLE_DEPRECATED_SYMBOLS)
       -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
       -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
   )
+  SET_TESTS_PROPERTIES(err_compat PROPERTIES DEPENDS h5test-clear-err_compat-objects)
 ENDIF (HDF5_ENABLE_DEPRECATED_SYMBOLS)
 
 #-- Adding test for error_test
@@ -359,6 +395,13 @@ ADD_EXECUTABLE (error_test ${HDF5_TEST_SOURCE_DIR}/error_test.c)
 TARGET_NAMING (error_test ${LIB_TYPE})
 TARGET_LINK_LIBRARIES (error_test ${HDF5_LIB_TARGET} ${HDF5_TEST_LIB_TARGET})
 
+ADD_TEST (
+    NAME h5test-clear-error_test-objects
+    COMMAND    ${CMAKE_COMMAND}
+        -E remove 
+        error_test.txt
+        error_test.txt.err
+)
 ADD_TEST (NAME error_test COMMAND "${CMAKE_COMMAND}"
     -D "TEST_PROGRAM=$<TARGET_FILE:error_test>"
     -D "TEST_ARGS:STRING="
@@ -369,12 +412,21 @@ ADD_TEST (NAME error_test COMMAND "${CMAKE_COMMAND}"
     -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
     -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
 )
+SET_TESTS_PROPERTIES(error_test PROPERTIES DEPENDS h5test-clear-error_test-objects)
 
 #-- Adding test for links_env
 ADD_EXECUTABLE (links_env ${HDF5_TEST_SOURCE_DIR}/links_env.c)
 TARGET_NAMING (links_env ${LIB_TYPE})
 TARGET_LINK_LIBRARIES (links_env ${HDF5_LIB_TARGET} ${HDF5_TEST_LIB_TARGET})
 
+ADD_TEST (
+    NAME h5test-clear-links_env-objects
+    COMMAND    ${CMAKE_COMMAND}
+        -E remove 
+        extlinks_env0.h5
+        extlinks_env1.h5
+        tmp/extlinks_env1.h5
+)
 ADD_TEST (NAME links_env COMMAND "${CMAKE_COMMAND}"
     -D "TEST_PROGRAM=$<TARGET_FILE:links_env>"
     -D "TEST_ARGS:STRING="
@@ -386,6 +438,27 @@ ADD_TEST (NAME links_env COMMAND "${CMAKE_COMMAND}"
     -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
     -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
 )
+SET_TESTS_PROPERTIES(links_env PROPERTIES DEPENDS h5test-clear-links_env-objects)
+
+#-- Adding test for libinfo
+SET (GREP_RUNNER ${PROJECT_BINARY_DIR}/GrepRunner.cmake)
+FILE (WRITE ${GREP_RUNNER} 
+  "FILE (STRINGS \${TEST_PROGRAM} TEST_RESULT REGEX \"SUMMARY OF THE HDF5 CONFIGURATION\")
+IF (\${TEST_RESULT} STREQUAL \"0\")
+  MESSAGE (FATAL_ERROR \"Failed: The output: \${TEST_RESULT} of \${TEST_PROGRAM} did not contain SUMMARY OF THE HDF5 CONFIGURATION\")
+ELSE (\${TEST_RESULT} STREQUAL \"0\")
+  MESSAGE (STATUS \"COMMAND Result: \${TEST_RESULT}\")
+ENDIF (\${TEST_RESULT} STREQUAL \"0\")
+"
+)
+
+ADD_TEST (NAME testlibinfo COMMAND ${CMAKE_COMMAND} -D "TEST_PROGRAM=$<TARGET_FILE:${HDF5_LIB_TARGET}>" -P "${GREP_RUNNER}")
+
+##############################################################################
+##############################################################################
+###                         V F D   T E S T S                              ###
+##############################################################################
+##############################################################################
 
 IF (HDF5_TEST_VFD)
 
diff --git a/test/Makefile.am b/test/Makefile.am
index 65bf872..50bbe5b 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -111,7 +111,7 @@ CHECK_CLEANFILES+=accum.h5 cmpd_dset.h5 compact_dataset.h5 dataset.h5 dset_offse
     stab.h5 extern_[1-3].h5 extern_[1-4][ab].raw gheap[0-4].h5 \
     dt_arith[1-2] links.h5 links[0-6]*.h5 extlinks[0-15].h5 tmp \
     big.data big[0-9][0-9][0-9][0-9][0-9].h5  \
-    stdio.h5 sec2.h5 dtypes[1-8].h5 dt_arith[1-2].h5 tattr.h5        \
+    stdio.h5 sec2.h5 dtypes[0-9].h5 dt_arith[1-2].h5 tattr.h5        \
     tselect.h5 mtime.h5 unlink.h5 unicode.h5 coord.h5 \
     fillval_[0-9].h5 fillval.raw mount_[0-9].h5 testmeta.h5 ttime.h5 \
     trefer[1-3].h5 tvltypes.h5 tvlstr.h5 tvlstr2.h5 flush.h5         \
@@ -124,7 +124,8 @@ CHECK_CLEANFILES+=accum.h5 cmpd_dset.h5 compact_dataset.h5 dataset.h5 dset_offse
     dtransform.h5 test_filters.h5 get_file_name.h5 tstint[1-2].h5    \
     unlink_chunked.h5 btree2.h5 objcopy_src.h5 objcopy_dst.h5        \
     objcopy_ext.dat trefer1.h5 trefer2.h5 app_ref.h5 tcheck_version_*.out \
-    tcheck_version_*.err efc[0-5].h5 log_vfd_out.log
+    tcheck_version_*.err efc[0-5].h5 log_vfd_out.log \
+    new_multi_file_v16-r.h5 new_multi_file_v16-s.h5
 
 # Sources for testhdf5 executable
 testhdf5_SOURCES=testhdf5.c tarray.c tattr.c tchecksum.c tconfig.c tfile.c \
diff --git a/test/Makefile.in b/test/Makefile.in
index 8b5e327..dc954db 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -494,6 +494,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -514,10 +515,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -561,7 +564,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
@@ -723,7 +725,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog accum.h5 cmpd_dset.h5 \
 	extern_[1-4][ab].raw gheap[0-4].h5 dt_arith[1-2] links.h5 \
 	links[0-6]*.h5 extlinks[0-15].h5 tmp big.data \
 	big[0-9][0-9][0-9][0-9][0-9].h5 stdio.h5 sec2.h5 \
-	dtypes[1-8].h5 dt_arith[1-2].h5 tattr.h5 tselect.h5 mtime.h5 \
+	dtypes[0-9].h5 dt_arith[1-2].h5 tattr.h5 tselect.h5 mtime.h5 \
 	unlink.h5 unicode.h5 coord.h5 fillval_[0-9].h5 fillval.raw \
 	mount_[0-9].h5 testmeta.h5 ttime.h5 trefer[1-3].h5 tvltypes.h5 \
 	tvlstr.h5 tvlstr2.h5 flush.h5 enum1.h5 titerate.h5 ttsafe.h5 \
@@ -736,7 +738,8 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog accum.h5 cmpd_dset.h5 \
 	tstint[1-2].h5 unlink_chunked.h5 btree2.h5 objcopy_src.h5 \
 	objcopy_dst.h5 objcopy_ext.dat trefer1.h5 trefer2.h5 \
 	app_ref.h5 tcheck_version_*.out tcheck_version_*.err \
-	efc[0-5].h5 log_vfd_out.log
+	efc[0-5].h5 log_vfd_out.log new_multi_file_v16-r.h5 \
+	new_multi_file_v16-s.h5
 INCLUDES = -I$(top_srcdir)/src -I$(top_builddir)/src
 
 # Test script for error_test and err_compat
diff --git a/test/be_data.h5 b/test/be_data.h5
index 0feefa3..b106417 100644
Binary files a/test/be_data.h5 and b/test/be_data.h5 differ
diff --git a/test/cross_read.c b/test/cross_read.c
index 7d3cfd4..308a0c1 100755
--- a/test/cross_read.c
+++ b/test/cross_read.c
@@ -17,7 +17,7 @@
  * Programmer:  Raymond Lu <slu at ncsa.uiuc.edu>
  *              Thursday, March 23, 2006
  *
- * Purpose:     Check if floating-point data created on OpenVMS, big-endian, and
+ * Purpose:     Check if floating-point data created on big-endian and
  *              little-endian machines can be read on the machine running this test.
  */
 
@@ -31,7 +31,8 @@ const char *FILENAME[] = {
     NULL
 };
 
-#define DATASETNAME        "Array"
+#define DATASETNAME        "Array_le"
+#define DATASETNAME1       "Array_be"
 #define DATASETNAME2       "Scale_offset_float_data_le"
 #define DATASETNAME3       "Scale_offset_float_data_be"
 #define DATASETNAME4       "Scale_offset_double_data_le"
@@ -44,103 +45,112 @@ const char *FILENAME[] = {
 #define DATASETNAME11      "Scale_offset_int_data_be"
 #define DATASETNAME12      "Scale_offset_long_long_data_le"
 #define DATASETNAME13      "Scale_offset_long_long_data_be"
+
+#define DATASETNAME14      "Fletcher_float_data_le"
+#define DATASETNAME15      "Fletcher_float_data_be"
+#define DATASETNAME16      "Deflate_float_data_le"
+#define DATASETNAME17      "Deflate_float_data_be"
+#define DATASETNAME18      "Szip_float_data_le"
+#define DATASETNAME19      "Szip_float_data_be"
+#define DATASETNAME20      "Shuffle_float_data_le"
+#define DATASETNAME21      "Shuffle_float_data_be"
+#define DATASETNAME22      "Nbit_float_data_le"
+#define DATASETNAME23      "Nbit_float_data_be"
+
 #define NX 		6
 #define NY 		6
 
 
 /*-------------------------------------------------------------------------
- * Function:    read_data
+ * Function:    open_dataset
  *
- * Purpose:     Read data from a data file.
+ * Purpose:     Read and compare the data from a dataset.
  *
  * Return:      Success:        0
- *              Failure:        -1
+ *              Failure:        1
  *
  * Programmer:  Raymond Lu
- *              21 January 2011
+ *              17 May 2011
  *
  * Modifications:
  *
  *-------------------------------------------------------------------------
  */
-static int read_data(char *fname)
+static int check_data(const char *dsetname, hid_t fid, hbool_t floating_number)
 {
-    char        pathname[1024];
-    char       *srcdir = getenv("srcdir"); /*where the src code is located*/
-    hid_t       file, dataset;         /* handles */
+    hid_t       dataset;         /* handles */
     double      data_in[NX+1][NY]; /* input buffer */
     double      data_out[NX+1][NY]; /* output buffer */
     long long   int_data_in[NX+1][NY]; /* input buffer */
     long long   int_data_out[NX+1][NY]; /* output buffer */
     int         i, j;
     unsigned 	nerrors = 0;
-    const char  *not_supported= "    Scaleoffset filter is not enabled.";
-
-    pathname[0] = '\0';
-    /* Generate correct name for test file by prepending the source path */
-    if(srcdir && ((strlen(srcdir) + strlen(fname) + 1) < sizeof(pathname))) {
-        strcpy(pathname, srcdir);
-        strcat(pathname, "/");
-    }
-    strcat(pathname, fname);
-
-    /*
-     * Open the file.
-     */
-    if((file = H5Fopen(pathname, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
-        TEST_ERROR;
-
-    TESTING("regular dataset");
 
     /* 
      * Open the regular dataset.
      */
-    if((dataset = H5Dopen2(file, DATASETNAME, H5P_DEFAULT)) < 0)
+    if((dataset = H5Dopen2(fid, dsetname, H5P_DEFAULT)) < 0)
         TEST_ERROR;
 
     /*
      * Data and output buffer initialization.
      */
     for (j = 0; j < NX; j++) {
-	for (i = 0; i < NY; i++) {
-	    data_in[j][i] = i + j;
-	    data_out[j][i] = 0;
+        for (i = 0; i < NY; i++) {
+            data_in[j][i] = ((double)(i + j + 1))/3;
+            data_out[j][i] = 0;
+
+            int_data_in[j][i] = i + j;
+            int_data_out[j][i] = 0;
         }
     }
     for (i = 0; i < NY; i++) {
         data_in[NX][i] = -2.2;
         data_out[NX][i] = 0;
+
+        int_data_in[NX][i] = -2;
+        int_data_out[NX][i] = 0;
     }
-    /*
-     * 0 1 2 3 4 5
-     * 1 2 3 4 5 6
-     * 2 3 4 5 6 7
-     * 3 4 5 6 7 8
-     * 4 5 6 7 8 9
-     * 5 6 7 8 9 10
-     * -2.2 -2.2 -2.2 -2.2 -2.2 -2.2
-     */
 
     /*
      * Read data from hyperslab in the file into the hyperslab in
      * memory and display.
      */
-    if(H5Dread(dataset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT,
-            data_out) < 0)
-        TEST_ERROR;
-
-    /* Check results */
-    for (j=0; j<(NX+1); j++) {
-        for (i=0; i<NY; i++) {
-            /* if (data_out[j][i] != data_in[j][i]) { */
-            if (!FLT_ABS_EQUAL(data_out[j][i], data_in[j][i])) {
-                if (!nerrors++) {
-                    H5_FAILED();
-                    printf("element [%d][%d] is %g but should have been %g\n",
-                           j, i, data_out[j][i], data_in[j][i]);
-                }
-            }
-        }
+    if(floating_number) {
+	if(H5Dread(dataset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+		data_out) < 0)
+	    TEST_ERROR;
+
+	/* Check results */
+	for (j=0; j<(NX+1); j++) {
+	    for (i=0; i<NY; i++) {
+		if (!DBL_REL_EQUAL(data_out[j][i], data_in[j][i], 0.001)) {
+		    if (!nerrors++) {
+			H5_FAILED();
+			printf("element [%d][%d] is %g but should have been %g\n",
+			       j, i, data_out[j][i], data_in[j][i]);
+		    }
+		}
+	    }
+	}
+    } else {
+	if(H5Dread(dataset, H5T_NATIVE_LLONG, H5S_ALL, H5S_ALL, H5P_DEFAULT,
+		int_data_out) < 0)
+	    TEST_ERROR;
+
+	/* Check results */
+	for (j=0; j<(NX+1); j++) {
+	    for (i=0; i<NY; i++) {
+		if (int_data_out[j][i] != int_data_in[j][i]) {
+		    if (!nerrors++) {
+			H5_FAILED();
+			printf("element [%d][%d] is %d but should have been %d\n",
+			       j, i, (int)int_data_out[j][i],
+			       (int)int_data_in[j][i]);
+		    }
+		}
+	    }
+	}
     }
 
     /*
@@ -156,766 +166,225 @@ static int read_data(char *fname)
     }
 
     PASSED();
+    return 0;
 
-    TESTING("dataset of LE FLOAT with scale-offset filter");
-
-#ifdef H5_HAVE_FILTER_SCALEOFFSET
-    /*
-     * Open the dataset with scale-offset filter.
-     */
-    if((dataset = H5Dopen2(file, DATASETNAME2, H5P_DEFAULT)) < 0)
-        TEST_ERROR;
+error:
+    H5E_BEGIN_TRY {
+        H5Dclose(dataset);
+    } H5E_END_TRY;
+    return 1;
+}
 
-    /*
-     * Data and output buffer initialization.
-     */
-    for (j = 0; j < NX; j++) {
-        for (i = 0; i < NY; i++) {
-            data_in[j][i] = ((double)(i + j + 1))/3;
-            data_out[j][i] = 0;
-        }
-    }
-    for (i = 0; i < NY; i++) {
-        data_in[NX][i] = -2.2;
-        data_out[NX][i] = 0;
-    }
+
+/*-------------------------------------------------------------------------
+ * Function:    open_dataset
+ *
+ * Purpose:     Handle each dataset from the data file.
+ *
+ * Return:      Success:        0
+ *              Failure:        Number of failures 
+ *
+ * Programmer:  Raymond Lu
+ *              21 January 2011
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int open_dataset(char *fname)
+{
+    const char *pathname = H5_get_srcdir_filename(fname); /* Corrected test file name */
+    hid_t       file;         /* handles */
+    unsigned 	nerrors = 0;
+    const char  *not_supported= "    filter is not enabled.";
 
     /*
-     * Read data from hyperslab in the file into the hyperslab in
-     * memory and display.
+     * Open the file.
      */
-    if(H5Dread(dataset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT,
-            data_out) < 0)
+    if((file = H5Fopen(pathname, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
         TEST_ERROR;
 
-    /* Check results */
-    for (j=0; j<(NX+1); j++) {
-        for (i=0; i<NY; i++) {
-            if (!DBL_REL_EQUAL(data_out[j][i], data_in[j][i], 0.001)) {
-                if (!nerrors++) {
-                    H5_FAILED();
-                    printf("element [%d][%d] is %g but should have been %g\n",
-                           j, i, data_out[j][i], data_in[j][i]);
-                }
-            }
-        }
-    }
-
-    /*
-     * Close/release resources.
-     */
-    if(H5Dclose(dataset) < 0)
-        TEST_ERROR
+    TESTING("regular dataset of LE DOUBLE");
+    nerrors += check_data(DATASETNAME, file, TRUE);
 
-    /* Failure */
-    if (nerrors) {
-        printf("total of %d errors out of %d elements\n", nerrors, NX*NY);
-        return 1;
-    }
+    TESTING("regular dataset of BE DOUBLE");
+    nerrors += check_data(DATASETNAME1, file, TRUE);
 
-    PASSED();
+    TESTING("dataset of LE FLOAT with scale-offset filter");
+#ifdef H5_HAVE_FILTER_SCALEOFFSET
+    nerrors += check_data(DATASETNAME2, file, TRUE);
 #else /*H5_HAVE_FILTER_SCALEOFFSET*/
     SKIPPED();
     puts(not_supported);
 #endif /*H5_HAVE_FILTER_SCALEOFFSET*/
-
+ 
     TESTING("dataset of BE FLOAT with scale-offset filter");
-
 #ifdef H5_HAVE_FILTER_SCALEOFFSET
-    /*
-     * Open the dataset with scale-offset filter.
-     */
-    if((dataset = H5Dopen2(file, DATASETNAME3, H5P_DEFAULT)) < 0)
-        TEST_ERROR;
-
-    /*
-     * Data and output buffer initialization.
-     */
-    for (j = 0; j < NX; j++) {
-        for (i = 0; i < NY; i++) {
-            data_in[j][i] = ((double)(i + j + 1))/3;
-            data_out[j][i] = 0;
-        }
-    }
-    for (i = 0; i < NY; i++) {
-        data_in[NX][i] = -2.2;
-        data_out[NX][i] = 0;
-    }
-
-    /*
-     * Read data from hyperslab in the file into the hyperslab in
-     * memory and display.
-     */
-    if(H5Dread(dataset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT,
-            data_out) < 0)
-        TEST_ERROR;
-
-    /* Check results */
-    for (j=0; j<(NX+1); j++) {
-        for (i=0; i<NY; i++) {
-            if (!DBL_REL_EQUAL(data_out[j][i], data_in[j][i], 0.001)) {
-                if (!nerrors++) {
-                    H5_FAILED();
-                    printf("element [%d][%d] is %g but should have been %g\n",
-                           j, i, data_out[j][i], data_in[j][i]);
-                }
-            }
-        }
-    }
-
-    /*
-     * Close/release resources.
-     */
-    if(H5Dclose(dataset) < 0)
-        TEST_ERROR
-
-    /* Failure */
-    if (nerrors) {
-        printf("total of %d errors out of %d elements\n", nerrors, NX*NY);
-        return 1;
-    }
-
-    PASSED();
+    nerrors += check_data(DATASETNAME3, file, TRUE);
 #else /*H5_HAVE_FILTER_SCALEOFFSET*/
     SKIPPED();
     puts(not_supported);
 #endif /*H5_HAVE_FILTER_SCALEOFFSET*/
 
     TESTING("dataset of LE DOUBLE with scale-offset filter");
-
 #ifdef H5_HAVE_FILTER_SCALEOFFSET
-    /* 
-     * Open the dataset with scale-offset filter.
-     */
-    if((dataset = H5Dopen2(file, DATASETNAME4, H5P_DEFAULT)) < 0)
-        TEST_ERROR;
-
-    /*
-     * Data and output buffer initialization.
-     */
-    for (j = 0; j < NX; j++) {
-	for (i = 0; i < NY; i++) {
-	    data_in[j][i] = ((double)(i + j + 1))/3;
-	    data_out[j][i] = 0;
-        }
-    }
-    for (i = 0; i < NY; i++) {
-        data_in[NX][i] = -2.2;
-        data_out[NX][i] = 0;
-    }
-
-    /*
-     * Read data from hyperslab in the file into the hyperslab in
-     * memory and display.
-     */
-    if(H5Dread(dataset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT,
-            data_out) < 0)
-        TEST_ERROR;
-
-    /* Check results */
-    for (j=0; j<(NX+1); j++) {
-        for (i=0; i<NY; i++) {
-            if (!DBL_REL_EQUAL(data_out[j][i], data_in[j][i], 0.001)) {
-                if (!nerrors++) {
-                    H5_FAILED();
-                    printf("element [%d][%d] is %g but should have been %g\n",
-                           j, i, data_out[j][i], data_in[j][i]);
-                }
-            }
-        }
-    }
-
-    /*
-     * Close/release resources.
-     */
-    if(H5Dclose(dataset) < 0)
-        TEST_ERROR
-
-    /* Failure */
-    if (nerrors) {
-        printf("total of %d errors out of %d elements\n", nerrors, NX*NY);
-        return 1;
-    }
-
-    PASSED();
+    nerrors += check_data(DATASETNAME4, file, TRUE);
 #else /*H5_HAVE_FILTER_SCALEOFFSET*/
     SKIPPED();
     puts(not_supported);
 #endif /*H5_HAVE_FILTER_SCALEOFFSET*/
-
+ 
     TESTING("dataset of BE DOUBLE with scale-offset filter");
-
 #ifdef H5_HAVE_FILTER_SCALEOFFSET
-    /*
-     * Open the dataset with scale-offset filter.
-     */
-    if((dataset = H5Dopen2(file, DATASETNAME5, H5P_DEFAULT)) < 0)
-        TEST_ERROR;
-
-    /*
-     * Data and output buffer initialization.
-     */
-    for (j = 0; j < NX; j++) {
-        for (i = 0; i < NY; i++) {
-            data_in[j][i] = ((double)(i + j + 1))/3;
-            data_out[j][i] = 0;
-        }
-    }
-    for (i = 0; i < NY; i++) {
-        data_in[NX][i] = -2.2;
-        data_out[NX][i] = 0;
-    }
-
-    /*
-     * Read data from hyperslab in the file into the hyperslab in
-     * memory and display.
-     */
-    if(H5Dread(dataset, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT,
-            data_out) < 0)
-        TEST_ERROR;
-
-    /* Check results */
-    for (j=0; j<(NX+1); j++) {
-        for (i=0; i<NY; i++) {
-            if (!DBL_REL_EQUAL(data_out[j][i], data_in[j][i], 0.001)) {
-                if (!nerrors++) {
-                    H5_FAILED();
-                    printf("element [%d][%d] is %g but should have been %g\n",
-                           j, i, data_out[j][i], data_in[j][i]);
-                }
-            }
-        }
-    }
-
-    /*
-     * Close/release resources.
-     */
-    if(H5Dclose(dataset) < 0)
-        TEST_ERROR
-
-    /* Failure */
-    if (nerrors) {
-        printf("total of %d errors out of %d elements\n", nerrors, NX*NY);
-        return 1;
-    }
-
-    PASSED();
+    nerrors += check_data(DATASETNAME5, file, TRUE);
 #else /*H5_HAVE_FILTER_SCALEOFFSET*/
     SKIPPED();
     puts(not_supported);
 #endif /*H5_HAVE_FILTER_SCALEOFFSET*/
-
+ 
     TESTING("dataset of LE CHAR with scale-offset filter");
-
 #ifdef H5_HAVE_FILTER_SCALEOFFSET
-    /*
-     * Open the dataset with scale-offset filter.
-     */
-    if((dataset = H5Dopen2(file, DATASETNAME6, H5P_DEFAULT)) < 0)
-        TEST_ERROR;
-
-    /*
-     * Data and output buffer initialization.
-     */
-    for (j = 0; j < NX; j++) {
-        for (i = 0; i < NY; i++) {
-            int_data_in[j][i] = i + j;
-            int_data_out[j][i] = 0;
-        }
-    }
-    for (i = 0; i < NY; i++) {
-        int_data_in[NX][i] = -2;
-        int_data_out[NX][i] = 0;
-    }
-
-    /*
-     * Read data from hyperslab in the file into the hyperslab in
-     * memory and display.
-     */
-    if(H5Dread(dataset, H5T_NATIVE_LLONG, H5S_ALL, H5S_ALL, H5P_DEFAULT,
-            int_data_out) < 0)
-        TEST_ERROR;
-
-    /* Check results */
-    for (j=0; j<(NX+1); j++) {
-        for (i=0; i<NY; i++) {
-            if (int_data_out[j][i] != int_data_in[j][i]) {
-                if (!nerrors++) {
-                    H5_FAILED();
-                    printf("element [%d][%d] is %d but should have been %d\n",
-                           j, i, (int)int_data_out[j][i],
-                           (int)int_data_in[j][i]);
-                }
-            }
-        }
-    }
-
-    /*
-     * Close/release resources.
-     */
-    if(H5Dclose(dataset) < 0)
-        TEST_ERROR
-
-    /* Failure */
-    if (nerrors) {
-        printf("total of %d errors out of %d elements\n", nerrors, NX*NY);
-        return 1;
-    }
-
-    PASSED();
-
+    nerrors += check_data(DATASETNAME6, file, FALSE);
 #else /*H5_HAVE_FILTER_SCALEOFFSET*/
     SKIPPED();
     puts(not_supported);
 #endif /*H5_HAVE_FILTER_SCALEOFFSET*/
-
+ 
     TESTING("dataset of BE CHAR with scale-offset filter");
-
 #ifdef H5_HAVE_FILTER_SCALEOFFSET
-    /*
-     * Open the dataset with scale-offset filter.
-     */
-    if((dataset = H5Dopen2(file, DATASETNAME7, H5P_DEFAULT)) < 0)
-        TEST_ERROR;
-
-    /*
-     * Data and output buffer initialization.
-     */
-    for (j = 0; j < NX; j++) {
-        for (i = 0; i < NY; i++) {
-            int_data_in[j][i] = i + j;
-            int_data_out[j][i] = 0;
-        }
-    }
-    for (i = 0; i < NY; i++) {
-        int_data_in[NX][i] = -2;
-        int_data_out[NX][i] = 0;
-    }
-
-    /*
-     * Read data from hyperslab in the file into the hyperslab in
-     * memory and display.
-     */
-    if(H5Dread(dataset, H5T_NATIVE_LLONG, H5S_ALL, H5S_ALL, H5P_DEFAULT,
-            int_data_out) < 0)
-        TEST_ERROR;
-
-    /* Check results */
-    for (j=0; j<(NX+1); j++) {
-        for (i=0; i<NY; i++) {
-            if (int_data_out[j][i] != int_data_in[j][i]) {
-                if (!nerrors++) {
-                    H5_FAILED();
-                    printf("element [%d][%d] is %d but should have been %d\n",
-                           j, i, (int)int_data_out[j][i],
-                           (int)int_data_in[j][i]);
-                }
-            }
-        }
-    }
-
-    /*
-     * Close/release resources.
-     */
-    if(H5Dclose(dataset) < 0)
-        TEST_ERROR
-
-    /* Failure */
-    if (nerrors) {
-        printf("total of %d errors out of %d elements\n", nerrors, NX*NY);
-        return 1;
-    }
-
-    PASSED();
-
+    nerrors += check_data(DATASETNAME7, file, FALSE);
 #else /*H5_HAVE_FILTER_SCALEOFFSET*/
     SKIPPED();
     puts(not_supported);
 #endif /*H5_HAVE_FILTER_SCALEOFFSET*/
-
+ 
     TESTING("dataset of LE SHORT with scale-offset filter");
-
 #ifdef H5_HAVE_FILTER_SCALEOFFSET
-    /*
-     * Open the dataset with scale-offset filter.
-     */
-    if((dataset = H5Dopen2(file, DATASETNAME8, H5P_DEFAULT)) < 0)
-        TEST_ERROR;
-
-    /*
-     * Data and output buffer initialization.
-     */
-    for (j = 0; j < NX; j++) {
-        for (i = 0; i < NY; i++) {
-            int_data_in[j][i] = i + j;
-            int_data_out[j][i] = 0;
-        }
-    }
-    for (i = 0; i < NY; i++) {
-        int_data_in[NX][i] = -2;
-        int_data_out[NX][i] = 0;
-    }
-
-    /*
-     * Read data from hyperslab in the file into the hyperslab in
-     * memory and display.
-     */
-    if(H5Dread(dataset, H5T_NATIVE_LLONG, H5S_ALL, H5S_ALL, H5P_DEFAULT,
-            int_data_out) < 0)
-        TEST_ERROR;
-
-    /* Check results */
-    for (j=0; j<(NX+1); j++) {
-        for (i=0; i<NY; i++) {
-            if (int_data_out[j][i] != int_data_in[j][i]) {
-                if (!nerrors++) {
-                    H5_FAILED();
-                    printf("element [%d][%d] is %d but should have been %d\n",
-                           j, i, (int)int_data_out[j][i],
-                           (int)int_data_in[j][i]);
-                }
-            }
-        }
-    }
-
-    /*
-     * Close/release resources.
-     */
-    if(H5Dclose(dataset) < 0)
-        TEST_ERROR
-
-    /* Failure */
-    if (nerrors) {
-        printf("total of %d errors out of %d elements\n", nerrors, NX*NY);
-        return 1;
-    }
-
-    PASSED();
-
+    nerrors += check_data(DATASETNAME8, file, FALSE);
 #else /*H5_HAVE_FILTER_SCALEOFFSET*/
     SKIPPED();
     puts(not_supported);
 #endif /*H5_HAVE_FILTER_SCALEOFFSET*/
-
+ 
     TESTING("dataset of BE SHORT with scale-offset filter");
-
 #ifdef H5_HAVE_FILTER_SCALEOFFSET
-    /*
-     * Open the dataset with scale-offset filter.
-     */
-    if((dataset = H5Dopen2(file, DATASETNAME9, H5P_DEFAULT)) < 0)
-        TEST_ERROR;
-
-    /*
-     * Data and output buffer initialization.
-     */
-    for (j = 0; j < NX; j++) {
-        for (i = 0; i < NY; i++) {
-            int_data_in[j][i] = i + j;
-            int_data_out[j][i] = 0;
-        }
-    }
-    for (i = 0; i < NY; i++) {
-        int_data_in[NX][i] = -2;
-        int_data_out[NX][i] = 0;
-    }
-
-    /*
-     * Read data from hyperslab in the file into the hyperslab in
-     * memory and display.
-     */
-    if(H5Dread(dataset, H5T_NATIVE_LLONG, H5S_ALL, H5S_ALL, H5P_DEFAULT,
-            int_data_out) < 0)
-        TEST_ERROR;
-
-    /* Check results */
-    for (j=0; j<(NX+1); j++) {
-        for (i=0; i<NY; i++) {
-            if (int_data_out[j][i] != int_data_in[j][i]) {
-                if (!nerrors++) {
-                    H5_FAILED();
-                    printf("element [%d][%d] is %d but should have been %d\n",
-                           j, i, (int)int_data_out[j][i],
-                           (int)int_data_in[j][i]);
-                }
-            }
-        }
-    }
-
-    /*
-     * Close/release resources.
-     */
-    if(H5Dclose(dataset) < 0)
-        TEST_ERROR
-
-    /* Failure */
-    if (nerrors) {
-        printf("total of %d errors out of %d elements\n", nerrors, NX*NY);
-        return 1;
-    }
-
-    PASSED();
-
+    nerrors += check_data(DATASETNAME9, file, FALSE);
 #else /*H5_HAVE_FILTER_SCALEOFFSET*/
     SKIPPED();
     puts(not_supported);
 #endif /*H5_HAVE_FILTER_SCALEOFFSET*/
 
     TESTING("dataset of LE INT with scale-offset filter");
-
 #ifdef H5_HAVE_FILTER_SCALEOFFSET
-    /* 
-     * Open the dataset with scale-offset filter.
-     */
-    if((dataset = H5Dopen2(file, DATASETNAME10, H5P_DEFAULT)) < 0)
-        TEST_ERROR;
-
-    /*
-     * Data and output buffer initialization.
-     */
-    for (j = 0; j < NX; j++) {
-	for (i = 0; i < NY; i++) {
-	    int_data_in[j][i] = i + j;
-	    int_data_out[j][i] = 0;
-        }
-    }
-    for (i = 0; i < NY; i++) {
-        int_data_in[NX][i] = -2;
-        int_data_out[NX][i] = 0;
-    }
-
-    /*
-     * Read data from hyperslab in the file into the hyperslab in
-     * memory and display.
-     */
-    if(H5Dread(dataset, H5T_NATIVE_LLONG, H5S_ALL, H5S_ALL, H5P_DEFAULT,
-            int_data_out) < 0)
-        TEST_ERROR;
-
-    /* Check results */
-    for (j=0; j<(NX+1); j++) {
-        for (i=0; i<NY; i++) {
-            if (int_data_out[j][i] != int_data_in[j][i]) {
-                if (!nerrors++) {
-                    H5_FAILED();
-                    printf("element [%d][%d] is %d but should have been %d\n",
-                           j, i, (int)int_data_out[j][i],
-                           (int)int_data_in[j][i]);
-                }
-            }
-        }
-    }
-
-    /*
-     * Close/release resources.
-     */
-    if(H5Dclose(dataset) < 0)
-        TEST_ERROR
-
-    /* Failure */
-    if (nerrors) {
-        printf("total of %d errors out of %d elements\n", nerrors, NX*NY);
-        return 1;
-    }
-
-    PASSED();
-
+    nerrors += check_data(DATASETNAME10, file, FALSE);
 #else /*H5_HAVE_FILTER_SCALEOFFSET*/
     SKIPPED();
     puts(not_supported);
 #endif /*H5_HAVE_FILTER_SCALEOFFSET*/
-
+ 
     TESTING("dataset of BE INT with scale-offset filter");
-
 #ifdef H5_HAVE_FILTER_SCALEOFFSET
-    /*
-     * Open the dataset with scale-offset filter.
-     */
-    if((dataset = H5Dopen2(file, DATASETNAME11, H5P_DEFAULT)) < 0)
-        TEST_ERROR;
-
-    /*
-     * Data and output buffer initialization.
-     */
-    for (j = 0; j < NX; j++) {
-        for (i = 0; i < NY; i++) {
-            int_data_in[j][i] = i + j;
-            int_data_out[j][i] = 0;
-        }
-    }
-    for (i = 0; i < NY; i++) {
-        int_data_in[NX][i] = -2;
-        int_data_out[NX][i] = 0;
-    }
-
-    /*
-     * Read data from hyperslab in the file into the hyperslab in
-     * memory and display.
-     */
-    if(H5Dread(dataset, H5T_NATIVE_LLONG, H5S_ALL, H5S_ALL, H5P_DEFAULT,
-            int_data_out) < 0)
-        TEST_ERROR;
-
-    /* Check results */
-    for (j=0; j<(NX+1); j++) {
-        for (i=0; i<NY; i++) {
-            if (int_data_out[j][i] != int_data_in[j][i]) {
-                if (!nerrors++) {
-                    H5_FAILED();
-                    printf("element [%d][%d] is %d but should have been %d\n",
-                           j, i, (int)int_data_out[j][i],
-                           (int)int_data_in[j][i]);
-                }
-            }
-        }
-    }
-
-    /*
-     * Close/release resources.
-     */
-    if(H5Dclose(dataset) < 0)
-        TEST_ERROR
-
-    /* Failure */
-    if (nerrors) {
-        printf("total of %d errors out of %d elements\n", nerrors, NX*NY);
-        return 1;
-    }
-
-    PASSED();
-
+    nerrors += check_data(DATASETNAME11, file, FALSE);
 #else /*H5_HAVE_FILTER_SCALEOFFSET*/
     SKIPPED();
     puts(not_supported);
 #endif /*H5_HAVE_FILTER_SCALEOFFSET*/
 
     TESTING("dataset of LE LONG LONG with scale-offset filter");
-
 #ifdef H5_HAVE_FILTER_SCALEOFFSET
-    /*
-     * Open the dataset with scale-offset filter.
-     */
-    if((dataset = H5Dopen2(file, DATASETNAME12, H5P_DEFAULT)) < 0)
-        TEST_ERROR;
-
-    /*
-     * Data and output buffer initialization.
-     */
-    for (j = 0; j < NX; j++) {
-        for (i = 0; i < NY; i++) {
-            int_data_in[j][i] = i + j;
-            int_data_out[j][i] = 0;
-        }
-    }
-    for (i = 0; i < NY; i++) {
-        int_data_in[NX][i] = -2;
-        int_data_out[NX][i] = 0;
-    }
-
-    /*
-     * Read data from hyperslab in the file into the hyperslab in
-     * memory and display.
-     */
-    if(H5Dread(dataset, H5T_NATIVE_LLONG, H5S_ALL, H5S_ALL, H5P_DEFAULT,
-            int_data_out) < 0)
-        TEST_ERROR;
-
-    /* Check results */
-    for (j=0; j<(NX+1); j++) {
-        for (i=0; i<NY; i++) {
-            if (int_data_out[j][i] != int_data_in[j][i]) {
-                if (!nerrors++) {
-                    H5_FAILED();
-                    printf("element [%d][%d] is %d but should have been %d\n",
-                           j, i, (int)int_data_out[j][i],
-                           (int)int_data_in[j][i]);
-                }
-            }
-        }
-    }
-
-    /*
-     * Close/release resources.
-     */
-    if(H5Dclose(dataset) < 0)
-        TEST_ERROR
-
-    /* Failure */
-    if (nerrors) {
-        printf("total of %d errors out of %d elements\n", nerrors, NX*NY);
-        return 1;
-    }
-
-    PASSED();
-
+    nerrors += check_data(DATASETNAME12, file, FALSE);
 #else /*H5_HAVE_FILTER_SCALEOFFSET*/
     SKIPPED();
     puts(not_supported);
 #endif /*H5_HAVE_FILTER_SCALEOFFSET*/
-
+ 
     TESTING("dataset of BE LONG LONG with scale-offset filter");
-
 #ifdef H5_HAVE_FILTER_SCALEOFFSET
-    /*
-     * Open the dataset with scale-offset filter.
-     */
-    if((dataset = H5Dopen2(file, DATASETNAME13, H5P_DEFAULT)) < 0)
-        TEST_ERROR;
+    nerrors += check_data(DATASETNAME13, file, FALSE);
+#else /*H5_HAVE_FILTER_SCALEOFFSET*/
+    SKIPPED();
+    puts(not_supported);
+#endif /*H5_HAVE_FILTER_SCALEOFFSET*/
 
-    /*
-     * Data and output buffer initialization.
-     */
-    for (j = 0; j < NX; j++) {
-        for (i = 0; i < NY; i++) {
-            int_data_in[j][i] = i + j;
-            int_data_out[j][i] = 0;
-        }
-    }
-    for (i = 0; i < NY; i++) {
-        int_data_in[NX][i] = -2;
-        int_data_out[NX][i] = 0;
-    }
+    TESTING("dataset of LE FLOAT with Fletcher32 filter");
+#ifdef H5_HAVE_FILTER_FLETCHER32
+    nerrors += check_data(DATASETNAME14, file, TRUE);
+#else /*H5_HAVE_FILTER_FLETCHER32*/
+    SKIPPED();
+    puts(not_supported);
+#endif /*H5_HAVE_FILTER_FLETCHER32*/
+ 
+    TESTING("dataset of BE FLOAT with Fletcher32 filter");
+#ifdef H5_HAVE_FILTER_FLETCHER32
+    nerrors += check_data(DATASETNAME15, file, TRUE);
+#else /*H5_HAVE_FILTER_FLETCHER32*/
+    SKIPPED();
+    puts(not_supported);
+#endif /*H5_HAVE_FILTER_FLETCHER32*/
+ 
+    TESTING("dataset of LE FLOAT with Deflate filter");
+#ifdef H5_HAVE_FILTER_DEFLATE
+    nerrors += check_data(DATASETNAME16, file, TRUE);
+#else /*H5_HAVE_FILTER_DEFLATE*/
+    SKIPPED();
+    puts(not_supported);
+#endif /*H5_HAVE_FILTER_DEFLATE*/
 
-    /*
-     * Read data from hyperslab in the file into the hyperslab in
-     * memory and display.
-     */
-    if(H5Dread(dataset, H5T_NATIVE_LLONG, H5S_ALL, H5S_ALL, H5P_DEFAULT,
-            int_data_out) < 0)
-        TEST_ERROR;
+    TESTING("dataset of BE FLOAT with Deflate filter");
+#ifdef H5_HAVE_FILTER_DEFLATE
+    nerrors += check_data(DATASETNAME17, file, TRUE);
+#else /*H5_HAVE_FILTER_DEFLATE*/
+    SKIPPED();
+    puts(not_supported);
+#endif /*H5_HAVE_FILTER_DEFLATE*/
 
-    /* Check results */
-    for (j=0; j<(NX+1); j++) {
-        for (i=0; i<NY; i++) {
-            if (int_data_out[j][i] != int_data_in[j][i]) {
-                if (!nerrors++) {
-                    H5_FAILED();
-                    printf("element [%d][%d] is %d but should have been %d\n",
-                           j, i, (int)int_data_out[j][i],
-                           (int)int_data_in[j][i]);
-                }
-            }
-        }
-    }
+    TESTING("dataset of LE FLOAT with Szip filter");
+#ifdef H5_HAVE_FILTER_SZIP
+    nerrors += check_data(DATASETNAME18, file, TRUE);
+#else /*H5_HAVE_FILTER_SZIP*/
+    SKIPPED();
+    puts(not_supported);
+#endif /*H5_HAVE_FILTER_SZIP*/
 
-    /*
-     * Close/release resources.
-     */
-    if(H5Dclose(dataset) < 0)
-        TEST_ERROR
+    TESTING("dataset of BE FLOAT with Szip filter");
+#ifdef H5_HAVE_FILTER_SZIP
+    nerrors += check_data(DATASETNAME19, file, TRUE);
+#else /*H5_HAVE_FILTER_SZIP*/
+    SKIPPED();
+    puts(not_supported);
+#endif /*H5_HAVE_FILTER_SZIP*/
 
-    /* Failure */
-    if (nerrors) {
-        printf("total of %d errors out of %d elements\n", nerrors, NX*NY);
-        return 1;
-    }
+    TESTING("dataset of LE FLOAT with Shuffle filter");
+#ifdef H5_HAVE_FILTER_SHUFFLE
+    nerrors += check_data(DATASETNAME20, file, TRUE);
+#else /*H5_HAVE_FILTER_SHUFFLE*/
+    SKIPPED();
+    puts(not_supported);
+#endif /*H5_HAVE_FILTER_SHUFFLE*/
 
-    PASSED();
+    TESTING("dataset of BE FLOAT with Shuffle filter");
+#ifdef H5_HAVE_FILTER_SHUFFLE
+    nerrors += check_data(DATASETNAME21, file, TRUE);
+#else /*H5_HAVE_FILTER_SHUFFLE*/
+    SKIPPED();
+    puts(not_supported);
+#endif /*H5_HAVE_FILTER_SHUFFLE*/
 
-#else /*H5_HAVE_FILTER_SCALEOFFSET*/
+    TESTING("dataset of LE FLOAT with Nbit filter");
+#ifdef H5_HAVE_FILTER_NBIT
+    nerrors += check_data(DATASETNAME22, file, TRUE);
+#else /*H5_HAVE_FILTER_NBIT*/
     SKIPPED();
     puts(not_supported);
-#endif /*H5_HAVE_FILTER_SCALEOFFSET*/
+#endif /*H5_HAVE_FILTER_NBIT*/
+
+    TESTING("dataset of BE FLOAT with Nbit filter");
+#ifdef H5_HAVE_FILTER_NBIT
+    nerrors += check_data(DATASETNAME23, file, TRUE);
+#else /*H5_HAVE_FILTER_NBIT*/
+    SKIPPED();
+    puts(not_supported);
+#endif /*H5_HAVE_FILTER_NBIT*/
 
     if(H5Fclose(file))
         TEST_ERROR
@@ -925,20 +394,20 @@ error:
     H5E_BEGIN_TRY {
         H5Fclose(file);
     } H5E_END_TRY;
-    return 1;
+    return nerrors;
 }
 
 
 /*-------------------------------------------------------------------------
  * Function:    main
  *
- * Purpose:     Tests the basic features of Virtual File Drivers
+ * Purpose:     Tests reading files created on LE and BE systems.
  *
  * Return:      Success:        exit(0)
  *              Failure:        exit(1)
  *
  * Programmer:  Raymond Lu
- *              Tuesday, Sept 24, 2002
+ *              Thursday, March 23, 2006
  *
  *-------------------------------------------------------------------------
  */
@@ -949,17 +418,13 @@ int main(void)
 
     h5_reset();
 
-    puts("Testing reading data created on OpenVMS");
-    h5_fixname(FILENAME[0], H5P_DEFAULT, filename, sizeof filename);
-    nerrors += read_data(filename);
-
     puts("Testing reading data created on Linux");
     h5_fixname(FILENAME[1], H5P_DEFAULT, filename, sizeof filename);
-    nerrors += read_data(filename);
+    nerrors += open_dataset(filename);
 
     puts("Testing reading data created on Solaris");
     h5_fixname(FILENAME[2], H5P_DEFAULT, filename, sizeof filename);
-    nerrors += read_data(filename);
+    nerrors += open_dataset(filename);
 
     if (nerrors) {
         printf("***** %u FAILURE%s! *****\n",
diff --git a/test/dsets.c b/test/dsets.c
index 902048b..09256f4 100644
--- a/test/dsets.c
+++ b/test/dsets.c
@@ -3677,7 +3677,18 @@ test_nbit_compound_2(hid_t file)
     /* Check that the values read are the same as the values written
      * Use mask for checking the significant bits, ignoring the padding bits
      */
-    i_mask = ~((unsigned)~0 << (precision[0] + offset[0])) & ((unsigned)~0 << offset[0]);
+    /* The original code 
+     *   i_mask = ~((unsigned)~0 << (precision[0] + offset[0])) & ((unsigned)~0 << offset[0]);
+     * left shift a 32-bit integer for 32-bit.  The result is undefined by C language.  A user
+     * discovered it using clang compiler with -fcatch-undefined-behavior option (see Issue 7674
+     * in Jira).  So I changed it in a funny way as below to avoid it. SLU - 2011/8/11
+     */
+    if(sizeof(unsigned) > 4)
+        i_mask = ~((unsigned)~0 << (precision[0] + offset[0])) & ((unsigned)~0 << offset[0]);
+    else {
+        i_mask = 0xffffffff;
+        i_mask = i_mask & ((unsigned)~0 << offset[0]);
+    }
     c_mask = ~((unsigned)~0 << (precision[1] + offset[1])) & ((unsigned)~0 << offset[1]);
     s_mask = ~((unsigned)~0 << (precision[2] + offset[2])) & ((unsigned)~0 << offset[2]);
     b_mask = ~((unsigned)~0 << (precision[4] + offset[4])) & ((unsigned)~0 << offset[4]);
diff --git a/test/dt_arith.c b/test/dt_arith.c
index 3a673fb..7948c65 100644
--- a/test/dt_arith.c
+++ b/test/dt_arith.c
@@ -121,7 +121,7 @@ static int without_hardware_g = 0;
     TYPE value2 = 0;                                                                            \
                                                                                                 \
     /* Allocate buffers */                                                                      \
-    NELMTS=(SRC_PREC-1)*3+1;                                                                    \
+    NELMTS=SRC_PREC*3;                                                                          \
     BUF = (unsigned char*)aligned_malloc(NELMTS*MAX(SRC_SIZE, DST_SIZE));                       \
     SAVED = (unsigned char*)aligned_malloc(NELMTS*MAX(SRC_SIZE, DST_SIZE));                     \
     HDmemset(BUF, 0, NELMTS*MAX(SRC_SIZE, DST_SIZE));                                           \
@@ -132,7 +132,7 @@ static int without_hardware_g = 0;
                                                                                                 \
     /*positive values, ascending order. VALUE1 starts from 00000001, to 00000010, until 10000000*/ \
     /*VALUE2 ascends from 00000000, to 00000011, 00000111,...,  until 11111111.*/               \
-    for(n=0; n<SRC_PREC-1; n++) {                                                               \
+    for(n=0; n<SRC_PREC; n++) {                                                                 \
         if(value1<=SRC_MAX && value1>=SRC_MIN) {                                                \
             memcpy(buf_p, &value1, SRC_SIZE);                                                   \
             memcpy(saved_p, &value1, SRC_SIZE);                                                 \
@@ -146,20 +146,26 @@ static int without_hardware_g = 0;
             saved_p += SRC_SIZE;                                                                \
         }                                                                                       \
                                                                                                 \
-        value1 <<= 1;                                                                           \
-        value2 = (value1 - 1) | value1;                                                         \
+        if(n<SRC_PREC-2) {                                                                      \
+            value1 <<= 1;                                                                       \
+            value2 = (value1 - 1) | value1;                                                     \
+        } else if(n==SRC_PREC-2) { /*to avoid overflow of negative values for signed integer*/  \
+            value1 <<= 1;                                                                       \
+            value2 = (~value1) | value1;                                                        \
+        }                                                                                       \
     }                                                                                           \
                                                                                                 \
     /* negative values for signed; descending positive values for unsigned */                   \
     /* VALUE2 descends from 11111111 to 11111110, 11111100, ..., until 10000000. */             \
-    for(n=0; n<SRC_PREC; n++) {                                                                 \
+    for(n=0; n<SRC_PREC-1; n++) {                                                               \
         if(value2<=SRC_MAX && value2>=SRC_MIN) {                                                \
             memcpy(buf_p, &value2, SRC_SIZE);                                                   \
             memcpy(saved_p, &value2, SRC_SIZE);                                                 \
             buf_p += SRC_SIZE;                                                                  \
             saved_p += SRC_SIZE;                                                                \
         }                                                                                       \
-        value2 <<= 1;                                                                           \
+        if(n<SRC_PREC-1)                                                                        \
+            value2 <<= 1;                                                                       \
     }                                                                                           \
 }
 
diff --git a/test/dtypes.c b/test/dtypes.c
index 3511d04..aca1403 100644
--- a/test/dtypes.c
+++ b/test/dtypes.c
@@ -71,6 +71,7 @@
     }
 
 const char *FILENAME[] = {
+    "dtypes0",
     "dtypes1",
     "dtypes2",
     "dtypes3",
@@ -79,6 +80,7 @@ const char *FILENAME[] = {
     "dtypes6",
     "dtypes7",
     "dtypes8",
+    "dtypes9",
     NULL
 };
 
@@ -102,6 +104,11 @@ typedef enum dtype_t {
 #define COMPOUND13_ARRAY_SIZE   256
 #define COMPOUND13_ATTR_NAME    "attr"
 
+/* Constants for delete_obj_named test */
+#define DEL_OBJ_NAMED_DATASET           "/Dataset"
+#define DEL_OBJ_NAMED_NAMED_DTYPE       "/Dtype"
+#define DEL_OBJ_NAMED_ATTRIBUTE         "Attr"
+
 /* Count opaque conversions */
 static int num_opaque_conversions_g = 0;
 
@@ -3901,6 +3908,67 @@ mkstr(size_t len, H5T_str_t strpad)
 
 
 /*-------------------------------------------------------------------------
+ * Function:	test_str_create
+ *
+ * Purpose:	Test string type creation using H5Tcreate
+ *
+ * Return:	Success:	0
+ *		Failure:	number of errors
+ *
+ * Programmer:	Raymond Lu
+ *              19 May 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_str_create(void)
+{
+    hid_t  fixed_str1, fixed_str2;
+    hid_t  vlen_str1,  vlen_str2;
+    htri_t is_vl_str = FALSE;
+    size_t query_size, str_size = 10;
+
+    TESTING("string type creation using H5Tcreate");
+
+    /* Create fixed-length string in two ways and make sure they are the same */
+    if((fixed_str1 = mkstr(str_size, H5T_STR_NULLTERM)) < 0) goto error;
+
+    if((fixed_str2 = H5Tcreate(H5T_STRING, str_size)) < 0) goto error;
+    if(H5Tset_strpad(fixed_str2, H5T_STR_NULLTERM) < 0) goto error;
+
+    if(!H5Tequal(fixed_str1, fixed_str2)) goto error;
+
+    if((query_size = H5Tget_size(fixed_str1)) == 0) goto error;
+    if(query_size != str_size) goto error;
+
+    if((query_size = H5Tget_size(fixed_str2)) == 0) goto error;
+    if(query_size != str_size) goto error;
+
+    /* Create variable-length string in two ways and make sure they are the same */
+    if((vlen_str1 = mkstr((size_t)H5T_VARIABLE, H5T_STR_NULLTERM)) < 0) goto error;
+
+    if((vlen_str2 = H5Tcreate(H5T_STRING, (size_t)H5T_VARIABLE)) < 0) goto error;
+    if(H5Tset_strpad(vlen_str2, H5T_STR_NULLTERM) < 0) goto error;
+
+    if(!H5Tequal(vlen_str1, vlen_str2)) goto error;
+
+    if((is_vl_str = H5Tis_variable_str(vlen_str1)) < 0) goto error;
+    if(!is_vl_str) goto error; 
+
+    if((is_vl_str = H5Tis_variable_str(vlen_str2)) < 0) goto error;
+    if(!is_vl_str) goto error; 
+
+
+    PASSED();
+    return 0;
+
+error:
+    H5_FAILED();
+    return 1;
+}
+
+
+/*-------------------------------------------------------------------------
  * Function:	test_conv_str_1
  *
  * Purpose:	Test string conversions
@@ -4420,8 +4488,6 @@ error:
  *              Failure:        number of errors
  *
  * Programmer:  Robb Matzke, LLNL, 2003-06-09
- *
- * Modifications:
  *-------------------------------------------------------------------------
  */
 static int
@@ -4437,7 +4503,7 @@ test_conv_enum_2(void)
                              "PURPLE",
                              "ORANGE",
                              "WHITE" };
-
+   
     TESTING("non-native enumeration type conversion");
 
     /* Source enum type */
@@ -6446,6 +6512,353 @@ error:
     return 1;
 } /* end test_named_indirect_reopen() */
 
+static void create_del_obj_named_test_file(const char *filename, hid_t fapl,
+    hbool_t new_format)
+{
+    hid_t file;         /* File ID */
+    hid_t type;         /* Datatype ID */
+    hid_t space;        /* Dataspace ID */
+    hid_t attr;         /* Attribute ID */
+    hid_t dset;         /* Dataset ID */
+    hid_t fcpl;         /* File creation property list ID */
+    hid_t my_fapl;      /* Copy of file access property list ID */
+    hid_t dcpl;         /* Dataset creation property list ID */
+    herr_t status;      /* Generic return value */
+
+    /* Make copy of FAPL */
+    my_fapl = H5Pcopy(fapl);
+    assert(my_fapl > 0);
+
+    if(new_format) {
+        /* Use latest version of file format */
+        status = H5Pset_libver_bounds(my_fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST);
+        assert(status >= 0);
+    } /* end if */
+
+    /* Create a file creation property list (used for the root group's creation property list) */
+    fcpl = H5Pcreate(H5P_FILE_CREATE);
+    assert(fcpl > 0);
+
+    if(new_format) {
+        /* Use dense link storage for all links in root group */
+        status = H5Pset_link_phase_change(fcpl, 0, 0);
+        assert(status >= 0);
+    } /* end if */
+
+    /* Create file with attribute that uses committed datatype */
+    file = H5Fcreate(filename, H5F_ACC_TRUNC, fcpl, my_fapl);
+    assert(file > 0);
+
+    /* Close FCPL */
+    status = H5Pclose(fcpl);
+    assert(status >= 0);
+
+    /* Close FAPL */
+    status = H5Pclose(my_fapl);
+    assert(status >= 0);
+
+    /* Create datatype to commit */
+    type = H5Tvlen_create(H5T_NATIVE_INT);
+    assert(type > 0);
+
+    /* Commit datatype */
+    status = H5Tcommit2(file, DEL_OBJ_NAMED_NAMED_DTYPE, type, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    assert(status >= 0);
+
+    /* Create scalar dataspace */
+    space = H5Screate(H5S_SCALAR);
+    assert(space > 0);
+
+    /* Create a dataset creation property list */
+    dcpl = H5Pcreate(H5P_DATASET_CREATE);
+    assert(dcpl > 0);
+
+    if(new_format) {
+        /* Use dense attribute storage for all attributes on dataset */
+        status = H5Pset_attr_phase_change(dcpl, 0, 0);
+        assert(status >= 0);
+    } /* end if */
+
+    /* Create dataset */
+    dset = H5Dcreate2(file, DEL_OBJ_NAMED_DATASET, type, space, H5P_DEFAULT, dcpl, H5P_DEFAULT);
+    assert(dset > 0);
+
+    /* Close DCPL */
+    status = H5Pclose(dcpl);
+    assert(status >= 0);
+
+    /* Close dataset */
+    status = H5Dclose(dset);
+    assert(status >= 0);
+
+    /* Create attribute */
+    attr = H5Acreate_by_name(file, DEL_OBJ_NAMED_DATASET, DEL_OBJ_NAMED_ATTRIBUTE, type, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    assert(attr > 0);
+
+    /* Close dataspace */
+    status = H5Sclose(space);
+    assert(status >= 0);
+
+    /* Close datatype */
+    status = H5Tclose(type);
+    assert(status >= 0);
+
+    /* Close attribute */
+    status = H5Aclose(attr);
+    assert(status >= 0);
+
+    /* Close file */
+    status = H5Fclose(file);
+    assert(status >= 0);
+} /* end create_del_obj_named_test_file() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_delete_obj_named
+ *
+ * Purpose:	Tests that delete objects that use named datatypes through
+ *              different file IDs
+ *
+ * Return:	Success:	0
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Monday, July 18, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_delete_obj_named(hid_t fapl)
+{
+    hid_t filea1 = -1, filea2 = -1, fileb = -1;         /* File IDs */
+    hid_t attr = -1;            /* Attribute ID */
+    hid_t dset = -1;            /* Dataset ID */
+    hid_t fapl2 = -1;           /* File access property list ID */
+    hbool_t new_format;         /* Whether to use old or new format */
+    char filename[1024], filename2[1024];
+
+    TESTING("deleting objects that use named datatypes");
+
+    /* Set up filenames & FAPLs */
+    if((fapl2 = H5Pcopy(fapl)) < 0) FAIL_STACK_ERROR
+    h5_fixname(FILENAME[8], fapl, filename, sizeof filename);
+    h5_fixname(FILENAME[9], fapl2, filename2, sizeof filename2);
+
+    /* Loop over old & new format files */
+    for(new_format = FALSE; new_format <= TRUE; new_format++) {
+        /* Create test file, with attribute that uses committed datatype */
+        create_del_obj_named_test_file(filename, fapl, new_format);
+
+/* Test deleting dataset opened through different file ID */
+        if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
+        if((filea2 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
+
+        if((dset = H5Dopen2(filea1, DEL_OBJ_NAMED_DATASET, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+        if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
+
+        if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
+
+        if((fileb = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) FAIL_STACK_ERROR
+
+        if(H5Ldelete(filea2, DEL_OBJ_NAMED_DATASET, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
+
+        if(H5Fclose(filea2) < 0) FAIL_STACK_ERROR
+        if(H5Fclose(fileb) < 0) FAIL_STACK_ERROR
+
+
+        /* Create test file, with attribute that uses committed datatype */
+        create_del_obj_named_test_file(filename, fapl, new_format);
+
+/* Test deleting attribute opened through different file ID */
+        if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
+        if((filea2 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
+
+        if((attr = H5Aopen_by_name(filea1, DEL_OBJ_NAMED_DATASET, DEL_OBJ_NAMED_ATTRIBUTE, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+        if(H5Aclose(attr) < 0) FAIL_STACK_ERROR
+
+        if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
+
+        if((fileb = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) FAIL_STACK_ERROR
+
+        if(H5Adelete_by_name(filea2, DEL_OBJ_NAMED_DATASET, DEL_OBJ_NAMED_ATTRIBUTE, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
+
+        if(H5Fclose(filea2) < 0) FAIL_STACK_ERROR
+        if(H5Fclose(fileb) < 0) FAIL_STACK_ERROR
+    } /* end for */
+
+    if(H5Pclose(fapl2) < 0) FAIL_STACK_ERROR
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+	H5Tclose(attr);
+	H5Dclose(dset);
+	H5Pclose(fapl2);
+	H5Fclose(filea1);
+	H5Fclose(filea2);
+	H5Fclose(fileb);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_delete_obj_named() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	test_delete_obj_named_fileid
+ *
+ * Purpose:	Tests that objects that use named datatypes through
+ *              different file IDs get the correct file IDs
+ *
+ * Return:	Success:	0
+ *		Failure:	number of errors
+ *
+ * Programmer:	Quincey Koziol
+ *              Thursday, July 28, 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_delete_obj_named_fileid(hid_t fapl)
+{
+    hid_t filea1 = -1, filea2 = -1, fileb = -1;         /* File IDs */
+    hid_t dset_fid = -1;        /* File ID from dataset */
+    hid_t type_fid = -1;        /* File ID from datatype */
+    hid_t attr_fid = -1;        /* File ID from attribute */
+    hid_t type = -1;            /* Datatype ID */
+    hid_t attr = -1;            /* Attribute ID */
+    hid_t dset = -1;            /* Dataset ID */
+    hid_t fapl2 = -1;           /* File access property list ID */
+    hbool_t new_format;         /* Whether to use old or new format */
+    char filename[1024], filename2[1024];
+
+    TESTING("deleting objects that use named datatypes");
+
+    /* Set up filenames & FAPLs */
+    if((fapl2 = H5Pcopy(fapl)) < 0) FAIL_STACK_ERROR
+    h5_fixname(FILENAME[8], fapl, filename, sizeof filename);
+    h5_fixname(FILENAME[9], fapl2, filename2, sizeof filename2);
+
+    /* Loop over old & new format files */
+    for(new_format = FALSE; new_format <= TRUE; new_format++) {
+        /* Create test file, with attribute that uses committed datatype */
+        create_del_obj_named_test_file(filename, fapl, new_format);
+
+/* Test getting file ID for dataset opened through different file ID */
+        if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
+
+        if((filea2 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
+
+        if((dset = H5Dopen2(filea1, DEL_OBJ_NAMED_DATASET, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+
+        /* Verify file ID from dataset matches correct file */
+        dset_fid = H5Iget_file_id(dset);
+        if(dset_fid != filea1) TEST_ERROR
+        H5Fclose(dset_fid);
+
+        /* Verify file ID from datatype (from dataset) matches correct file */
+        type = H5Dget_type(dset);
+        type_fid = H5Iget_file_id(type);
+        if(type_fid != filea1) TEST_ERROR
+        H5Fclose(type_fid);
+        H5Tclose(type);
+
+        if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
+
+        if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
+
+        if((fileb = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) FAIL_STACK_ERROR
+
+        if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
+
+        if((dset = H5Dopen2(filea1, DEL_OBJ_NAMED_DATASET, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+
+        /* Verify file ID from dataset matches correct file */
+        dset_fid = H5Iget_file_id(dset);
+        if(dset_fid != filea1) TEST_ERROR
+        H5Fclose(dset_fid);
+
+        /* Verify file ID from datatype (from dataset) matches correct file */
+        type = H5Dget_type(dset);
+        type_fid = H5Iget_file_id(type);
+        if(type_fid != filea1) TEST_ERROR
+        H5Fclose(type_fid);
+        H5Tclose(type);
+
+        if(H5Dclose(dset) < 0) FAIL_STACK_ERROR
+
+        if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
+        if(H5Fclose(filea2) < 0) FAIL_STACK_ERROR
+        if(H5Fclose(fileb) < 0) FAIL_STACK_ERROR
+
+
+        /* Create test file, with attribute that uses committed datatype */
+        create_del_obj_named_test_file(filename, fapl, new_format);
+
+/* Test getting file ID for attribute opened through different file ID */
+        if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
+        if((filea2 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
+
+        if((attr = H5Aopen_by_name(filea1, DEL_OBJ_NAMED_DATASET, DEL_OBJ_NAMED_ATTRIBUTE, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+
+        /* Verify file ID from dataset matches correct file */
+        attr_fid = H5Iget_file_id(attr);
+        if(attr_fid != filea1) TEST_ERROR
+        H5Fclose(attr_fid);
+
+        /* Verify file ID from datatype (from dataset) matches correct file */
+        type = H5Aget_type(attr);
+        type_fid = H5Iget_file_id(type);
+        if(type_fid != filea1) TEST_ERROR
+        H5Fclose(type_fid);
+        H5Tclose(type);
+
+        if(H5Aclose(attr) < 0) FAIL_STACK_ERROR
+
+        if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
+
+        if((fileb = H5Fcreate(filename2, H5F_ACC_TRUNC, H5P_DEFAULT, fapl2)) < 0) FAIL_STACK_ERROR
+
+        if((filea1 = H5Fopen(filename, H5F_ACC_RDWR, fapl)) < 0) FAIL_STACK_ERROR
+
+        if((attr = H5Aopen_by_name(filea1, DEL_OBJ_NAMED_DATASET, DEL_OBJ_NAMED_ATTRIBUTE, H5P_DEFAULT, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+
+        /* Verify file ID from dataset matches correct file */
+        attr_fid = H5Iget_file_id(attr);
+        if(attr_fid != filea1) TEST_ERROR
+        H5Fclose(attr_fid);
+
+        /* Verify file ID from datatype (from dataset) matches correct file */
+        type = H5Aget_type(attr);
+        type_fid = H5Iget_file_id(type);
+        if(type_fid != filea1) TEST_ERROR
+        H5Fclose(type_fid);
+        H5Tclose(type);
+
+        if(H5Aclose(attr) < 0) FAIL_STACK_ERROR
+
+        if(H5Fclose(filea1) < 0) FAIL_STACK_ERROR
+        if(H5Fclose(filea2) < 0) FAIL_STACK_ERROR
+        if(H5Fclose(fileb) < 0) FAIL_STACK_ERROR
+    } /* end for */
+
+    if(H5Pclose(fapl2) < 0) FAIL_STACK_ERROR
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+	H5Tclose(attr);
+	H5Dclose(dset);
+	H5Pclose(fapl2);
+	H5Fclose(filea1);
+	H5Fclose(filea2);
+	H5Fclose(fileb);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_delete_obj_named_fileid() */
+
 
 /*-------------------------------------------------------------------------
  * Function:	test_deprec
@@ -6640,7 +7053,12 @@ main(void)
     nerrors += test_latest();
     nerrors += test_int_float_except();
     nerrors += test_named_indirect_reopen(fapl);
+#ifndef H5_CANNOT_OPEN_TWICE
+    nerrors += test_delete_obj_named(fapl);
+    nerrors += test_delete_obj_named_fileid(fapl);
+#endif /*H5_CANNOT_OPEN_TWICE*/
     nerrors += test_set_order_compound(fapl);
+    nerrors += test_str_create();
 #ifndef H5_NO_DEPRECATED_SYMBOLS
     nerrors += test_deprec(fapl);
 #endif /* H5_NO_DEPRECATED_SYMBOLS */
@@ -6684,4 +7102,3 @@ main(void)
 
     return 0;
 }
-
diff --git a/test/enum.c b/test/enum.c
index e9f607d..3684102 100644
--- a/test/enum.c
+++ b/test/enum.c
@@ -119,9 +119,6 @@ test_named(hid_t file)
  *
  * Programmer:	Robb Matzke
  *              Monday, January  4, 1999
- *
- * Modifications:
- *
  *-------------------------------------------------------------------------
  */
 static int
diff --git a/test/error_test.c b/test/error_test.c
index 52dcc0c..1ca9686 100644
--- a/test/error_test.c
+++ b/test/error_test.c
@@ -20,11 +20,12 @@
  * Purpose:	Tests the error API routines.
  */
 #include "h5test.h"
+#include "H5srcdir.h"
 
 #ifdef H5_USE_16_API
 int main(void)
 {
-    printf("Test skipped because backward compatbility with v1.6 is configured in\n");
+    HDfprintf(stderr, "Test skipped because backward compatbility with v1.6 is configured in\n");
     return 0;
 }
 #else /* H5_USE_16_API */
@@ -34,6 +35,8 @@ const char *FILENAME[] = {
     NULL
 };
 
+#define DATAFILE "filter_error"
+
 #define DIM0    100
 #define DIM1    200
 
@@ -74,6 +77,8 @@ hid_t   ERR_MIN_GETNUM;
 #define MSG_SIZE                64
 #define LONG_DESC_SIZE          8192
 
+#define DSET_FILTER_NAME    "dataset_with_filter"
+
 static herr_t custom_print_cb(unsigned n, const H5E_error2_t *err_desc,
     void *client_data);
 
@@ -102,8 +107,7 @@ test_error(hid_t file)
     H5E_auto2_t         old_func;
     void                *old_data;
 
-    TESTING("error API based on data I/O");
-    printf("\n");
+    HDfprintf(stderr, "\nTesting error API based on data I/O\n");
 
     /* Create the data space */
     dims[0] = DIM0;
@@ -359,8 +363,9 @@ test_long_desc(void)
     /* Push an error with a long description */
     if(H5Epush(H5E_DEFAULT, __FILE__, test_FUNC, __LINE__, ERR_CLS, ERR_MAJ_TEST, ERR_MIN_SUBROUTINE, format, long_desc) < 0) TEST_ERROR;
 
-    /* Create the string that should be in the description */
-    HDsnprintf(full_desc, LONG_DESC_SIZE + 128, format, long_desc);
+    /* Create the string that should be in the description. Must use HDsnprintf here
+     * because snprintf is _snprintf on Windows */
+    HDsnprintf(full_desc, (size_t)(LONG_DESC_SIZE + 128), format, long_desc);
 
     /* Make certain that the description is correct */
     if(H5Ewalk2(H5E_DEFAULT, H5E_WALK_UPWARD, long_desc_cb, full_desc) < 0) TEST_ERROR;
@@ -401,12 +406,12 @@ static herr_t
 dump_error(hid_t estack)
 {
     /* Print errors in library default way */
-    fprintf(stderr, "********* Print error stack in HDF5 default way *********\n");
+    HDfprintf(stderr, "********* Print error stack in HDF5 default way *********\n");
     if(H5Eprint2(estack, stderr) < 0)
         TEST_ERROR;
 
     /* Customized way to print errors */
-    fprintf(stderr, "\n********* Print error stack in customized way *********\n");
+    HDfprintf(stderr, "\n********* Print error stack in customized way *********\n");
     if(H5Ewalk2(estack, H5E_WALK_UPWARD, custom_print_cb, stderr) < 0)
         TEST_ERROR;
 
@@ -450,12 +455,12 @@ custom_print_cb(unsigned n, const H5E_error2_t *err_desc, void* client_data)
     if(H5Eget_msg(err_desc->min_num, NULL, min, MSG_SIZE) < 0)
         TEST_ERROR;
 
-    fprintf(stream, "%*serror #%03d: %s in %s(): line %u\n",
+    HDfprintf(stream, "%*serror #%03d: %s in %s(): line %u\n",
 	     indent, "", n, err_desc->file_name,
 	     err_desc->func_name, err_desc->line);
-    fprintf(stream, "%*sclass: %s\n", indent * 2, "", cls);
-    fprintf(stream, "%*smajor: %s\n", indent * 2, "", maj);
-    fprintf(stream, "%*sminor: %s\n", indent * 2, "", min);
+    HDfprintf(stream, "%*sclass: %s\n", indent * 2, "", cls);
+    HDfprintf(stream, "%*smajor: %s\n", indent * 2, "", maj);
+    HDfprintf(stream, "%*sminor: %s\n", indent * 2, "", min);
 
     return 0;
 
@@ -534,7 +539,6 @@ test_copy(void)
     const char *err_func = "test_copy";      /* Function name for pushing error */
     const char *err_msg = "Error message";     /* Error message for pushing error */
     int         err_num;             /* Number of errors on stack */
-    int         err_num_copy;        /* Number of errors on stack copy */
     hid_t       estack_id;           /* Error stack ID */
     herr_t      ret;                 /* Generic return value */
 
@@ -618,6 +622,57 @@ error:
 
 
 /*-------------------------------------------------------------------------
+ * Function:	test_filter_error
+ *
+ * Purpose:	Make sure the error message prints out the filter name
+ *              when the existent file is opened but the filter isn't 
+ *              registered. The existent file was created with 
+ *              gen_filters.c. 
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *		2 June 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_filter_error(const char *fname)
+{
+    const char *pathname = H5_get_srcdir_filename(fname); /* Corrected test file name */
+    hid_t       file, dataset;         /* handles */
+    int         buf[20];
+
+    HDfprintf(stderr, "\nTesting error message during data reading when filter isn't registered\n");
+
+    /* Open the file */
+    if((file = H5Fopen(pathname, H5F_ACC_RDONLY, H5P_DEFAULT)) < 0)
+        TEST_ERROR;
+
+    /* Open the regular dataset */
+    if((dataset = H5Dopen2(file, DSET_FILTER_NAME, H5P_DEFAULT)) < 0)
+        TEST_ERROR;
+
+    if(H5Dread(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) >= 0)
+	TEST_ERROR;
+
+    /* Close/release resources */
+    if(H5Dclose(dataset) < 0)
+        TEST_ERROR
+
+    if(H5Fclose(file) < 0)
+        TEST_ERROR
+
+    return 0;
+
+error:
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
  * Function:	main
  *
  * Purpose:	Test error API.
@@ -635,7 +690,7 @@ main(void)
     char		filename[1024];
     const char          *FUNC_main = "main";
 
-    fprintf(stderr, "   This program tests the Error API.  There're supposed to be some error messages\n");
+    HDfprintf(stderr, "   This program tests the Error API.  There're supposed to be some error messages\n");
 
     /* Initialize errors */
     if(init_error() < 0)
@@ -689,17 +744,25 @@ main(void)
     if(test_copy() < 0) TEST_ERROR;
 
     if(H5Fclose(file) < 0) TEST_ERROR;
-    h5_cleanup(FILENAME, fapl);
 
     /* Close error information */
     if(close_error() < 0)
         TEST_ERROR;
 
-    printf("All error API tests passed.\n");
+    /* Test error message during data reading when filter isn't registered 
+     * Use default FAPL to avoid some VFD drivers by the check-vfd test because
+     * the test file was pre-generated. */
+    h5_fixname(DATAFILE, H5P_DEFAULT, filename, sizeof filename);
+    if(test_filter_error(filename) < 0)
+        TEST_ERROR;
+
+    h5_cleanup(FILENAME, fapl);
+
+    HDfprintf(stderr, "\nAll error API tests passed.\n");
     return 0;
 
 error:
-    printf("***** ERROR TEST FAILED! *****\n");
+    HDfprintf(stderr, "\n***** ERROR TEST FAILED (real problem)! *****\n");
     return 1;
 }
 #endif /* H5_USE_16_API */
diff --git a/test/filter_error.h5 b/test/filter_error.h5
new file mode 100644
index 0000000..370cc1c
Binary files /dev/null and b/test/filter_error.h5 differ
diff --git a/test/flush2.c b/test/flush2.c
index 5675856..da41415 100644
--- a/test/flush2.c
+++ b/test/flush2.c
@@ -17,10 +17,10 @@
  * Programmer:  Robb Matzke <matzke at llnl.gov>
  *              Friday, October 23, 1998
  *
- * Purpose:	This is the second half of a two-part test that makes sure
- *		that a file can be read after an application crashes as long
- *		as the file was flushed first.  This half tries to read the
- *		file created by the first half.
+ * Purpose:  This is the second half of a two-part test that makes sure
+ *    that a file can be read after an application crashes as long
+ *    as the file was flushed first.  This half tries to read the
+ *    file created by the first half.
  */
 #include "h5test.h"
 
@@ -31,19 +31,19 @@ const char *FILENAME[] = {
     NULL
 };
 
-static double	the_data[100][100];
+static double  the_data[100][100];
 
 /*-------------------------------------------------------------------------
- * Function:	check_dset
+ * Function:  check_dset
  *
- * Purpose:	Part 2 of a two-part H5Fflush() test, checks if the data in a dataset
- * 		is what it is supposed to be.
+ * Purpose:  Part 2 of a two-part H5Fflush() test, checks if the data in a dataset
+ *     is what it is supposed to be.
  *
- * Return:	Success:	0
+ * Return:  Success:  0
  *
- *		Failure:	1
+ *    Failure:  1
  *
- * Programmer:	Leon Arber
+ * Programmer:  Leon Arber
  *              Oct. 4, 2006.
  *
  *-------------------------------------------------------------------------
@@ -51,10 +51,10 @@ static double	the_data[100][100];
 static int
 check_dset(hid_t file, const char* name)
 {
-    hid_t	space, dset;
-    hsize_t	ds_size[2] = {100, 100};
-    double	error;
-    size_t	i, j;
+    hid_t  space, dset;
+    hsize_t  ds_size[2] = {100, 100};
+    double  error;
+    size_t  i, j;
 
     /* Open the dataset */
     if((dset = H5Dopen2(file, name, H5P_DEFAULT)) < 0) goto error;
@@ -64,24 +64,24 @@ check_dset(hid_t file, const char* name)
 
     /* Read some data */
     if(H5Dread(dset, H5T_NATIVE_DOUBLE, space, space, H5P_DEFAULT,
-		the_data) < 0) goto error;
+    the_data) < 0) goto error;
     for(i = 0; i < (size_t)ds_size[0]; i++)
-	for(j = 0; j < (size_t)ds_size[1]; j++) {
-	    /*
-	     * The extra cast in the following statement is a bug workaround
-	     * for the Win32 version 5.0 compiler.
-	     * 1998-11-06 ptl
-	     */
-	    error = fabs(the_data[i][j] - (double)(hssize_t)i / ((hssize_t)j + 1));
-	    if(error > 0.0001) {
-		H5_FAILED();
-		printf("    dset[%lu][%lu] = %g\n",
-			(unsigned long)i, (unsigned long)j, the_data[i][j]);
-		printf("    should be %g\n",
-			(double)(hssize_t)i/(hssize_t)(j+1));
-		goto error;
-	    }
-	}
+  for(j = 0; j < (size_t)ds_size[1]; j++) {
+      /*
+       * The extra cast in the following statement is a bug workaround
+       * for the Win32 version 5.0 compiler.
+       * 1998-11-06 ptl
+       */
+      error = fabs(the_data[i][j] - (double)(hssize_t)i / ((hssize_t)j + 1));
+      if(error > 0.0001) {
+    H5_FAILED();
+    printf("    dset[%lu][%lu] = %g\n",
+      (unsigned long)i, (unsigned long)j, the_data[i][j]);
+    printf("    should be %g\n",
+      (double)(hssize_t)i/(hssize_t)(j+1));
+    goto error;
+      }
+  }
     if(H5Dclose(dset) < 0) goto error;
     return 0;
 
@@ -91,15 +91,15 @@ error:
 
 
 /*-------------------------------------------------------------------------
- * Function:	check_file
+ * Function:  check_file
  *
- * Purpose:	Part 2 of a two-part H5Fflush() test.
+ * Purpose:  Part 2 of a two-part H5Fflush() test.
  *
- * Return:	Success:	0
+ * Return:  Success:  0
  *
- *		Failure:	1
+ *    Failure:  1
  *
- * Programmer:	Leon Arber
+ * Programmer:  Leon Arber
  *              Sept. 26, 2006.
  *
  *-------------------------------------------------------------------------
@@ -107,9 +107,9 @@ error:
 static int
 check_file(char* filename, hid_t fapl, int flag)
 {
-    hid_t	file, groups, grp;
-    char	name[1024];
-    int		i;
+    hid_t  file, groups, grp;
+    char  name[1024];
+    int    i;
 
     if((file = H5Fopen(filename, H5F_ACC_RDONLY, fapl)) < 0) goto error;
     if(check_dset(file, "dset")) goto error;
@@ -117,9 +117,9 @@ check_file(char* filename, hid_t fapl, int flag)
     /* Open some groups */
     if((groups = H5Gopen2(file, "some_groups", H5P_DEFAULT)) < 0) goto error;
     for(i = 0; i < 100; i++) {
-	sprintf(name, "grp%02u", (unsigned)i);
-	if((grp = H5Gopen2(groups, name, H5P_DEFAULT)) < 0) goto error;
-	if(H5Gclose(grp) < 0) goto error;
+  sprintf(name, "grp%02u", (unsigned)i);
+  if((grp = H5Gopen2(groups, name, H5P_DEFAULT)) < 0) goto error;
+  if(H5Gclose(grp) < 0) goto error;
     } /* end for */
 
     /* Check to see if that last added dataset in the third file is accessible
@@ -137,20 +137,20 @@ error:
 
 
 /*-------------------------------------------------------------------------
- * Function:	main
+ * Function:  main
  *
- * Purpose:	Part 2 of a two-part H5Fflush() test.
+ * Purpose:  Part 2 of a two-part H5Fflush() test.
  *
- * Return:	Success:	0
+ * Return:  Success:  0
  *
- *		Failure:	1
+ *    Failure:  1
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Friday, October 23, 1998
  *
  * Modifications:
- * 		Leon Arber
- * 		Sept. 26, 2006, expand to check for case where the was file not flushed.
+ *     Leon Arber
+ *     Sept. 26, 2006, expand to check for case where the was file not flushed.
  *
  *-------------------------------------------------------------------------
  */
@@ -159,7 +159,7 @@ main(void)
 {
     hid_t fapl;
     H5E_auto2_t func;
-    char	name[1024];
+    char  name[1024];
 
     h5_reset();
     fapl = h5_fileaccess();
@@ -186,7 +186,7 @@ main(void)
         PASSED()
     else
     {
-#if defined _WIN32 && defined _HDF5USEDLL_
+#if defined H5_HAVE_WIN32_API && defined _HDF5USEDLL_
     SKIPPED();
     puts("   DLL will flush the file even when calling _exit, skip this test temporarily");
 #elif defined H5_VMS
@@ -209,7 +209,7 @@ main(void)
         PASSED()
     else
     {
-#if defined _WIN32 && defined _HDF5USEDLL_
+#if defined H5_HAVE_WIN32_API && defined _HDF5USEDLL_
     SKIPPED();
     puts("   DLL will flush the file even when calling _exit, skip this test temporarily");
 #elif defined H5_VMS
diff --git a/test/gen_filters.c b/test/gen_filters.c
index 6d24fb3..58400d5 100644
--- a/test/gen_filters.c
+++ b/test/gen_filters.c
@@ -13,20 +13,38 @@
  * access to either file, you may request a copy from help at hdfgroup.org.     *
  * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
-/*
+#include "h5test.h"
+
+#define TESTFILE1   "test_filters.h5"
+#define TESTFILE2   "filter_error.h5"
+#define DSETNAME    "dataset_with_filter"
+
+/* Temporary filter IDs used for testing */
+#define H5Z_FILTER_BOGUS	305
+
+/* Local prototypes for filter functions */
+static size_t filter_bogus(unsigned int flags, size_t cd_nelmts,
+    const unsigned int *cd_values, size_t nbytes, size_t *buf_size, void **buf);
+
+
+/*-------------------------------------------------------------------------
+ * Function:	create_file_with_bogus_filter
+ *
+ * Purpose:	Create a dataset with the fletcher filter.
+ *	        This function is used to create the test file `test_filters.h5' 
+ *              which has a dataset with the "fletcher" I/O filter.  This dataset 
+ *              will be used to verify the correct behavior of the library in 
+ *              the test "dsets"
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
  * Programmer:  Pedro Vicente <pvn at ncsa.uiuc.edu>
  *              Thursday, March 25, 2004
  *
- * Purpose:	Create a dataset with the fletcher filter.
- *	This program is used to create the test file `test_filters.h5' which has
- *      a dataset with the "fletcher" I/O filter.  This dataset will
- *      be used to verify the correct behavior of the library in the test "dsets"
+ *-------------------------------------------------------------------------
  */
-#include "hdf5.h"
-
-#define TESTFILE   "test_filters.h5"
-
-
 static herr_t
 test_filters_endianess(void)
 {
@@ -45,7 +63,7 @@ test_filters_endianess(void)
         buf[i] = 1;
 
     /* create a file using default properties */
-    if((fid = H5Fcreate(TESTFILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto error;
+    if((fid = H5Fcreate(TESTFILE1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto error;
 
     /* create a data space */
     if((sid = H5Screate_simple(rank, dims, NULL)) < 0) goto error;
@@ -82,7 +100,109 @@ error:
 #endif /* H5_HAVE_FILTER_FLETCHER32 */
 } /* end test_filters_endianess() */
 
+/* This message derives from H5Z */
+const H5Z_class2_t H5Z_BOGUS[1] = {{
+    H5Z_CLASS_T_VERS,       /* H5Z_class_t version */
+    H5Z_FILTER_BOGUS,		/* Filter id number		*/
+    1, 1,               /* Encoding and decoding enabled */
+    "bogus",			/* Filter name for debugging	*/
+    NULL,                       /* The "can apply" callback     */
+    NULL,                       /* The "set local" callback     */
+    filter_bogus,		/* The actual filter function	*/
+}};
 
+
+/*-------------------------------------------------------------------------
+ * Function:	filter_bogus
+ *
+ * Purpose:	A bogus compression method that doesn't do anything.
+ *
+ * Return:	Success:	Data chunk size
+ *
+ *		Failure:	0
+ *
+ * Programmer:	Raymond Lu
+ *              2 June 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+static size_t
+filter_bogus(unsigned int UNUSED flags, size_t UNUSED cd_nelmts,
+      const unsigned int UNUSED *cd_values, size_t nbytes,
+      size_t UNUSED *buf_size, void UNUSED **buf)
+{
+    return nbytes;
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:	create_file_with_bogus_filter
+ *
+ * Purpose:	Create a file and a dataset with a bogus filter enabled
+ *
+ * Return:	Success:	0
+ *
+ *		Failure:	-1
+ *
+ * Programmer:	Raymond Lu
+ *              2 June 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+create_file_with_bogus_filter(void)
+{
+    hid_t     fid = -1;              /* file ID */
+    hid_t     dsid = -1;             /* dataset ID */
+    hid_t     sid = -1;              /* dataspace ID */
+    hid_t     dcpl = -1;             /* dataset creation property list ID */
+    hsize_t   dims[1] = {20};        /* dataspace dimensions */
+    hsize_t   chunk_dims[1] = {10};  /* chunk dimensions */
+    int       buf[20];
+    int       rank = 1;
+    int       i;
+
+    for(i = 0; i < 20; i++)
+        buf[i] = 1;
+
+    /* create a file using default properties */
+    if((fid = H5Fcreate(TESTFILE2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0) goto error;
+
+    /* create a data space */
+    if((sid = H5Screate_simple(rank, dims, NULL)) < 0) goto error;
+
+    /* create dcpl  */
+    if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) goto error;
+
+    /* create chunking */ 
+    if(H5Pset_chunk(dcpl, rank, chunk_dims) < 0) goto error;
+
+    /* register bogus filter */
+    if(H5Zregister (H5Z_BOGUS) < 0) goto error;
+    if(H5Pset_filter(dcpl, H5Z_FILTER_BOGUS, 0, (size_t)0, NULL) < 0) goto error;
+
+    /* create a dataset */
+    if((dsid = H5Dcreate2(fid, DSETNAME, H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0) goto error;
+
+    if(H5Dwrite(dsid, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0) goto error;
+
+    /* close */
+    if(H5Pclose(dcpl) < 0) goto error;
+    if(H5Dclose(dsid) < 0) goto error;
+    if(H5Sclose(sid) < 0) goto error;
+    if(H5Fclose(fid) < 0) goto error;
+
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Pclose(dcpl);
+        H5Dclose(dsid);
+        H5Sclose(sid);
+        H5Fclose(fid);
+    } H5E_END_TRY;
+    return -1;
+}
 
 
 /*-------------------------------------------------------------------------
@@ -99,7 +219,20 @@ error:
 int
 main(void)
 {
-   test_filters_endianess();
+   int nerrors = 0;
+
+   nerrors += test_filters_endianess() < 0 ? 1 : 0;
+   nerrors += create_file_with_bogus_filter() < 0 ? 1 : 0;
+
+   if(nerrors)
+       goto error;
+   printf("All tests passed.\n");
+
    return 0;
+
+error:
+   nerrors = MAX(1, nerrors);
+   printf("***** %d GEN_FILTERS FAILURES *****\n", nerrors);
+   return 1;
 }
 
diff --git a/test/h5test.c b/test/h5test.c
index 02bbf22..e5e798e 100644
--- a/test/h5test.c
+++ b/test/h5test.c
@@ -17,11 +17,11 @@
  * Programmer:  Robb Matzke <matzke at llnl.gov>
  *              Thursday, November 19, 1998
  *
- * Purpose:	Provides support functions for most of the hdf5 tests cases.
+ * Purpose:  Provides support functions for most of the hdf5 tests cases.
  *
  */
 
-#undef NDEBUG			/*override -DNDEBUG			*/
+#undef NDEBUG      /*override -DNDEBUG      */
 #include <sys/types.h>
 #include <sys/stat.h>
 #include "h5test.h"
@@ -32,35 +32,33 @@
 #define H5G_TESTING
 #include "H5Gpkg.h"
 
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
 #include <process.h>
-#include <direct.h>
-#include <winsock2.h>
-#endif  /* _WIN32 */
+#endif  /* H5_HAVE_WIN32_API */
 
 /*
  * Define these environment variables or constants to influence functions in
  * this test support library.  The environment variable is used in preference
  * to the cpp constant.  If neither is defined then use some default value.
  *
- * HDF5_DRIVER:		This string describes what low level file driver to
- *			use for HDF5 file access.  The first word in the
- *			value is the name of the driver and subsequent data
- *			is interpreted according to the driver.  See
- *			h5_fileaccess() for details.
- *
- * HDF5_PREFIX:		A string to add to the beginning of all serial test
- *			file names.  This can be used to run tests in a
- *			different file system (e.g., "/tmp" or "/tmp/myname").
- *			The prefix will be separated from the base file name
- *			by a slash. See h5_fixname() for details.
- *
- * HDF5_PARAPREFIX:	A string to add to the beginning of all parallel test
- *			file names.  This can be used to tell MPIO what driver
- *			to use (e.g., "gfs:", "ufs:", or "nfs:") or to use a
- *			different file system (e.g., "/tmp" or "/tmp/myname").
- *			The prefix will be separated from the base file name
- *			by a slash. See h5_fixname() for details.
+ * HDF5_DRIVER:    This string describes what low level file driver to
+ *      use for HDF5 file access.  The first word in the
+ *      value is the name of the driver and subsequent data
+ *      is interpreted according to the driver.  See
+ *      h5_fileaccess() for details.
+ *
+ * HDF5_PREFIX:    A string to add to the beginning of all serial test
+ *      file names.  This can be used to run tests in a
+ *      different file system (e.g., "/tmp" or "/tmp/myname").
+ *      The prefix will be separated from the base file name
+ *      by a slash. See h5_fixname() for details.
+ *
+ * HDF5_PARAPREFIX:  A string to add to the beginning of all parallel test
+ *      file names.  This can be used to tell MPIO what driver
+ *      to use (e.g., "gfs:", "ufs:", or "nfs:") or to use a
+ *      different file system (e.g., "/tmp" or "/tmp/myname").
+ *      The prefix will be separated from the base file name
+ *      by a slash. See h5_fixname() for details.
  *
  */
 /*
@@ -72,7 +70,7 @@
 #ifndef HDF5_PARAPREFIX
 #define HDF5_PARAPREFIX ""
 #endif
-char	*paraprefix = NULL;	/* for command line option para-prefix */
+char  *paraprefix = NULL;  /* for command line option para-prefix */
 #ifdef H5_HAVE_PARALLEL
 MPI_Info    h5_io_info_g=MPI_INFO_NULL;/* MPI INFO object for IO */
 #endif
@@ -84,13 +82,13 @@ MPI_Info    h5_io_info_g=MPI_INFO_NULL;/* MPI INFO object for IO */
  * These are the letters that are appended to the file name when generating
  * names for the split and multi drivers. They are:
  *
- * 	m: All meta data when using the split driver.
- *	s: The userblock, superblock, and driver info block
- *	b: B-tree nodes
- *	r: Dataset raw data
- *	g: Global heap
- *	l: local heap (object names)
- *	o: object headers
+ *   m: All meta data when using the split driver.
+ *  s: The userblock, superblock, and driver info block
+ *  b: B-tree nodes
+ *  r: Dataset raw data
+ *  g: Global heap
+ *  l: local heap (object names)
+ *  o: object headers
  */
 static const char *multi_letters = "msbrglo";
 
@@ -98,16 +96,16 @@ static herr_t h5_errors(hid_t estack, void *client_data);
 
 
 /*-------------------------------------------------------------------------
- * Function:	h5_errors
+ * Function:  h5_errors
  *
- * Purpose:	Displays the error stack after printing "*FAILED*".
+ * Purpose:  Displays the error stack after printing "*FAILED*".
  *
- * Return:	Success:	0
+ * Return:  Success:  0
  *
- *		Failure:	-1
+ *    Failure:  -1
  *
- * Programmer:	Robb Matzke
- *		Wednesday, March  4, 1998
+ * Programmer:  Robb Matzke
+ *    Wednesday, March  4, 1998
  *
  * Modifications:
  *
@@ -123,50 +121,50 @@ h5_errors(hid_t estack, void UNUSED *client_data)
 
 
 /*-------------------------------------------------------------------------
- * Function:	h5_cleanup
+ * Function:  h5_cleanup
  *
- * Purpose:	Cleanup temporary test files.
- *		base_name contains the list of test file names.
- *		The file access property list is also closed.
+ * Purpose:  Cleanup temporary test files.
+ *    base_name contains the list of test file names.
+ *    The file access property list is also closed.
  *
- * Return:	Non-zero if cleanup actions were performed; zero otherwise.
+ * Return:  Non-zero if cleanup actions were performed; zero otherwise.
  *
- * Programmer:	Albert Cheng
+ * Programmer:  Albert Cheng
  *              May 28, 1998
  *
  * Modifications:
- *		Albert Cheng, 2000-09-09
- *		Added the explicite base_name argument to replace the
- *		global variable FILENAME.
+ *    Albert Cheng, 2000-09-09
+ *    Added the explicite base_name argument to replace the
+ *    global variable FILENAME.
  *
  *-------------------------------------------------------------------------
  */
 int
 h5_cleanup(const char *base_name[], hid_t fapl)
 {
-    char	filename[1024];
-    char	temp[2048];
-    int		i, j;
-    int		retval=0;
-    hid_t	driver;
+    char  filename[1024];
+    char  temp[2048];
+    int    i, j;
+    int    retval=0;
+    hid_t  driver;
 
     if (GetTestCleanup()){
-	for (i = 0; base_name[i]; i++) {
-	    if (h5_fixname(base_name[i], fapl, filename, sizeof(filename)) == NULL)
-		continue;
+  for (i = 0; base_name[i]; i++) {
+      if (h5_fixname(base_name[i], fapl, filename, sizeof(filename)) == NULL)
+    continue;
 
             driver = H5Pget_driver(fapl);
 
-	    if (driver == H5FD_FAMILY) {
-		for (j = 0; /*void*/; j++) {
-		    HDsnprintf(temp, sizeof temp, filename, j);
+      if (driver == H5FD_FAMILY) {
+    for (j = 0; /*void*/; j++) {
+        HDsnprintf(temp, sizeof temp, filename, j);
 
-		    if (HDaccess(temp, F_OK) < 0)
+        if (HDaccess(temp, F_OK) < 0)
                         break;
 
-		    HDremove(temp);
-		}
-	    } else if (driver == H5FD_CORE) {
+        HDremove(temp);
+    }
+      } else if (driver == H5FD_CORE) {
                 hbool_t backing;        /* Whether the core file has backing store */
 
                 H5Pget_fapl_core(fapl,NULL,&backing);
@@ -175,21 +173,21 @@ h5_cleanup(const char *base_name[], hid_t fapl)
                 if(backing)
                     HDremove(filename);
 
-	    } else if (driver == H5FD_MULTI) {
-		H5FD_mem_t mt;
-		assert(HDstrlen(multi_letters)==H5FD_MEM_NTYPES);
-
-		for (mt = H5FD_MEM_DEFAULT; mt < H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t,mt)) {
-		    HDsnprintf(temp, sizeof temp, "%s-%c.h5",
-			       filename, multi_letters[mt]);
-		    HDremove(temp); /*don't care if it fails*/
-		}
-	    } else {
-		HDremove(filename);
-	    }
-	}
-
-	retval = 1;
+      } else if (driver == H5FD_MULTI) {
+    H5FD_mem_t mt;
+    assert(HDstrlen(multi_letters)==H5FD_MEM_NTYPES);
+
+    for (mt = H5FD_MEM_DEFAULT; mt < H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t,mt)) {
+        HDsnprintf(temp, sizeof temp, "%s-%c.h5",
+             filename, multi_letters[mt]);
+        HDremove(temp); /*don't care if it fails*/
+    }
+      } else {
+    HDremove(filename);
+      }
+  }
+
+  retval = 1;
     }
 
     H5Pclose(fapl);
@@ -198,13 +196,13 @@ h5_cleanup(const char *base_name[], hid_t fapl)
 
 
 /*-------------------------------------------------------------------------
- * Function:	h5_reset
+ * Function:  h5_reset
  *
- * Purpose:	Reset the library by closing it.
+ * Purpose:  Reset the library by closing it.
  *
- * Return:	void
+ * Return:  void
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Friday, November 20, 1998
  *
  * Modifications:
@@ -230,7 +228,7 @@ h5_reset(void)
  */
 #ifdef OLD_WAY
 {
-    char	filename[1024];
+    char  filename[1024];
 
     /*
      * Cause the library to emit some diagnostics early so they don't
@@ -238,12 +236,12 @@ h5_reset(void)
      */
     sprintf(filename, "/tmp/h5emit-%05d.h5", HDgetpid());
     H5E_BEGIN_TRY {
-	hid_t file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT,
-			       H5P_DEFAULT);
-	hid_t grp = H5Gcreate2(file, "emit", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
-	H5Gclose(grp);
-	H5Fclose(file);
-	HDunlink(filename);
+  hid_t file = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT,
+             H5P_DEFAULT);
+  hid_t grp = H5Gcreate2(file, "emit", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+  H5Gclose(grp);
+  H5Fclose(file);
+  HDunlink(filename);
     } H5E_END_TRY;
 }
 #endif /* OLD_WAY */
@@ -251,34 +249,34 @@ h5_reset(void)
 
 
 /*-------------------------------------------------------------------------
- * Function:	h5_fixname
+ * Function:  h5_fixname
  *
- * Purpose:	Create a file name from a file base name like `test' and
- *		return it through the FULLNAME (at most SIZE characters
- *		counting the null terminator). The full name is created by
- *		prepending the contents of HDF5_PREFIX (separated from the
- *		base name by a slash) and appending a file extension based on
- *		the driver supplied, resulting in something like
- *		`ufs:/u/matzke/test.h5'.
+ * Purpose:  Create a file name from a file base name like `test' and
+ *    return it through the FULLNAME (at most SIZE characters
+ *    counting the null terminator). The full name is created by
+ *    prepending the contents of HDF5_PREFIX (separated from the
+ *    base name by a slash) and appending a file extension based on
+ *    the driver supplied, resulting in something like
+ *    `ufs:/u/matzke/test.h5'.
  *
- * Return:	Success:	The FULLNAME pointer.
+ * Return:  Success:  The FULLNAME pointer.
  *
- *		Failure:	NULL if BASENAME or FULLNAME is the null
- *				pointer or if FULLNAME isn't large enough for
- *				the result.
+ *    Failure:  NULL if BASENAME or FULLNAME is the null
+ *        pointer or if FULLNAME isn't large enough for
+ *        the result.
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, November 19, 1998
  *
  * Modifications:
- *		Robb Matzke, 1999-08-03
- *		Modified to use the virtual file layer.
+ *    Robb Matzke, 1999-08-03
+ *    Modified to use the virtual file layer.
  *
- *		Albert Cheng, 2000-01-25
- *		Added prefix for parallel test files.
+ *    Albert Cheng, 2000-01-25
+ *    Added prefix for parallel test files.
  *
- * 		Albert Cheng, 2003-05-08
- *		Changed the default parallel prefix back to NULL but added
+ *     Albert Cheng, 2003-05-08
+ *    Changed the default parallel prefix back to NULL but added
  *              an explanation remark of $HDF5_PARAPREFIX.
  *-------------------------------------------------------------------------
  */
@@ -290,7 +288,7 @@ h5_fixname(const char *base_name, hid_t fapl, char *fullname, size_t size)
     char           *ptr, last = '\0';
     size_t          i, j;
     hid_t           driver = -1;
-    int		    isppdriver = 0;	/* if the driver is MPI parallel */
+    int        isppdriver = 0;  /* if the driver is MPI parallel */
 
     if (!base_name || !fullname || size < 1)
         return NULL;
@@ -299,20 +297,20 @@ h5_fixname(const char *base_name, hid_t fapl, char *fullname, size_t size)
 
     /* figure out the suffix */
     if (H5P_DEFAULT != fapl) {
-	if ((driver = H5Pget_driver(fapl)) < 0)
+  if ((driver = H5Pget_driver(fapl)) < 0)
             return NULL;
 
-	if (H5FD_FAMILY == driver)
-	    suffix = "%05d.h5";
-	else if (H5FD_MULTI == driver)
-	    suffix = NULL;
+  if (H5FD_FAMILY == driver)
+      suffix = "%05d.h5";
+  else if (H5FD_MULTI == driver)
+      suffix = NULL;
     }
 
     /* Must first check fapl is not H5P_DEFAULT (-1) because H5FD_XXX
      * could be of value -1 if it is not defined.
      */
     isppdriver = H5P_DEFAULT != fapl &&
-	(H5FD_MPIO==driver || H5FD_MPIPOSIX==driver);
+  (H5FD_MPIO==driver || H5FD_MPIPOSIX==driver);
 
     /* Check HDF5_NOCLEANUP environment setting.
      * (The #ifdef is needed to prevent compile failure in case MPI is not
@@ -320,12 +318,12 @@ h5_fixname(const char *base_name, hid_t fapl, char *fullname, size_t size)
      */
     if (isppdriver){
 #ifdef H5_HAVE_PARALLEL
-	if (getenv_all(MPI_COMM_WORLD, 0, "HDF5_NOCLEANUP"))
-	    SetTestNoCleanup();
+  if (getenv_all(MPI_COMM_WORLD, 0, "HDF5_NOCLEANUP"))
+      SetTestNoCleanup();
 #endif  /* H5_HAVE_PARALLEL */
     }else{
-	if (HDgetenv("HDF5_NOCLEANUP"))
-	    SetTestNoCleanup();
+  if (HDgetenv("HDF5_NOCLEANUP"))
+      SetTestNoCleanup();
     }
 
     /* Check what prefix to use for test files. Process HDF5_PARAPREFIX and
@@ -336,52 +334,52 @@ h5_fixname(const char *base_name, hid_t fapl, char *fullname, size_t size)
      */
     if (isppdriver){
 #ifdef H5_HAVE_PARALLEL
-	/*
+  /*
          * For parallel:
          *      First use command line option, then the environment
          *      variable, then try the constant
-	 */
+   */
         static int explained = 0;
 
-	prefix = (paraprefix ? paraprefix : getenv_all(MPI_COMM_WORLD, 0, "HDF5_PARAPREFIX"));
+  prefix = (paraprefix ? paraprefix : getenv_all(MPI_COMM_WORLD, 0, "HDF5_PARAPREFIX"));
 
-	if (!prefix && !explained) {
-	    /* print hint by process 0 once. */
-	    int mpi_rank;
+  if (!prefix && !explained) {
+      /* print hint by process 0 once. */
+      int mpi_rank;
 
-	    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+      MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
 
-	    if (mpi_rank == 0)
-		printf("*** Hint ***\n"
-		   "You can use environment variable HDF5_PARAPREFIX to "
-		   "run parallel test files in a\n"
-		   "different directory or to add file type prefix. E.g.,\n"
-		   "   HDF5_PARAPREFIX=pfs:/PFS/user/me\n"
-		   "   export HDF5_PARAPREFIX\n"
-		   "*** End of Hint ***\n");
+      if (mpi_rank == 0)
+    printf("*** Hint ***\n"
+       "You can use environment variable HDF5_PARAPREFIX to "
+       "run parallel test files in a\n"
+       "different directory or to add file type prefix. E.g.,\n"
+       "   HDF5_PARAPREFIX=pfs:/PFS/user/me\n"
+       "   export HDF5_PARAPREFIX\n"
+       "*** End of Hint ***\n");
 
-	    explained = TRUE;
+      explained = TRUE;
 #ifdef HDF5_PARAPREFIX
             prefix = HDF5_PARAPREFIX;
 #endif  /* HDF5_PARAPREFIX */
-	}
+  }
 #endif  /* H5_HAVE_PARALLEL */
     } else {
-	/*
+  /*
          * For serial:
          *      First use the environment variable, then try the constant
-	 */
-	prefix = HDgetenv("HDF5_PREFIX");
+   */
+  prefix = HDgetenv("HDF5_PREFIX");
 
 #ifdef HDF5_PREFIX
-	if (!prefix)
+  if (!prefix)
             prefix = HDF5_PREFIX;
 #endif  /* HDF5_PREFIX */
     }
 
     /* Prepend the prefix value to the base name */
     if (prefix && *prefix) {
-	if (isppdriver){
+  if (isppdriver){
             /* This is a parallel system */
             char *subdir;
 
@@ -441,18 +439,18 @@ h5_fixname(const char *base_name, hid_t fapl, char *fullname, size_t size)
                 return NULL;
         }
     } else if (HDstrlen(base_name) >= size) {
-	/* Buffer is too small */
-	return NULL;
+  /* Buffer is too small */
+  return NULL;
     } else {
-	HDstrcpy(fullname, base_name);
+  HDstrcpy(fullname, base_name);
    }
 
     /* Append a suffix */
     if (suffix) {
-	if (HDstrlen(fullname) + HDstrlen(suffix) >= size)
+  if (HDstrlen(fullname) + HDstrlen(suffix) >= size)
             return NULL;
 
-	HDstrcat(fullname, suffix);
+  HDstrcat(fullname, suffix);
     }
 
     /* Remove any double slashes in the filename */
@@ -468,19 +466,19 @@ h5_fixname(const char *base_name, hid_t fapl, char *fullname, size_t size)
 
 
 /*-------------------------------------------------------------------------
- * Function:	h5_rmprefix
+ * Function:  h5_rmprefix
  *
- * Purpose:	This "removes" the MPIO driver prefix part of the file name
- *		by returning a pointer that points at the non-prefix component
+ * Purpose:  This "removes" the MPIO driver prefix part of the file name
+ *    by returning a pointer that points at the non-prefix component
  *              part of the file name.  E.g.,
- *		    Input			Return
- *		    pfs:/scratch1/dataX		/scratch1/dataX
- *		    /scratch2/dataY         	/scratch2/dataY
- *		Note that there is no change to the original file name.
+ *        Input      Return
+ *        pfs:/scratch1/dataX    /scratch1/dataX
+ *        /scratch2/dataY           /scratch2/dataY
+ *    Note that there is no change to the original file name.
  *
- * Return:	Success:	a pointer at the non-prefix part.
+ * Return:  Success:  a pointer at the non-prefix part.
  *
- * Programmer:	Albert Cheng; Jun  1, 2006
+ * Programmer:  Albert Cheng; Jun  1, 2006
  *
  *-------------------------------------------------------------------------
  */
@@ -490,26 +488,26 @@ h5_rmprefix(const char *filename)
     const char *ret_ptr;
 
     if ((ret_ptr = HDstrstr(filename, ":")) == NULL)
-	ret_ptr = filename;
+  ret_ptr = filename;
     else
-	ret_ptr++;
+  ret_ptr++;
 
     return(ret_ptr);
 }
 
 
 /*-------------------------------------------------------------------------
- * Function:	h5_fileaccess
+ * Function:  h5_fileaccess
  *
- * Purpose:	Returns a file access template which is the default template
- *		but with a file driver set according to the constant or
- *		environment variable HDF5_DRIVER
+ * Purpose:  Returns a file access template which is the default template
+ *    but with a file driver set according to the constant or
+ *    environment variable HDF5_DRIVER
  *
- * Return:	Success:	A file access property list
+ * Return:  Success:  A file access property list
  *
- *		Failure:	-1
+ *    Failure:  -1
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Thursday, November 19, 1998
  *
  * Modifications:
@@ -519,8 +517,8 @@ h5_rmprefix(const char *filename)
 hid_t
 h5_fileaccess(void)
 {
-    const char	*val = NULL;
-    const char	*name;
+    const char  *val = NULL;
+    const char  *name;
     char s[1024];
     hid_t fapl = -1;
 
@@ -538,53 +536,53 @@ h5_fileaccess(void)
     if (NULL==(name=HDstrtok(s, " \t\n\r"))) return fapl;
 
     if (!HDstrcmp(name, "sec2")) {
-	/* Unix read() and write() system calls */
-	if (H5Pset_fapl_sec2(fapl)<0) return -1;
+  /* Unix read() and write() system calls */
+  if (H5Pset_fapl_sec2(fapl)<0) return -1;
     } else if (!HDstrcmp(name, "stdio")) {
-	/* Standard C fread() and fwrite() system calls */
-	if (H5Pset_fapl_stdio(fapl)<0) return -1;
+  /* Standard C fread() and fwrite() system calls */
+  if (H5Pset_fapl_stdio(fapl)<0) return -1;
     } else if (!HDstrcmp(name, "core")) {
-	/* In-core temporary file with 1MB increment */
-	if (H5Pset_fapl_core(fapl, (size_t)1, TRUE)<0) return -1;
+  /* In-core temporary file with 1MB increment */
+  if (H5Pset_fapl_core(fapl, (size_t)1, TRUE)<0) return -1;
     } else if (!HDstrcmp(name, "split")) {
-	/* Split meta data and raw data each using default driver */
-	if (H5Pset_fapl_split(fapl,
-			      "-m.h5", H5P_DEFAULT,
-			      "-r.h5", H5P_DEFAULT)<0)
-	    return -1;
+  /* Split meta data and raw data each using default driver */
+  if (H5Pset_fapl_split(fapl,
+            "-m.h5", H5P_DEFAULT,
+            "-r.h5", H5P_DEFAULT)<0)
+      return -1;
     } else if (!HDstrcmp(name, "multi")) {
-	/* Multi-file driver, general case of the split driver */
-	H5FD_mem_t memb_map[H5FD_MEM_NTYPES];
-	hid_t memb_fapl[H5FD_MEM_NTYPES];
-	const char *memb_name[H5FD_MEM_NTYPES];
-	char sv[H5FD_MEM_NTYPES][1024];
-	haddr_t memb_addr[H5FD_MEM_NTYPES];
-        H5FD_mem_t	mt;
-
-	HDmemset(memb_map, 0, sizeof memb_map);
-	HDmemset(memb_fapl, 0, sizeof memb_fapl);
-	HDmemset(memb_name, 0, sizeof memb_name);
-	HDmemset(memb_addr, 0, sizeof memb_addr);
-
-	HDassert(HDstrlen(multi_letters)==H5FD_MEM_NTYPES);
-	for(mt = H5FD_MEM_DEFAULT; mt < H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t, mt)) {
-	    memb_fapl[mt] = H5P_DEFAULT;
-	    sprintf(sv[mt], "%%s-%c.h5", multi_letters[mt]);
-	    memb_name[mt] = sv[mt];
-	    memb_addr[mt] = (haddr_t)MAX(mt - 1, 0) * (HADDR_MAX / 10);
-	} /* end for */
-
-	if (H5Pset_fapl_multi(fapl, memb_map, memb_fapl, memb_name,
-			      memb_addr, FALSE)<0) {
-	    return -1;
-	}
+  /* Multi-file driver, general case of the split driver */
+  H5FD_mem_t memb_map[H5FD_MEM_NTYPES];
+  hid_t memb_fapl[H5FD_MEM_NTYPES];
+  const char *memb_name[H5FD_MEM_NTYPES];
+  char sv[H5FD_MEM_NTYPES][1024];
+  haddr_t memb_addr[H5FD_MEM_NTYPES];
+        H5FD_mem_t  mt;
+
+  HDmemset(memb_map, 0, sizeof memb_map);
+  HDmemset(memb_fapl, 0, sizeof memb_fapl);
+  HDmemset(memb_name, 0, sizeof memb_name);
+  HDmemset(memb_addr, 0, sizeof memb_addr);
+
+  HDassert(HDstrlen(multi_letters)==H5FD_MEM_NTYPES);
+  for(mt = H5FD_MEM_DEFAULT; mt < H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t, mt)) {
+      memb_fapl[mt] = H5P_DEFAULT;
+      sprintf(sv[mt], "%%s-%c.h5", multi_letters[mt]);
+      memb_name[mt] = sv[mt];
+      memb_addr[mt] = (haddr_t)MAX(mt - 1, 0) * (HADDR_MAX / 10);
+  } /* end for */
+
+  if (H5Pset_fapl_multi(fapl, memb_map, memb_fapl, memb_name,
+            memb_addr, FALSE)<0) {
+      return -1;
+  }
     } else if (!HDstrcmp(name, "family")) {
         hsize_t fam_size = 100*1024*1024; /*100 MB*/
 
-	/* Family of files, each 1MB and using the default driver */
-	if ((val=HDstrtok(NULL, " \t\n\r")))
-	    fam_size = (hsize_t)(HDstrtod(val, NULL) * 1024*1024);
-	if (H5Pset_fapl_family(fapl, fam_size, H5P_DEFAULT)<0)
+  /* Family of files, each 1MB and using the default driver */
+  if ((val=HDstrtok(NULL, " \t\n\r")))
+      fam_size = (hsize_t)(HDstrtod(val, NULL) * 1024*1024);
+  if (H5Pset_fapl_family(fapl, fam_size, H5P_DEFAULT)<0)
             return -1;
     } else if (!HDstrcmp(name, "log")) {
         unsigned log_flags = H5FD_LOG_LOC_IO | H5FD_LOG_ALLOC;
@@ -594,20 +592,20 @@ h5_fileaccess(void)
             log_flags = (unsigned)HDstrtol(val, NULL, 0);
 
         if (H5Pset_fapl_log(fapl, NULL, log_flags, (size_t)0) < 0)
-	    return -1;
+      return -1;
     } else if (!HDstrcmp(name, "direct")) {
 #ifdef H5_HAVE_DIRECT
-	/* Linux direct read() and write() system calls.  Set memory boundary, file block size,
-	 * and copy buffer size to the default values. */
-	if (H5Pset_fapl_direct(fapl, 1024, 4096, 8*4096)<0) return -1;
+  /* Linux direct read() and write() system calls.  Set memory boundary, file block size,
+   * and copy buffer size to the default values. */
+  if (H5Pset_fapl_direct(fapl, 1024, 4096, 8*4096)<0) return -1;
 #endif
     } else if(!HDstrcmp(name, "latest")) {
-	/* use the latest format */
-	if(H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0)
+  /* use the latest format */
+  if(H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST) < 0)
             return -1;
     } else {
-	/* Unknown driver */
-	return -1;
+  /* Unknown driver */
+  return -1;
     }
 
     return fapl;
@@ -615,13 +613,13 @@ h5_fileaccess(void)
 
 
 /*-------------------------------------------------------------------------
- * Function:	h5_no_hwconv
+ * Function:  h5_no_hwconv
  *
- * Purpose:	Turn off hardware data type conversions.
+ * Purpose:  Turn off hardware data type conversions.
  *
- * Return:	void
+ * Return:  void
  *
- * Programmer:	Robb Matzke
+ * Programmer:  Robb Matzke
  *              Friday, November 20, 1998
  *
  * Modifications:
@@ -636,13 +634,13 @@ h5_no_hwconv(void)
 
 
 /*-------------------------------------------------------------------------
- * Function:	h5_show_hostname
+ * Function:  h5_show_hostname
  *
- * Purpose:	Show hostname.  Show process ID if in MPI environment.
+ * Purpose:  Show hostname.  Show process ID if in MPI environment.
  *
- * Return:	void
+ * Return:  void
  *
- * Programmer:	Albert Cheng
+ * Programmer:  Albert Cheng
  *              2002/04/22
  *
  * Modifications:
@@ -652,8 +650,8 @@ h5_no_hwconv(void)
 void
 h5_show_hostname(void)
 {
-    char	hostname[80];
-#ifdef _WIN32
+    char  hostname[80];
+#ifdef H5_HAVE_WIN32_API
      WSADATA wsaData;
      int err;
 #endif
@@ -661,21 +659,21 @@ h5_show_hostname(void)
     /* try show the process or thread id in multiple processes cases*/
 #ifdef H5_HAVE_PARALLEL
     {
-	int mpi_rank, mpi_initialized;
-
-	MPI_Initialized(&mpi_initialized);
-	if (mpi_initialized){
-	    MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
-	    printf("MPI-process %d.", mpi_rank);
-	}else
-	    printf("thread 0.");
+  int mpi_rank, mpi_initialized;
+
+  MPI_Initialized(&mpi_initialized);
+  if (mpi_initialized){
+      MPI_Comm_rank(MPI_COMM_WORLD,&mpi_rank);
+      printf("MPI-process %d.", mpi_rank);
+  }else
+      printf("thread 0.");
     }
 #elif defined(H5_HAVE_THREADSAFE)
     printf("thread %lu.", HDpthread_self_ulong());
 #else
     printf("thread 0.");
 #endif
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
 
    err = WSAStartup( MAKEWORD(2,2), &wsaData );
    if ( err != 0 ) {
@@ -699,13 +697,13 @@ h5_show_hostname(void)
 #endif
 #ifdef H5_HAVE_GETHOSTNAME
     if (gethostname(hostname, (size_t)80) < 0)
-	printf(" gethostname failed\n");
+  printf(" gethostname failed\n");
     else
-	printf(" hostname=%s\n", hostname);
+  printf(" hostname=%s\n", hostname);
 #else
     printf(" gethostname not supported\n");
 #endif
-#ifdef _WIN32
+#ifdef H5_HAVE_WIN32_API
     WSACleanup();
 #endif
 }
@@ -728,8 +726,8 @@ h5_show_hostname(void)
 int
 h5_set_info_object(void)
 {
-    char	*envp;			/* environment pointer */
-    int		ret_value=0;
+    char  *envp;      /* environment pointer */
+    int    ret_value=0;
 
     /* handle any MPI INFO hints via $HDF5_MPI_INFO */
     if ((envp = getenv("HDF5_MPI_INFO")) != NULL){
@@ -816,39 +814,39 @@ h5_set_info_object(void)
 void
 h5_dump_info_object(MPI_Info info)
 {
-    char	key[MPI_MAX_INFO_KEY+1];
-    char	value[MPI_MAX_INFO_VAL+1];
-    int  	flag;
-    int		i, nkeys;
+    char  key[MPI_MAX_INFO_KEY+1];
+    char  value[MPI_MAX_INFO_VAL+1];
+    int    flag;
+    int    i, nkeys;
 
     printf("Dumping MPI Info Object(%d) (up to %d bytes per item):\n", (int)info,
-	MPI_MAX_INFO_VAL);
+  MPI_MAX_INFO_VAL);
     if (info==MPI_INFO_NULL){
-	printf("object is MPI_INFO_NULL\n");
+  printf("object is MPI_INFO_NULL\n");
     }
     else {
-	MPI_Info_get_nkeys(info, &nkeys);
-	printf("object has %d items\n", nkeys);
-	for (i=0; i<nkeys; i++){
-	    MPI_Info_get_nthkey(info, i, key);
-	    MPI_Info_get(info, key, MPI_MAX_INFO_VAL, value, &flag);
-	    printf("%s=%s\n", key, value);
-	}
+  MPI_Info_get_nkeys(info, &nkeys);
+  printf("object has %d items\n", nkeys);
+  for (i=0; i<nkeys; i++){
+      MPI_Info_get_nthkey(info, i, key);
+      MPI_Info_get(info, key, MPI_MAX_INFO_VAL, value, &flag);
+      printf("%s=%s\n", key, value);
+  }
 
     }
 }
-#endif	/* H5_HAVE_PARALLEL */
+#endif  /* H5_HAVE_PARALLEL */
 
 
 /*-------------------------------------------------------------------------
- * Function:	h5_get_file_size
+ * Function:  h5_get_file_size
  *
- * Purpose:	Get the current size of a file (in bytes)
+ * Purpose:  Get the current size of a file (in bytes)
  *
- * Return:	Success:	Size of file in bytes
- *		Failure:	-1
+ * Return:  Success:  Size of file in bytes
+ *    Failure:  -1
  *
- * Programmer:	Quincey Koziol
+ * Programmer:  Quincey Koziol
  *              Saturday, March 22, 2003
  *
  *-------------------------------------------------------------------------
@@ -857,8 +855,8 @@ h5_stat_size_t
 h5_get_file_size(const char *filename, hid_t fapl)
 {
     char temp[2048];    /* Temporary buffer for file names */
-    h5_stat_t	sb;     /* Structure for querying file info */
-	int j = 0;
+    h5_stat_t  sb;     /* Structure for querying file info */
+  int j = 0;
 
     if(fapl == H5P_DEFAULT) {
         /* Get the file's statistics */
@@ -866,7 +864,7 @@ h5_get_file_size(const char *filename, hid_t fapl)
             return((h5_stat_size_t)sb.st_size);
     } /* end if */
     else {
-        hid_t	driver;         /* VFD used for file */
+        hid_t  driver;         /* VFD used for file */
 
         /* Get the driver used when creating the file */
         if((driver = H5Pget_driver(fapl)) < 0)
@@ -950,26 +948,26 @@ h5_get_file_size(const char *filename, hid_t fapl)
 int
 print_func(const char *format, ...)
 {
-	va_list arglist;
-	int ret_value;
+  va_list arglist;
+  int ret_value;
 
-	va_start(arglist, format);
-	ret_value = vprintf(format, arglist);
-	va_end(arglist);
-	return ret_value;
+  va_start(arglist, format);
+  ret_value = vprintf(format, arglist);
+  va_end(arglist);
+  return ret_value;
 }
 
 #ifdef H5_HAVE_FILTER_SZIP
 
 
 /*-------------------------------------------------------------------------
- * Function:	h5_szip_can_encode
+ * Function:  h5_szip_can_encode
  *
- * Purpose:	Retrieve the filter config flags for szip, tell if
+ * Purpose:  Retrieve the filter config flags for szip, tell if
  *              encoder is available.
  *
- * Return:	1:  decode+encode is enabled
- *		0:  only decode is enabled
+ * Return:  1:  decode+encode is enabled
+ *    0:  only decode is enabled
  *              -1: other
  *
  * Programmer:
@@ -1008,28 +1006,28 @@ int h5_szip_can_encode(void )
 
 #ifdef H5_HAVE_PARALLEL
 /*-------------------------------------------------------------------------
- * Function:	getenv_all
+ * Function:  getenv_all
  *
- * Purpose:	Used to get the environment that the root MPI task has.
- * 		name specifies which environment variable to look for
- * 		val is the string to which the value of that environment
- * 		variable will be copied.
+ * Purpose:  Used to get the environment that the root MPI task has.
+ *     name specifies which environment variable to look for
+ *     val is the string to which the value of that environment
+ *     variable will be copied.
  *
- * 		NOTE: The pointer returned by this function is only
- * 		valid until the next call to getenv_all and the data
- * 		stored there must be copied somewhere else before any
- * 		further calls to getenv_all take place.
+ *     NOTE: The pointer returned by this function is only
+ *     valid until the next call to getenv_all and the data
+ *     stored there must be copied somewhere else before any
+ *     further calls to getenv_all take place.
  *
- * Return:	pointer to a string containing the value of the environment variable
- * 		NULL if the varialbe doesn't exist in task 'root's environment.
+ * Return:  pointer to a string containing the value of the environment variable
+ *     NULL if the varialbe doesn't exist in task 'root's environment.
  *
- * Programmer:	Leon Arber
+ * Programmer:  Leon Arber
  *              4/4/05
  *
  * Modifications:
- *		Use original getenv if MPI is not initialized. This happens
- *		one uses the PHDF5 library to build a serial nature code.
- *		Albert 2006/04/07
+ *    Use original getenv if MPI is not initialized. This happens
+ *    one uses the PHDF5 library to build a serial nature code.
+ *    Albert 2006/04/07
  *
  *-------------------------------------------------------------------------
  */
@@ -1044,48 +1042,48 @@ getenv_all(MPI_Comm comm, int root, const char* name)
 
     MPI_Initialized(&mpi_initialized);
     if(!mpi_initialized) {
-	/* use original getenv */
-	if(env)
-	    HDfree(env);
-	env = HDgetenv(name);
+  /* use original getenv */
+  if(env)
+      HDfree(env);
+  env = HDgetenv(name);
     } /* end if */
     else {
-	MPI_Comm_rank(comm, &mpi_rank);
-	MPI_Comm_size(comm, &mpi_size);
-	assert(root < mpi_size);
-
-	/* The root task does the getenv call
-	 * and sends the result to the other tasks */
-	if(mpi_rank == root) {
-	    env = HDgetenv(name);
-	    if(env) {
-		len = HDstrlen(env);
-		MPI_Bcast(&len, 1, MPI_INT, root, comm);
-		MPI_Bcast(env, len, MPI_CHAR, root, comm);
-	    }
-	    else {
-		/* len -1 indicates that the variable was not in the environment */
-		len = -1;
-		MPI_Bcast(&len, 1, MPI_INT, root, comm);
-	    }
-	}
-	else {
-	    MPI_Bcast(&len, 1, MPI_INT, root, comm);
-	    if(len >= 0) {
-		if(env == NULL)
-		    env = (char*) HDmalloc(len+1);
-		else if(strlen(env) < len)
-		    env = (char*) HDrealloc(env, len+1);
-
-		MPI_Bcast(env, len, MPI_CHAR, root, comm);
-		env[len] = '\0';
-	    }
-	    else {
-		if(env)
-		    HDfree(env);
-		env = NULL;
-	    }
-	}
+  MPI_Comm_rank(comm, &mpi_rank);
+  MPI_Comm_size(comm, &mpi_size);
+  assert(root < mpi_size);
+
+  /* The root task does the getenv call
+   * and sends the result to the other tasks */
+  if(mpi_rank == root) {
+      env = HDgetenv(name);
+      if(env) {
+    len = HDstrlen(env);
+    MPI_Bcast(&len, 1, MPI_INT, root, comm);
+    MPI_Bcast(env, len, MPI_CHAR, root, comm);
+      }
+      else {
+    /* len -1 indicates that the variable was not in the environment */
+    len = -1;
+    MPI_Bcast(&len, 1, MPI_INT, root, comm);
+      }
+  }
+  else {
+      MPI_Bcast(&len, 1, MPI_INT, root, comm);
+      if(len >= 0) {
+    if(env == NULL)
+        env = (char*) HDmalloc(len+1);
+    else if(strlen(env) < len)
+        env = (char*) HDrealloc(env, len+1);
+
+    MPI_Bcast(env, len, MPI_CHAR, root, comm);
+    env[len] = '\0';
+      }
+      else {
+    if(env)
+        HDfree(env);
+    env = NULL;
+      }
+  }
     }
 
 #ifndef NDEBUG
@@ -1118,7 +1116,7 @@ getenv_all(MPI_Comm comm, int root, const char* name)
  *-------------------------------------------------------------------------
  */
 hid_t
-h5_make_local_copy(char *origfilename, char *local_copy_name)
+h5_make_local_copy(const char *origfilename, const char *local_copy_name)
 {
     int fd_old = (-1), fd_new = (-1);   /* File descriptors for copying data */
     ssize_t nread;                      /* Number of bytes read in */
diff --git a/test/h5test.h b/test/h5test.h
index 465bb97..8fd6933 100644
--- a/test/h5test.h
+++ b/test/h5test.h
@@ -80,7 +80,7 @@
  */
 H5TEST_DLLVAR char *paraprefix;
 #ifdef H5_HAVE_PARALLEL
-extern MPI_Info h5_io_info_g;         /* MPI INFO object for IO */
+H5TEST_DLLVAR MPI_Info h5_io_info_g;         /* MPI INFO object for IO */
 #endif
 
 /*
@@ -150,7 +150,7 @@ H5TEST_DLL void h5_reset(void);
 H5TEST_DLL void h5_show_hostname(void);
 H5TEST_DLL h5_stat_size_t h5_get_file_size(const char *filename, hid_t fapl);
 H5TEST_DLL int print_func(const char *format, ...);
-H5TEST_DLL int h5_make_local_copy(char *origfilename, char *local_copy_name);
+H5TEST_DLL int h5_make_local_copy(const char *origfilename, const char *local_copy_name);
 H5TEST_DLL herr_t h5_verify_cached_stabs(const char *base_name[], hid_t fapl);
 
 /* Routines for operating on the list of tests (for the "all in one" tests) */
diff --git a/test/le_data.h5 b/test/le_data.h5
index 1225d21..b4d7827 100644
Binary files a/test/le_data.h5 and b/test/le_data.h5 differ
diff --git a/test/mount.c b/test/mount.c
index f63404d..b7180fa 100644
--- a/test/mount.c
+++ b/test/mount.c
@@ -983,10 +983,13 @@ error:
 static int
 test_interlink(hid_t fapl)
 {
-    hid_t	file1 = -1, file2 = -1, type = -1, space = -1, dset = -1;
+    hid_t	file1 = -1, file2 = -1;
+#ifdef NOT_NOW
+    hid_t	type = -1, space = -1, dset = -1;
+    hsize_t	cur_dims[1] = {2};
+#endif /* NOT_NOW */
     char	filename1[1024], filename2[1024];
     herr_t	status;
-    hsize_t	cur_dims[1] = {2};
 
     TESTING("interfile hard links");
     h5_fixname(FILENAME[0], fapl, filename1, sizeof filename1);
@@ -1018,6 +1021,11 @@ test_interlink(hid_t fapl)
 	TEST_ERROR
     } /* end if */
 
+/* Commented this code out until Jira issue #7638 is resolved.  Once that
+ * issue is resolved (hopefully by refactored the file code to use shared
+ * file pointers for all operations), this should be uncommented. -QAK
+ */
+#ifdef NOT_NOW
     /* Try an interfile hard link by sharing a data type */
     if((type = H5Tcopy(H5T_NATIVE_INT)) < 0) FAIL_STACK_ERROR
     if(H5Tcommit2(file1, "/type1", type, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT) < 0) FAIL_STACK_ERROR
@@ -1031,9 +1039,15 @@ test_interlink(hid_t fapl)
 	TEST_ERROR
     } /* end if */
 
-    /* Shut down */
+    /* Close IDs */
     if(H5Sclose(space) < 0) FAIL_STACK_ERROR
     if(H5Tclose(type) < 0) FAIL_STACK_ERROR
+#else /* NOT_NOW */
+    SKIPPED();
+    HDputs("    Test skipped due file pointer sharing issue (Jira 7638).");
+#endif /* NOT_NOW */
+
+    /* Shut down */
     if(H5Funmount(file1, "/mnt1") < 0) FAIL_STACK_ERROR
     if(H5Fclose(file1) < 0) FAIL_STACK_ERROR
     if(H5Fclose(file2) < 0) FAIL_STACK_ERROR
@@ -1043,9 +1057,11 @@ test_interlink(hid_t fapl)
 
 error:
     H5E_BEGIN_TRY {
+#ifdef NOT_NOW
 	H5Dclose(dset);
 	H5Sclose(space);
 	H5Tclose(type);
+#endif /* NOT_NOW */
 	H5Fclose(file1);
 	H5Fclose(file2);
     } H5E_END_TRY;
diff --git a/test/multi_file_v16-r.h5 b/test/multi_file_v16-r.h5
new file mode 100644
index 0000000..36a4c88
Binary files /dev/null and b/test/multi_file_v16-r.h5 differ
diff --git a/test/multi_file_v16-s.h5 b/test/multi_file_v16-s.h5
new file mode 100644
index 0000000..e990e95
Binary files /dev/null and b/test/multi_file_v16-s.h5 differ
diff --git a/test/ntypes.c b/test/ntypes.c
index 3310a82..a63cea5 100644
--- a/test/ntypes.c
+++ b/test/ntypes.c
@@ -331,7 +331,7 @@ test_compound_dtype2(hid_t file)
             temp_point->st.c2 = (short)(i + j);
             temp_point->st.l2 = (i * 5 + j * 50) * n;
             temp_point->st.ll2 = (i * 10 + j * 100) * n;
-            temp_point->l = (unsigned long long)((i * 100 + j * 1000) * n);
+            temp_point->l = (unsigned long long)((i * 40 + j * 400) * n);
         } /* end for */
     } /* end for */
 
diff --git a/test/objcopy.c b/test/objcopy.c
index 0f56f99..ac73a96 100755
--- a/test/objcopy.c
+++ b/test/objcopy.c
@@ -55,9 +55,10 @@ const char *FILENAME[] = {
  */
 #define CONFIG_SHARE_SRC 1
 #define CONFIG_SHARE_DST 2
-#define CONFIG_NEW_FORMAT 4
-#define CONFIG_DENSE 8
-#define MAX_CONFIGURATION 15
+#define CONFIG_SRC_NEW_FORMAT 4
+#define CONFIG_DST_NEW_FORMAT 8
+#define CONFIG_DENSE 16
+#define MAX_CONFIGURATION 31
 
 #define FILE_EXT 		"objcopy_ext.dat"
 /* The fill_old.h5 is generated from gen_old_fill.c in HDF5 'test' directory
@@ -1235,7 +1236,8 @@ compare_datasets(hid_t did, hid_t did2, hid_t pid, const void *wbuf)
      *  data in each dataset will (probably) be different and the storage
      *  size will thus vary)
      */
-    if(!(nfilters > 0 && H5Tdetect_class(tid, H5T_VLEN))) {
+    if(!(nfilters > 0 && (H5Tdetect_class(tid, H5T_VLEN) ||
+            (H5Tdetect_class(tid, H5T_REFERENCE) && H5Tequal(tid, H5T_STD_REF_DSETREG))))) {
         hsize_t storage_size = H5Dget_storage_size(did);        /* Dataset's raw data storage size */
         hsize_t storage_size2 = H5Dget_storage_size(did2);      /* 2nd Dataset's raw data storage size */
 
@@ -1480,7 +1482,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_named_datatype(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_named_datatype(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;   /* File IDs */
     hid_t tid = -1, tid2 = -1;          /* Datatype IDs */
@@ -1490,14 +1492,14 @@ test_copy_named_datatype(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     TESTING("H5Ocopy(): named datatype");
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* create datatype */
     if((tid = H5Tcopy(H5T_NATIVE_INT)) < 0) TEST_ERROR
@@ -1513,10 +1515,10 @@ test_copy_named_datatype(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -1573,7 +1575,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_named_datatype_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_named_datatype_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;   /* File IDs */
     hid_t tid = -1, tid2 = -1;          /* Datatype IDs */
@@ -1583,14 +1585,14 @@ test_copy_named_datatype_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     TESTING("H5Ocopy(): named vlen datatype");
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* create datatype */
     if((tid = H5Tvlen_create(H5T_NATIVE_INT)) < 0) TEST_ERROR
@@ -1606,10 +1608,10 @@ test_copy_named_datatype_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -1666,7 +1668,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_named_datatype_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_named_datatype_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;   /* File IDs */
     hid_t tid = -1, tid2 = -1;          /* Datatype IDs */
@@ -1676,14 +1678,14 @@ test_copy_named_datatype_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     TESTING("H5Ocopy(): named nested vlen datatype");
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* create first vlen datatype */
     if((tid = H5Tvlen_create(H5T_NATIVE_INT)) < 0) TEST_ERROR
@@ -1705,10 +1707,10 @@ test_copy_named_datatype_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -1748,7 +1750,150 @@ error:
     	H5Fclose(fid_src);
     } H5E_END_TRY;
     return 1;
-} /* end test_copy_named_datatype_vl */
+} /* end test_copy_named_datatype_vl_vl */
+
+
+/*-------------------------------------------------------------------------
+ * Function:    test_copy_named_datatype_attr_self
+ *
+ * Purpose:     Create name datatype in SRC file, with an attribute that
+ *              uses that named datatype as its datatype, and copy it to
+ *              DST file
+ *
+ * Return:      Success:        0
+ *              Failure:        number of errors
+ *
+ * Programmer:  Neil
+ *              Friday, March 11, 2011
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static int
+test_copy_named_datatype_attr_self(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
+{
+    hid_t fid_src = -1, fid_dst = -1;   /* File IDs */
+    hid_t tid = -1, tid2 = -1;          /* Datatype IDs */
+    hid_t aid = -1;                     /* Attribute ID */
+    hid_t sid = -1;                     /* Dataspace ID */
+    hsize_t dims[2] = {3, 4};           /* Dataspace dimensions */
+    H5O_info_t oinfo, oinfo2;           /* Object info */
+    H5G_info_t ginfo;                   /* Group info */
+    char                src_filename[NAME_BUF_SIZE];
+    char                dst_filename[NAME_BUF_SIZE];
+
+    TESTING("H5Ocopy(): named datatype with self-referential attribute");
+
+    /* Initialize the filenames */
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
+
+    /* Reset file address checking info */
+    addr_reset();
+
+    /* create source file */
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
+
+    /* create datatype */
+    if((tid = H5Tcopy(H5T_NATIVE_INT)) < 0) TEST_ERROR
+
+    /* create named datatype */
+    if((H5Tcommit2(fid_src, NAME_DATATYPE_SIMPLE, tid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
+
+    /* create dataspace */
+    if((sid = H5Screate_simple(2, dims, NULL)) < 0) TEST_ERROR
+
+    /* create attribute */
+    if((aid = H5Acreate2(tid, "attr_self", tid, sid, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
+
+    /* attach other attributes to the dataset */
+    if(test_copy_attach_attributes(tid, tid) < 0) TEST_ERROR
+
+    /* close the attribute */
+    if(H5Aclose(aid) < 0) TEST_ERROR
+
+    /* close the datatype */
+    if(H5Tclose(tid) < 0) TEST_ERROR
+
+    /* close the dataspace */
+    if(H5Sclose(sid) < 0) TEST_ERROR
+
+    /* close the SRC file */
+    if(H5Fclose(fid_src) < 0) TEST_ERROR
+
+
+    /* open the source file with read-only */
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
+
+    /* create destination file */
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
+
+    /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
+    if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
+
+    /* copy the datatype from SRC to DST */
+    if(H5Ocopy(fid_src, NAME_DATATYPE_SIMPLE, fid_dst, NAME_DATATYPE_SIMPLE, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR
+
+    /* open the source datatype */
+    if((tid = H5Topen2(fid_src, NAME_DATATYPE_SIMPLE, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+
+    /* open the copied datatype */
+    if((tid2 = H5Topen2(fid_dst, NAME_DATATYPE_SIMPLE, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+
+    /* Compare the datatypes */
+    if(H5Tequal(tid, tid2) != TRUE) TEST_ERROR
+
+    /* close the source datatype */
+    if(H5Tclose(tid) < 0) TEST_ERROR
+
+    /* open the destination attribute */
+    if((aid = H5Aopen(tid2, "attr_self", H5P_DEFAULT)) < 0) TEST_ERROR
+
+    /* open the destination attribute's datatype */
+    if((tid = H5Aget_type(aid)) < 0) TEST_ERROR
+
+    /* verify that the attribute's datatype is committed */
+    if(H5Tcommitted(tid) != TRUE) TEST_ERROR
+
+    /* verify that the addresses of the datatypes are the same */
+    if(H5Oget_info(tid, &oinfo) < 0) TEST_ERROR
+    if(H5Oget_info(tid2, &oinfo2) < 0) TEST_ERROR
+    if(oinfo.fileno != oinfo2.fileno || oinfo.addr != oinfo2.addr)
+        FAIL_PUTS_ERROR("destination attribute does not use the same committed datatype")
+
+    /* Verify that there are only 2 links int he destination root group */
+    if(H5Gget_info(fid_dst, &ginfo) < 0)
+    if(ginfo.nlinks != 2)
+        FAIL_PUTS_ERROR("unexpected number of links in destination root group")
+
+    /* close the attribute */
+    if(H5Aclose(aid) < 0) TEST_ERROR
+
+    /* close the datatypes */
+    if(H5Tclose(tid2) < 0) TEST_ERROR
+    if(H5Tclose(tid) < 0) TEST_ERROR
+
+    /* close the SRC file */
+    if(H5Fclose(fid_src) < 0) TEST_ERROR
+
+    /* close the DST file */
+    if(H5Fclose(fid_dst) < 0) TEST_ERROR
+
+    PASSED();
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Tclose(tid2);
+        H5Tclose(tid);
+        H5Sclose(sid);
+        H5Aclose(aid);
+        H5Fclose(fid_dst);
+        H5Fclose(fid_src);
+    } H5E_END_TRY;
+    return 1;
+} /* end test_copy_named_datatype_attr_self */
 
 
 /*-------------------------------------------------------------------------
@@ -1767,7 +1912,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_simple(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_simple(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -1786,14 +1931,14 @@ test_copy_dataset_simple(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
             buf[i][j] = 10000 + 100*i+j;
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim2d[0] = DIM_SIZE_1;
@@ -1822,10 +1967,10 @@ test_copy_dataset_simple(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -1990,7 +2135,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_simple_empty(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_simple_empty(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -2002,14 +2147,14 @@ test_copy_dataset_simple_empty(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     TESTING("H5Ocopy(): empty contiguous dataset");
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim2d[0] = DIM_SIZE_1;
@@ -2035,10 +2180,10 @@ test_copy_dataset_simple_empty(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -2098,7 +2243,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_compound(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_compound(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -2125,14 +2270,14 @@ test_copy_dataset_compound(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     } /* end for */
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim1d[0] = DIM_SIZE_1;
@@ -2168,10 +2313,10 @@ test_copy_dataset_compound(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -2232,7 +2377,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_chunked(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_chunked(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -2259,14 +2404,14 @@ test_copy_dataset_chunked(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     } /* end for */
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set 1-D dataspace dimensions */
     dim1d[0] = DIM_SIZE_1;
@@ -2331,10 +2476,10 @@ test_copy_dataset_chunked(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -2410,7 +2555,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_chunked_empty(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_chunked_empty(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -2427,14 +2572,14 @@ test_copy_dataset_chunked_empty(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     TESTING("H5Ocopy(): empty chunked dataset");
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set 1-D dataspace dimensions */
     dim1d[0] = DIM_SIZE_1;
@@ -2493,10 +2638,10 @@ test_copy_dataset_chunked_empty(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -2572,7 +2717,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_chunked_sparse(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_chunked_sparse(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -2602,14 +2747,14 @@ test_copy_dataset_chunked_sparse(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     } /* end for */
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set 1-D dataspace dimensions */
     dim1d[0]=DIM_SIZE_1;
@@ -2689,10 +2834,10 @@ test_copy_dataset_chunked_sparse(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -2767,7 +2912,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_compressed(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_compressed(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
 #ifdef H5_HAVE_FILTER_DEFLATE
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
@@ -2794,14 +2939,14 @@ test_copy_dataset_compressed(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
             buf[i][j] = (float)(100.0);         /* Something easy to compress */
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim2d[0]=DIM_SIZE_1;
@@ -2838,10 +2983,10 @@ test_copy_dataset_compressed(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -2903,7 +3048,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_compact(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_compact(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -2923,14 +3068,14 @@ test_copy_dataset_compact(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
             buf[i][j] = (float)(i+j/100.0);
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim2d[0]=DIM_SIZE_1;
@@ -2966,10 +3111,10 @@ test_copy_dataset_compact(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -3030,7 +3175,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_external(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_external(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -3053,14 +3198,14 @@ test_copy_dataset_external(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     HDfclose(HDfopen (FILE_EXT, "w"));
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim1d[0]=DIM_SIZE_1;
@@ -3093,10 +3238,10 @@ test_copy_dataset_external(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -3156,7 +3301,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_named_dtype(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_named_dtype(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid = -1;                             /* Datatype ID */
@@ -3175,14 +3320,14 @@ test_copy_dataset_named_dtype(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
         buf[i] = i;
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim1d[0]=DIM_SIZE_1;
@@ -3214,10 +3359,10 @@ test_copy_dataset_named_dtype(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -3277,7 +3422,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_named_dtype_hier(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_named_dtype_hier(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid = -1;                             /* Datatype ID */
@@ -3297,14 +3442,14 @@ test_copy_dataset_named_dtype_hier(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
         buf[i] = i;
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Create group to place all objects in */
     if((gid = H5Gcreate2(fid_src, NAME_GROUP_TOP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -3351,10 +3496,10 @@ test_copy_dataset_named_dtype_hier(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -3416,7 +3561,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_named_dtype_hier_outside(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_named_dtype_hier_outside(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid = -1;                             /* Datatype ID */
@@ -3436,14 +3581,14 @@ test_copy_dataset_named_dtype_hier_outside(hid_t fcpl_src, hid_t fcpl_dst, hid_t
         buf[i] = i;
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Create group to place all objects in */
     if((gid = H5Gcreate2(fid_src, NAME_GROUP_TOP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -3490,10 +3635,10 @@ test_copy_dataset_named_dtype_hier_outside(hid_t fcpl_src, hid_t fcpl_dst, hid_t
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -3555,7 +3700,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_multi_ohdr_chunks(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_multi_ohdr_chunks(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -3574,14 +3719,14 @@ test_copy_dataset_multi_ohdr_chunks(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
         buf[i] = i;
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Create group to place all objects in */
     if((gid = H5Gcreate2(fid_src, NAME_GROUP_TOP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -3624,10 +3769,10 @@ test_copy_dataset_multi_ohdr_chunks(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -3688,7 +3833,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_attr_named_dtype(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_attr_named_dtype(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid = -1;                             /* Datatype ID */
@@ -3708,14 +3853,14 @@ test_copy_dataset_attr_named_dtype(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
         buf[i] = i;
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Create group to place all objects in */
     if((gid = H5Gcreate2(fid_src, NAME_GROUP_TOP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -3765,10 +3910,10 @@ test_copy_dataset_attr_named_dtype(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -3830,7 +3975,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_contig_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_contig_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid = -1;                             /* Datatype ID */
@@ -3853,14 +3998,14 @@ test_copy_dataset_contig_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     } /* end for */
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim1d[0]=DIM_SIZE_1;
@@ -3885,10 +4030,10 @@ test_copy_dataset_contig_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -3959,7 +4104,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_chunked_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_chunked_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid = -1;                             /* Datatype ID */
@@ -3984,14 +4129,14 @@ test_copy_dataset_chunked_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     } /* end for */
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim1d[0]=DIM_SIZE_1;
@@ -4023,10 +4168,10 @@ test_copy_dataset_chunked_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -4097,7 +4242,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_compact_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_compact_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid = -1;                             /* Datatype ID */
@@ -4121,14 +4266,14 @@ test_copy_dataset_compact_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     } /* end for */
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim1d[0]=DIM_SIZE_1;
@@ -4160,10 +4305,10 @@ test_copy_dataset_compact_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -4234,7 +4379,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_attribute_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_attribute_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -4247,14 +4392,14 @@ test_copy_attribute_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     TESTING("H5Ocopy(): variable length attribute");
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim2d[0] = DIM_SIZE_1;
@@ -4280,10 +4425,10 @@ test_copy_attribute_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -4349,7 +4494,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_compressed_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_compressed_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
 #ifdef H5_HAVE_FILTER_DEFLATE
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
@@ -4382,14 +4527,14 @@ test_copy_dataset_compressed_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     }
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim2d[0]=DIM_SIZE_1;
@@ -4423,10 +4568,10 @@ test_copy_dataset_compressed_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -4501,7 +4646,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_group_empty(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_group_empty(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t gid = -1, gid2 = -1;                  /* Group IDs */
@@ -4511,14 +4656,14 @@ test_copy_group_empty(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     TESTING("H5Ocopy(): empty group");
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* create group at the SRC file */
     if((gid = H5Gcreate2(fid_src, NAME_GROUP_EMPTY, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -4534,10 +4679,10 @@ test_copy_group_empty(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -4581,22 +4726,22 @@ error:
 
 
 /*-------------------------------------------------------------------------
- * Function:    test_copy_group
+ * Function:    test_copy_root_group
  *
- * Purpose:     Create a group in SRC file and copy it to DST file
+ * Purpose:     Create a root group in SRC file and copy it to DST file
  *
  * Return:      Success:        0
  *              Failure:        number of errors
  *
  * Programmer:  Peter Cao
- *              Friday, September 30, 2005
+ *              August 8, 2006
  *
  * Modifications:
  *
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_group(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_root_group(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -4609,7 +4754,7 @@ test_copy_group(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     char src_filename[NAME_BUF_SIZE];
     char dst_filename[NAME_BUF_SIZE];
 
-    TESTING("H5Ocopy(): simple nested groups");
+    TESTING("H5Ocopy(): root group");
 
     /* set initial data values */
     for (i=0; i<DIM_SIZE_1; i++)
@@ -4617,14 +4762,14 @@ test_copy_group(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
             buf[i][j] = 10000 + 100*i+j;
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* create group at the SRC file */
     if((gid = H5Gcreate2(fid_src, NAME_GROUP_TOP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -4633,8 +4778,8 @@ test_copy_group(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     if(test_copy_attach_attributes(gid, H5T_NATIVE_INT) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
-    dim2d[0]=DIM_SIZE_1;
-    dim2d[1]=DIM_SIZE_2;
+    dim2d[0] = DIM_SIZE_1;
+    dim2d[1] = DIM_SIZE_2;
 
     /* create dataspace */
     if((sid = H5Screate_simple(2, dim2d, NULL)) < 0) TEST_ERROR
@@ -4651,11 +4796,11 @@ test_copy_group(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
     /* create a sub-group */
     if((gid_sub = H5Gcreate2(fid_src, NAME_GROUP_SUB, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
-    if( H5Gclose(gid_sub) < 0) TEST_ERROR
+    if(H5Gclose(gid_sub) < 0) TEST_ERROR
 
     /* create another  sub-group */
     if((gid_sub = H5Gcreate2(fid_src, NAME_GROUP_SUB_2, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
-    if( H5Gclose(gid_sub) < 0) TEST_ERROR
+    if(H5Gclose(gid_sub) < 0) TEST_ERROR
 
     /* close the group */
     if(H5Gclose(gid) < 0) TEST_ERROR
@@ -4663,24 +4808,23 @@ test_copy_group(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     /* close the SRC file */
     if(H5Fclose(fid_src) < 0) TEST_ERROR
 
-
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
 
     /* copy the group from SRC to DST */
-    if(H5Ocopy(fid_src, NAME_GROUP_TOP, fid_dst, NAME_GROUP_TOP, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR
+    if(H5Ocopy(fid_src, "/", fid_dst, "/root_from_src", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR
 
     /* open the group for copy */
-    if((gid = H5Gopen2(fid_src, NAME_GROUP_TOP, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+    if((gid = H5Gopen2(fid_src, "/", H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
 
     /* open the destination group */
-    if((gid2 = H5Gopen2(fid_dst, NAME_GROUP_TOP, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+    if((gid2 = H5Gopen2(fid_dst, "/root_from_src", H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
 
     /* Check if the groups are equal */
     if(compare_groups(gid, gid2, H5P_DEFAULT, -1, 0) != TRUE) TEST_ERROR
@@ -4702,35 +4846,35 @@ test_copy_group(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 error:
     H5E_BEGIN_TRY {
-    	H5Sclose(sid);
-    	H5Dclose(did);
-    	H5Gclose(gid_sub);
-    	H5Gclose(gid2);
-    	H5Gclose(gid);
-    	H5Fclose(fid_dst);
-    	H5Fclose(fid_src);
+        H5Sclose(sid);
+        H5Dclose(did);
+        H5Gclose(gid_sub);
+        H5Gclose(gid2);
+        H5Gclose(gid);
+        H5Fclose(fid_dst);
+        H5Fclose(fid_src);
     } H5E_END_TRY;
     return 1;
-} /* end test_copy_group */
+} /* end test_copy_root_group */
 
 
 /*-------------------------------------------------------------------------
- * Function:    test_copy_root_group
+ * Function:    test_copy_group
  *
- * Purpose:     Create a root group in SRC file and copy it to DST file
+ * Purpose:     Create a group in SRC file and copy it to DST file
  *
  * Return:      Success:        0
  *              Failure:        number of errors
  *
  * Programmer:  Peter Cao
- *              August 8, 2006
+ *              Friday, September 30, 2005
  *
  * Modifications:
  *
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_root_group(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_group(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -4743,7 +4887,7 @@ test_copy_root_group(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     char src_filename[NAME_BUF_SIZE];
     char dst_filename[NAME_BUF_SIZE];
 
-    TESTING("H5Ocopy(): root group");
+    TESTING("H5Ocopy(): simple nested groups");
 
     /* set initial data values */
     for (i=0; i<DIM_SIZE_1; i++)
@@ -4751,14 +4895,14 @@ test_copy_root_group(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
             buf[i][j] = 10000 + 100*i+j;
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* create group at the SRC file */
     if((gid = H5Gcreate2(fid_src, NAME_GROUP_TOP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -4767,8 +4911,8 @@ test_copy_root_group(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     if(test_copy_attach_attributes(gid, H5T_NATIVE_INT) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
-    dim2d[0] = DIM_SIZE_1;
-    dim2d[1] = DIM_SIZE_2;
+    dim2d[0]=DIM_SIZE_1;
+    dim2d[1]=DIM_SIZE_2;
 
     /* create dataspace */
     if((sid = H5Screate_simple(2, dim2d, NULL)) < 0) TEST_ERROR
@@ -4785,11 +4929,11 @@ test_copy_root_group(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
     /* create a sub-group */
     if((gid_sub = H5Gcreate2(fid_src, NAME_GROUP_SUB, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
-    if(H5Gclose(gid_sub) < 0) TEST_ERROR
+    if( H5Gclose(gid_sub) < 0) TEST_ERROR
 
     /* create another  sub-group */
     if((gid_sub = H5Gcreate2(fid_src, NAME_GROUP_SUB_2, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
-    if(H5Gclose(gid_sub) < 0) TEST_ERROR
+    if( H5Gclose(gid_sub) < 0) TEST_ERROR
 
     /* close the group */
     if(H5Gclose(gid) < 0) TEST_ERROR
@@ -4797,23 +4941,24 @@ test_copy_root_group(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     /* close the SRC file */
     if(H5Fclose(fid_src) < 0) TEST_ERROR
 
+
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
 
     /* copy the group from SRC to DST */
-    if(H5Ocopy(fid_src, "/", fid_dst, "/root_from_src", H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR
+    if(H5Ocopy(fid_src, NAME_GROUP_TOP, fid_dst, NAME_GROUP_TOP, H5P_DEFAULT, H5P_DEFAULT) < 0) TEST_ERROR
 
     /* open the group for copy */
-    if((gid = H5Gopen2(fid_src, "/", H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+    if((gid = H5Gopen2(fid_src, NAME_GROUP_TOP, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
 
     /* open the destination group */
-    if((gid2 = H5Gopen2(fid_dst, "/root_from_src", H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
+    if((gid2 = H5Gopen2(fid_dst, NAME_GROUP_TOP, H5P_DEFAULT)) < 0) FAIL_STACK_ERROR
 
     /* Check if the groups are equal */
     if(compare_groups(gid, gid2, H5P_DEFAULT, -1, 0) != TRUE) TEST_ERROR
@@ -4835,16 +4980,16 @@ test_copy_root_group(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 error:
     H5E_BEGIN_TRY {
-        H5Sclose(sid);
-        H5Dclose(did);
-        H5Gclose(gid_sub);
-        H5Gclose(gid2);
-        H5Gclose(gid);
-        H5Fclose(fid_dst);
-        H5Fclose(fid_src);
+    	H5Sclose(sid);
+    	H5Dclose(did);
+    	H5Gclose(gid_sub);
+    	H5Gclose(gid2);
+    	H5Gclose(gid);
+    	H5Fclose(fid_dst);
+    	H5Fclose(fid_src);
     } H5E_END_TRY;
     return 1;
-} /* end test_copy_root_group */
+} /* end test_copy_group */
 
 
 /*-------------------------------------------------------------------------
@@ -4861,7 +5006,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_group_deep(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_group_deep(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -4883,14 +5028,14 @@ test_copy_group_deep(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
             buf[i][j] = 10000 + 100*i+j;
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* create group at the SRC file */
     if((gid = H5Gcreate2(fid_src, NAME_GROUP_TOP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -4940,10 +5085,10 @@ test_copy_group_deep(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -5003,7 +5148,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_group_loop(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_group_loop(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t gid = -1, gid2 = -1;                  /* Group IDs */
@@ -5014,14 +5159,14 @@ test_copy_group_loop(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     TESTING("H5Ocopy(): nested groups with loop");
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* create group at the SRC file */
     if((gid = H5Gcreate2(fid_src, NAME_GROUP_TOP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -5051,10 +5196,10 @@ test_copy_group_loop(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -5118,7 +5263,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_group_wide_loop(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_group_wide_loop(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t gid = -1, gid2 = -1;                  /* Group IDs */
@@ -5131,14 +5276,14 @@ test_copy_group_wide_loop(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     TESTING("H5Ocopy(): wide nested groups with loop");
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* create group at the SRC file */
     if((gid = H5Gcreate2(fid_src, NAME_GROUP_TOP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -5180,10 +5325,10 @@ test_copy_group_wide_loop(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -5248,7 +5393,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_group_links(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_group_links(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1, fid_ext = -1; /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -5275,18 +5420,18 @@ test_copy_group_links(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
             buf[i][j] = 10000 + 100*i+j;
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
-    h5_fixname(FILENAME[2], fapl, ext_filename, sizeof ext_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], src_fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[2], dst_fapl, ext_filename, sizeof ext_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* create file to hold external dataset */
-    if((fid_ext = H5Fcreate(ext_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_ext = H5Fcreate(ext_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* create groups at the SRC file.  Group 2 will hold dangling links. */
     if((gid = H5Gcreate2(fid_src, NAME_GROUP_LINK, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -5369,10 +5514,10 @@ test_copy_group_links(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
             if(H5Pset_copy_object(plid, copy_options) < 0) TEST_ERROR
 
             /* open the source file with read-only */
-            if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+            if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
             /* create destination file */
-            if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+            if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
             /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
             if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -5419,7 +5564,7 @@ test_copy_group_links(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
                     FAIL_PUTS_ERROR("External link was not expanded to a hard link")
 
                 /* Compare datasets */
-                if((fid_ext = H5Fopen(ext_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+                if((fid_ext = H5Fopen(ext_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
                 if((did = H5Dopen2(fid_ext, NAME_DATASET_SIMPLE, H5P_DEFAULT)) < 0) TEST_ERROR
                 if((did2 = H5Dopen2(fid_dst, NAME_LINK_EXTERN, H5P_DEFAULT)) < 0) TEST_ERROR
                 if(compare_datasets(did, did2, H5P_DEFAULT, NULL) != TRUE) TEST_ERROR
@@ -5504,7 +5649,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_soft_link(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_soft_link(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -5524,14 +5669,14 @@ test_copy_soft_link(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
             buf[i][j] = 10000 + 100*i+j;
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* create group at the SRC file */
     if((gid = H5Gcreate2(fid_src, NAME_GROUP_LINK, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -5567,10 +5712,10 @@ test_copy_soft_link(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -5629,7 +5774,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_ext_link(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_ext_link(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1, fid_ext = -1; /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -5650,15 +5795,15 @@ test_copy_ext_link(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
             buf[i][j] = 10000 + 100*i+j;
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
-    h5_fixname(FILENAME[2], fapl, ext_filename, sizeof ext_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], src_fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[2], dst_fapl, ext_filename, sizeof ext_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* create group at the SRC file */
     if((gid = H5Gcreate2(fid_src, NAME_GROUP_LINK, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -5685,7 +5830,7 @@ test_copy_ext_link(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     if(H5Gclose(gid) < 0) TEST_ERROR
 
     /* create file to hold external links to the src file */
-    if((fid_ext = H5Fcreate(ext_filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) TEST_ERROR
+    if((fid_ext = H5Fcreate(ext_filename, H5F_ACC_TRUNC, H5P_DEFAULT, src_fapl)) < 0) TEST_ERROR
 
     /* create group in the file that will hold the external link */
     if((gid = H5Gcreate2(fid_ext, NAME_GROUP_LINK, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -5698,10 +5843,10 @@ test_copy_ext_link(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     if(H5Fclose(fid_ext) < 0) TEST_ERROR
 
     /* open the "extern" file with read-only */
-    if((fid_ext = H5Fopen(ext_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_ext = H5Fopen(ext_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -5764,7 +5909,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_exist(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_exist(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -5784,14 +5929,14 @@ test_copy_exist(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
             buf[i][j] = 10000 + 100*i+j;
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim2d[0] = DIM_SIZE_1;
@@ -5820,10 +5965,10 @@ test_copy_exist(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -5872,7 +6017,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_path(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_path(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -5893,14 +6038,14 @@ test_copy_path(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
             buf[i][j] = 10000 + 100*i+j;
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim2d[0] = DIM_SIZE_1;
@@ -5929,10 +6074,10 @@ test_copy_path(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -6165,7 +6310,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_compact_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_compact_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid = -1, tid_copy=-1;                /* Datatype ID */
@@ -6189,14 +6334,14 @@ test_copy_dataset_compact_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     } /* end for */
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim1d[0]=DIM_SIZE_1;
@@ -6237,10 +6382,10 @@ test_copy_dataset_compact_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -6313,7 +6458,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_contig_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_contig_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid = -1, tid_copy=-1;                /* Datatype ID */
@@ -6336,14 +6481,14 @@ test_copy_dataset_contig_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     } /* end for */
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim1d[0]=DIM_SIZE_1;
@@ -6377,10 +6522,10 @@ test_copy_dataset_contig_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -6452,7 +6597,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_chunked_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_chunked_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid = -1, tid_copy=-1;                /* Datatype ID */
@@ -6477,14 +6622,14 @@ test_copy_dataset_chunked_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     } /* end for */
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim1d[0]=DIM_SIZE_1;
@@ -6525,10 +6670,10 @@ test_copy_dataset_chunked_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -6601,7 +6746,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_compressed_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_compressed_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid = -1, tid_copy=-1;                /* Datatype ID */
@@ -6626,14 +6771,14 @@ test_copy_dataset_compressed_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl
     } /* end for */
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim1d[0]=DIM_SIZE_1;
@@ -6675,10 +6820,10 @@ test_copy_dataset_compressed_named_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -6751,7 +6896,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_compact_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_compact_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid=-1, tid2=-1;                      /* Datatype ID */
@@ -6789,14 +6934,14 @@ test_copy_dataset_compact_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim1d[0]=DIM_SIZE_1;
@@ -6831,10 +6976,10 @@ test_copy_dataset_compact_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -6906,7 +7051,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_contig_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_contig_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid=-1, tid2=-1;                      /* Datatype ID */
@@ -6944,14 +7089,14 @@ test_copy_dataset_contig_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim1d[0]=DIM_SIZE_1;
@@ -6985,10 +7130,10 @@ test_copy_dataset_contig_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -7060,7 +7205,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_chunked_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_chunked_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid = -1, tid2=-1;       /* Datatype ID */
@@ -7098,14 +7243,14 @@ test_copy_dataset_chunked_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     } /* end for */
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim1d[0]=DIM_SIZE_1;
@@ -7140,10 +7285,10 @@ test_copy_dataset_chunked_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
 
@@ -7216,7 +7361,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_compressed_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_compressed_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid = -1, tid2=-1;       /* Datatype ID */
@@ -7254,14 +7399,14 @@ test_copy_dataset_compressed_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     } /* end for */
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim1d[0]=DIM_SIZE_1;
@@ -7297,10 +7442,10 @@ test_copy_dataset_compressed_vl_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
 
@@ -7382,7 +7527,7 @@ typedef struct cmpd_vl_t {
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_contig_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_contig_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid = -1;                             /* Datatype ID */
@@ -7409,14 +7554,14 @@ test_copy_dataset_contig_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     } /* end for */
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim1d[0]=DIM_SIZE_1;
@@ -7445,10 +7590,10 @@ test_copy_dataset_contig_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -7521,7 +7666,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_chunked_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_chunked_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid = -1, tid2 = -1;                  /* Datatype IDs */
@@ -7548,14 +7693,14 @@ test_copy_dataset_chunked_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     } /* end for */
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim1d[0]=DIM_SIZE_1;
@@ -7591,10 +7736,10 @@ test_copy_dataset_chunked_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -7667,7 +7812,7 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_dataset_compact_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_dataset_compact_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid_src = -1, fid_dst = -1;           /* File IDs */
     hid_t tid = -1, tid2 = -1;                  /* Datatype IDs */
@@ -7693,14 +7838,14 @@ test_copy_dataset_compact_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     } /* end for */
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* Set dataspace dimensions */
     dim1d[0]=DIM_SIZE_1;
@@ -7736,10 +7881,10 @@ test_copy_dataset_compact_cmpd_vl(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
 
 
     /* open the source file with read-only */
-    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination files aren't the same */
     if(H5Gclose(H5Gcreate2(fid_dst, NAME_GROUP_UNCOPIED, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -7811,12 +7956,12 @@ error:
  *              Failure:        number of errors
  *
  * Programmer:  Neil Fortner
- *              Wednesday, March 31, 2005
+ *              Wednesday, March 31, 2010
  *
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_null_ref(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
+test_copy_null_ref(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl)
 {
     hid_t fid1 = -1, fid2 = -1;                 /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -7836,15 +7981,15 @@ test_copy_null_ref(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     HDmemset(zeros, 0, sizeof(zeros));
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, mid_filename, sizeof mid_filename);
-    h5_fixname(FILENAME[2], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], src_fapl, mid_filename, sizeof mid_filename);
+    h5_fixname(FILENAME[2], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* Create source file */
-    if((fid1 = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0)
+    if((fid1 = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0)
         TEST_ERROR
 
     /* Create dataspace */
@@ -7877,7 +8022,7 @@ test_copy_null_ref(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     if(H5Dclose(did2) < 0) TEST_ERROR
 
     /* Create middle file */
-    if((fid2 = H5Fcreate(mid_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0)
+    if((fid2 = H5Fcreate(mid_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0)
         TEST_ERROR
 
     /* Copy the source file to the middle file.  Note the expand references
@@ -7906,7 +8051,7 @@ test_copy_null_ref(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl)
     if(H5Dclose(did2) < 0) TEST_ERROR
 
     /* Create destination file */
-    if((fid1 = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0)
+    if((fid1 = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0)
         TEST_ERROR
 
     /* Create object copy property list */
@@ -7975,7 +8120,8 @@ error:
  *-------------------------------------------------------------------------
  */
 static int
-test_copy_option(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl, unsigned flag, hbool_t crt_intermediate_grp, const char* test_desciption)
+test_copy_option(hid_t fcpl_src, hid_t fcpl_dst, hid_t src_fapl, hid_t dst_fapl,
+    unsigned flag, hbool_t crt_intermediate_grp, const char* test_desciption)
 {
     hid_t fid_src = -1, fid_dst = -1, fid_ext = -1; /* File IDs */
     hid_t sid = -1;                             /* Dataspace ID */
@@ -7999,14 +8145,14 @@ test_copy_option(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl, unsigned flag, hboo
             buf[i][j] = 10000 + 100*i+j;
 
     /* Initialize the filenames */
-    h5_fixname(FILENAME[0], fapl, src_filename, sizeof src_filename);
-    h5_fixname(FILENAME[1], fapl, dst_filename, sizeof dst_filename);
+    h5_fixname(FILENAME[0], src_fapl, src_filename, sizeof src_filename);
+    h5_fixname(FILENAME[1], dst_fapl, dst_filename, sizeof dst_filename);
 
     /* Reset file address checking info */
     addr_reset();
 
     /* create source file */
-    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+    if((fid_src = H5Fcreate(src_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
 
     /* create group at the SRC file */
     if((gid = H5Gcreate2(fid_src, NAME_GROUP_TOP, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
@@ -8071,10 +8217,10 @@ test_copy_option(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl, unsigned flag, hboo
     if((flag & H5O_COPY_EXPAND_EXT_LINK_FLAG) > 0) {
         char    ext_filename[NAME_BUF_SIZE];
 
-        h5_fixname(FILENAME[2], fapl, ext_filename, sizeof ext_filename);
+        h5_fixname(FILENAME[2], src_fapl, ext_filename, sizeof ext_filename);
 
         /* Create the external file and dataset */
-        if((fid_ext = H5Fcreate(ext_filename, H5F_ACC_TRUNC, fcpl_src, fapl)) < 0) TEST_ERROR
+        if((fid_ext = H5Fcreate(ext_filename, H5F_ACC_TRUNC, fcpl_src, src_fapl)) < 0) TEST_ERROR
         if((sid = H5Screate_simple(2, dim2d, NULL)) < 0) TEST_ERROR
         if((did = H5Dcreate2(fid_ext, NAME_DATASET_SIMPLE, H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0) TEST_ERROR
         if(H5Dwrite(did, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0) TEST_ERROR
@@ -8129,13 +8275,13 @@ test_copy_option(hid_t fcpl_src, hid_t fcpl_dst, hid_t fapl, unsigned flag, hboo
     /* open the source file with read-only */
     /* (except when expanding soft links */
     if((flag & H5O_COPY_EXPAND_SOFT_LINK_FLAG) > 0) {
-        if((fid_src = H5Fopen(src_filename, H5F_ACC_RDWR, fapl)) < 0) TEST_ERROR
+        if((fid_src = H5Fopen(src_filename, H5F_ACC_RDWR, src_fapl)) < 0) TEST_ERROR
     } /* end if */
     else
-        if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, fapl)) < 0) TEST_ERROR
+        if((fid_src = H5Fopen(src_filename, H5F_ACC_RDONLY, src_fapl)) < 0) TEST_ERROR
 
     /* create destination file */
-    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, fapl)) < 0) TEST_ERROR
+    if((fid_dst = H5Fcreate(dst_filename, H5F_ACC_TRUNC, fcpl_dst, dst_fapl)) < 0) TEST_ERROR
 
     /* Create an uncopied object in destination file so that addresses in source and destination
        files aren't the same */
@@ -8303,12 +8449,13 @@ main(void)
 
     /* Test in all configurations */
     for(configuration = 0; configuration <= MAX_CONFIGURATION; configuration++) {
-        hid_t my_fapl;
+        hid_t src_fapl;
+        hid_t dst_fapl;
         hid_t fcpl_src;
         hid_t fcpl_dst;
 
         /* No need to test dense attributes with old format */
-        if(!(configuration & CONFIG_NEW_FORMAT) && (configuration & CONFIG_DENSE))
+        if(!(configuration & CONFIG_SRC_NEW_FORMAT) && (configuration & CONFIG_DENSE))
             continue;
 
         /* Test with and without shared messages */
@@ -8329,110 +8476,130 @@ main(void)
             fcpl_dst = H5P_DEFAULT;
         }
 
-        /* Set the FAPL for the type of format */
-        if(configuration & CONFIG_NEW_FORMAT) {
-            puts("Testing with new group format:");
-            my_fapl = fapl2;
+        /* Set the FAPL for the source file's type of format */
+        if(configuration & CONFIG_SRC_NEW_FORMAT) {
+            puts("Testing with latest format for source file:");
+            src_fapl = fapl2;
 
-                /* Test with and without dense attributes */
+            /* Test with and without dense attributes */
             if(configuration & CONFIG_DENSE) {
                 puts("Testing with dense attributes:");
                 num_attributes_g = max_compact + 1;
             }
             else {
                 puts("Testing without dense attributes:");
-                num_attributes_g = MAX(min_dense, 2) - 1;
+                num_attributes_g = MAX(min_dense, 2) - 2;
             }
         } /* end if */
         else {
-            puts("Testing with old group format:");
-            my_fapl = fapl;
+            puts("Testing with oldest file format for source file:");
+            src_fapl = fapl;
             num_attributes_g = 4;
         } /* end else */
 
+        /* Set the FAPL for the destination file's type of format */
+        if(configuration & CONFIG_DST_NEW_FORMAT) {
+            puts("Testing with latest format for destination file:");
+            dst_fapl = fapl2;
+        } /* end if */
+        else {
+            puts("Testing with oldest file format for destination file:");
+            dst_fapl = fapl;
+        } /* end else */
+
         /* The tests... */
-        nerrors += test_copy_dataset_simple(fcpl_src, fcpl_dst, my_fapl);
-        nerrors += test_copy_dataset_simple_samefile(fcpl_src, my_fapl);
-        nerrors += test_copy_dataset_simple_empty(fcpl_src, fcpl_dst, my_fapl);
-        nerrors += test_copy_dataset_compound(fcpl_src, fcpl_dst, my_fapl);
-        nerrors += test_copy_dataset_chunked(fcpl_src, fcpl_dst, my_fapl);
-        nerrors += test_copy_dataset_chunked_empty(fcpl_src, fcpl_dst, my_fapl);
-        nerrors += test_copy_dataset_chunked_sparse(fcpl_src, fcpl_dst, my_fapl);
-        nerrors += test_copy_dataset_compressed(fcpl_src, fcpl_dst, my_fapl);
-        nerrors += test_copy_dataset_compact(fcpl_src, fcpl_dst, my_fapl);
-        nerrors += test_copy_dataset_multi_ohdr_chunks(fcpl_src, fcpl_dst, my_fapl);
-        nerrors += test_copy_dataset_attr_named_dtype(fcpl_src, fcpl_dst, my_fapl);
-
-        nerrors += test_copy_group_empty(fcpl_src, fcpl_dst, my_fapl);
-        nerrors += test_copy_root_group(fcpl_src, fcpl_dst, my_fapl);
-        nerrors += test_copy_group(fcpl_src, fcpl_dst, my_fapl);
-        nerrors += test_copy_group_deep(fcpl_src, fcpl_dst, my_fapl);
-        nerrors += test_copy_group_loop(fcpl_src, fcpl_dst, my_fapl);
-        nerrors += test_copy_group_wide_loop(fcpl_src, fcpl_dst, my_fapl);
-        nerrors += test_copy_group_links(fcpl_src, fcpl_dst, my_fapl);
-        nerrors += test_copy_soft_link(fcpl_src, fcpl_dst, my_fapl);
+        nerrors += test_copy_dataset_simple(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+        nerrors += test_copy_dataset_simple_samefile(fcpl_src, src_fapl);
+        nerrors += test_copy_dataset_simple_empty(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+        nerrors += test_copy_dataset_compound(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+        nerrors += test_copy_dataset_chunked(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+        nerrors += test_copy_dataset_chunked_empty(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+        nerrors += test_copy_dataset_chunked_sparse(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+        nerrors += test_copy_dataset_compressed(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+        nerrors += test_copy_dataset_compact(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+        nerrors += test_copy_dataset_multi_ohdr_chunks(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+        nerrors += test_copy_dataset_attr_named_dtype(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+
+        nerrors += test_copy_group_empty(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+        nerrors += test_copy_root_group(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+        nerrors += test_copy_group(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+        nerrors += test_copy_group_deep(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+        nerrors += test_copy_group_loop(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+        nerrors += test_copy_group_wide_loop(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+        nerrors += test_copy_group_links(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+        nerrors += test_copy_soft_link(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
 #ifndef H5_CANNOT_OPEN_TWICE
-        nerrors += test_copy_ext_link(fcpl_src, fcpl_dst, my_fapl);
+        nerrors += test_copy_ext_link(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
 #endif /* H5_CANNOT_OPEN_TWICE */
-        nerrors += test_copy_exist(fcpl_src, fcpl_dst, my_fapl);
-        nerrors += test_copy_path(fcpl_src, fcpl_dst, my_fapl);
-
-        nerrors += test_copy_option(fcpl_src, fcpl_dst, my_fapl, H5O_COPY_WITHOUT_ATTR_FLAG,
-                   FALSE, "H5Ocopy(): without attributes");
-        nerrors += test_copy_option(fcpl_src, fcpl_dst, my_fapl, 0, TRUE,
-                   "H5Ocopy(): with missing groups");
-        nerrors += test_copy_option(fcpl_src, fcpl_dst, my_fapl, H5O_COPY_EXPAND_SOFT_LINK_FLAG,
-                   FALSE, "H5Ocopy(): expand soft link");
-        nerrors += test_copy_option(fcpl_src, fcpl_dst, my_fapl, H5O_COPY_EXPAND_EXT_LINK_FLAG,
+        nerrors += test_copy_exist(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+        nerrors += test_copy_path(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+
+        nerrors += test_copy_named_datatype_attr_self(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+
+        nerrors += test_copy_option(fcpl_src, fcpl_dst, src_fapl, dst_fapl,
+                    H5O_COPY_WITHOUT_ATTR_FLAG,
+                    FALSE, "H5Ocopy(): without attributes");
+        nerrors += test_copy_option(fcpl_src, fcpl_dst, src_fapl, dst_fapl,
+                    0,
+                    TRUE, "H5Ocopy(): with missing groups");
+        nerrors += test_copy_option(fcpl_src, fcpl_dst, src_fapl, dst_fapl,
+                    H5O_COPY_EXPAND_SOFT_LINK_FLAG,
+                    FALSE, "H5Ocopy(): expand soft link");
+        nerrors += test_copy_option(fcpl_src, fcpl_dst, src_fapl, dst_fapl,
+                    H5O_COPY_EXPAND_EXT_LINK_FLAG,
                     FALSE, "H5Ocopy: expand external link");
-        nerrors += test_copy_option(fcpl_src, fcpl_dst, my_fapl,
+        nerrors += test_copy_option(fcpl_src, fcpl_dst, src_fapl, dst_fapl,
                     H5O_COPY_EXPAND_SOFT_LINK_FLAG | H5O_COPY_EXPAND_EXT_LINK_FLAG,
                     FALSE, "H5Ocopy: expand soft and external links");
-        nerrors += test_copy_option(fcpl_src, fcpl_dst, my_fapl, H5O_COPY_SHALLOW_HIERARCHY_FLAG,
-                   FALSE, "H5Ocopy(): shallow group copy");
-        nerrors += test_copy_option(fcpl_src, fcpl_dst, my_fapl, H5O_COPY_EXPAND_REFERENCE_FLAG,
-                   FALSE, "H5Ocopy(): expand object reference");
-        nerrors += test_copy_option(fcpl_src, fcpl_dst, my_fapl, H5O_COPY_PRESERVE_NULL_FLAG,
-                   FALSE, "H5Ocopy(): preserve NULL messages");
-        nerrors += test_copy_option(fcpl_src, fcpl_dst, my_fapl, H5O_COPY_WITHOUT_ATTR_FLAG |
-                   H5O_COPY_PRESERVE_NULL_FLAG, TRUE, "H5Ocopy(): preserve NULL messages");
+        nerrors += test_copy_option(fcpl_src, fcpl_dst, src_fapl, dst_fapl,
+                    H5O_COPY_SHALLOW_HIERARCHY_FLAG,
+                    FALSE, "H5Ocopy(): shallow group copy");
+        nerrors += test_copy_option(fcpl_src, fcpl_dst, src_fapl, dst_fapl,
+                    H5O_COPY_EXPAND_REFERENCE_FLAG,
+                    FALSE, "H5Ocopy(): expand object reference");
+        nerrors += test_copy_option(fcpl_src, fcpl_dst, src_fapl, dst_fapl,
+                    H5O_COPY_PRESERVE_NULL_FLAG,
+                    FALSE, "H5Ocopy(): preserve NULL messages");
+        nerrors += test_copy_option(fcpl_src, fcpl_dst, src_fapl, dst_fapl,
+                    H5O_COPY_WITHOUT_ATTR_FLAG | H5O_COPY_PRESERVE_NULL_FLAG,
+                    TRUE, "H5Ocopy(): preserve NULL messages");
 
         /* Tests that do not use attributes and do not need to be tested
          * multiple times for different attribute configurations */
         if(configuration < CONFIG_DENSE) {
-            nerrors += test_copy_named_datatype(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_named_datatype_vl(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_named_datatype_vl_vl(fcpl_src, fcpl_dst, my_fapl);
-
-            nerrors += test_copy_dataset_external(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_dataset_named_dtype(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_dataset_named_dtype_hier(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_dataset_named_dtype_hier_outside(fcpl_src, fcpl_dst, my_fapl);
-
-            nerrors += test_copy_dataset_contig_vl(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_dataset_chunked_vl(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_dataset_compact_vl(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_dataset_compressed_vl(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_attribute_vl(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_dataset_compact_named_vl(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_dataset_contig_named_vl(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_dataset_chunked_named_vl(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_dataset_compressed_named_vl(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_dataset_compact_vl_vl(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_dataset_contig_vl_vl(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_dataset_chunked_vl_vl(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_dataset_compressed_vl_vl(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_dataset_contig_cmpd_vl(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_dataset_chunked_cmpd_vl(fcpl_src, fcpl_dst, my_fapl);
-            nerrors += test_copy_dataset_compact_cmpd_vl(fcpl_src, fcpl_dst, my_fapl);
-
-            nerrors += test_copy_same_file_named_datatype(fcpl_src, my_fapl);
-            nerrors += test_copy_old_layout(fcpl_dst, my_fapl);
-            nerrors += test_copy_null_ref(fcpl_src, fcpl_dst, my_fapl);
+            nerrors += test_copy_named_datatype(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_named_datatype_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_named_datatype_vl_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+
+            nerrors += test_copy_dataset_external(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_dataset_named_dtype(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_dataset_named_dtype_hier(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_dataset_named_dtype_hier_outside(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+
+            nerrors += test_copy_dataset_contig_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_dataset_chunked_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_dataset_compact_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_dataset_compressed_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_attribute_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_dataset_compact_named_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_dataset_contig_named_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_dataset_chunked_named_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_dataset_compressed_named_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_dataset_compact_vl_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_dataset_contig_vl_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_dataset_chunked_vl_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_dataset_compressed_vl_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_dataset_contig_cmpd_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_dataset_chunked_cmpd_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+            nerrors += test_copy_dataset_compact_cmpd_vl(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
+
+            nerrors += test_copy_same_file_named_datatype(fcpl_src, src_fapl);
+            nerrors += test_copy_old_layout(fcpl_dst, dst_fapl);
+            nerrors += test_copy_null_ref(fcpl_src, fcpl_dst, src_fapl, dst_fapl);
         }
 
 /* TODO: not implemented
-        nerrors += test_copy_mount(my_fapl);
+        nerrors += test_copy_mount(src_fapl);
 */
     } /* end for */
 
diff --git a/test/testfiles/error_test_1 b/test/testfiles/error_test_1
index 308ca07..8d6e208 100644
--- a/test/testfiles/error_test_1
+++ b/test/testfiles/error_test_1
@@ -1,8 +1,6 @@
 #############################
 Expected output for error_test
 #############################
-Testing error API based on data I/O                                   
-All error API tests passed.
    This program tests the Error API.  There're supposed to be some error messages
 ********* Print error stack in HDF5 default way *********
 Second Test-DIAG: Error detected in Second Program (1.0) thread (IDs):
@@ -23,6 +21,8 @@ Error Test-DIAG: Error detected in Error Program (1.0) thread (IDs):
         class: Second Test
         major: Error in test
         minor: Error in error stack
+
+Testing error API based on data I/O
 HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
   #000: (file name) line (number) in H5Dwrite(): not a dataset
     major: Invalid arguments to routine
@@ -38,3 +38,23 @@ HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
   #002: (file name) line (number) in H5Dwrite(): not a dataset
     major: Invalid arguments to routine
     minor: Inappropriate type
+
+Testing error message during data reading when filter isn't registered
+HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
+  #000: (file name) line (number) in H5Dread(): can't read data
+    major: Dataset
+    minor: Read failed
+  #001: (file name) line (number) in H5D_read(): can't read data
+    major: Dataset
+    minor: Read failed
+  #002: (file name) line (number) in H5D_chunk_read(): unable to read raw data chunk
+    major: Low-level I/O
+    minor: Read failed
+  #003: (file name) line (number) in H5D_chunk_lock(): data pipeline read failed
+    major: Data filters
+    minor: Filter operation failed
+  #004: (file name) line (number) in H5Z_pipeline(): required filter 'bogus' is not registered
+    major: Data filters
+    minor: Read failed
+
+All error API tests passed.
diff --git a/test/testlinks_env.sh.in b/test/testlinks_env.sh.in
index e71dfc8..5a7e045 100644
--- a/test/testlinks_env.sh.in
+++ b/test/testlinks_env.sh.in
@@ -35,7 +35,7 @@ TEST_BIN=`pwd`/$TEST_NAME 	# The path of the test binary
 ENVCMD="env HDF5_EXT_PREFIX=.:tmp" 	# The environment variable & value
 #
 # Run the test
-$ENVCMD $TEST_BIN
+$ENVCMD $RUNSERIAL $TEST_BIN
 exitcode=$?
 if [ $exitcode -eq 0 ]; then
         echo "Test for HDF5_EXT_PREFIX PASSED"
diff --git a/test/tfile.c b/test/tfile.c
index 1f7271a..9f6d6d4 100644
--- a/test/tfile.c
+++ b/test/tfile.c
@@ -2509,63 +2509,115 @@ test_userblock_alignment(void)
 
 /****************************************************************
 **
-**  test_libver_bounds():
-**	Verify that a file created with "LATEST, LATEST" can be
-**      opened later, with no setting.  (Further testing welcome)
+**  test_libver_bounds_real():
+**      Verify that a file created and modified with the
+**      specified libver bounds has the specified object header
+**      versions for the right objects.
 **
 ****************************************************************/
 static void
-test_libver_bounds(void)
+test_libver_bounds_real(H5F_libver_t libver_create, unsigned oh_vers_create,
+    H5F_libver_t libver_mod, unsigned oh_vers_mod)
 {
     hid_t       file, group;            /* Handles */
     hid_t       fapl;                   /* File access property list */
-    herr_t	ret;                    /* Return value */
-
-    /* Output message about test being performed */
-    MESSAGE(5, ("Testing setting library version bounds\n"));
+    H5O_info_t  oinfo;                  /* Object info */
+    herr_t      ret;                    /* Return value */
 
     /*
-     * Create a new file using the default properties.
+     * Create a new file using the creation properties.
      */
     fapl = H5Pcreate(H5P_FILE_ACCESS);
     CHECK(fapl, FAIL, "H5Pcreate");
 
-    ret = H5Pset_libver_bounds(fapl, H5F_LIBVER_LATEST, H5F_LIBVER_LATEST);
+    ret = H5Pset_libver_bounds(fapl, libver_create, H5F_LIBVER_LATEST);
     CHECK(ret, FAIL, "H5Pset_libver_bounds");
 
     file = H5Fcreate("tfile5.h5", H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
     CHECK(file, FAIL, "H5Fcreate");
 
+    /*
+     * Make sure the root group has the correct object header version
+     */
+    ret = H5Oget_info_by_name(file, "/", &oinfo, H5P_DEFAULT);
+    CHECK(ret, FAIL, "H5Oget_info_by_name");
+    VERIFY(oinfo.hdr.version, oh_vers_create, "H5Oget_info_by_name");
+
+    /*
+     * Reopen the file and make sure the root group still has the correct version
+     */
     ret = H5Fclose(file);
     CHECK(ret, FAIL, "H5Fclose");
 
-    ret = H5Pset_libver_bounds(fapl, H5F_LIBVER_EARLIEST, H5F_LIBVER_LATEST);
+    ret = H5Pset_libver_bounds(fapl, libver_mod, H5F_LIBVER_LATEST);
     CHECK(ret, FAIL, "H5Pset_libver_bounds");
 
     file = H5Fopen("tfile5.h5", H5F_ACC_RDWR, fapl);
     CHECK(file, FAIL, "H5Fopen");
 
+    ret = H5Oget_info_by_name(file, "/", &oinfo, H5P_DEFAULT);
+    CHECK(ret, FAIL, "H5Oget_info_by_name");
+    VERIFY(oinfo.hdr.version, oh_vers_create, "H5Oget_info_by_name");
+
     /*
-     * Create a group named "G1" in the file.
+     * Create a group named "G1" in the file, and make sure it has the correct
+     * object header version
      */
     group = H5Gcreate2(file, "/G1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
     CHECK(group, FAIL, "H5Gcreate");
 
+    ret = H5Oget_info(group, &oinfo);
+    CHECK(ret, FAIL, "H5Oget_info_by_name");
+    VERIFY(oinfo.hdr.version, oh_vers_mod, "H5Oget_info_by_name");
+
     ret = H5Gclose(group);
     CHECK(ret, FAIL, "H5Gclose");
 
     /*
-     * Create a group named "/G1/G3" in the file.
+     * Create a group named "/G1/G3" in the file, and make sure it has the
+     * correct object header version
      */
     group = H5Gcreate2(file, "/G1/G3", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
     CHECK(group, FAIL, "H5Gcreate");
 
+    ret = H5Oget_info(group, &oinfo);
+    CHECK(ret, FAIL, "H5Oget_info_by_name");
+    VERIFY(oinfo.hdr.version, oh_vers_mod, "H5Oget_info_by_name");
+
     ret = H5Gclose(group);
     CHECK(ret, FAIL, "H5Gclose");
 
+    /*
+     * Make sure the root group still has the correct object header version
+     */
+    ret = H5Oget_info_by_name(file, "/", &oinfo, H5P_DEFAULT);
+    CHECK(ret, FAIL, "H5Oget_info_by_name");
+    VERIFY(oinfo.hdr.version, oh_vers_create, "H5Oget_info_by_name");
+
     ret = H5Fclose(file);
     CHECK(ret, FAIL, "H5Fclose");
-} /* test_libver_bounds() */
+} /* end test_libver_bounds_real() */
+
+/****************************************************************
+**
+**  test_libver_bounds():
+**	Verify that a file created and modified with various
+**      libver bounds is handled correctly.  (Further testing
+**      welcome)
+**
+****************************************************************/
+static void
+test_libver_bounds(void)
+{
+    /* Output message about test being performed */
+    MESSAGE(5, ("Testing setting library version bounds\n"));
+
+    /* Run the tests */
+    test_libver_bounds_real(H5F_LIBVER_EARLIEST, 1, H5F_LIBVER_LATEST, 2);
+    test_libver_bounds_real(H5F_LIBVER_EARLIEST, 1, H5F_LIBVER_18, 2);
+    test_libver_bounds_real(H5F_LIBVER_LATEST, 2, H5F_LIBVER_EARLIEST, 1);
+    test_libver_bounds_real(H5F_LIBVER_18, 2, H5F_LIBVER_EARLIEST, 1);
+} /* end test_libver_bounds() */
 
 /****************************************************************
 **
diff --git a/test/tmisc.c b/test/tmisc.c
index b2dd2c7..12d8531 100644
--- a/test/tmisc.c
+++ b/test/tmisc.c
@@ -239,6 +239,7 @@ unsigned m13_rdata[MISC13_DIM1][MISC13_DIM2];          /* Data read from dataset
 #define MISC20_SPACE2_DIM0      8
 #define MISC20_SPACE2_DIM1      4
 
+#ifdef H5_HAVE_FILTER_SZIP
 /* Definitions for misc. test #21 */
 #define MISC21_FILE             "tmisc21.h5"
 #define MISC21_DSET_NAME        "Dataset"
@@ -256,6 +257,7 @@ unsigned m13_rdata[MISC13_DIM1][MISC13_DIM2];          /* Data read from dataset
 #define MISC22_CHUNK_DIM1       512
 #define MISC22_SPACE_DIM0       639
 #define MISC22_SPACE_DIM1       1308
+#endif /* H5_HAVE_FILTER_SZIP */
 
 /* Definitions for misc. test #23 */
 #define MISC23_FILE             "tmisc23.h5"
@@ -311,6 +313,9 @@ unsigned m13_rdata[MISC13_DIM1][MISC13_DIM2];          /* Data read from dataset
 #define MISC29_COPY_FILE        "tmisc29.h5"
 #define MISC29_DSETNAME         "dset2"
 
+/* Definitions for misc. test #30 */
+#define MISC30_FILE             "tmisc30.h5"
+
 /****************************************************************
 **
 **  test_misc1(): test unlinking a dataset from a group and immediately
@@ -3557,7 +3562,7 @@ test_misc20(void)
    and encoder is available.
                             EIP 2004/8/04
 */
-#if defined H5_HAVE_FILTER_SZIP
+#ifdef H5_HAVE_FILTER_SZIP
 
 /****************************************************************
 **
@@ -5157,6 +5162,87 @@ test_misc29(void)
     CHECK(ret, FAIL, "H5Fclose");
 } /* end test_misc29() */
 
+
+static int
+test_misc30_get_info_cb(hid_t loc_id, const char *name, const H5L_info_t UNUSED *info,
+    void UNUSED *op_data)
+{
+    H5O_info_t object_info;
+
+    return H5Oget_info_by_name(loc_id, name, &object_info, H5P_DEFAULT);	
+}
+
+static int
+test_misc30_get_info(hid_t loc_id)
+{
+    return H5Literate(loc_id, H5_INDEX_NAME, H5_ITER_INC, NULL, test_misc30_get_info_cb, NULL);
+}
+
+
+/****************************************************************
+**
+**  test_misc30(): Exercise local heap code that loads prefix
+**                 separately from data block, causing the free
+**                 block information to get lost.
+**
+****************************************************************/
+static void
+test_misc30(void)
+{
+    hsize_t file_size[] = {0, 0};       /* Sizes of file created */
+    hbool_t get_info;                   /* Whether to perform the get info call */
+
+    /* Output message about test being performed */
+    MESSAGE(5, ("Local heap dropping free block info\n"));
+
+    for(get_info = FALSE; get_info <= TRUE; get_info++) {
+        hid_t fid;                  /* File ID */
+        hid_t gid;                  /* Group ID */
+        int i;                      /* Local index counter */
+        herr_t  ret;                /* Generic return value */
+
+        fid = H5Fcreate(MISC30_FILE, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+        CHECK(fid, FAIL, "H5Fcreate");
+        gid = H5Gcreate2(fid, "/g0", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+        CHECK(gid, FAIL, "H5Gcreate2");
+
+        ret = H5Gclose(gid);
+        CHECK(ret, FAIL, "H5Gclose");
+        ret = H5Fclose(fid);
+        CHECK(ret, FAIL, "H5Fclose");
+        
+        for(i = 0; i < 20; i++) {
+            char gname[32];
+
+            fid = H5Fopen(MISC30_FILE, H5F_ACC_RDWR, H5P_DEFAULT);
+            CHECK(fid, FAIL, "H5Fopen");
+    
+            if(get_info) {
+                ret = test_misc30_get_info(fid);			
+                CHECK(ret, FAIL, "test_misc30_get_info");
+            }
+
+            sprintf(gname, "/g0/group%d", i);
+            gid = H5Gcreate2(fid, gname, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+            CHECK(gid, FAIL, "H5Gcreate2");
+
+            ret = H5Gclose(gid);
+            CHECK(ret, FAIL, "H5Gclose");
+            ret = H5Fclose(fid);
+            CHECK(ret, FAIL, "H5Fclose");
+        } 
+        
+        fid = H5Fopen(MISC30_FILE, H5F_ACC_RDONLY, H5P_DEFAULT);
+        CHECK(fid, FAIL, "H5Fopen");
+        ret = H5Fget_filesize(fid, &file_size[get_info]);
+        CHECK(fid, FAIL, "H5Fget_filesize");
+        ret = H5Fclose(fid);
+        CHECK(ret, FAIL, "H5Fclose");
+    } 
+    
+    VERIFY(file_size[0], file_size[1], "test_misc30");
+} /* end test_misc30() */
+
 /****************************************************************
 **
 **  test_misc(): Main misc. test routine.
@@ -5188,7 +5274,7 @@ test_misc(void)
     test_misc18();      /* Test new object header information in H5O_info_t struct */
     test_misc19();      /* Test incrementing & decrementing ref count on IDs */
     test_misc20();      /* Test problems with truncated dimensions in version 2 of storage layout message */
-#if defined H5_HAVE_FILTER_SZIP
+#ifdef H5_HAVE_FILTER_SZIP
     test_misc21();      /* Test that "late" allocation time is treated the same as "incremental", for chunked datasets w/a filters */
     test_misc22();      /* check szip bits per pixel */
 #endif /* H5_HAVE_FILTER_SZIP */
@@ -5201,6 +5287,7 @@ test_misc(void)
     test_misc27();      /* Test opening file with object that has bad # of object header messages */
     test_misc28();      /* Test that chunks are cached appropriately */
     test_misc29();      /* Test that speculative metadata reads are handled correctly */
+    test_misc30();      /* Exercise local heap loading bug where free lists were getting dropped */
 
 
 } /* test_misc() */
@@ -5246,7 +5333,7 @@ cleanup_misc(void)
     HDremove(MISC18_FILE);
     HDremove(MISC19_FILE);
     HDremove(MISC20_FILE);
-#if defined H5_HAVE_FILTER_SZIP
+#ifdef H5_HAVE_FILTER_SZIP
     HDremove(MISC21_FILE);
     HDremove(MISC22_FILE);
 #endif /* H5_HAVE_FILTER_SZIP */
@@ -5257,5 +5344,6 @@ cleanup_misc(void)
     HDremove(MISC26_FILE);
     HDremove(MISC28_FILE);
     HDremove(MISC29_COPY_FILE);
+    HDremove(MISC30_FILE);
 }
 
diff --git a/test/vfd.c b/test/vfd.c
index 5a4074a..f6e9f06 100644
--- a/test/vfd.c
+++ b/test/vfd.c
@@ -50,13 +50,14 @@ const char *FILENAME[] = {
     "log_file",          /*6*/
     "stdio_file",        /*7*/
     "windows_file",      /*8*/
+    "new_multi_file_v16",/*9*/
     NULL
 };
 
 #define LOG_FILENAME "log_vfd_out.log"
 
 #define COMPAT_BASENAME "family_v16_"
-
+#define MULTI_COMPAT_BASENAME "multi_file_v16"
 
 
 /*-------------------------------------------------------------------------
@@ -75,9 +76,9 @@ const char *FILENAME[] = {
 static herr_t
 test_sec2(void)
 {
-	hid_t        file            = -1;
-	hid_t        fapl            = -1;
-	hid_t        access_fapl     = -1;
+  hid_t        file            = -1;
+  hid_t        fapl            = -1;
+  hid_t        access_fapl     = -1;
     char         filename[1024];
     int          *fhandle        = NULL;
     hsize_t      file_size       = 0;
@@ -156,18 +157,18 @@ test_direct(void)
 {
 #ifdef H5_HAVE_DIRECT
     hid_t       file=(-1), fapl, access_fapl = -1;
-    hid_t	dset1=-1, dset2=-1, space1=-1, space2=-1;
+    hid_t  dset1=-1, dset2=-1, space1=-1, space2=-1;
     char        filename[1024];
     int         *fhandle=NULL;
     hsize_t     file_size;
-    hsize_t	dims1[2], dims2[1];
-    size_t	mbound;
-    size_t	fbsize;
-    size_t	cbsize;
-    int		*points, *check, *p1, *p2;
-    int		wdata2[DSET2_DIM] = {11,12,13,14};
-    int		rdata2[DSET2_DIM];
-    int		i, j, n;
+    hsize_t  dims1[2], dims2[1];
+    size_t  mbound;
+    size_t  fbsize;
+    size_t  cbsize;
+    int    *points, *check, *p1, *p2;
+    int    wdata2[DSET2_DIM] = {11,12,13,14};
+    int    rdata2[DSET2_DIM];
+    int    i, j, n;
 #endif /*H5_HAVE_DIRECT*/
 
     TESTING("DIRECT I/O file driver");
@@ -188,10 +189,10 @@ test_direct(void)
     if(H5Pget_fapl_direct(fapl, &mbound, &fbsize, &cbsize) < 0)
         TEST_ERROR;
     if(mbound != MBOUNDARY || fbsize != FBSIZE || cbsize != CBSIZE)
-	TEST_ERROR;
+  TEST_ERROR;
 
     if(H5Pset_alignment(fapl, (hsize_t)THRESHOLD, (hsize_t)FBSIZE) < 0)
-	TEST_ERROR;
+  TEST_ERROR;
 
     H5E_BEGIN_TRY {
         file=H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
@@ -199,7 +200,7 @@ test_direct(void)
     if(file<0) {
         H5Pclose (fapl);
         SKIPPED();
-        printf("	Probably the file system doesn't support Direct I/O\n");
+        printf("  Probably the file system doesn't support Direct I/O\n");
         return 0;
     }
 
@@ -243,8 +244,8 @@ test_direct(void)
     /* Initialize the dset1 */
     p1 = points;
     for(i = n = 0; i < DSET1_DIM1; i++)
-	for(j = 0; j < DSET1_DIM2; j++)
-	    *p1++ = n++;
+  for(j = 0; j < DSET1_DIM2; j++)
+      *p1++ = n++;
 
     /* Create the data space1 */
     dims1[0] = DSET1_DIM1;
@@ -274,13 +275,13 @@ test_direct(void)
     p1 = points;
     p2 = check;
     for(i = 0; i < DSET1_DIM1; i++)
-	for(j = 0; j < DSET1_DIM2; j++)
-	    if(*p1++ != *p2++) {
-		H5_FAILED();
-		printf("    Read different values than written in data set 1.\n");
-		printf("    At index %d,%d\n", i, j);
-        	TEST_ERROR;
-	    } /* end if */
+  for(j = 0; j < DSET1_DIM2; j++)
+      if(*p1++ != *p2++) {
+    H5_FAILED();
+    printf("    Read different values than written in data set 1.\n");
+    printf("    At index %d,%d\n", i, j);
+          TEST_ERROR;
+      } /* end if */
 
     /* Create the data space2. For data set 2, memory address and data size are not aligned. */
     dims2[0] = DSET2_DIM;
@@ -307,12 +308,12 @@ test_direct(void)
 
     /* Check that the values read are the same as the values written */
     for(i = 0; i < DSET2_DIM; i++)
-	if(wdata2[i] != rdata2[i]) {
-	    H5_FAILED();
-	    printf("    Read different values than written in data set 2.\n");
-	    printf("    At index %d\n", i);
+  if(wdata2[i] != rdata2[i]) {
+      H5_FAILED();
+      printf("    Read different values than written in data set 2.\n");
+      printf("    At index %d\n", i);
             TEST_ERROR;
-	} /* end if */
+  } /* end if */
 
     if(H5Sclose(space1) < 0)
         TEST_ERROR;
@@ -325,9 +326,9 @@ test_direct(void)
     if(H5Fclose(file) < 0)
         TEST_ERROR;
     if(points)
-	free(points);
+  free(points);
     if(check)
-	free(check);
+  free(check);
 
     h5_cleanup(FILENAME, fapl);
     PASSED();
@@ -367,10 +368,10 @@ test_core(void)
     char        filename[1024];
     void        *fhandle=NULL;
     hsize_t     file_size;
-    int		*points, *check, *p1, *p2;
-    hid_t	dset1=-1, space1=-1;
-    hsize_t	dims1[2];
-    int		i, j, n;
+    int    *points, *check, *p1, *p2;
+    hid_t  dset1=-1, space1=-1;
+    hsize_t  dims1[2];
+    int    i, j, n;
 
     TESTING("CORE file driver");
 
@@ -432,8 +433,8 @@ test_core(void)
     /* Initialize the dset1 */
     p1 = points;
     for(i = n = 0; i < DSET1_DIM1; i++)
-	for(j = 0; j < DSET1_DIM2; j++)
-	    *p1++ = n++;
+  for(j = 0; j < DSET1_DIM2; j++)
+      *p1++ = n++;
 
     /* Create the data space1 */
     dims1[0] = DSET1_DIM1;
@@ -463,13 +464,13 @@ test_core(void)
     p1 = points;
     p2 = check;
     for(i = 0; i < DSET1_DIM1; i++)
-	for(j = 0; j < DSET1_DIM2; j++)
-	    if(*p1++ != *p2++) {
-		H5_FAILED();
-		printf("    Read different values than written in data set 1.\n");
-		printf("    At index %d,%d\n", i, j);
-        	TEST_ERROR;
-	    } /* end if */
+  for(j = 0; j < DSET1_DIM2; j++)
+      if(*p1++ != *p2++) {
+    H5_FAILED();
+    printf("    Read different values than written in data set 1.\n");
+    printf("    At index %d,%d\n", i, j);
+          TEST_ERROR;
+      } /* end if */
 
     if(H5Dclose(dset1) < 0)
         TEST_ERROR;
@@ -501,7 +502,7 @@ test_core(void)
 
     /* Reallocate memory for reading buffer. */
     if(check)
-	free(check);
+  free(check);
 
     check = (int*)malloc(DSET1_DIM1 * DSET1_DIM2 * sizeof(int));
 
@@ -513,13 +514,13 @@ test_core(void)
     p1 = points;
     p2 = check;
     for(i = 0; i < DSET1_DIM1; i++)
-	for(j = 0; j < DSET1_DIM2; j++)
-	    if(*p1++ != *p2++) {
-		H5_FAILED();
-		printf("    Read different values than written in data set 1.\n");
-		printf("    At index %d,%d\n", i, j);
-        	TEST_ERROR;
-	    } /* end if */
+  for(j = 0; j < DSET1_DIM2; j++)
+      if(*p1++ != *p2++) {
+    H5_FAILED();
+    printf("    Read different values than written in data set 1.\n");
+    printf("    At index %d,%d\n", i, j);
+          TEST_ERROR;
+      } /* end if */
 
     /* Check file size API */
     if(H5Fget_filesize(file, &file_size) < 0)
@@ -537,9 +538,9 @@ test_core(void)
     if(H5Fclose(file) < 0)
         TEST_ERROR;
     if(points)
-	free(points);
+  free(points);
     if(check)
-	free(check);
+  free(check);
 
     h5_cleanup(FILENAME, fapl);
 
@@ -1123,6 +1124,176 @@ error:
 
 
 /*-------------------------------------------------------------------------
+ * Function:    test_multi_compat
+ *
+ * Purpose:     Tests the backward compatibility for MULTI driver.
+ *              See if we can open files created with v1.6 library.
+ *              The source file was created by the test/file_handle.c
+ *              of the v1.6 library.  This test verifies the fix for 
+ *              Issue 2598. In v1.6 library, there was EOA for the whole
+ *              MULTI file saved in the super block.  We took it out in
+ *              v1.8 library because it's meaningless for the MULTI file.
+ *              v1.8 library saves the EOA for the metadata file, instead.
+ *
+ * Return:      Success:        0
+ *              Failure:        -1
+ *
+ * Programmer:  Raymond Lu
+ *              21 June 2011
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_multi_compat(void)
+{
+    hid_t       file=(-1), fapl, fapl2=(-1), dset=(-1), space=(-1);
+    hid_t       access_fapl = -1;
+    char        filename[1024], newname[1024], tmp[1024];
+    char        filename_s[1024], newname_s[1024];
+    char        filename_r[1024], newname_r[1024];
+    int         *fhandle2=NULL, *fhandle=NULL;
+    hsize_t     file_size;
+    H5FD_mem_t  mt, memb_map[H5FD_MEM_NTYPES];
+    hid_t       memb_fapl[H5FD_MEM_NTYPES];
+    haddr_t     memb_addr[H5FD_MEM_NTYPES];
+    const char  *memb_name[H5FD_MEM_NTYPES];
+    char        sv[H5FD_MEM_NTYPES][32];
+    hsize_t     dims[2]={MULTI_SIZE, MULTI_SIZE};
+    char        dname[]="dataset2";
+    int         i, j;
+    int         buf[MULTI_SIZE][MULTI_SIZE];
+
+    TESTING("MULTI file driver backward compatibility");
+
+    /* Set file access property list for MULTI driver */
+    fapl = h5_fileaccess();
+
+    HDmemset(memb_map, 0,  sizeof memb_map);
+    HDmemset(memb_fapl, 0, sizeof memb_fapl);
+    HDmemset(memb_name, 0, sizeof memb_name);
+    HDmemset(memb_addr, 0, sizeof memb_addr);
+    HDmemset(sv, 0, sizeof sv);
+
+    for(mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t,mt))
+        memb_map[mt] = H5FD_MEM_SUPER;
+    memb_map[H5FD_MEM_DRAW] = H5FD_MEM_DRAW;
+
+    memb_fapl[H5FD_MEM_SUPER] = H5P_DEFAULT;
+    sprintf(sv[H5FD_MEM_SUPER], "%%s-%c.h5", 's');
+    memb_name[H5FD_MEM_SUPER] = sv[H5FD_MEM_SUPER];
+    memb_addr[H5FD_MEM_SUPER] = 0;
+
+    memb_fapl[H5FD_MEM_DRAW] = H5P_DEFAULT;
+    sprintf(sv[H5FD_MEM_DRAW], "%%s-%c.h5", 'r');
+    memb_name[H5FD_MEM_DRAW] = sv[H5FD_MEM_DRAW];
+    memb_addr[H5FD_MEM_DRAW] = HADDR_MAX/2;
+
+    if(H5Pset_fapl_multi(fapl, memb_map, memb_fapl, memb_name, memb_addr, TRUE)<0)
+        TEST_ERROR;
+
+    h5_fixname(FILENAME[9], fapl, newname, sizeof newname);
+
+    /* Make copy for the data file in the build directory, to protect the 
+     * original file in the source directory */
+    sprintf(filename_s, "%s-%c.h5", MULTI_COMPAT_BASENAME, 's');
+    sprintf(newname_s, "%s-%c.h5", FILENAME[9], 's');
+    h5_make_local_copy(filename_s, newname_s);
+
+    sprintf(filename_r, "%s-%c.h5", MULTI_COMPAT_BASENAME, 'r');
+    sprintf(newname_r, "%s-%c.h5", FILENAME[9], 'r');
+    h5_make_local_copy(filename_r, newname_r);
+
+    /* Reopen the file for read only.  Verify 1.8 library can open file
+     * created with 1.6 library. */
+    if((file=H5Fopen(newname, H5F_ACC_RDONLY, fapl)) < 0)
+        TEST_ERROR;
+
+    if((dset = H5Dopen2(file, DSET1_NAME, H5P_DEFAULT)) < 0)
+        TEST_ERROR;
+
+    if(H5Dclose(dset) < 0)
+        TEST_ERROR;
+
+    if(H5Fclose(file) < 0)
+        TEST_ERROR;
+
+    /* Make sure we can reopen the file for read and write */
+    if((file=H5Fopen(newname, H5F_ACC_RDWR, fapl)) < 0)
+        TEST_ERROR;
+
+    if((dset = H5Dopen2(file, DSET1_NAME, H5P_DEFAULT)) < 0)
+        TEST_ERROR;
+
+    if(H5Dclose(dset) < 0)
+        TEST_ERROR;
+
+    if(H5Fclose(file) < 0)
+        TEST_ERROR;
+
+    /* Reopen the file for adding another dataset. The new EOA for metadata file 
+     * should be written to the file */
+    if((file=H5Fopen(newname, H5F_ACC_RDWR, fapl)) < 0)
+        TEST_ERROR;
+
+    /* Create and write data set */
+    if((space=H5Screate_simple(2, dims, NULL)) < 0)
+        TEST_ERROR;
+
+    if((dset=H5Dcreate2(file, DSET2_NAME, H5T_NATIVE_INT, space, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        TEST_ERROR;
+
+    for(i=0; i<MULTI_SIZE; i++)
+        for(j=0; j<MULTI_SIZE; j++)
+            buf[i][j] = i*10000+j;
+    if(H5Dwrite(dset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0)
+        TEST_ERROR;
+
+    if(H5Dclose(dset) < 0)
+        TEST_ERROR;
+
+    if(H5Sclose(space) < 0)
+        TEST_ERROR;
+
+    if(H5Fclose(file) < 0)
+        TEST_ERROR;
+
+    /* Reopen the file for read only again. Verify the library can handle 
+     * the EOA correctly */
+    if((file=H5Fopen(newname, H5F_ACC_RDONLY, fapl)) < 0)
+        TEST_ERROR;
+
+    if((dset = H5Dopen2(file, DSET1_NAME, H5P_DEFAULT)) < 0)
+        TEST_ERROR;
+
+    if(H5Dclose(dset) < 0)
+        TEST_ERROR;
+
+    if((dset = H5Dopen2(file, DSET2_NAME, H5P_DEFAULT)) < 0)
+        TEST_ERROR;
+
+    if(H5Dclose(dset) < 0)
+        TEST_ERROR;
+
+    if(H5Fclose(file) < 0)
+        TEST_ERROR;
+
+    h5_cleanup(FILENAME, fapl);
+    PASSED();
+
+    return 0;
+
+error:
+    H5E_BEGIN_TRY {
+        H5Sclose(space);
+        H5Dclose(dset);
+        H5Pclose(fapl);
+        H5Fclose(file);
+    } H5E_END_TRY;
+    return -1;
+}
+
+
+/*-------------------------------------------------------------------------
  * Function:    test_log
  *
  * Purpose:     Tests the file handle interface for log driver
@@ -1298,7 +1469,7 @@ error:
 static herr_t
 test_windows(void)
 {
-#ifdef _WIN32
+#ifdef H5_HAVE_WINDOWS
 
     hid_t        file            = -1;
     hid_t        fapl            = -1;
@@ -1307,16 +1478,16 @@ test_windows(void)
     int          *fhandle        = NULL;
     hsize_t      file_size       = 0;
 
-#endif /*_WIN32*/
+#endif /*H5_HAVE_WINDOWS*/
 
     TESTING("WINDOWS file driver");
 
-#ifndef _WIN32
+#ifndef H5_HAVE_WINDOWS
 
     SKIPPED();
     return 0;
 
-#else /*_WIN32*/
+#else /* H5_HAVE_WINDOWS */
 
     /* Set property list and file name for WINDOWS driver. */
     fapl = h5_fileaccess();
@@ -1369,7 +1540,7 @@ error:
     } H5E_END_TRY;
     return -1;
 
-#endif /*_WIN32*/
+#endif /* H5_HAVE_WINDOWS */
 }
 
 
@@ -1401,15 +1572,16 @@ main(void)
     nerrors += test_family() < 0         ? 1 : 0;
     nerrors += test_family_compat() < 0  ? 1 : 0;
     nerrors += test_multi() < 0          ? 1 : 0;
+    nerrors += test_multi_compat() < 0   ? 1 : 0;
     nerrors += test_direct() < 0         ? 1 : 0;
     nerrors += test_log() < 0            ? 1 : 0;
     nerrors += test_stdio() < 0          ? 1 : 0;
     nerrors += test_windows() < 0        ? 1 : 0;
 
     if(nerrors) {
-	printf("***** %d Virtual File Driver TEST%s FAILED! *****\n",
-		nerrors, nerrors > 1 ? "S" : "");
-	return 1;
+  printf("***** %d Virtual File Driver TEST%s FAILED! *****\n",
+    nerrors, nerrors > 1 ? "S" : "");
+  return 1;
     }
 
     printf("All Virtual File Driver tests passed.\n");
diff --git a/test/vms_data.h5 b/test/vms_data.h5
deleted file mode 100644
index 14aeef2..0000000
Binary files a/test/vms_data.h5 and /dev/null differ
diff --git a/testpar/CMakeLists.txt b/testpar/CMakeLists.txt
index c805aaf..d0ba668 100644
--- a/testpar/CMakeLists.txt
+++ b/testpar/CMakeLists.txt
@@ -24,19 +24,19 @@ ADD_EXECUTABLE (testphdf5 ${testphdf5_SRCS})
 TARGET_NAMING (testphdf5 ${LIB_TYPE})
 TARGET_LINK_LIBRARIES (testphdf5 ${HDF5_TEST_LIB_TARGET} ${HDF5_LIB_TARGET})
 
-ADD_TEST (NAME testphdf5 COMMAND ${MPIEXEC} ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_POSTFLAGS} $<TARGET_FILE:testphdf5>)
+ADD_TEST (NAME TEST_PAR_testphdf5 COMMAND ${MPIEXEC} ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_POSTFLAGS} $<TARGET_FILE:testphdf5>)
 
 MACRO (ADD_H5P_TEST file)
   ADD_EXECUTABLE (${file} ${HDF5_TEST_PAR_SOURCE_DIR}/${file}.c)
   TARGET_NAMING (${file} ${LIB_TYPE})
   TARGET_LINK_LIBRARIES (${file} ${HDF5_TEST_LIB_TARGET} ${HDF5_LIB_TARGET})
 
-  ADD_TEST (NAME ${file} COMMAND ${MPIEXEC} ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_POSTFLAGS} $<TARGET_FILE:${file}> -p)
+  ADD_TEST (NAME TEST_PAR_${file} COMMAND ${MPIEXEC} ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_POSTFLAGS} $<TARGET_FILE:${file}>)
 ENDMACRO (ADD_H5P_TEST file)
 
 SET (H5P_TESTS
     t_mpi
-    t_posix_compliant
+#    t_posix_compliant
     t_cache
     t_pflush1
     t_pflush2
@@ -44,11 +44,15 @@ SET (H5P_TESTS
 )
 
 FOREACH (testp ${H5P_TESTS})
-    ADD_H5P_TEST(${testp})
+  ADD_H5P_TEST(${testp})
 ENDFOREACH (testp ${H5P_TESTS})
 
-SET_TESTS_PROPERTIES(t_pflush2 PROPERTIES DEPENDS t_pflush1)
+SET_TESTS_PROPERTIES(TEST_PAR_t_pflush2 PROPERTIES DEPENDS TEST_PAR_t_pflush1)
 
+IF (NOT WIN32)
+  ADD_H5P_TEST(t_posix_compliant)
+ENDIF (NOT WIN32)
+  
 IF (HDF5_TEST_VFD)
 
   SET (VFD_LIST
diff --git a/testpar/Makefile.in b/testpar/Makefile.in
index 7245a4b..ae0c7d0 100644
--- a/testpar/Makefile.in
+++ b/testpar/Makefile.in
@@ -202,6 +202,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -222,10 +223,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -269,7 +272,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/testpar/t_cache.c b/testpar/t_cache.c
index ce944f5..9d170a7 100644
--- a/testpar/t_cache.c
+++ b/testpar/t_cache.c
@@ -49,6 +49,9 @@ hid_t noblock_dxpl_id=(-1);
 #define NFILENAME 2
 #define PARATESTFILE filenames[0]
 const char *FILENAME[NFILENAME]={"CacheTestDummy", NULL};
+#ifndef PATH_MAX
+#define PATH_MAX    512
+#endif  /* !PATH_MAX */
 char    filenames[NFILENAME][PATH_MAX];
 hid_t   fapl;                           /* file access property list */
 
diff --git a/testpar/t_chunk_alloc.c b/testpar/t_chunk_alloc.c
index bb13d4e..43b45af 100644
--- a/testpar/t_chunk_alloc.c
+++ b/testpar/t_chunk_alloc.c
@@ -22,27 +22,27 @@
  */
 
 #include "testphdf5.h"
-static int	mpi_size, mpi_rank;
+static int  mpi_size, mpi_rank;
 
 #define DSET_NAME "ExtendibleArray"
-#define CHUNK_SIZE	1000		/* #elements per chunk */
-#define CHUNK_FACTOR	200     /* default dataset size in terms of chunks */
+#define CHUNK_SIZE  1000    /* #elements per chunk */
+#define CHUNK_FACTOR  200     /* default dataset size in terms of chunks */
 #define CLOSE           1
 #define NO_CLOSE        0
 
 static MPI_Offset
 get_filesize(const char *filename)
 {
-    int		mpierr;
-    MPI_File	fd;
-    MPI_Offset	filesize;
+    int    mpierr;
+    MPI_File  fd;
+    MPI_Offset  filesize;
 #ifndef H5_HAVE_MPI_GET_SIZE
-    struct stat stat_buf;
+    h5_stat_t stat_buf;
 #endif
 
 #ifdef H5_HAVE_MPI_GET_SIZE
     mpierr = MPI_File_open(MPI_COMM_SELF, (char*)filename, MPI_MODE_RDONLY,
-	MPI_INFO_NULL, &fd);
+  MPI_INFO_NULL, &fd);
     VRFY((mpierr == MPI_SUCCESS), "");
 
     mpierr = MPI_File_get_size(fd, &filesize);
@@ -54,7 +54,7 @@ get_filesize(const char *filename)
     /* Some systems (only SGI Altix Propack 4 so far) doesn't return correct
      * file size for MPI_File_get_size.  Use stat instead.
      */
-    if((mpierr=stat(filename, &stat_buf))<0)
+    if((mpierr=HDstat(filename, &stat_buf))<0)
     VRFY((mpierr == MPI_SUCCESS), "");
 
     /* Hopefully this casting is safe */
@@ -101,8 +101,8 @@ create_chunked_dataset(const char *filename, int chunk_factor, write_type write_
     long         nchunks;
     herr_t       hrc;
 
-    MPI_Offset  filesize,	    /* actual file size */
-		est_filesize;	    /* estimated file size */
+    MPI_Offset  filesize,      /* actual file size */
+    est_filesize;      /* estimated file size */
 
     /* set up MPI parameters */
     MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
@@ -111,34 +111,34 @@ create_chunked_dataset(const char *filename, int chunk_factor, write_type write_
     /* Only MAINPROCESS should create the file.  Others just wait. */
     if (MAINPROCESS){
         nchunks=chunk_factor*mpi_size;
-	dims[0]=nchunks*CHUNK_SIZE;
-	/* Create the data space with unlimited dimensions. */
-	dataspace = H5Screate_simple (1, dims, maxdims);
-	VRFY((dataspace >= 0), "");
+  dims[0]=nchunks*CHUNK_SIZE;
+  /* Create the data space with unlimited dimensions. */
+  dataspace = H5Screate_simple (1, dims, maxdims);
+  VRFY((dataspace >= 0), "");
 
-	memspace = H5Screate_simple(1, chunk_dims, NULL);
-	VRFY((memspace >= 0), "");
+  memspace = H5Screate_simple(1, chunk_dims, NULL);
+  VRFY((memspace >= 0), "");
 
-	/* Create a new file. If file exists its contents will be overwritten. */
-	file_id = H5Fcreate(h5_rmprefix(filename), H5F_ACC_TRUNC, H5P_DEFAULT,
-		    H5P_DEFAULT);
-	VRFY((file_id >= 0), "H5Fcreate");
+  /* Create a new file. If file exists its contents will be overwritten. */
+  file_id = H5Fcreate(h5_rmprefix(filename), H5F_ACC_TRUNC, H5P_DEFAULT,
+        H5P_DEFAULT);
+  VRFY((file_id >= 0), "H5Fcreate");
 
-	/* Modify dataset creation properties, i.e. enable chunking  */
-	cparms = H5Pcreate(H5P_DATASET_CREATE);
-	VRFY((cparms >= 0), "");
+  /* Modify dataset creation properties, i.e. enable chunking  */
+  cparms = H5Pcreate(H5P_DATASET_CREATE);
+  VRFY((cparms >= 0), "");
 
-	hrc = H5Pset_alloc_time(cparms, H5D_ALLOC_TIME_EARLY);
-	VRFY((hrc >= 0), "");
+  hrc = H5Pset_alloc_time(cparms, H5D_ALLOC_TIME_EARLY);
+  VRFY((hrc >= 0), "");
 
-	hrc = H5Pset_chunk(cparms, 1, chunk_dims);
-	VRFY((hrc >= 0), "");
+  hrc = H5Pset_chunk(cparms, 1, chunk_dims);
+  VRFY((hrc >= 0), "");
 
-	/* Create a new dataset within the file using cparms creation properties. */
-	dataset = H5Dcreate2(file_id, DSET_NAME, H5T_NATIVE_UCHAR, dataspace, H5P_DEFAULT, cparms, H5P_DEFAULT);
-	VRFY((dataset >= 0), "");
+  /* Create a new dataset within the file using cparms creation properties. */
+  dataset = H5Dcreate2(file_id, DSET_NAME, H5T_NATIVE_UCHAR, dataspace, H5P_DEFAULT, cparms, H5P_DEFAULT);
+  VRFY((dataset >= 0), "");
 
-	if(write_pattern == sec_last) {
+  if(write_pattern == sec_last) {
             HDmemset(buffer, 100, CHUNK_SIZE);
 
             count[0] = 1;
@@ -154,28 +154,28 @@ create_chunked_dataset(const char *filename, int chunk_factor, write_type write_
             VRFY((hrc >= 0), "H5Dwrite");
         } /* end if */
 
-	/* Close resources */
-	hrc = H5Dclose (dataset);
-	VRFY((hrc >= 0), "");
-	dataset = -1;
+  /* Close resources */
+  hrc = H5Dclose (dataset);
+  VRFY((hrc >= 0), "");
+  dataset = -1;
 
-	hrc = H5Sclose (dataspace);
-	VRFY((hrc >= 0), "");
+  hrc = H5Sclose (dataspace);
+  VRFY((hrc >= 0), "");
 
-	hrc = H5Sclose (memspace);
-	VRFY((hrc >= 0), "");
+  hrc = H5Sclose (memspace);
+  VRFY((hrc >= 0), "");
 
-	hrc = H5Pclose (cparms);
-	VRFY((hrc >= 0), "");
+  hrc = H5Pclose (cparms);
+  VRFY((hrc >= 0), "");
 
-	hrc = H5Fclose (file_id);
-	VRFY((hrc >= 0), "");
-	file_id = -1;
+  hrc = H5Fclose (file_id);
+  VRFY((hrc >= 0), "");
+  file_id = -1;
 
-	/* verify file size */
-	filesize = get_filesize(filename);
-	est_filesize = nchunks * CHUNK_SIZE * sizeof(unsigned char);
-	VRFY((filesize >= est_filesize), "file size check");
+  /* verify file size */
+  filesize = get_filesize(filename);
+  est_filesize = nchunks * CHUNK_SIZE * sizeof(unsigned char);
+  VRFY((filesize >= est_filesize), "file size check");
 
     }
 
@@ -216,8 +216,8 @@ parallel_access_dataset(const char *filename, int chunk_factor, access_type acti
     int         i;
     long        nchunks;
     /* MPI Gubbins */
-    MPI_Offset  filesize,	    /* actual file size */
-		est_filesize;	    /* estimated file size */
+    MPI_Offset  filesize,      /* actual file size */
+    est_filesize;      /* estimated file size */
 
     /* Initialize MPI */
     MPI_Comm_size(MPI_COMM_WORLD,&mpi_size);
@@ -257,19 +257,19 @@ parallel_access_dataset(const char *filename, int chunk_factor, access_type acti
         /* all chunks are written by all the processes in an interleaved way*/
         case write_all:
 
-	    memset(buffer, mpi_rank+1, CHUNK_SIZE);
-	    count[0] = 1;
-	    stride[0] = 1;
-	    block[0] = chunk_dims[0];
+      memset(buffer, mpi_rank+1, CHUNK_SIZE);
+      count[0] = 1;
+      stride[0] = 1;
+      block[0] = chunk_dims[0];
             for (i=0; i<nchunks/mpi_size; i++){
-		    offset[0] = (i*mpi_size+mpi_rank)*chunk_dims[0];
+        offset[0] = (i*mpi_size+mpi_rank)*chunk_dims[0];
 
-		    hrc = H5Sselect_hyperslab(dataspace, H5S_SELECT_SET, offset, stride, count, block);
-		    VRFY((hrc >= 0), "");
+        hrc = H5Sselect_hyperslab(dataspace, H5S_SELECT_SET, offset, stride, count, block);
+        VRFY((hrc >= 0), "");
 
-		    /* Write the buffer out */
-		    hrc = H5Dwrite(*dataset, H5T_NATIVE_UCHAR, memspace, dataspace, H5P_DEFAULT, buffer);
-		    VRFY((hrc >= 0), "H5Dwrite");
+        /* Write the buffer out */
+        hrc = H5Dwrite(*dataset, H5T_NATIVE_UCHAR, memspace, dataspace, H5P_DEFAULT, buffer);
+        VRFY((hrc >= 0), "H5Dwrite");
             }
 
             break;
@@ -386,8 +386,8 @@ verify_data(const char *filename, int chunk_factor, write_type write_pattern, in
     stride[0] = 1;
     block[0] = chunk_dims[0];
     for (i=0; i<nchunks; i++){
-	/* reset buffer values */
-	memset(buffer, -1, CHUNK_SIZE);
+  /* reset buffer values */
+  memset(buffer, -1, CHUNK_SIZE);
 
         offset[0] = i*chunk_dims[0];
 
@@ -399,19 +399,19 @@ verify_data(const char *filename, int chunk_factor, write_type write_pattern, in
         VRFY((hrc >= 0), "H5Dread");
 
         /* set expected value according the write pattern */
-	switch (write_pattern) {
-	    case all:
-		value = i%mpi_size + 1;
-		break;
-	    case none:
-		value = 0;
-		break;
+  switch (write_pattern) {
+      case all:
+    value = i%mpi_size + 1;
+    break;
+      case none:
+    value = 0;
+    break;
             case sec_last:
-		if (i==nchunks-2)
-		    value = 100;
-		else
-		    value = 0;
-	}
+    if (i==nchunks-2)
+        value = 100;
+    else
+        value = 0;
+  }
 
         /* verify content of the chunk */
         for (index = 0; index < CHUNK_SIZE; index++)
@@ -419,10 +419,10 @@ verify_data(const char *filename, int chunk_factor, write_type write_pattern, in
     }
 
     hrc = H5Sclose (dataspace);
-	VRFY((hrc >= 0), "");
+  VRFY((hrc >= 0), "");
 
-	hrc = H5Sclose (memspace);
-	VRFY((hrc >= 0), "");
+  hrc = H5Sclose (memspace);
+  VRFY((hrc >= 0), "");
 
     /* Can close some plists */
     hrc = H5Pclose(access_plist);
@@ -480,7 +480,7 @@ test_chunk_alloc(void)
 
     filename = GetTestParameters();
     if (VERBOSE_MED)
-	printf("Extend Chunked allocation test on file %s\n", filename);
+  printf("Extend Chunked allocation test on file %s\n", filename);
 
     /* Case 1 */
     /* Create chunked dataset without writing anything.*/
diff --git a/testpar/t_dset.c b/testpar/t_dset.c
index 21e25b6..d2f061d 100644
--- a/testpar/t_dset.c
+++ b/testpar/t_dset.c
@@ -2498,3 +2498,552 @@ none_selection_chunk(void)
     if(data_origin) free(data_origin);
     if(data_array) free(data_array);
 }
+
+
+/* Function: test_actual_io_mode
+ *
+ * Purpose: tests one specific case of collective I/O and checks that the 
+ *          actual_chunk_opt_mode property and the actual_io_mode
+ *          properties in the DXPL have the correct values.
+ *
+ * Input:   selection_mode: changes the way processes select data from the space, as well
+ *          as some dxpl flags to get collective I/O to break in different ways.
+ *          
+ *          The relevant I/O function and expected response for each mode:
+ *              TEST_ACTUAL_IO_MULTI_CHUNK_IND:
+ *                  H5D_mpi_chunk_collective_io, each process reports independent I/O
+ *              
+ *              TEST_ACTUAL_IO_MULTI_CHUNK_COL:
+ *                  H5D_mpi_chunk_collective_io, each process reports collective I/O
+ *
+ *              TEST_ACTUAL_IO_MULTI_CHUNK_MIX:
+ *                  H5D_mpi_chunk_collective_io, each process reports mixed I/O
+ *
+ *              TEST_ACTUAL_IO_MULTI_CHUNK_MIX_DISAGREE:
+ *                  H5D_mpi_chunk_collective_io, processes disagree. The root reports
+ *                  collective, the rest report independent I/O
+ *
+ *              TEST_ACTUAL_IO_MULTI_CHUNK_NO_OPT_COL:
+ *                  H5D_mpi_chunk_collective_io_no_opt, each process reports collective I/O
+ *
+ *              TEST_ACTUAL_IO_MULTI_CHUNK_NO_OPT_MIX_DISAGREE:
+ *                  H5D_mpi_chunk_collective_io_no_opt, processes disagree
+ *                  (collective and mixed I/O)
+ *
+ *              TEST_ACTUAL_IO_LINK_CHUNK:
+ *                  H5D_link_chunk_collective_io, processes report linked chunk I/O
+ *
+ *              TEST_ACTUAL_IO_CONTIGUOUS:
+ *                  H5D_contig_collective_write or H5D_contig_collective_read
+ *                  each process reports contiguous collective I/O
+ *
+ *              TEST_ACTUAL_IO_NO_COLLECTIVE:
+ *                  Simple independent I/O. This tests that the defaults are properly set.
+ *
+ *              TEST_ACTUAL_IO_RESET:
+ *                  Perfroms collective and then independent I/O wit hthe same dxpl to
+ *                  make sure the peroperty is correctly reset to the default on each use.
+ *                  Specifically, this test runs TEST_ACTUAL_IO_MULTI_CHUNK_NO_OPT_MIX_DISAGREE
+ *                  (The most complex case that works on all builds) and then performs
+ *                  an independent read and write with the same dxpls.
+ *
+ *          It may seem like TEST_ACTUAL_IO_MULTI_CHUNK_NO_OPT_IND and 
+ *          TEST_ACTUAL_IO_MULTI_CHUNK_NO_OPT_MIX have been accidentally
+ *          left out. This is intentional; the other test cases sufficiently
+ *          cover all cases for Multi Chunk No Opt I/O.
+ * 
+ * Programmer: Jacob Gruber
+ * Date: 2011-04-06
+ */
+static void 
+test_actual_io_mode(int selection_mode) {
+    H5D_mpio_actual_chunk_opt_mode_t   actual_chunk_opt_mode_write = -1;
+    H5D_mpio_actual_chunk_opt_mode_t   actual_chunk_opt_mode_read = -1;
+    H5D_mpio_actual_chunk_opt_mode_t   actual_chunk_opt_mode_expected = -1;
+    H5D_mpio_actual_io_mode_t   actual_io_mode_write = -1;
+    H5D_mpio_actual_io_mode_t   actual_io_mode_read = -1;
+    H5D_mpio_actual_io_mode_t   actual_io_mode_expected = -1;
+    const char  * filename;
+    const char  * test_name;
+    hbool_t     multi_chunk_no_opt;
+    hbool_t     multi_chunk_with_opt;
+    hbool_t     is_chunked;
+    hbool_t     is_collective;
+    int         mpi_size = -1; 
+    int         mpi_rank = -1;
+    int         length;
+    int         * buffer;
+    int         i;
+    MPI_Comm    mpi_comm = MPI_COMM_NULL;
+    MPI_Info    mpi_info = MPI_INFO_NULL;
+    hid_t       fid = -1;
+    hid_t       sid = -1;
+    hid_t       dataset = -1;
+    hid_t       data_type = H5T_NATIVE_INT;
+    hid_t       fapl = -1;
+    hid_t       mem_space = -1;
+    hid_t       file_space = -1;
+    hid_t       dcpl = -1;
+    hid_t       dxpl_write = -1;
+    hid_t       dxpl_read = -1;
+    hsize_t     dims[RANK];
+    hsize_t     chunk_dims[RANK];
+    hsize_t     start[RANK];
+    hsize_t     stride[RANK];
+    hsize_t     count[RANK];
+    hsize_t     block[RANK];
+    hbool_t     use_gpfs = FALSE;
+    herr_t      ret;
+   
+    /* Set up some flags to make some future if statements slightly more readable */
+    multi_chunk_no_opt = (
+        selection_mode == TEST_ACTUAL_IO_MULTI_CHUNK_NO_OPT_IND ||
+        selection_mode == TEST_ACTUAL_IO_MULTI_CHUNK_NO_OPT_COL ||
+        selection_mode == TEST_ACTUAL_IO_MULTI_CHUNK_NO_OPT_MIX_DISAGREE );
+    
+    /* Note: RESET performs the same tests as MULTI_CHUNK_MIX_DISAGREE and then
+     * tests independent I/O
+     */
+    multi_chunk_with_opt = (
+        selection_mode == TEST_ACTUAL_IO_MULTI_CHUNK_IND ||
+        selection_mode == TEST_ACTUAL_IO_MULTI_CHUNK_COL ||
+        selection_mode == TEST_ACTUAL_IO_MULTI_CHUNK_MIX ||
+        selection_mode == TEST_ACTUAL_IO_MULTI_CHUNK_MIX_DISAGREE ||
+        selection_mode == TEST_ACTUAL_IO_RESET );
+ 
+    is_chunked = (
+        selection_mode != TEST_ACTUAL_IO_CONTIGUOUS &&
+        selection_mode != TEST_ACTUAL_IO_NO_COLLECTIVE);
+    
+    is_collective = selection_mode != TEST_ACTUAL_IO_NO_COLLECTIVE;
+
+    /* Set up MPI parameters */
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+
+    MPI_Barrier(MPI_COMM_WORLD);
+    
+    HDassert(mpi_size >= 1);
+
+    mpi_comm = MPI_COMM_WORLD;
+    mpi_info = MPI_INFO_NULL;
+
+    filename = (const char *)GetTestParameters();
+    HDassert(filename != NULL);
+
+    /* Setup the file access template */
+    fapl = create_faccess_plist(mpi_comm, mpi_info, facc_type, use_gpfs);
+    VRFY((fapl >= 0), "create_faccess_plist() succeeded");
+
+    /* Create the file */
+    fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl);
+    VRFY((fid >= 0), "H5Fcreate succeeded");
+
+    /* Create the basic Space */    
+    dims[0] = dim0;
+    dims[1] = dim1;
+    sid = H5Screate_simple (RANK, dims, NULL);
+    VRFY((sid >= 0), "H5Screate_simple succeeded");
+
+    /* Create the dataset creation plist */
+    dcpl = H5Pcreate(H5P_DATASET_CREATE);
+    VRFY((dcpl >= 0), "dataset creation plist created successfully");
+
+    /* If we are not testing contiguous datasets */
+    if(is_chunked) {
+        /* Set up chunk information.  */
+        chunk_dims[0] = dims[0]/mpi_size;
+        chunk_dims[1] = dims[1];
+        ret = H5Pset_chunk(dcpl, 2, chunk_dims);
+        VRFY((ret >= 0),"chunk creation property list succeeded");
+    }
+
+    /* Create the dataset */
+    dataset = H5Dcreate2(fid, "actual_io", data_type, sid, H5P_DEFAULT,
+            dcpl, H5P_DEFAULT);
+    VRFY((dataset >= 0), "H5Dcreate2() dataset succeeded");
+
+    /* Create the file dataspace */
+    file_space = H5Dget_space(dataset);
+    VRFY((file_space >= 0), "H5Dget_space succeeded");
+
+    /* Choose a selection method based on the type of I/O we want to occur, 
+     * and also set up some selection-dependeent test info. */
+    switch(selection_mode) {
+        
+        /* Independent I/O with optimization */
+        case TEST_ACTUAL_IO_MULTI_CHUNK_IND:
+            /* Since the dataset is chunked by row and each process selects a row,
+             * each process  writes to a different chunk. This forces all I/O to be
+             * independent.
+             */
+            slab_set(mpi_rank, mpi_size, start, count, stride, block, BYROW);
+            
+            test_name = "Multi Chunk - Independent";
+            actual_chunk_opt_mode_expected = H5D_MPIO_MULTI_CHUNK;
+            actual_io_mode_expected = H5D_MPIO_CHUNK_INDEPENDENT;
+            break;
+
+        /* Collective I/O with optimization */
+        case TEST_ACTUAL_IO_MULTI_CHUNK_COL:
+            /* The dataset is chunked by rows, so each process takes a column which
+             * spans all chunks. Since the processes write non-overlapping regular
+             * selections to each chunk, the operation is purely collective.
+             */
+            slab_set(mpi_rank, mpi_size, start, count, stride, block, BYCOL);
+            
+            test_name = "Multi Chunk - Collective";
+            actual_chunk_opt_mode_expected = H5D_MPIO_MULTI_CHUNK;
+            actual_io_mode_expected = H5D_MPIO_CHUNK_COLLECTIVE;
+            break;
+        
+        /* Mixed I/O with optimization */
+        case TEST_ACTUAL_IO_MULTI_CHUNK_MIX:
+            /* A chunk will be assigned collective I/O only if it is selected by each
+             * process. To get mixed I/O, have the root select all chunks and each
+             * subsequent process select the first and nth chunk. The first chunk,
+             * accessed by all, will be assigned collective I/O while each other chunk
+             * will be accessed only by the root and the nth procecess and will be
+             * assigned independent I/O. Each process will access one chunk collectively
+             * and at least one chunk independently, reporting mixed I/O.
+             */
+           
+            if(mpi_rank == 0) {
+                 /* Select the first column */
+                 slab_set(mpi_rank, mpi_size, start, count, stride, block, BYCOL);
+            } else {
+                /* Select the first and the nth chunk in the nth column */
+                block[0] = dim0 / mpi_size;
+                block[1] = dim1 / mpi_size;
+                count[0] = 2;
+                count[1] = 1;
+                stride[0] = mpi_rank * block[0];
+                stride[1] = 1;
+                start[0] = 0;
+                start[1] = mpi_rank*block[1];
+            }
+                
+            test_name = "Multi Chunk - Mixed";
+            actual_chunk_opt_mode_expected = H5D_MPIO_MULTI_CHUNK;
+            actual_io_mode_expected = H5D_MPIO_CHUNK_MIXED;
+            break;
+
+        /* RESET tests that the properties are properly reset to defaults each time I/O is
+         * performed. To acheive this, we have RESET perform collective I/O (which would change
+         * the values from the defaults) followed by independent I/O (which should report the
+         * default values). RESET doesn't need to have a unique selection, so we reuse
+         * MULTI_CHUMK_MIX_DISAGREE, which was chosen because it is a complex case that works 
+         * on all builds. The independent section of RESET can be found at the end of this function.
+         */
+        case TEST_ACTUAL_IO_RESET:
+
+        /* Mixed I/O with optimization and internal disagreement */
+        case TEST_ACTUAL_IO_MULTI_CHUNK_MIX_DISAGREE:
+            /* A chunk will be assigned collective I/O only if it is selected by each
+             * process. To get mixed I/O with disagreement, assign process n to the
+             * first chunk and the nth chunk. The first chunk, selected by all, is 
+             * assgigned collective I/O, while each other process gets independent I/O.
+             * Since the root process with only access the first chunk, it will report
+             * collective I/O. The subsequent processes will access the first chunk
+             * collectively, and their other chunk indpendently, reporting mixed I/O.
+             */
+
+            if(mpi_rank == 0) {
+                 /* Select the first chunk in the first column */
+                 slab_set(mpi_rank, mpi_size, start, count, stride, block, BYCOL);
+                 block[0] = block[0] / mpi_size;
+            } else {
+                /* Select the first and the nth chunk in the nth column */
+                block[0] = dim0 / mpi_size;
+                block[1] = dim1 / mpi_size;
+                count[0] = 2;
+                count[1] = 1;
+                stride[0] = mpi_rank * block[0];
+                stride[1] = 1;
+                start[0] = 0;
+                start[1] = mpi_rank*block[1];
+            }
+            
+            /* If the testname was not already set by the RESET case */
+            if (selection_mode == TEST_ACTUAL_IO_RESET)
+                test_name = "RESET";
+            else
+                test_name = "Multi Chunk - Mixed (Disagreement)";
+            
+            actual_chunk_opt_mode_expected = H5D_MPIO_MULTI_CHUNK;
+               
+            if(mpi_rank == 0)
+                actual_io_mode_expected = H5D_MPIO_CHUNK_COLLECTIVE;
+            else
+                actual_io_mode_expected = H5D_MPIO_CHUNK_MIXED;
+            
+            break; 
+
+        /* Collective I/O without optimization */
+        case TEST_ACTUAL_IO_MULTI_CHUNK_NO_OPT_COL:
+            /* The dataset is chunked by rows, so when each process takes a column, its
+             * selection spans all chunks. Since no process writes more chunks than any
+             * other, colective I/O is never broken. */ 
+            slab_set(mpi_rank, mpi_size, start, count, stride, block, BYCOL);
+                
+            test_name = "Multi Chunk No Opt - Collective";
+            actual_chunk_opt_mode_expected = H5D_MPIO_MULTI_CHUNK_NO_OPT;
+            actual_io_mode_expected = H5D_MPIO_CHUNK_COLLECTIVE;
+            break;
+       
+
+        /* Mixed I/O without optimization with disagreement */
+        case TEST_ACTUAL_IO_MULTI_CHUNK_NO_OPT_MIX_DISAGREE:
+            /* Each process takes a column, but the root's column is shortened so that
+             * it only reads the first chunk. Since all the other processes are writing
+             * to more chunks, they will break collective after the first chunk.
+             */
+            slab_set(mpi_rank, mpi_size, start, count, stride, block, BYCOL);
+            if(mpi_rank == 0) 
+                  block[0] = block[0] / mpi_size;
+                
+            test_name = "Multi Chunk No Opt - Mixed (Disagreement)";
+            actual_chunk_opt_mode_expected = H5D_MPIO_MULTI_CHUNK_NO_OPT;
+
+            if(mpi_rank == 0)
+                actual_io_mode_expected = H5D_MPIO_CHUNK_COLLECTIVE;
+            else
+                actual_io_mode_expected = H5D_MPIO_CHUNK_MIXED;
+
+            break;
+        
+        /* Linked Chunk I/O */
+        case TEST_ACTUAL_IO_LINK_CHUNK:        
+            /* Nothing special; link chunk I/O is forced in the dxpl settings. */
+            slab_set(mpi_rank, mpi_size, start, count, stride, block, BYROW);
+              
+            test_name = "Link Chunk";
+            actual_chunk_opt_mode_expected = H5D_MPIO_LINK_CHUNK;
+            actual_io_mode_expected = H5D_MPIO_CHUNK_COLLECTIVE;
+            break;
+
+        /* Contiguous Dataset */
+        case TEST_ACTUAL_IO_CONTIGUOUS:
+            /* A non overlapping, regular selection in a contiguous dataset leads to
+             * collective I/O */
+            slab_set(mpi_rank, mpi_size, start, count, stride, block, BYROW);
+                
+            test_name = "Contiguous";
+            actual_chunk_opt_mode_expected = H5D_MPIO_NO_CHUNK_OPTIMIZATION;
+            actual_io_mode_expected = H5D_MPIO_CONTIGUOUS_COLLECTIVE;
+            break;
+
+        case TEST_ACTUAL_IO_NO_COLLECTIVE:
+            slab_set(mpi_rank, mpi_size, start, count, stride, block, BYROW);
+                
+            test_name = "Independent";
+            actual_chunk_opt_mode_expected = H5D_MPIO_NO_CHUNK_OPTIMIZATION;
+            actual_io_mode_expected = H5D_MPIO_NO_COLLECTIVE;
+            break;
+
+        default:
+            test_name = "Undefined Selection Mode";
+            actual_chunk_opt_mode_expected = -1;
+            actual_io_mode_expected = -1;
+            break;
+    }
+
+    /* Reset the expected values to defulats if the MPI_POSIX driver is in use. 
+     * This property is defined only for mpio, not MPI POSIX. */
+    if (facc_type == FACC_MPIPOSIX) {
+        actual_chunk_opt_mode_expected = H5D_MPIO_NO_CHUNK_OPTIMIZATION;
+        actual_io_mode_expected = H5D_MPIO_NO_COLLECTIVE;
+    }
+
+    ret = H5Sselect_hyperslab(file_space, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+ 
+    /* Create a memory dataspace mirroring the dataset and select the same hyperslab
+     * as in the file space. 
+     */
+    mem_space = H5Screate_simple (RANK, dims, NULL);
+    VRFY((mem_space >= 0), "mem_space created");
+    
+    ret = H5Sselect_hyperslab(mem_space, H5S_SELECT_SET, start, stride, count, block);
+    VRFY((ret >= 0), "H5Sset_hyperslab succeeded");
+
+
+    /* Get the number of elements in the selection */
+    length = dim0 * dim1;
+
+    /* Allocate and initialize the buffer */
+    buffer = (int *)HDmalloc(sizeof(int) * length);
+    VRFY((buffer != NULL), "malloc of buffer succeeded"); 
+    for(i = 0; i < length; i++) 
+        buffer[i] = i;
+
+    /* Set up the dxpl for the write */
+    dxpl_write = H5Pcreate(H5P_DATASET_XFER);
+    VRFY((dxpl_write >= 0), "H5Pcreate(H5P_DATASET_XFER) succeeded");
+    
+    /* Set collective I/O properties in the dxpl. */
+    if(is_collective) {
+        /* Request collective I/O */
+        ret = H5Pset_dxpl_mpio(dxpl_write, H5FD_MPIO_COLLECTIVE);
+        VRFY((ret >= 0), "H5Pset_dxpl_mpio succeeded");
+        
+        /* Set the threshold number of processes per chunk for link chunk I/O
+         * to twice mpi_size. This will prevent the threshold from ever being
+         * met, thus forcing multi chunk io instead of link chunk io.
+         */
+        if(multi_chunk_with_opt) {
+            ret = H5Pset_dxpl_mpio_chunk_opt_num(dxpl_write, (unsigned) mpi_size*2);
+            VRFY((ret >= 0), "H5Pset_dxpl_mpio_chunk_opt_num succeeded");
+
+            ret = H5Pset_dxpl_mpio_chunk_opt_ratio(dxpl_write, (unsigned) 99);
+            VRFY((ret >= 0), "H5Pset_dxpl_mpio_chunk_opt_ratio succeeded");
+        }
+
+        /* Request multi chunk I/O without optimization */
+        if(multi_chunk_no_opt) {
+            ret = H5Pset_dxpl_mpio_chunk_opt(dxpl_write, H5FD_MPIO_CHUNK_MULTI_IO);
+            VRFY((ret >= 0), "H5Pset_dxpl_mpio succeeded");
+        }
+    }
+
+    /* Make a copy of the dxpl to test the read operation */
+    dxpl_read = H5Pcopy(dxpl_write);
+    VRFY((dxpl_read >= 0), "H5Pcopy succeeded");
+
+    /* Write */
+    ret = H5Dwrite(dataset, data_type, mem_space, file_space, dxpl_write, buffer);
+    if(ret < 0) H5Eprint2(H5E_DEFAULT, stdout);
+    VRFY((ret >= 0), "H5Dwrite() dataset multichunk write succeeded");
+
+    /* Retreive Actual io valuess */
+    ret = H5Pget_mpio_actual_io_mode(dxpl_write, &actual_io_mode_write);
+    VRFY((ret >= 0), "retriving actual io mode suceeded" );
+
+    ret = H5Pget_mpio_actual_chunk_opt_mode(dxpl_write, &actual_chunk_opt_mode_write);
+    VRFY((ret >= 0), "retriving actual chunk opt mode succeeded" );
+    
+    /* Read */
+    ret = H5Dread(dataset, data_type, mem_space, file_space, dxpl_read, buffer);
+    if(ret < 0) H5Eprint2(H5E_DEFAULT, stdout);
+    VRFY((ret >= 0), "H5Dread() dataset multichunk read succeeded");
+   
+    /* Retreive Actual io values */
+    ret = H5Pget_mpio_actual_io_mode(dxpl_read, &actual_io_mode_read);
+    VRFY((ret >= 0), "retriving actual io mode succeeded" );
+
+    ret = H5Pget_mpio_actual_chunk_opt_mode(dxpl_read, &actual_chunk_opt_mode_read);
+    VRFY((ret >= 0), "retriving actual chunk opt mode succeeded" );
+
+    /* Check write vs read */
+    VRFY((actual_io_mode_read == actual_io_mode_write),
+        "reading and writing are the same for actual_io_mode");
+    VRFY((actual_chunk_opt_mode_read == actual_chunk_opt_mode_write),
+        "reading and writing are the same for actual_chunk_opt_mode");
+
+    
+    /* Test values */
+    if(actual_chunk_opt_mode_expected != (unsigned) -1 && actual_io_mode_expected != (unsigned) -1) {
+        char message[100];
+        sprintf(message, "Actual Chunk Opt Mode has the correct value for %s.\n",test_name);
+        VRFY((actual_chunk_opt_mode_write == actual_chunk_opt_mode_expected), message);
+        sprintf(message, "Actual IO Mode has the correct value for %s.\n",test_name);
+        VRFY((actual_io_mode_write == actual_io_mode_expected), message);
+    } else {
+        HDfprintf(stderr, "%s %d -> (%d,%d)\n", test_name, mpi_rank,
+            actual_chunk_opt_mode_write, actual_io_mode_write);
+    }
+
+    /* To test that the property is succesfully reset to the default, we perform some
+     * independent I/O after the collective I/O
+     */
+    if (selection_mode == TEST_ACTUAL_IO_RESET) {
+        if (mpi_rank == 0) {
+            /* Switch to independent io */
+            ret = H5Pset_dxpl_mpio(dxpl_write, H5FD_MPIO_INDEPENDENT);
+            VRFY((ret >= 0), "H5Pset_dxpl_mpio succeeded");
+            ret = H5Pset_dxpl_mpio(dxpl_read, H5FD_MPIO_INDEPENDENT);
+            VRFY((ret >= 0), "H5Pset_dxpl_mpio succeeded");
+
+            /* Write */
+            ret = H5Dwrite(dataset, data_type, H5S_ALL, H5S_ALL, dxpl_write, buffer);
+            VRFY((ret >= 0), "H5Dwrite() dataset multichunk write succeeded");
+
+            /* Check Properties */
+            ret = H5Pget_mpio_actual_io_mode(dxpl_write, &actual_io_mode_write);
+            VRFY( (ret >= 0), "retriving actual io mode succeeded" );
+            ret = H5Pget_mpio_actual_chunk_opt_mode(dxpl_write, &actual_chunk_opt_mode_write);
+            VRFY( (ret >= 0), "retriving actual chunk opt mode succeeded" );
+
+            VRFY(actual_chunk_opt_mode_write == H5D_MPIO_NO_CHUNK_OPTIMIZATION,
+             "actual_chunk_opt_mode has correct value for reset write (independent)");
+            VRFY(actual_io_mode_write == H5D_MPIO_NO_COLLECTIVE,
+             "actual_io_mode has correct value for reset write (independent)");
+            
+            /* Read */
+            ret = H5Dread(dataset, data_type, H5S_ALL, H5S_ALL, dxpl_read, buffer);
+            VRFY((ret >= 0), "H5Dwrite() dataset multichunk write succeeded");
+
+            /* Check Properties */
+            ret = H5Pget_mpio_actual_io_mode(dxpl_read, &actual_io_mode_read);
+            VRFY( (ret >= 0), "retriving actual io mode succeeded" );
+            ret = H5Pget_mpio_actual_chunk_opt_mode(dxpl_read, &actual_chunk_opt_mode_read);
+            VRFY( (ret >= 0), "retriving actual chunk opt mode succeeded" );
+            
+            VRFY(actual_chunk_opt_mode_read == H5D_MPIO_NO_CHUNK_OPTIMIZATION,
+             "actual_chunk_opt_mode has correct value for reset read (independent)");
+            VRFY(actual_io_mode_read == H5D_MPIO_NO_COLLECTIVE,
+             "actual_io_mode has correct value for reset read (independent)");
+         }
+    }
+
+    /* Release some resources */
+    ret = H5Sclose(sid);
+    ret = H5Pclose(fapl);
+    ret = H5Pclose(dcpl);
+    ret = H5Pclose(dxpl_write);
+    ret = H5Pclose(dxpl_read);
+    ret = H5Dclose(dataset);
+    ret = H5Sclose(mem_space);
+    ret = H5Sclose(file_space);
+    ret = H5Fclose(fid);
+    HDfree(buffer);
+    return;
+}
+
+
+/* Function: actual_io_mode_tests
+ *
+ * Purpose: Tests all possible cases of the actual_io_mode property. 
+ *
+ * Programmer: Jacob Gruber
+ * Date: 2011-04-06
+ */
+void
+actual_io_mode_tests(void) {
+    int mpi_size = -1;
+    int mpi_rank = -1;
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+    MPI_Comm_size(MPI_COMM_WORLD, &mpi_rank);
+    
+    test_actual_io_mode(TEST_ACTUAL_IO_NO_COLLECTIVE);
+    
+    test_actual_io_mode(TEST_ACTUAL_IO_MULTI_CHUNK_IND);
+    test_actual_io_mode(TEST_ACTUAL_IO_MULTI_CHUNK_COL);
+    
+    /* The Multi Chunk Mixed test requires atleast three processes. */
+    if (mpi_size > 2)
+        test_actual_io_mode(TEST_ACTUAL_IO_MULTI_CHUNK_MIX);
+    else
+        HDfprintf(stdout, "Multi Chunk Mixed test requires 3 proceses minimum\n");
+    
+    test_actual_io_mode(TEST_ACTUAL_IO_MULTI_CHUNK_MIX_DISAGREE);
+
+    test_actual_io_mode(TEST_ACTUAL_IO_MULTI_CHUNK_NO_OPT_COL);
+    test_actual_io_mode(TEST_ACTUAL_IO_MULTI_CHUNK_NO_OPT_MIX_DISAGREE);
+
+    test_actual_io_mode(TEST_ACTUAL_IO_LINK_CHUNK);
+    test_actual_io_mode(TEST_ACTUAL_IO_CONTIGUOUS);
+ 
+    test_actual_io_mode(TEST_ACTUAL_IO_RESET);
+    return;
+}
diff --git a/testpar/t_mpi.c b/testpar/t_mpi.c
index c3e04de..f05eee2 100644
--- a/testpar/t_mpi.c
+++ b/testpar/t_mpi.c
@@ -31,11 +31,11 @@
 
 /* FILENAME and filenames must have the same number of names */
 const char *FILENAME[2]={
-	    "MPItest",
-	    NULL};
-char	filenames[2][200];
-int	nerrors = 0;
-hid_t	fapl;				/* file access property list */
+      "MPItest",
+      NULL};
+char  filenames[2][200];
+int  nerrors = 0;
+hid_t  fapl;        /* file access property list */
 
 /* protocols */
 static int errors_sum(int nerrs);
@@ -49,10 +49,10 @@ test_mpio_overlap_writes(char *filename)
     MPI_Comm comm;
     MPI_Info info = MPI_INFO_NULL;
     int color, mrc;
-    MPI_File	fh;
+    MPI_File  fh;
     int i;
     int vrfyerrs, nerrs;
-    unsigned char  buf[4093];		/* use some prime number for size */
+    unsigned char  buf[4093];    /* use some prime number for size */
     int bufsize = sizeof(buf);
     MPI_Offset  stride;
     MPI_Offset  mpi_off;
@@ -60,8 +60,8 @@ test_mpio_overlap_writes(char *filename)
 
 
     if (VERBOSE_MED)
-	printf("MPIO independent overlapping writes test on file %s\n",
-	    filename);
+  printf("MPIO independent overlapping writes test on file %s\n",
+      filename);
 
     nerrs = 0;
     /* set up MPI parameters */
@@ -70,10 +70,10 @@ test_mpio_overlap_writes(char *filename)
 
     /* Need at least 2 processes */
     if (mpi_size < 2) {
-	if (MAINPROCESS)
-	    printf("Need at least 2 processes to run MPIO test.\n");
-	    printf(" -SKIP- \n");
-	return 0;
+  if (MAINPROCESS)
+      printf("Need at least 2 processes to run MPIO test.\n");
+      printf(" -SKIP- \n");
+  return 0;
     }
 
     /* splits processes 0 to n-2 into one comm. and the last one into another */
@@ -82,85 +82,85 @@ test_mpio_overlap_writes(char *filename)
     VRFY((mrc==MPI_SUCCESS), "Comm_split succeeded");
 
     if (color==0){
-	/* First n-1 processes (color==0) open a file and write it */
-	mrc = MPI_File_open(comm, filename, MPI_MODE_CREATE|MPI_MODE_RDWR,
-		info, &fh);
-	VRFY((mrc==MPI_SUCCESS), "");
-
-	stride = 1;
-	mpi_off = mpi_rank*stride;
-	while (mpi_off < MPIO_TEST_WRITE_SIZE){
-	    /* make sure the write does not exceed the TEST_WRITE_SIZE */
-	    if (mpi_off+stride > MPIO_TEST_WRITE_SIZE)
-		stride = MPIO_TEST_WRITE_SIZE - mpi_off;
-
-	    /* set data to some trivial pattern for easy verification */
-	    for (i=0; i<stride; i++)
-		buf[i] = (unsigned char)(mpi_off+i);
-	    mrc = MPI_File_write_at(fh, mpi_off, buf, (int)stride, MPI_BYTE,
-		    &mpi_stat);
-	    VRFY((mrc==MPI_SUCCESS), "");
-
-	    /* move the offset pointer to last byte written by all processes */
-	    mpi_off += (mpi_size - 1 - mpi_rank) * stride;
-
-	    /* Increase chunk size without exceeding buffer size. */
-	    /* Then move the starting offset for next write. */
-	    stride *= 2;
-	    if (stride > bufsize)
-		stride = bufsize;
-	    mpi_off += mpi_rank*stride;
-	}
+  /* First n-1 processes (color==0) open a file and write it */
+  mrc = MPI_File_open(comm, filename, MPI_MODE_CREATE|MPI_MODE_RDWR,
+    info, &fh);
+  VRFY((mrc==MPI_SUCCESS), "");
+
+  stride = 1;
+  mpi_off = mpi_rank*stride;
+  while (mpi_off < MPIO_TEST_WRITE_SIZE){
+      /* make sure the write does not exceed the TEST_WRITE_SIZE */
+      if (mpi_off+stride > MPIO_TEST_WRITE_SIZE)
+    stride = MPIO_TEST_WRITE_SIZE - mpi_off;
+
+      /* set data to some trivial pattern for easy verification */
+      for (i=0; i<stride; i++)
+    buf[i] = (unsigned char)(mpi_off+i);
+      mrc = MPI_File_write_at(fh, mpi_off, buf, (int)stride, MPI_BYTE,
+        &mpi_stat);
+      VRFY((mrc==MPI_SUCCESS), "");
+
+      /* move the offset pointer to last byte written by all processes */
+      mpi_off += (mpi_size - 1 - mpi_rank) * stride;
+
+      /* Increase chunk size without exceeding buffer size. */
+      /* Then move the starting offset for next write. */
+      stride *= 2;
+      if (stride > bufsize)
+    stride = bufsize;
+      mpi_off += mpi_rank*stride;
+  }
 
-	/* close file and free the communicator */
-	mrc = MPI_File_close(&fh);
-	VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
-	mrc = MPI_Comm_free(&comm);
-	VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
+  /* close file and free the communicator */
+  mrc = MPI_File_close(&fh);
+  VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
+  mrc = MPI_Comm_free(&comm);
+  VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
 
-	/* sync with the other waiting processes */
-	mrc = MPI_Barrier(MPI_COMM_WORLD);
-	VRFY((mrc==MPI_SUCCESS), "Sync after writes");
+  /* sync with the other waiting processes */
+  mrc = MPI_Barrier(MPI_COMM_WORLD);
+  VRFY((mrc==MPI_SUCCESS), "Sync after writes");
     }else{
-	/* last process waits till writes are done,
-	 * then opens file to verify data.
-	 */
-	mrc = MPI_Barrier(MPI_COMM_WORLD);
-	VRFY((mrc==MPI_SUCCESS), "Sync after writes");
-
-	mrc = MPI_File_open(comm, filename, MPI_MODE_RDONLY,
-		info, &fh);
-	VRFY((mrc==MPI_SUCCESS), "");
-
-	stride = bufsize;
-	for (mpi_off=0; mpi_off < MPIO_TEST_WRITE_SIZE; mpi_off += bufsize){
-	    /* make sure it does not read beyond end of data */
-	    if (mpi_off+stride > MPIO_TEST_WRITE_SIZE)
-		stride = MPIO_TEST_WRITE_SIZE - mpi_off;
-	    mrc = MPI_File_read_at(fh, mpi_off, buf, (int)stride, MPI_BYTE,
-		    &mpi_stat);
-	    VRFY((mrc==MPI_SUCCESS), "");
-	    vrfyerrs=0;
-	    for (i=0; i<stride; i++){
-		unsigned char expected;
-		expected = (unsigned char)(mpi_off+i);
-		if ((expected != buf[i]) &&
-		    (vrfyerrs++ < MAX_ERR_REPORT || VERBOSE_MED)) {
-			printf("proc %d: found data error at [%ld], expect %u, got %u\n",
-			    mpi_rank, (long)(mpi_off+i), expected, buf[i]);
-		}
-	    }
-	    if (vrfyerrs > MAX_ERR_REPORT && !VERBOSE_MED)
-		printf("proc %d: [more errors ...]\n", mpi_rank);
-
-	    nerrs += vrfyerrs;
-	}
+  /* last process waits till writes are done,
+   * then opens file to verify data.
+   */
+  mrc = MPI_Barrier(MPI_COMM_WORLD);
+  VRFY((mrc==MPI_SUCCESS), "Sync after writes");
+
+  mrc = MPI_File_open(comm, filename, MPI_MODE_RDONLY,
+    info, &fh);
+  VRFY((mrc==MPI_SUCCESS), "");
+
+  stride = bufsize;
+  for (mpi_off=0; mpi_off < MPIO_TEST_WRITE_SIZE; mpi_off += bufsize){
+      /* make sure it does not read beyond end of data */
+      if (mpi_off+stride > MPIO_TEST_WRITE_SIZE)
+    stride = MPIO_TEST_WRITE_SIZE - mpi_off;
+      mrc = MPI_File_read_at(fh, mpi_off, buf, (int)stride, MPI_BYTE,
+        &mpi_stat);
+      VRFY((mrc==MPI_SUCCESS), "");
+      vrfyerrs=0;
+      for (i=0; i<stride; i++){
+    unsigned char expected;
+    expected = (unsigned char)(mpi_off+i);
+    if ((expected != buf[i]) &&
+        (vrfyerrs++ < MAX_ERR_REPORT || VERBOSE_MED)) {
+      printf("proc %d: found data error at [%ld], expect %u, got %u\n",
+          mpi_rank, (long)(mpi_off+i), expected, buf[i]);
+    }
+      }
+      if (vrfyerrs > MAX_ERR_REPORT && !VERBOSE_MED)
+    printf("proc %d: [more errors ...]\n", mpi_rank);
+
+      nerrs += vrfyerrs;
+  }
 
-	/* close file and free the communicator */
-	mrc = MPI_File_close(&fh);
-	VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
-	mrc = MPI_Comm_free(&comm);
-	VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
+  /* close file and free the communicator */
+  mrc = MPI_File_close(&fh);
+  VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
+  mrc = MPI_Comm_free(&comm);
+  VRFY((mrc==MPI_SUCCESS), "MPI_Comm_free");
     }
 
     /*
@@ -194,19 +194,19 @@ test_mpio_gb_file(char *filename)
     int mpi_size, mpi_rank;
     MPI_Info info = MPI_INFO_NULL;
     int mrc;
-    MPI_File	fh;
+    MPI_File  fh;
     int i, j, n;
     int vrfyerrs;
-    int writerrs;		/* write errors */
+    int writerrs;    /* write errors */
     int nerrs;
-    int ntimes;			/* how many times */
+    int ntimes;      /* how many times */
     char  *buf = NULL;
     char  expected;
     MPI_Offset  size;
     MPI_Offset  mpi_off;
     MPI_Offset  mpi_off_old;
     MPI_Status  mpi_stat;
-    struct stat stat_buf;
+    h5_stat_t stat_buf;
     int is_signed, sizeof_mpi_offset;
 
     nerrs = 0;
@@ -226,159 +226,159 @@ test_mpio_gb_file(char *filename)
      * Verify the sizeof MPI_Offset and correctness of handling multiple GB
      * sizes.
      */
-    if (MAINPROCESS){			/* only process 0 needs to check it*/
-	printf("MPI_Offset is %s %d bytes integeral type\n",
-	    is_signed ? "signed" : "unsigned", (int)sizeof(MPI_Offset));
-	if (sizeof_mpi_offset <= 4 && is_signed){
-	    printf("Skipped 2GB range test "
-		    "because MPI_Offset cannot support it\n");
-	}else {
-	    /* verify correctness of assigning 2GB sizes */
-	    mpi_off = 2 * 1024 * (MPI_Offset)MB;
-	    INFO((mpi_off>0), "2GB OFFSET assignment no overflow");
-	    INFO((mpi_off-1)==TWO_GB_LESS1, "2GB OFFSET assignment succeed");
-
-	    /* verify correctness of increasing from below 2 GB to above 2GB */
-	    mpi_off = TWO_GB_LESS1;
-	    for (i=0; i < 3; i++){
-		mpi_off_old = mpi_off;
-		mpi_off = mpi_off + 1;
-		/* no overflow */
-		INFO((mpi_off>0), "2GB OFFSET increment no overflow");
-		/* correct inc. */
-		INFO((mpi_off-1)==mpi_off_old, "2GB OFFSET increment succeed");
-	    }
-	}
+    if (MAINPROCESS){      /* only process 0 needs to check it*/
+  printf("MPI_Offset is %s %d bytes integeral type\n",
+      is_signed ? "signed" : "unsigned", (int)sizeof(MPI_Offset));
+  if (sizeof_mpi_offset <= 4 && is_signed){
+      printf("Skipped 2GB range test "
+        "because MPI_Offset cannot support it\n");
+  }else {
+      /* verify correctness of assigning 2GB sizes */
+      mpi_off = 2 * 1024 * (MPI_Offset)MB;
+      INFO((mpi_off>0), "2GB OFFSET assignment no overflow");
+      INFO((mpi_off-1)==TWO_GB_LESS1, "2GB OFFSET assignment succeed");
+
+      /* verify correctness of increasing from below 2 GB to above 2GB */
+      mpi_off = TWO_GB_LESS1;
+      for (i=0; i < 3; i++){
+    mpi_off_old = mpi_off;
+    mpi_off = mpi_off + 1;
+    /* no overflow */
+    INFO((mpi_off>0), "2GB OFFSET increment no overflow");
+    /* correct inc. */
+    INFO((mpi_off-1)==mpi_off_old, "2GB OFFSET increment succeed");
+      }
+  }
 
-	if (sizeof_mpi_offset <= 4){
-	    printf("Skipped 4GB range test "
-		    "because MPI_Offset cannot support it\n");
-	}else {
-	    /* verify correctness of assigning 4GB sizes */
-	    mpi_off = 4 * 1024 * (MPI_Offset)MB;
-	    INFO((mpi_off>0), "4GB OFFSET assignment no overflow");
-	    INFO((mpi_off-1)==FOUR_GB_LESS1, "4GB OFFSET assignment succeed");
-
-	    /* verify correctness of increasing from below 4 GB to above 4 GB */
-	    mpi_off = FOUR_GB_LESS1;
-	    for (i=0; i < 3; i++){
-		mpi_off_old = mpi_off;
-		mpi_off = mpi_off + 1;
-		/* no overflow */
-		INFO((mpi_off>0), "4GB OFFSET increment no overflow");
-		/* correct inc. */
-		INFO((mpi_off-1)==mpi_off_old, "4GB OFFSET increment succeed");
-	    }
-	}
+  if (sizeof_mpi_offset <= 4){
+      printf("Skipped 4GB range test "
+        "because MPI_Offset cannot support it\n");
+  }else {
+      /* verify correctness of assigning 4GB sizes */
+      mpi_off = 4 * 1024 * (MPI_Offset)MB;
+      INFO((mpi_off>0), "4GB OFFSET assignment no overflow");
+      INFO((mpi_off-1)==FOUR_GB_LESS1, "4GB OFFSET assignment succeed");
+
+      /* verify correctness of increasing from below 4 GB to above 4 GB */
+      mpi_off = FOUR_GB_LESS1;
+      for (i=0; i < 3; i++){
+    mpi_off_old = mpi_off;
+    mpi_off = mpi_off + 1;
+    /* no overflow */
+    INFO((mpi_off>0), "4GB OFFSET increment no overflow");
+    /* correct inc. */
+    INFO((mpi_off-1)==mpi_off_old, "4GB OFFSET increment succeed");
+      }
+  }
     }
 
     /*
      * Verify if we can write to a file of multiple GB sizes.
      */
     if (VERBOSE_MED)
-	printf("MPIO GB file test %s\n", filename);
+  printf("MPIO GB file test %s\n", filename);
 
     if (sizeof_mpi_offset <= 4){
-	printf("Skipped GB file range test "
-		"because MPI_Offset cannot support it\n");
+  printf("Skipped GB file range test "
+    "because MPI_Offset cannot support it\n");
     }else{
-	buf = malloc(MB);
-	VRFY((buf!=NULL), "malloc succeed");
-
-	/* open a new file. Remove it first in case it exists. */
-	/* Must delete because MPI_File_open does not have a Truncate mode. */
-	/* Don't care if it has error. */
-	MPI_File_delete(filename, MPI_INFO_NULL);
-	MPI_Barrier(MPI_COMM_WORLD);	/* prevent racing condition */
-
-	mrc = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_CREATE|MPI_MODE_RDWR,
-		    info, &fh);
-	VRFY((mrc==MPI_SUCCESS), "MPI_FILE_OPEN");
-
-	printf("MPIO GB file write test %s\n", filename);
-
-	/* instead of writing every bytes of the file, we will just write
-	 * some data around the 2 and 4 GB boundaries.  That should cover
-	 * potential integer overflow and filesystem size limits.
-	 */
-	writerrs = 0;
-	for (n=2; n <= 4; n+=2){
-	    ntimes = GB/MB*n/mpi_size + 1;
-	    for (i=ntimes-2; i <= ntimes; i++){
-		mpi_off = (i*mpi_size + mpi_rank)*(MPI_Offset)MB;
-		if (VERBOSE_MED)
-		    HDfprintf(stdout,"proc %d: write to mpi_off=%016llx, %lld\n",
-			mpi_rank, mpi_off, mpi_off);
-		/* set data to some trivial pattern for easy verification */
-		for (j=0; j<MB; j++)
-		    *(buf+j) = i*mpi_size + mpi_rank;
-		if (VERBOSE_MED)
-		    HDfprintf(stdout,"proc %d: writing %d bytes at offset %lld\n",
-			mpi_rank, MB, mpi_off);
-		mrc = MPI_File_write_at(fh, mpi_off, buf, MB, MPI_BYTE, &mpi_stat);
-		INFO((mrc==MPI_SUCCESS), "GB size file write");
-		if (mrc!=MPI_SUCCESS)
-		    writerrs++;
-	    }
-	}
+  buf = malloc(MB);
+  VRFY((buf!=NULL), "malloc succeed");
+
+  /* open a new file. Remove it first in case it exists. */
+  /* Must delete because MPI_File_open does not have a Truncate mode. */
+  /* Don't care if it has error. */
+  MPI_File_delete(filename, MPI_INFO_NULL);
+  MPI_Barrier(MPI_COMM_WORLD);  /* prevent racing condition */
+
+  mrc = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_CREATE|MPI_MODE_RDWR,
+        info, &fh);
+  VRFY((mrc==MPI_SUCCESS), "MPI_FILE_OPEN");
+
+  printf("MPIO GB file write test %s\n", filename);
+
+  /* instead of writing every bytes of the file, we will just write
+   * some data around the 2 and 4 GB boundaries.  That should cover
+   * potential integer overflow and filesystem size limits.
+   */
+  writerrs = 0;
+  for (n=2; n <= 4; n+=2){
+      ntimes = GB/MB*n/mpi_size + 1;
+      for (i=ntimes-2; i <= ntimes; i++){
+    mpi_off = (i*mpi_size + mpi_rank)*(MPI_Offset)MB;
+    if (VERBOSE_MED)
+        HDfprintf(stdout,"proc %d: write to mpi_off=%016llx, %lld\n",
+      mpi_rank, mpi_off, mpi_off);
+    /* set data to some trivial pattern for easy verification */
+    for (j=0; j<MB; j++)
+        *(buf+j) = i*mpi_size + mpi_rank;
+    if (VERBOSE_MED)
+        HDfprintf(stdout,"proc %d: writing %d bytes at offset %lld\n",
+      mpi_rank, MB, mpi_off);
+    mrc = MPI_File_write_at(fh, mpi_off, buf, MB, MPI_BYTE, &mpi_stat);
+    INFO((mrc==MPI_SUCCESS), "GB size file write");
+    if (mrc!=MPI_SUCCESS)
+        writerrs++;
+      }
+  }
 
-	/* close file and free the communicator */
-	mrc = MPI_File_close(&fh);
-	VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
-
-	mrc = MPI_Barrier(MPI_COMM_WORLD);
-	VRFY((mrc==MPI_SUCCESS), "Sync after writes");
-
-	/*
-	 * Verify if we can read the multiple GB file just created.
-	 */
-	/* open it again to verify the data written */
-	/* but only if there was no write errors */
-	printf("MPIO GB file read test %s\n", filename);
-	if (errors_sum(writerrs)>0){
-	    printf("proc %d: Skip read test due to previous write errors\n",
-		mpi_rank);
-	    goto finish;
-	}
-	mrc = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_RDONLY, info, &fh);
-	VRFY((mrc==MPI_SUCCESS), "");
-
-	/* Only read back parts of the file that have been written. */
-	for (n=2; n <= 4; n+=2){
-	    ntimes = GB/MB*n/mpi_size + 1;
-	    for (i=ntimes-2; i <= ntimes; i++){
-		mpi_off = (i*mpi_size + (mpi_size - mpi_rank - 1))*(MPI_Offset)MB;
-		if (VERBOSE_MED)
-		    HDfprintf(stdout,"proc %d: read from mpi_off=%016llx, %lld\n",
-			mpi_rank, mpi_off, mpi_off);
-		mrc = MPI_File_read_at(fh, mpi_off, buf, MB, MPI_BYTE, &mpi_stat);
-		INFO((mrc==MPI_SUCCESS), "GB size file read");
-		expected = i*mpi_size + (mpi_size - mpi_rank - 1);
-		vrfyerrs=0;
-		for (j=0; j<MB; j++){
-		    if ((*(buf+j) != expected) &&
-			(vrfyerrs++ < MAX_ERR_REPORT || VERBOSE_MED)){
-			    printf("proc %d: found data error at [%ld+%d], expect %d, got %d\n",
-				mpi_rank, (long)mpi_off, j, expected, *(buf+j));
-		    }
-		}
-		if (vrfyerrs > MAX_ERR_REPORT && !VERBOSE_MED)
-		    printf("proc %d: [more errors ...]\n", mpi_rank);
-
-		nerrs += vrfyerrs;
-	    }
-	}
+  /* close file and free the communicator */
+  mrc = MPI_File_close(&fh);
+  VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
+
+  mrc = MPI_Barrier(MPI_COMM_WORLD);
+  VRFY((mrc==MPI_SUCCESS), "Sync after writes");
+
+  /*
+   * Verify if we can read the multiple GB file just created.
+   */
+  /* open it again to verify the data written */
+  /* but only if there was no write errors */
+  printf("MPIO GB file read test %s\n", filename);
+  if (errors_sum(writerrs)>0){
+      printf("proc %d: Skip read test due to previous write errors\n",
+    mpi_rank);
+      goto finish;
+  }
+  mrc = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_RDONLY, info, &fh);
+  VRFY((mrc==MPI_SUCCESS), "");
+
+  /* Only read back parts of the file that have been written. */
+  for (n=2; n <= 4; n+=2){
+      ntimes = GB/MB*n/mpi_size + 1;
+      for (i=ntimes-2; i <= ntimes; i++){
+    mpi_off = (i*mpi_size + (mpi_size - mpi_rank - 1))*(MPI_Offset)MB;
+    if (VERBOSE_MED)
+        HDfprintf(stdout,"proc %d: read from mpi_off=%016llx, %lld\n",
+      mpi_rank, mpi_off, mpi_off);
+    mrc = MPI_File_read_at(fh, mpi_off, buf, MB, MPI_BYTE, &mpi_stat);
+    INFO((mrc==MPI_SUCCESS), "GB size file read");
+    expected = i*mpi_size + (mpi_size - mpi_rank - 1);
+    vrfyerrs=0;
+    for (j=0; j<MB; j++){
+        if ((*(buf+j) != expected) &&
+      (vrfyerrs++ < MAX_ERR_REPORT || VERBOSE_MED)){
+          printf("proc %d: found data error at [%ld+%d], expect %d, got %d\n",
+        mpi_rank, (long)mpi_off, j, expected, *(buf+j));
+        }
+    }
+    if (vrfyerrs > MAX_ERR_REPORT && !VERBOSE_MED)
+        printf("proc %d: [more errors ...]\n", mpi_rank);
 
-	/* close file and free the communicator */
-	mrc = MPI_File_close(&fh);
-	VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
+    nerrs += vrfyerrs;
+      }
+  }
 
-	/*
-	 * one more sync to ensure all processes have done reading
-	 * before ending this test.
-	 */
-	mrc = MPI_Barrier(MPI_COMM_WORLD);
-	VRFY((mrc==MPI_SUCCESS), "Sync before leaving test");
+  /* close file and free the communicator */
+  mrc = MPI_File_close(&fh);
+  VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
+
+  /*
+   * one more sync to ensure all processes have done reading
+   * before ending this test.
+   */
+  mrc = MPI_Barrier(MPI_COMM_WORLD);
+  VRFY((mrc==MPI_SUCCESS), "Sync before leaving test");
 
         /*
          * Check if MPI_File_get_size works correctly.  Some systems (only SGI Altix
@@ -386,17 +386,17 @@ test_mpio_gb_file(char *filename)
          * with "--disable-mpi-size".
          */
 #ifdef H5_HAVE_MPI_GET_SIZE
-	printf("Test if MPI_File_get_size works correctly with %s\n", filename);
+  printf("Test if MPI_File_get_size works correctly with %s\n", filename);
 
-	mrc = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_RDONLY, info, &fh);
+  mrc = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_RDONLY, info, &fh);
         VRFY((mrc==MPI_SUCCESS), "");
 
-        if (MAINPROCESS){			/* only process 0 needs to check it*/
+        if (MAINPROCESS){      /* only process 0 needs to check it*/
             mrc = MPI_File_get_size(fh, &size);
-	    VRFY((mrc==MPI_SUCCESS), "");
+      VRFY((mrc==MPI_SUCCESS), "");
 
-            mrc=stat(filename, &stat_buf);
-	    VRFY((mrc==0), "");
+            mrc=HDstat(filename, &stat_buf);
+      VRFY((mrc==0), "");
 
             /* Hopefully this casting is safe */
             if(size != (MPI_Offset)(stat_buf.st_size)) {
@@ -404,16 +404,16 @@ test_mpio_gb_file(char *filename)
             }
         }
 
-	/* close file and free the communicator */
-	mrc = MPI_File_close(&fh);
-	VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
+  /* close file and free the communicator */
+  mrc = MPI_File_close(&fh);
+  VRFY((mrc==MPI_SUCCESS), "MPI_FILE_CLOSE");
 
-	/*
-	 * one more sync to ensure all processes have done reading
-	 * before ending this test.
-	 */
-	mrc = MPI_Barrier(MPI_COMM_WORLD);
-	VRFY((mrc==MPI_SUCCESS), "Sync before leaving test");
+  /*
+   * one more sync to ensure all processes have done reading
+   * before ending this test.
+   */
+  mrc = MPI_Barrier(MPI_COMM_WORLD);
+  VRFY((mrc==MPI_SUCCESS), "Sync before leaving test");
 #else
         printf("Skipped testing MPI_File_get_size because it's disabled\n");
 #endif
@@ -421,7 +421,7 @@ test_mpio_gb_file(char *filename)
 
 finish:
     if (buf)
-	HDfree(buf);
+  HDfree(buf);
     return (nerrs);
 }
 
@@ -443,11 +443,11 @@ finish:
  * Each process writes something, then reads all data back.
  */
 
-#define DIMSIZE	32		/* Dimension size. */
+#define DIMSIZE  32    /* Dimension size. */
 #define PRINTID printf("Proc %d: ", mpi_rank)
 #define USENONE 0
-#define USEATOM 1		/* request atomic I/O */
-#define USEFSYNC 2		/* request file_sync */
+#define USEATOM 1    /* request atomic I/O */
+#define USEFSYNC 2    /* request file_sync */
 
 
 static int
@@ -462,7 +462,7 @@ test_mpio_1wMr(char *filename, int special_request)
     unsigned char writedata[DIMSIZE], readdata[DIMSIZE];
     unsigned char expect_val;
     int  i, irank;
-    int  nerrs = 0;		/* number of errors */
+    int  nerrs = 0;    /* number of errors */
     int  atomicity;
     MPI_Offset  mpi_off;
     MPI_Status  mpi_stat;
@@ -472,35 +472,35 @@ test_mpio_1wMr(char *filename, int special_request)
 
     if (MAINPROCESS && VERBOSE_MED){
         printf("Testing one process writes, all processes read.\n");
-	printf("Using %d processes accessing file %s\n", mpi_size, filename);
+  printf("Using %d processes accessing file %s\n", mpi_size, filename);
         printf("    (Filename can be specified via program argument)\n");
     }
 
     /* show the hostname so that we can tell where the processes are running */
     if (VERBOSE_DEF){
-	if (gethostname(hostname, 128) < 0){
-	    PRINTID;
-	    printf("gethostname failed\n");
-	    return 1;
-	}
-	PRINTID;
-	printf("hostname=%s\n", hostname);
+  if (gethostname(hostname, 128) < 0){
+      PRINTID;
+      printf("gethostname failed\n");
+      return 1;
+  }
+  PRINTID;
+  printf("hostname=%s\n", hostname);
     }
 
     /* Delete any old file in order to start anew. */
     /* Must delete because MPI_File_open does not have a Truncate mode. */
     /* Don't care if it has error. */
     MPI_File_delete(filename, MPI_INFO_NULL);
-    MPI_Barrier(MPI_COMM_WORLD);	/* prevent racing condition */
+    MPI_Barrier(MPI_COMM_WORLD);  /* prevent racing condition */
 
     if ((mpi_err = MPI_File_open(MPI_COMM_WORLD, filename,
-	    MPI_MODE_RDWR | MPI_MODE_CREATE ,
-	    MPI_INFO_NULL, &fh))
-	    != MPI_SUCCESS){
-	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	PRINTID;
-	printf("MPI_File_open failed (%s)\n", mpi_err_str);
-	return 1;
+      MPI_MODE_RDWR | MPI_MODE_CREATE ,
+      MPI_INFO_NULL, &fh))
+      != MPI_SUCCESS){
+  MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+  PRINTID;
+  printf("MPI_File_open failed (%s)\n", mpi_err_str);
+  return 1;
     }
 
 if (special_request & USEATOM){
@@ -509,31 +509,31 @@ if (special_request & USEATOM){
      * should not need this.
      * ==================================================*/
     if ((mpi_err = MPI_File_get_atomicity(fh, &atomicity)) != MPI_SUCCESS){
-	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	PRINTID;
-	printf("MPI_File_get_atomicity failed (%s)\n", mpi_err_str);
+  MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+  PRINTID;
+  printf("MPI_File_get_atomicity failed (%s)\n", mpi_err_str);
     }
     if (VERBOSE_HI)
-	printf("Initial atomicity = %d\n", atomicity);
+  printf("Initial atomicity = %d\n", atomicity);
     if ((mpi_err = MPI_File_set_atomicity(fh, 1)) != MPI_SUCCESS){
-	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	PRINTID;
-	printf("MPI_File_set_atomicity failed (%s)\n", mpi_err_str);
+  MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+  PRINTID;
+  printf("MPI_File_set_atomicity failed (%s)\n", mpi_err_str);
     }
     if ((mpi_err = MPI_File_get_atomicity(fh, &atomicity)) != MPI_SUCCESS){
-	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	PRINTID;
-	printf("MPI_File_get_atomicity failed (%s)\n", mpi_err_str);
+  MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+  PRINTID;
+  printf("MPI_File_get_atomicity failed (%s)\n", mpi_err_str);
     }
     if (VERBOSE_HI)
-	printf("After set_atomicity atomicity = %d\n", atomicity);
+  printf("After set_atomicity atomicity = %d\n", atomicity);
 }
 
     /* This barrier is not necessary but do it anyway. */
     MPI_Barrier(MPI_COMM_WORLD);
     if (VERBOSE_HI){
-	PRINTID;
-	printf("between MPI_Barrier and MPI_File_write_at\n");
+  PRINTID;
+  printf("between MPI_Barrier and MPI_File_write_at\n");
     }
 
     /* ==================================================
@@ -542,31 +542,31 @@ if (special_request & USEATOM){
      * ==================================================*/
     irank=0;
     for (i=0; i < DIMSIZE; i++)
-	writedata[i] = irank*DIMSIZE + i;
+  writedata[i] = irank*DIMSIZE + i;
     mpi_off = irank*DIMSIZE;
 
     /* Only one process writes */
     if (mpi_rank==irank){
-	if (VERBOSE_HI){
-	    PRINTID; printf("wrote %d bytes at %ld\n", DIMSIZE, (long)mpi_off);
-	}
-	if ((mpi_err = MPI_File_write_at(fh, mpi_off, writedata, DIMSIZE,
-			MPI_BYTE, &mpi_stat))
-		!= MPI_SUCCESS){
-	    MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	    PRINTID;
-	    printf("MPI_File_write_at offset(%ld), bytes (%d), failed (%s)\n",
-		    (long) mpi_off, DIMSIZE, mpi_err_str);
-	    return 1;
-	};
+  if (VERBOSE_HI){
+      PRINTID; printf("wrote %d bytes at %ld\n", DIMSIZE, (long)mpi_off);
+  }
+  if ((mpi_err = MPI_File_write_at(fh, mpi_off, writedata, DIMSIZE,
+      MPI_BYTE, &mpi_stat))
+    != MPI_SUCCESS){
+      MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+      PRINTID;
+      printf("MPI_File_write_at offset(%ld), bytes (%d), failed (%s)\n",
+        (long) mpi_off, DIMSIZE, mpi_err_str);
+      return 1;
+  };
     };
 
     /* Bcast the return code and */
     /* make sure all writing are done before reading. */
     MPI_Bcast(&mpi_err, 1, MPI_INT, irank, MPI_COMM_WORLD);
     if (VERBOSE_HI){
-	PRINTID;
-	printf("MPI_Bcast: mpi_err = %d\n", mpi_err);
+  PRINTID;
+  printf("MPI_Bcast: mpi_err = %d\n", mpi_err);
     }
 
 if (special_request & USEFSYNC){
@@ -575,19 +575,19 @@ if (special_request & USEFSYNC){
      * should not need this.
      * ==================================================*/
     if (VERBOSE_HI)
-	printf("Apply MPI_File_sync\n");
+  printf("Apply MPI_File_sync\n");
     /* call file_sync to force the write out */
     if ((mpi_err = MPI_File_sync(fh)) != MPI_SUCCESS){
-	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	PRINTID;
-	printf("MPI_File_sync failed (%s)\n", mpi_err_str);
+  MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+  PRINTID;
+  printf("MPI_File_sync failed (%s)\n", mpi_err_str);
     }
     MPI_Barrier(MPI_COMM_WORLD);
     /* call file_sync to force the write out */
     if ((mpi_err = MPI_File_sync(fh)) != MPI_SUCCESS){
-	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	PRINTID;
-	printf("MPI_File_sync failed (%s)\n", mpi_err_str);
+  MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+  PRINTID;
+  printf("MPI_File_sync failed (%s)\n", mpi_err_str);
     }
 }
 
@@ -595,8 +595,8 @@ if (special_request & USEFSYNC){
     /* should take care of it.  Do it anyway. */
     MPI_Barrier(MPI_COMM_WORLD);
     if (VERBOSE_HI){
-	PRINTID;
-	printf("after MPI_Barrier\n");
+  PRINTID;
+  printf("after MPI_Barrier\n");
     }
 
     /* ==================================================
@@ -605,29 +605,29 @@ if (special_request & USEFSYNC){
     irank=0;
     mpi_off = irank*DIMSIZE;
     if ((mpi_err = MPI_File_read_at(fh, mpi_off, readdata, DIMSIZE, MPI_BYTE,
-	    &mpi_stat))
-	    != MPI_SUCCESS){
-	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	PRINTID;
-	printf("MPI_File_read_at offset(%ld), bytes (%d), failed (%s)\n",
-		(long) mpi_off, DIMSIZE, mpi_err_str);
-	return 1;
+      &mpi_stat))
+      != MPI_SUCCESS){
+  MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+  PRINTID;
+  printf("MPI_File_read_at offset(%ld), bytes (%d), failed (%s)\n",
+    (long) mpi_off, DIMSIZE, mpi_err_str);
+  return 1;
     };
     for (i=0; i < DIMSIZE; i++){
-	expect_val = irank*DIMSIZE + i;
-	if (readdata[i] != expect_val){
-	    PRINTID;
-	    printf("read data[%d:%d] got %02x, expect %02x\n", irank, i,
-		    readdata[i], expect_val);
-	    nerrs++;
-	}
+  expect_val = irank*DIMSIZE + i;
+  if (readdata[i] != expect_val){
+      PRINTID;
+      printf("read data[%d:%d] got %02x, expect %02x\n", irank, i,
+        readdata[i], expect_val);
+      nerrs++;
+  }
     }
 
     MPI_File_close(&fh);
 
     if (VERBOSE_HI){
-	PRINTID;
-	printf("%d data errors detected\n", nerrs);
+  PRINTID;
+  printf("%d data errors detected\n", nerrs);
     }
 
     mpi_err = MPI_Barrier(MPI_COMM_WORLD);
@@ -645,18 +645,18 @@ and this platform.
 1. Details for the test:
 1) Create two derived datatypes with MPI_Type_hindexed:
         datatype1:
-	count = 1, blocklens = 1, offsets = 0,
-	base type = MPI_BYTE(essentially a char)
+  count = 1, blocklens = 1, offsets = 0,
+  base type = MPI_BYTE(essentially a char)
         datatype2:
-	count = 1, blocklens = 1, offsets = 1(byte),
-	base type = MPI_BYTE
+  count = 1, blocklens = 1, offsets = 1(byte),
+  base type = MPI_BYTE
 
 2) Using these two derived datatypes,
    Build another derived datatype with MPI_Type_struct:
         advtype: derived from datatype1 and datatype2
         advtype:
-	count = 2, blocklens[0] = 1, blocklens[1]=1,
-	offsets[0] = 0, offsets[1] = 1(byte),
+  count = 2, blocklens[0] = 1, blocklens[1]=1,
+  offsets[0] = 0, offsets[1] = 1(byte),
         bas_type[0]=datatype1,
         bas_type[1] = datatype2;
 
@@ -695,7 +695,7 @@ static int test_mpio_derived_dtype(char *filename) {
     int  mpi_err_strlen;
     int  mpi_err;
     int  i;
-    int  nerrors = 0;		/* number of errors */
+    int  nerrors = 0;    /* number of errors */
     MPI_Datatype  etype,filetype;
     MPI_Datatype  adv_filetype,bas_filetype[2];
     MPI_Datatype  etypenew, filetypenew;
@@ -719,12 +719,12 @@ static int test_mpio_derived_dtype(char *filename) {
 
 
     if ((mpi_err = MPI_File_open(MPI_COMM_WORLD, filename,
-				 MPI_MODE_RDWR | MPI_MODE_CREATE,
-				 MPI_INFO_NULL, &fh))
-	    != MPI_SUCCESS){
-	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_File_open failed (%s)\n", mpi_err_str);
-	return 1;
+         MPI_MODE_RDWR | MPI_MODE_CREATE,
+         MPI_INFO_NULL, &fh))
+      != MPI_SUCCESS){
+  MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+  printf("MPI_File_open failed (%s)\n", mpi_err_str);
+  return 1;
     }
 
     disp  = 0;
@@ -736,15 +736,15 @@ static int test_mpio_derived_dtype(char *filename) {
 
     if((mpi_err= MPI_Type_hindexed(count,blocklens,offsets,MPI_BYTE,&filetype))
        != MPI_SUCCESS){
-      	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_Type_contiguous failed (%s)\n", mpi_err_str);
-	return 1;
+        MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+  printf("MPI_Type_contiguous failed (%s)\n", mpi_err_str);
+  return 1;
     }
 
     if((mpi_err=MPI_Type_commit(&filetype))!=MPI_SUCCESS){
         MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_Type_commit failed (%s)\n", mpi_err_str);
-	return 1;
+  printf("MPI_Type_commit failed (%s)\n", mpi_err_str);
+  return 1;
     }
 
     count = 1;
@@ -752,15 +752,15 @@ static int test_mpio_derived_dtype(char *filename) {
     offsets[0] = 1;
     if((mpi_err= MPI_Type_hindexed(count,blocklens,offsets,MPI_BYTE,&filetypenew))
        != MPI_SUCCESS){
-      	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_Type_contiguous failed (%s)\n", mpi_err_str);
-	return 1;
+        MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+  printf("MPI_Type_contiguous failed (%s)\n", mpi_err_str);
+  return 1;
     }
 
     if((mpi_err=MPI_Type_commit(&filetypenew))!=MPI_SUCCESS){
         MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_Type_commit failed (%s)\n", mpi_err_str);
-	return 1;
+  printf("MPI_Type_commit failed (%s)\n", mpi_err_str);
+  return 1;
     }
 
     outcount         = 2;
@@ -773,48 +773,48 @@ static int test_mpio_derived_dtype(char *filename) {
 
     if((mpi_err= MPI_Type_struct(outcount,adv_blocklens,adv_disp,bas_filetype,&adv_filetype))
        != MPI_SUCCESS){
-      	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_Type_struct failed (%s)\n", mpi_err_str);
-	return 1;
+        MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+  printf("MPI_Type_struct failed (%s)\n", mpi_err_str);
+  return 1;
     }
     if((mpi_err=MPI_Type_commit(&adv_filetype))!=MPI_SUCCESS){
         MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_Type_commit failed (%s)\n", mpi_err_str);
-	return 1;
+  printf("MPI_Type_commit failed (%s)\n", mpi_err_str);
+  return 1;
     }
 
 
     if((mpi_err = MPI_File_set_view(fh,disp,etype,adv_filetype,"native",MPI_INFO_NULL))!= MPI_SUCCESS){
       MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_File_set_view failed (%s)\n", mpi_err_str);
-	return 1;
+  printf("MPI_File_set_view failed (%s)\n", mpi_err_str);
+  return 1;
     }
 
     if((mpi_err = MPI_File_write(fh,buf,3,MPI_BYTE,&Status))!= MPI_SUCCESS){
         MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_File_write failed (%s)\n", mpi_err_str);
-	return 1;
+  printf("MPI_File_write failed (%s)\n", mpi_err_str);
+  return 1;
       ;
     }
 
 
     if((mpi_err = MPI_File_close(&fh)) != MPI_SUCCESS){
        MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_File_close failed (%s)\n", mpi_err_str);
-	return 1;
+  printf("MPI_File_close failed (%s)\n", mpi_err_str);
+  return 1;
     }
 
 
     if((mpi_err = MPI_File_open(MPI_COMM_WORLD,filename,MPI_MODE_RDONLY,MPI_INFO_NULL,&fh)) != MPI_SUCCESS){
        MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_File_open failed (%s)\n", mpi_err_str);
-	return 1;
+  printf("MPI_File_open failed (%s)\n", mpi_err_str);
+  return 1;
     }
 
     if((mpi_err = MPI_File_set_view(fh,0,MPI_BYTE,MPI_BYTE,"native",MPI_INFO_NULL))!= MPI_SUCCESS){
         MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_File_set_view failed (%s)\n", mpi_err_str);
-	return 1;
+  printf("MPI_File_set_view failed (%s)\n", mpi_err_str);
+  return 1;
     }
     if((mpi_err = MPI_File_read(fh,outbuf,3,MPI_BYTE,&Status))!=MPI_SUCCESS){
       MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
@@ -837,39 +837,19 @@ static int test_mpio_derived_dtype(char *filename) {
 
     if((mpi_err = MPI_File_close(&fh)) != MPI_SUCCESS){
        MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_File_close failed (%s)\n", mpi_err_str);
-	return 1;
+  printf("MPI_File_close failed (%s)\n", mpi_err_str);
+  return 1;
     }
 
 
     mpi_err = MPI_Barrier(MPI_COMM_WORLD);
-#ifdef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS
     if(retcode == -1) {
 	if(mpi_rank == 0) {
 	    printf("Complicated derived datatype is NOT working at this platform\n");
-	    printf("Go back to hdf5/config and find the corresponding\n");
-	    printf("configure-specific file (for example, powerpc-ibm-aix5.x) and add\n");
-	    printf("hdf5_cv_mpi_complex_derived_datatype_works=${hdf5_cv_mpi_complex_derived_datatype-works='no'}\n");
-	    printf(" at the end of the file.\n");
-	    printf(" Please report to hdfhelp at ncsa.uiuc.edu about this problem.\n");
-	}
-	retcode = 1;
-    }
-#else
-    if(retcode == 0) {
-	if(mpi_rank == 0) {
-	    printf(" This is NOT an error, What it really says is\n");
-	    printf("Complicated derived datatype is WORKING at this platform\n");
-	    printf(" Go back to hdf5/config and find the corresponding \n");
-	    printf(" configure-specific file (for example, powerpc-ibm-aix5.x) and delete the line\n");
-	    printf("hdf5_cv_mpi_complex_derived_datatype_works=${hdf5_cv_mpi_complex_derived_datatype-works='no'}\n");
-	    printf(" at the end of the file.\n");
-	    printf("Please report to hdfhelp at ncsa.uiuc.edu about this problem.\n");
+	    printf(" Please report to help at hdfgroup.org about this problem.\n");
 	}
 	retcode = 1;
     }
-    if(retcode == -1) retcode = 0;
-#endif
     return retcode;
 }
 /*
@@ -907,30 +887,29 @@ test_mpio_special_collective(char *filename)
     char mpi_err_str[MPI_MAX_ERROR_STRING];
     int  mpi_err_strlen;
     int  mpi_err;
-    char writedata[2];
-    char *buf;
+    char writedata[2*DIMSIZE];
+    char filerep[7] = "native";
     int  i;
     int  count,bufcount;
     int blocklens[2];
     MPI_Aint offsets[2];
-    MPI_Offset  mpi_off;
+    MPI_Offset  mpi_off = 0;
     MPI_Status  mpi_stat;
-    int  retcode;
+    int  retcode = 0;
 
     MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
     MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
-    retcode = 0;
 
     /* create MPI data type */
     etype = MPI_BYTE;
     if(mpi_rank == 0 || mpi_rank == 1) {
         count = DIMSIZE;
         bufcount = 1;
-    }
+    } /* end if */
     else {
         count = 0;
         bufcount = 0;
-    }
+    } /* end else */
 
     blocklens[0] = count;
     offsets[0] = mpi_rank*count;
@@ -938,108 +917,103 @@ test_mpio_special_collective(char *filename)
     offsets[1] = (mpi_size+mpi_rank)*count;
 
     if(count !=0) {
-      if((mpi_err= MPI_Type_hindexed(2,blocklens,offsets,etype,&filetype))
-       != MPI_SUCCESS){
-      	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_Type_contiguous failed (%s)\n", mpi_err_str);
-	return 1;
-      }
-
-      if((mpi_err=MPI_Type_commit(&filetype))!=MPI_SUCCESS){
-        MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_Type_commit failed (%s)\n", mpi_err_str);
-	return 1;
-      }
-
-
-      if((mpi_err= MPI_Type_hindexed(2,blocklens,offsets,etype,&buftype))
-       != MPI_SUCCESS){
-      	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_Type_contiguous failed (%s)\n", mpi_err_str);
-	return 1;
-      }
-
-      if((mpi_err=MPI_Type_commit(&buftype))!=MPI_SUCCESS){
+        if((mpi_err = MPI_Type_hindexed(2,
+                                        blocklens,
+                                        offsets,
+                                        etype,
+                                        &filetype)) != MPI_SUCCESS) {
+            MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+            printf("MPI_Type_contiguous failed (%s)\n", mpi_err_str);
+            return 1;
+        } /* end if */
+
+        if((mpi_err = MPI_Type_commit(&filetype)) != MPI_SUCCESS) {
+            MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+            printf("MPI_Type_commit failed (%s)\n", mpi_err_str);
+            return 1;
+        } /* end if */
+
+        if((mpi_err = MPI_Type_hindexed(2,
+                                        blocklens,
+                                        offsets,
+                                        etype,
+                                        &buftype)) != MPI_SUCCESS) {
+            MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+            printf("MPI_Type_contiguous failed (%s)\n", mpi_err_str);
+            return 1;
+        } /* end if */
+
+        if((mpi_err = MPI_Type_commit(&buftype)) != MPI_SUCCESS) {
+            MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+            printf("MPI_Type_commit failed (%s)\n", mpi_err_str);
+            return 1;
+        } /* end if */
+    } /* end if */
+    else {
+        filetype = MPI_BYTE;
+        buftype  = MPI_BYTE;
+    } /* end else */
+
+    /* Open a file */
+    if ((mpi_err = MPI_File_open(MPI_COMM_WORLD,
+                                 filename,
+                                 MPI_MODE_RDWR | MPI_MODE_CREATE,
+                                 MPI_INFO_NULL,
+                                 &fh)) != MPI_SUCCESS) {
         MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_Type_commit failed (%s)\n", mpi_err_str);
-	return 1;
-      }
-     }
-     else {
-
-       filetype = MPI_BYTE;
-       buftype  = MPI_BYTE;
-     }
-
-   /* Open a file */
-    if ((mpi_err = MPI_File_open(MPI_COMM_WORLD, filename,
-	    MPI_MODE_RDWR | MPI_MODE_CREATE ,
-	    MPI_INFO_NULL, &fh))
-	    != MPI_SUCCESS){
-	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_File_open failed (%s)\n", mpi_err_str);
-	return 1;
-    }
+        printf("MPI_File_open failed (%s)\n", mpi_err_str);
+        return 1;
+    } /* end if */
 
     /* each process writes some data */
     for (i=0; i < 2*DIMSIZE; i++)
-	writedata[i] = mpi_rank*DIMSIZE + i;
-
-
-     mpi_off = 0;
-    if((mpi_err = MPI_File_set_view(fh, mpi_off, MPI_BYTE, filetype, "native", MPI_INFO_NULL))
-        != MPI_SUCCESS) {
-	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_File_set_view failed (%s)\n", mpi_err_str);
-	return 1;
-    }
-
-    buf   = writedata;
-    if ((mpi_err = MPI_File_write_at_all(fh, mpi_off, buf, bufcount, buftype,
-	    &mpi_stat))
-	    != MPI_SUCCESS){
-	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_File_write_at offset(%ld), bytes (%d), failed (%s)\n",
-		(long) mpi_off, bufcount, mpi_err_str);
-	return 1;
-    };
+        writedata[i] = (char)(mpi_rank*DIMSIZE + i);
+
+    /* Set the file view */
+    if((mpi_err = MPI_File_set_view(fh,
+                                    mpi_off,
+                                    MPI_BYTE,
+                                    filetype,
+                                    filerep,
+                                    MPI_INFO_NULL)) != MPI_SUCCESS) {
+        MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+        printf("MPI_File_set_view failed (%s)\n", mpi_err_str);
+        return 1;
+    } /* end if */
+
+    /* Collectively write into the file */
+    if ((mpi_err = MPI_File_write_at_all(fh,
+                                         mpi_off,
+                                         writedata,
+                                         bufcount,
+                                         buftype,
+                                         &mpi_stat)) != MPI_SUCCESS) {
+        MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+        printf("MPI_File_write_at offset(%ld), bytes (%d), failed (%s)\n",
+               (long) mpi_off, bufcount, mpi_err_str);
+        return 1;
+    } /* end if */
 
-     if ((mpi_err = MPI_File_close(&fh))
-	    != MPI_SUCCESS){
-	MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
-	printf("MPI_File_close failed. \n");
-	return 1;
-    };
+    /* Close the file */
+    if ((mpi_err = MPI_File_close(&fh)) != MPI_SUCCESS) {
+        MPI_Error_string(mpi_err, mpi_err_str, &mpi_err_strlen);
+        printf("MPI_File_close failed. \n");
+        return 1;
+    } /* end if */
 
+    /* Perform a barrier */
     mpi_err = MPI_Barrier(MPI_COMM_WORLD);
-#ifdef H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS
     if(retcode != 0) {
-	if(mpi_rank == 0) {
-	    printf("special collective IO is NOT working at this platform\n");
-	    printf("Go back to hdf5/config and find the corresponding\n");
-	    printf("configure-specific file (for example, powerpc-ibm-aix5.x) and add\n");
-	    printf("hdf5_cv_mpi_special_collective_io_works=${hdf5_cv_mpi_special_collective_io_works='no'}\n");
-	    printf(" at the end of the file.\n");
-	    printf(" Please report to hdfhelp at ncsa.uiuc.edu about this problem.\n");
-	}
-	retcode = 1;
-    }
-#else
-    if(retcode == 0) {
-	if(mpi_rank == 0) {
-	    printf(" This is NOT an error, What it really says is\n");
-	    printf("special collective IO is WORKING at this platform\n");
-	    printf(" Go back to hdf5/config and find the corresponding \n");
-	    printf(" configure-specific file (for example, powerpc-ibm-aix5.x) and delete the line\n");
-	    printf("hdf5_cv_mpi_special_collective_io_works=${hdf5_cv_mpi_special_collective_io_works='no'}\n");
-	    printf(" at the end of the file.\n");
-	    printf("Please report to hdfhelp at ncsa.uiuc.edu about this problem.\n");
-	}
-	retcode = 1;
-    }
-#endif
+        if(mpi_rank == 0) {
+            printf("special collective IO is NOT working at this platform\n");
+            printf(" Please report to help at hdfgroup.org about this problem.\n");
+        } /* end if */
+        retcode = 1;
+    } /* end if */
+
     return retcode;
-}
+
+} /* test_mpio_special_collective */
 
 /*
  * parse the command line options
@@ -1048,55 +1022,55 @@ static int
 parse_options(int argc, char **argv)
 {
     while (--argc){
-	if (**(++argv) != '-'){
-	    break;
-	}else{
-	    switch(*(*argv+1)){
-		case 'v':   if (*((*argv+1)+1))
-				ParseTestVerbosity((*argv+1)+1);
-			    else
-				SetTestVerbosity(VERBO_MED);
-			    break;
-		case 'f':   if (--argc < 1) {
-				nerrors++;
-				return(1);
-			    }
-			    if (**(++argv) == '-') {
-				nerrors++;
-				return(1);
-			    }
-			    paraprefix = *argv;
-			    break;
-		case 'h':   /* print help message--return with nerrors set */
-			    return(1);
-		default:    nerrors++;
-			    return(1);
-	    }
-	}
+  if (**(++argv) != '-'){
+      break;
+  }else{
+      switch(*(*argv+1)){
+    case 'v':   if (*((*argv+1)+1))
+        ParseTestVerbosity((*argv+1)+1);
+          else
+        SetTestVerbosity(VERBO_MED);
+          break;
+    case 'f':   if (--argc < 1) {
+        nerrors++;
+        return(1);
+          }
+          if (**(++argv) == '-') {
+        nerrors++;
+        return(1);
+          }
+          paraprefix = *argv;
+          break;
+    case 'h':   /* print help message--return with nerrors set */
+          return(1);
+    default:    nerrors++;
+          return(1);
+      }
+  }
     } /*while*/
 
     /* compose the test filenames */
     {
-	int i, n;
-	hid_t plist;
-
-	plist = H5Pcreate (H5P_FILE_ACCESS);
-	H5Pset_fapl_mpio(plist, MPI_COMM_WORLD, MPI_INFO_NULL);
-	n = sizeof(FILENAME)/sizeof(FILENAME[0]) - 1;	/* exclude the NULL */
-
-	for (i=0; i < n; i++)
-	    if (h5_fixname(FILENAME[i],plist,filenames[i],sizeof(filenames[i]))
-		== NULL){
-		printf("h5_fixname failed\n");
-		nerrors++;
-		return(1);
-	    }
-	H5Pclose(plist);
-	if (VERBOSE_MED){
-	    printf("Test filenames are:\n");
-	    for (i=0; i < n; i++)
-		printf("    %s\n", filenames[i]);
-	}
+  int i, n;
+  hid_t plist;
+
+  plist = H5Pcreate (H5P_FILE_ACCESS);
+  H5Pset_fapl_mpio(plist, MPI_COMM_WORLD, MPI_INFO_NULL);
+  n = sizeof(FILENAME)/sizeof(FILENAME[0]) - 1;  /* exclude the NULL */
+
+  for (i=0; i < n; i++)
+      if (h5_fixname(FILENAME[i],plist,filenames[i],sizeof(filenames[i]))
+    == NULL){
+    printf("h5_fixname failed\n");
+    nerrors++;
+    return(1);
+      }
+  H5Pclose(plist);
+  if (VERBOSE_MED){
+      printf("Test filenames are:\n");
+      for (i=0; i < n; i++)
+    printf("    %s\n", filenames[i]);
+  }
     }
 
     return(0);
@@ -1130,7 +1104,7 @@ errors_sum(int nerrs)
 int
 main(int argc, char **argv)
 {
-    int mpi_size, mpi_rank;				/* mpi variables */
+    int mpi_size, mpi_rank;        /* mpi variables */
     int ret_code;
 
     MPI_Init(&argc, &argv);
@@ -1143,23 +1117,23 @@ main(int argc, char **argv)
      * calls.  By then, MPI calls may not work.
      */
     if (H5dont_atexit() < 0){
-	printf("Failed to turn off atexit processing. Continue.\n", mpi_rank);
+  printf("Failed to turn off atexit processing. Continue.\n", mpi_rank);
     };
     H5open();
     if (parse_options(argc, argv) != 0){
-	if (MAINPROCESS)
-	    usage();
-	goto finish;
+  if (MAINPROCESS)
+      usage();
+  goto finish;
     }
 
     if (MAINPROCESS){
-	printf("===================================\n");
-	printf("MPI functionality tests\n");
-	printf("===================================\n");
+  printf("===================================\n");
+  printf("MPI functionality tests\n");
+  printf("===================================\n");
     }
 
     if (VERBOSE_MED)
-	h5_show_hostname();
+  h5_show_hostname();
 
     fapl = H5Pcreate (H5P_FILE_ACCESS);
     H5Pset_fapl_mpio(fapl, MPI_COMM_WORLD, MPI_INFO_NULL);
@@ -1175,28 +1149,28 @@ main(int argc, char **argv)
     ret_code = test_mpio_1wMr(filenames[0], USENONE);
     ret_code = errors_sum(ret_code);
     if (mpi_rank==0 && ret_code > 0){
-	printf("***FAILED with %d total errors\n", ret_code);
-	nerrors += ret_code;
+  printf("***FAILED with %d total errors\n", ret_code);
+  nerrors += ret_code;
     }
 
     /* test atomicity and file sync in high verbose mode only         */
     /* since they often hang when broken and PHDF5 does not use them. */
     if (VERBOSE_HI){
-	MPI_BANNER("MPIO 1 write Many read test with atomicity...");
-	ret_code = test_mpio_1wMr(filenames[0], USEATOM);
-	ret_code = errors_sum(ret_code);
-	if (mpi_rank==0 && ret_code > 0){
-	    printf("***FAILED with %d total errors\n", ret_code);
-	    nerrors += ret_code;
-	}
+  MPI_BANNER("MPIO 1 write Many read test with atomicity...");
+  ret_code = test_mpio_1wMr(filenames[0], USEATOM);
+  ret_code = errors_sum(ret_code);
+  if (mpi_rank==0 && ret_code > 0){
+      printf("***FAILED with %d total errors\n", ret_code);
+      nerrors += ret_code;
+  }
 
-	MPI_BANNER("MPIO 1 write Many read test with file sync...");
-	ret_code = test_mpio_1wMr(filenames[0], USEFSYNC);
-	ret_code = errors_sum(ret_code);
-	if (mpi_rank==0 && ret_code > 0){
-	    printf("***FAILED with %d total errors\n", ret_code);
-	    nerrors += ret_code;
-	}
+  MPI_BANNER("MPIO 1 write Many read test with file sync...");
+  ret_code = test_mpio_1wMr(filenames[0], USEFSYNC);
+  ret_code = errors_sum(ret_code);
+  if (mpi_rank==0 && ret_code > 0){
+      printf("***FAILED with %d total errors\n", ret_code);
+      nerrors += ret_code;
+  }
     }
 
 
@@ -1207,8 +1181,8 @@ main(int argc, char **argv)
     ret_code = test_mpio_gb_file(filenames[0]);
     ret_code = errors_sum(ret_code);
     if (mpi_rank==0 && ret_code > 0){
-	printf("***FAILED with %d total errors\n", ret_code);
-	nerrors += ret_code;
+  printf("***FAILED with %d total errors\n", ret_code);
+  nerrors += ret_code;
     }
 
 
@@ -1219,71 +1193,40 @@ main(int argc, char **argv)
     ret_code = test_mpio_overlap_writes(filenames[0]);
     ret_code = errors_sum(ret_code);
     if (mpi_rank==0 && ret_code > 0){
-	printf("***FAILED with %d total errors\n", ret_code);
-	nerrors += ret_code;
+  printf("***FAILED with %d total errors\n", ret_code);
+  nerrors += ret_code;
     }
 
     /*=======================================
      * MPIO complicated derived datatype test
      *=======================================*/
-    /* test_mpio_derived_dtype often hangs when fails.
-     * Do not run it if it is known NOT working unless ask to
-     * run explicitly by high verbose mode.
-     */
-#ifdef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS
     MPI_BANNER("MPIO complicated derived datatype test...");
     ret_code = test_mpio_derived_dtype(filenames[0]);
-#else
-    if (VERBOSE_HI){
-	MPI_BANNER("MPIO complicated derived datatype test...");
-	ret_code = test_mpio_derived_dtype(filenames[0]);
-    }else{
-	MPI_BANNER("MPIO complicated derived datatype test SKIPPED.");
-	ret_code = 0;	/* fake ret_code */
-    }
-#endif
     ret_code = errors_sum(ret_code);
     if (mpi_rank==0 && ret_code > 0){
-	printf("***FAILED with %d total errors\n", ret_code);
-	nerrors += ret_code;
+  printf("***FAILED with %d total errors\n", ret_code);
+  nerrors += ret_code;
     }
 
     /*=======================================
      * MPIO special collective IO  test
      *=======================================*/
-    /* test_special_collective_io  often hangs when fails.
-     * Do not run it if it is known NOT working unless ask to
-     * run explicitly by high verbose mode.
-     */
-    if(mpi_size !=4){
-      MPI_BANNER("MPIO special collective io test SKIPPED.");
-      if(mpi_rank == 0){
-        printf("Use FOUR processes to run this test\n");
-        printf("If you still see the <test SKIPPED>, use <-vh> option to verify the test\n");
-  }
-      ret_code = 0;
-      goto sc_finish;
-    }
+    if (mpi_size < 4) {
+        MPI_BANNER("MPIO special collective io test SKIPPED.");
+        if (mpi_rank == 0)
+            printf("This test needs at least four processes to run.\n");
+        ret_code = 0;
+        goto sc_finish;
+    } /* end if */
 
-#ifdef H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS
     MPI_BANNER("MPIO special collective io test...");
     ret_code = test_mpio_special_collective(filenames[0]);
 
-#else
-    if (VERBOSE_HI){
-	MPI_BANNER("MPIO special collective io test...");
-	ret_code = test_mpio_special_collective(filenames[0]);
-    }else{
-	MPI_BANNER("MPIO special collective io test SKIPPED.");
-	ret_code = 0;	/* fake ret_code */
-    }
-#endif
-
 sc_finish:
     ret_code = errors_sum(ret_code);
     if (mpi_rank==0 && ret_code > 0){
-	printf("***FAILED with %d total errors\n", ret_code);
-	nerrors += ret_code;
+  printf("***FAILED with %d total errors\n", ret_code);
+  nerrors += ret_code;
     }
 
 
@@ -1292,15 +1235,15 @@ finish:
      * and exit.
      */
     MPI_Barrier(MPI_COMM_WORLD);
-    if (MAINPROCESS){		/* only process 0 reports */
-	printf("===================================\n");
-	if (nerrors){
-	    printf("***MPI tests detected %d errors***\n", nerrors);
-	}
-	else{
-	    printf("MPI tests finished with no errors\n");
-	}
-	printf("===================================\n");
+    if (MAINPROCESS){    /* only process 0 reports */
+  printf("===================================\n");
+  if (nerrors){
+      printf("***MPI tests detected %d errors***\n", nerrors);
+  }
+  else{
+      printf("MPI tests finished with no errors\n");
+  }
+  printf("===================================\n");
     }
 
     /* turn off alarm */
diff --git a/testpar/t_posix_compliant.c b/testpar/t_posix_compliant.c
index 960f4c8..5ea089d 100644
--- a/testpar/t_posix_compliant.c
+++ b/testpar/t_posix_compliant.c
@@ -26,8 +26,8 @@
  *
  *
  * TODO:
- * 	Add corresponding posix i/o tests for each MPI i/o test.  Currently, not all of the
- * 	MPI IO tests are implemented using fwrite/fread.
+ *   Add corresponding posix i/o tests for each MPI i/o test.  Currently, not all of the
+ *   MPI IO tests are implemented using fwrite/fread.
  *
  * Leon Arber
  * larber at ncsa.uiuc.edu
@@ -40,7 +40,9 @@
  *     mpiexec -np 3 ./t_posix_compliant
  */
 
+#ifdef H5_HAVE_UNISTD_H
 #include <unistd.h>
+#endif
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
@@ -48,16 +50,16 @@
 #ifndef STANDALONE
 #include "h5test.h"
 #else
-#define HDmalloc(sz)	malloc(sz)
-#define HDfree(p)	free(p)
-#define getenv_all(comm, root, name)	getenv(name)
+#define HDmalloc(sz)  malloc(sz)
+#define HDfree(p)  free(p)
+#define getenv_all(comm, root, name)  getenv(name)
 #endif
-#define  TESTFNAME	"posix_test"	/* test file name */
+#define  TESTFNAME  "posix_test"  /* test file name */
 
-static char*		testfile = NULL;
-static int		err_flag = 0;
-static int		max_err_print = 5;
-int			nmismatches = 0;	/* warnings encountered */
+static char*    testfile = NULL;
+static int    err_flag = 0;
+static int    max_err_print = 5;
+int      nmismatches = 0;  /* warnings encountered */
 
 /* globals needed for getopt
  * Although they *should* be defined in unistd.h */
@@ -65,27 +67,27 @@ extern char *optarg;
 extern int optind, opterr;
 
 
-#define CHECK_SUCCESS(res)	\
-{				\
-    char        err_got[MPI_MAX_ERROR_STRING];	\
-    int		err_len;			\
-    if(res != MPI_SUCCESS)			\
-    {						\
-	MPI_Error_string(res, err_got, &err_len);	\
-	fprintf(stderr, "Line %d, Error: %s\n", __LINE__, err_got); \
-	MPI_Abort(MPI_COMM_WORLD, -2);		\
-    }						\
+#define CHECK_SUCCESS(res)  \
+{        \
+    char        err_got[MPI_MAX_ERROR_STRING];  \
+    int    err_len;      \
+    if(res != MPI_SUCCESS)      \
+    {            \
+  MPI_Error_string(res, err_got, &err_len);  \
+  fprintf(stderr, "Line %d, Error: %s\n", __LINE__, err_got); \
+  MPI_Abort(MPI_COMM_WORLD, -2);    \
+    }            \
 }
 
-#define PRINT_RESULT()								\
-{										\
-    int err_result;								\
-    MPI_Reduce(&err_flag, &err_result, 1, MPI_INT, MPI_MIN, 0, MPI_COMM_WORLD);	\
-    if( (rank == 0) && (err_result == 0) )					\
-	printf("PASSED\n");							\
-    fflush(stdout);								\
-    fflush(stderr);								\
-    err_flag = 0;								\
+#define PRINT_RESULT()                \
+{                    \
+    int err_result;                \
+    MPI_Reduce(&err_flag, &err_result, 1, MPI_INT, MPI_MIN, 0, MPI_COMM_WORLD);  \
+    if( (rank == 0) && (err_result == 0) )          \
+  printf("PASSED\n");              \
+    fflush(stdout);                \
+    fflush(stderr);                \
+    err_flag = 0;                \
 }
 
 static void vrfy_elements(int* a, int* b, int size, int rank);
@@ -98,21 +100,21 @@ static int find_writesize(int rank, int numprocs, int write_size);
 
 static int allwrite_allread_blocks(int numprocs, int rank, int write_size)
 {
-    MPI_File	fh = MPI_FILE_NULL;
-    int		mpio_result;
-    int		amode, i;
-    MPI_Offset	offset = rank*write_size*sizeof(int);
-    MPI_Status	Status;
+    MPI_File  fh = MPI_FILE_NULL;
+    int    mpio_result;
+    int    amode, i;
+    MPI_Offset  offset = rank*write_size*sizeof(int);
+    MPI_Status  Status;
     int* writebuf = (int*)malloc(write_size*sizeof(int));
     int* readbuf = (int*)malloc (write_size*sizeof(int));
 
     for(i=0; i<write_size; i++)
-	writebuf[i] = i;
+  writebuf[i] = i;
 
     amode = MPI_MODE_CREATE | MPI_MODE_RDWR | MPI_MODE_DELETE_ON_CLOSE;
 
     mpio_result = MPI_File_open(MPI_COMM_WORLD, testfile, amode,
-	    MPI_INFO_NULL, &fh);
+      MPI_INFO_NULL, &fh);
     CHECK_SUCCESS(mpio_result);
 
     mpio_result = MPI_File_write_at(fh, offset, writebuf, write_size, MPI_INT, &Status);
@@ -138,41 +140,41 @@ static int allwrite_allread_blocks(int numprocs, int rank, int write_size)
 
 static int posix_allwrite_allread_blocks(int numprocs, int rank, int write_size)
 {
-    int		ret;
-    int		i;
-    int	offset = rank*write_size*sizeof(int);
+    int    ret;
+    int    i;
+    int  offset = rank*write_size*sizeof(int);
     int* writebuf = (int*)malloc(write_size*sizeof(int));
     int* readbuf = (int*)malloc (write_size*sizeof(int));
-    FILE*	file = NULL;
+    FILE*  file = NULL;
 
     for(i=0; i<write_size; i++)
-	writebuf[i] = i;
+  writebuf[i] = i;
 
     if(rank==0)
-	file = fopen(testfile, "w+");
+  file = fopen(testfile, "w+");
     MPI_Barrier(MPI_COMM_WORLD);
     if(rank != 0)
-	file = fopen(testfile, "r+");
+  file = fopen(testfile, "r+");
 
     if(file == NULL)
     {
-	fprintf(stderr, "Could not create testfile\n");
-	MPI_Abort(MPI_COMM_WORLD, 1);
+  fprintf(stderr, "Could not create testfile\n");
+  MPI_Abort(MPI_COMM_WORLD, 1);
     }
 
     ret = fseek(file, offset, SEEK_SET);
     if(ret == -1)
     {
-	perror("fseek");
-	MPI_Abort(MPI_COMM_WORLD, 1);
+  perror("fseek");
+  MPI_Abort(MPI_COMM_WORLD, 1);
     }
 
 
     ret = fwrite(writebuf, sizeof(int), write_size, file);
     if(ret != write_size)
     {
-	perror("fwrite");
-	MPI_Abort(MPI_COMM_WORLD, 1);
+  perror("fwrite");
+  MPI_Abort(MPI_COMM_WORLD, 1);
     }
 
     MPI_Barrier(MPI_COMM_WORLD);
@@ -182,17 +184,17 @@ static int posix_allwrite_allread_blocks(int numprocs, int rank, int write_size)
     ret = fseek(file, offset, SEEK_SET);
     if(ret == -1)
     {
-	perror("fseek");
-	MPI_Abort(MPI_COMM_WORLD, 1);
+  perror("fseek");
+  MPI_Abort(MPI_COMM_WORLD, 1);
     }
 
     ret = fread(readbuf, sizeof(int), write_size, file);
     if( (ret == 0) && feof(file))
-	printf("Process %d: Error.  Prematurely reached end of file\n", rank);
+  printf("Process %d: Error.  Prematurely reached end of file\n", rank);
     else if( (ret != write_size) && ferror(file))
     {
-	perror("Error encountered in fread");
-	MPI_Abort(MPI_COMM_WORLD, 1);
+  perror("Error encountered in fread");
+  MPI_Abort(MPI_COMM_WORLD, 1);
     }
 
     vrfy_elements(writebuf, readbuf, write_size, rank);
@@ -201,7 +203,7 @@ static int posix_allwrite_allread_blocks(int numprocs, int rank, int write_size)
 
     MPI_Barrier(MPI_COMM_WORLD);
     if(rank == 0)
-	unlink(testfile);
+  unlink(testfile);
 
     HDfree(writebuf);
     HDfree(readbuf);
@@ -211,47 +213,47 @@ static int posix_allwrite_allread_blocks(int numprocs, int rank, int write_size)
 
 static int posix_onewrite_allread_blocks(int numprocs, int rank, int write_size)
 {
-    int		ret;
-    int		i;
-    int	offset = rank*write_size*sizeof(int);
+    int    ret;
+    int    i;
+    int  offset = rank*write_size*sizeof(int);
     int* writebuf = (int*)malloc(write_size*sizeof(int));
     int* readbuf = (int*)malloc (write_size*sizeof(int));
-    FILE*	file = NULL;
+    FILE*  file = NULL;
 
     for(i=0; i<write_size; i++)
-	writebuf[i] = i;
+  writebuf[i] = i;
 
     if(rank==0)
-	file = fopen(testfile, "w+");
+  file = fopen(testfile, "w+");
     MPI_Barrier(MPI_COMM_WORLD);
     if(rank != 0)
-	file = fopen(testfile, "r+");
+  file = fopen(testfile, "r+");
 
     if(file == NULL)
     {
-	fprintf(stderr, "Could not create testfile\n");
-	MPI_Abort(MPI_COMM_WORLD, 1);
+  fprintf(stderr, "Could not create testfile\n");
+  MPI_Abort(MPI_COMM_WORLD, 1);
     }
 
     if(rank == 0)
     {
-	for(offset = 0; offset<numprocs*write_size*sizeof(int); offset+=(write_size*sizeof(int)))
-	{
-	    ret = fseek(file, offset, SEEK_SET);
-	    if(ret == -1)
-	    {
-		perror("fseek");
-		MPI_Abort(MPI_COMM_WORLD, 1);
-	    }
-
-
-	    ret = fwrite(writebuf, sizeof(int), write_size, file);
-	    if(ret != write_size)
-	    {
-		perror("fwrite");
-		MPI_Abort(MPI_COMM_WORLD, 1);
-	    }
-	}
+  for(offset = 0; offset<numprocs*write_size*sizeof(int); offset+=(write_size*sizeof(int)))
+  {
+      ret = fseek(file, offset, SEEK_SET);
+      if(ret == -1)
+      {
+    perror("fseek");
+    MPI_Abort(MPI_COMM_WORLD, 1);
+      }
+
+
+      ret = fwrite(writebuf, sizeof(int), write_size, file);
+      if(ret != write_size)
+      {
+    perror("fwrite");
+    MPI_Abort(MPI_COMM_WORLD, 1);
+      }
+  }
 
     }
     MPI_Barrier(MPI_COMM_WORLD);
@@ -261,17 +263,17 @@ static int posix_onewrite_allread_blocks(int numprocs, int rank, int write_size)
     ret = fseek(file, offset, SEEK_SET);
     if(ret == -1)
     {
-	perror("fseek");
-	MPI_Abort(MPI_COMM_WORLD, 1);
+  perror("fseek");
+  MPI_Abort(MPI_COMM_WORLD, 1);
     }
 
     ret = fread(readbuf, sizeof(int), write_size, file);
     if( (ret == 0) && feof(file))
-	printf("Process %d: Error.  Prematurely reached end of file\n", rank);
+  printf("Process %d: Error.  Prematurely reached end of file\n", rank);
     else if( (ret != write_size) && ferror(file))
     {
-	perror("Error encountered in fread");
-	MPI_Abort(MPI_COMM_WORLD, 1);
+  perror("Error encountered in fread");
+  MPI_Abort(MPI_COMM_WORLD, 1);
     }
 
     vrfy_elements(writebuf, readbuf, write_size, rank);
@@ -280,7 +282,7 @@ static int posix_onewrite_allread_blocks(int numprocs, int rank, int write_size)
 
     MPI_Barrier(MPI_COMM_WORLD);
     if(rank == 0)
-	unlink(testfile);
+  unlink(testfile);
 
     HDfree(writebuf);
     HDfree(readbuf);
@@ -290,48 +292,48 @@ static int posix_onewrite_allread_blocks(int numprocs, int rank, int write_size)
 
 static int posix_onewrite_allread_interlaced(int numprocs, int rank, int write_size)
 {
-    int		ret;
-    int		i, fill, index;
-    int	offset = rank*write_size*sizeof(int);
+    int    ret;
+    int    i, fill, index;
+    int  offset = rank*write_size*sizeof(int);
     int* writebuf = (int*)malloc(write_size*sizeof(int));
     int* readbuf = (int*)malloc (write_size*sizeof(int));
-    FILE*	file = NULL;
+    FILE*  file = NULL;
 
     if(rank==0)
-	file = fopen(testfile, "w+");
+  file = fopen(testfile, "w+");
     MPI_Barrier(MPI_COMM_WORLD);
     if(rank != 0)
-	file = fopen(testfile, "r+");
+  file = fopen(testfile, "r+");
 
     if(file == NULL)
     {
-	fprintf(stderr, "Could not create testfile\n");
-	MPI_Abort(MPI_COMM_WORLD, 1);
+  fprintf(stderr, "Could not create testfile\n");
+  MPI_Abort(MPI_COMM_WORLD, 1);
     }
 
     if(rank == 0)
     {
-	for(offset = 0; offset<numprocs*write_size*sizeof(int); offset+=(numprocs*sizeof(int)))
-	{
-	    ret = fseek(file, offset, SEEK_SET);
-	    if(ret == -1)
-	    {
-		perror("fseek");
-		MPI_Abort(MPI_COMM_WORLD, 1);
-	    }
-
-	    fill = offset / (numprocs*sizeof(int));
-	    for(i=0; i<numprocs; i++)
-		writebuf[i] = fill;
-
-
-	    ret = fwrite(writebuf, sizeof(int), numprocs, file);
-	    if(ret != numprocs)
-	    {
-		perror("fwrite");
-		MPI_Abort(MPI_COMM_WORLD, 1);
-	    }
-	}
+  for(offset = 0; offset<numprocs*write_size*sizeof(int); offset+=(numprocs*sizeof(int)))
+  {
+      ret = fseek(file, offset, SEEK_SET);
+      if(ret == -1)
+      {
+    perror("fseek");
+    MPI_Abort(MPI_COMM_WORLD, 1);
+      }
+
+      fill = offset / (numprocs*sizeof(int));
+      for(i=0; i<numprocs; i++)
+    writebuf[i] = fill;
+
+
+      ret = fwrite(writebuf, sizeof(int), numprocs, file);
+      if(ret != numprocs)
+      {
+    perror("fwrite");
+    MPI_Abort(MPI_COMM_WORLD, 1);
+      }
+  }
 
     }
     MPI_Barrier(MPI_COMM_WORLD);
@@ -340,27 +342,27 @@ static int posix_onewrite_allread_interlaced(int numprocs, int rank, int write_s
     for(offset = rank*sizeof(int); offset<numprocs*write_size*sizeof(int); offset+=(numprocs*sizeof(int)))
     {
 
-	ret = fseek(file, offset, SEEK_SET);
-	if(ret == -1)
-	{
-	    perror("fseek");
-	    MPI_Abort(MPI_COMM_WORLD, 1);
-	}
-
-	ret = fread(readbuf+index, sizeof(int), 1, file);
-	if( (ret == 0) && feof(file))
-	    printf("Process %d: Error.  Prematurely reached end of file\n", rank);
-	else if( (ret != 1) && ferror(file))
-	{
-	    perror("Error encountered in fread");
-	    MPI_Abort(MPI_COMM_WORLD, 1);
-	}
-
-	index++;
+  ret = fseek(file, offset, SEEK_SET);
+  if(ret == -1)
+  {
+      perror("fseek");
+      MPI_Abort(MPI_COMM_WORLD, 1);
+  }
+
+  ret = fread(readbuf+index, sizeof(int), 1, file);
+  if( (ret == 0) && feof(file))
+      printf("Process %d: Error.  Prematurely reached end of file\n", rank);
+  else if( (ret != 1) && ferror(file))
+  {
+      perror("Error encountered in fread");
+      MPI_Abort(MPI_COMM_WORLD, 1);
+  }
+
+  index++;
     }
 
     for(i=0; i<write_size; i++)
-	writebuf[i] = i;
+  writebuf[i] = i;
 
     vrfy_elements(writebuf, readbuf, write_size, rank);
 
@@ -368,7 +370,7 @@ static int posix_onewrite_allread_interlaced(int numprocs, int rank, int write_s
 
     MPI_Barrier(MPI_COMM_WORLD);
     if(rank == 0)
-	unlink(testfile);
+  unlink(testfile);
 
     HDfree(writebuf);
     HDfree(readbuf);
@@ -382,17 +384,17 @@ static int posix_onewrite_allread_interlaced(int numprocs, int rank, int write_s
 
 static int allwrite_allread_interlaced(int numprocs, int rank, int write_size)
 {
-    MPI_File	fh = MPI_FILE_NULL;
-    int		mpio_result;
-    int		amode, i, counter = 0;
+    MPI_File  fh = MPI_FILE_NULL;
+    int    mpio_result;
+    int    amode, i, counter = 0;
     MPI_Datatype filetype;
-    MPI_Status	Status;
+    MPI_Status  Status;
     int* writebuf = (int*)malloc(write_size*sizeof(int));
-    int*	readbuf = (int*) malloc(numprocs*sizeof(int));
-    int		offset=0;
+    int*  readbuf = (int*) malloc(numprocs*sizeof(int));
+    int    offset=0;
 
     for(i=0; i<write_size; i++)
-	writebuf[i] = i;
+  writebuf[i] = i;
 
 
     amode = MPI_MODE_CREATE | MPI_MODE_RDWR | MPI_MODE_DELETE_ON_CLOSE;
@@ -418,23 +420,23 @@ static int allwrite_allread_interlaced(int numprocs, int rank, int write_size)
 
     for(offset = 0; offset<(write_size*numprocs*sizeof(int)); offset+=(numprocs*sizeof(int)))
     {
-	mpio_result = MPI_File_read_at(fh, offset, readbuf, numprocs, MPI_INT, &Status);
-	CHECK_SUCCESS(mpio_result);
-
-	for(i=0; i<numprocs; i++)
-	{
-	    if(writebuf[offset/(numprocs*sizeof(int))] != readbuf[i])
-	    {
-		if( (rank == 0) && (counter == 0))
-		    printf("\n");
-		if(counter++ < max_err_print)
-		    fprintf(stderr, "Arrays do not match!  Prcoess %d, element %d: [%d, %d]\n", rank, i, writebuf[offset/(numprocs*sizeof(int))], readbuf[i]);
-		else if(counter++ == max_err_print+1)
-		    fprintf(stderr, "Printed %d errors.  Omitting the rest\n", max_err_print);
-		err_flag = -1;
-	    }
-
-	}
+  mpio_result = MPI_File_read_at(fh, offset, readbuf, numprocs, MPI_INT, &Status);
+  CHECK_SUCCESS(mpio_result);
+
+  for(i=0; i<numprocs; i++)
+  {
+      if(writebuf[offset/(numprocs*sizeof(int))] != readbuf[i])
+      {
+    if( (rank == 0) && (counter == 0))
+        printf("\n");
+    if(counter++ < max_err_print)
+        fprintf(stderr, "Arrays do not match!  Prcoess %d, element %d: [%d, %d]\n", rank, i, writebuf[offset/(numprocs*sizeof(int))], readbuf[i]);
+    else if(counter++ == max_err_print+1)
+        fprintf(stderr, "Printed %d errors.  Omitting the rest\n", max_err_print);
+    err_flag = -1;
+      }
+
+  }
     }
     nmismatches += counter;
     mpio_result = MPI_File_close(&fh);
@@ -449,10 +451,10 @@ static int allwrite_allread_interlaced(int numprocs, int rank, int write_size)
 
 /* Overlapping pattern works as follows (this test requires at least 2 procs:
  * Writes:
- * Task 0: 0	2	4	6	etc...
- * Task 1:    1	    3       5      7    etc...
- * Task 2: 0	    3		6	etc..
- * Task 3: 0		4		8	etc...
+ * Task 0: 0  2  4  6  etc...
+ * Task 1:    1      3       5      7    etc...
+ * Task 2: 0      3    6  etc..
+ * Task 3: 0    4    8  etc...
  *
  * The above describes only the pattern of the elements being written.  The actual
  * number of elements written is going to be:
@@ -464,11 +466,11 @@ static int allwrite_allread_interlaced(int numprocs, int rank, int write_size)
  *
  *  So, if there are 5 tasks with write_size=4, the resulting pattern of writes is:
  *
- *  Task 0: 0	2	4	6	8	10	12	14
+ *  Task 0: 0  2  4  6  8  10  12  14
  *  Task 1:   1     3       5       7       9       11      13       15
- *  Task 2: 0       3		6	    9		12	     15
- *  Task 3: 0		4		8		12
- *  Task 4: 0		    5			10		     15
+ *  Task 2: 0       3    6      9    12       15
+ *  Task 3: 0    4    8    12
+ *  Task 4: 0        5      10         15
  *
  *
  *
@@ -481,34 +483,34 @@ static int allwrite_allread_interlaced(int numprocs, int rank, int write_size)
 static int allwrite_allread_overlap(int numprocs, int rank, int write_size)
 {
 
-    MPI_File	fh = MPI_FILE_NULL;
-    int		mpio_result;
-    int		amode, i, counter = 0;
+    MPI_File  fh = MPI_FILE_NULL;
+    int    mpio_result;
+    int    amode, i, counter = 0;
     MPI_Datatype filetype;
-    MPI_Status	Status;
-    int*	writebuf = (int*) malloc(write_size*(numprocs-1)*sizeof(int)); /* An upper bound...not all the elements will be written */
-    int*	readbuf = (int*) malloc(write_size*(numprocs-1)*sizeof(int));
+    MPI_Status  Status;
+    int*  writebuf = (int*) malloc(write_size*(numprocs-1)*sizeof(int)); /* An upper bound...not all the elements will be written */
+    int*  readbuf = (int*) malloc(write_size*(numprocs-1)*sizeof(int));
 
     if(numprocs < 2)
     {
-	fprintf(stderr, "The allwrite_allread_overlap test requires at least 2 procs\n");
-	return -1;
+  fprintf(stderr, "The allwrite_allread_overlap test requires at least 2 procs\n");
+  return -1;
     }
 
     if(rank == 0)
     {
-	for(i=0; i<write_size*(numprocs-1); i++)
-	    writebuf[i] = 2*i;
+  for(i=0; i<write_size*(numprocs-1); i++)
+      writebuf[i] = 2*i;
     }
     else if(rank == 1)
     {
-	for(i=0; i<write_size*(numprocs-1); i++)
-	    writebuf[i] = (2*i)+1;
+  for(i=0; i<write_size*(numprocs-1); i++)
+      writebuf[i] = (2*i)+1;
     }
     else
     {
-	for(i=0; i<write_size*(numprocs-1); i++)
-	    writebuf[i] = (rank+1)*i;
+  for(i=0; i<write_size*(numprocs-1); i++)
+      writebuf[i] = (rank+1)*i;
     }
 
     amode = MPI_MODE_CREATE | MPI_MODE_RDWR | MPI_MODE_DELETE_ON_CLOSE;
@@ -516,24 +518,24 @@ static int allwrite_allread_overlap(int numprocs, int rank, int write_size)
     CHECK_SUCCESS(mpio_result);
 
     if( (rank == 0) || (rank == 1) )
-	mpio_result = MPI_Type_vector(write_size*(numprocs-1), 1, 2, MPI_INT, &filetype);
+  mpio_result = MPI_Type_vector(write_size*(numprocs-1), 1, 2, MPI_INT, &filetype);
     else
-	mpio_result = MPI_Type_vector(write_size*(numprocs-1), 1, rank+1, MPI_INT, &filetype);
+  mpio_result = MPI_Type_vector(write_size*(numprocs-1), 1, rank+1, MPI_INT, &filetype);
     CHECK_SUCCESS(mpio_result);
 
     mpio_result = MPI_Type_commit(&filetype);
     CHECK_SUCCESS(mpio_result);
 
     if( rank == 1)
-	mpio_result = MPI_File_set_view(fh, sizeof(int), MPI_INT, filetype, "native", MPI_INFO_NULL);
+  mpio_result = MPI_File_set_view(fh, sizeof(int), MPI_INT, filetype, "native", MPI_INFO_NULL);
     else
-	mpio_result = MPI_File_set_view(fh, 0, MPI_INT, filetype, "native", MPI_INFO_NULL);
+  mpio_result = MPI_File_set_view(fh, 0, MPI_INT, filetype, "native", MPI_INFO_NULL);
     CHECK_SUCCESS(mpio_result);
 
     if( rank == (numprocs - 1))
-	mpio_result = MPI_File_write(fh, writebuf, write_size, MPI_INT, &Status);
+  mpio_result = MPI_File_write(fh, writebuf, write_size, MPI_INT, &Status);
     else
-	mpio_result = MPI_File_write(fh, writebuf, find_writesize(rank, numprocs, write_size), MPI_INT, &Status);
+  mpio_result = MPI_File_write(fh, writebuf, find_writesize(rank, numprocs, write_size), MPI_INT, &Status);
 
     CHECK_SUCCESS(mpio_result);
 
@@ -546,16 +548,16 @@ static int allwrite_allread_overlap(int numprocs, int rank, int write_size)
 
     for(i=0; i<write_size*(numprocs-1); i++)
     {
-	if(i != readbuf[i])
-	{
-    	    if( (rank == 0) && (counter == 0))
-		    printf("\n");
-	    if(counter++ < max_err_print)
-		fprintf(stderr, "Arrays do not match!  Prcoess %d, element %d: [%d, %d]\n", rank, i, i, readbuf[i]);
-	    else if(counter++ == max_err_print+1)
-		fprintf(stderr, "Printed %d errors.  Omitting the rest\n", max_err_print);
-	    err_flag = -1;
-    	}
+  if(i != readbuf[i])
+  {
+          if( (rank == 0) && (counter == 0))
+        printf("\n");
+      if(counter++ < max_err_print)
+    fprintf(stderr, "Arrays do not match!  Prcoess %d, element %d: [%d, %d]\n", rank, i, i, readbuf[i]);
+      else if(counter++ == max_err_print+1)
+    fprintf(stderr, "Printed %d errors.  Omitting the rest\n", max_err_print);
+      err_flag = -1;
+      }
     }
 
     nmismatches += counter;
@@ -575,30 +577,30 @@ static int allwrite_allread_overlap(int numprocs, int rank, int write_size)
  */
 static int onewrite_allread_blocks(int numprocs, int rank, int write_size)
 {
-    MPI_File	fh = MPI_FILE_NULL;
-    int		mpio_result;
-    int		amode, i;
-    MPI_Status	Status;
+    MPI_File  fh = MPI_FILE_NULL;
+    int    mpio_result;
+    int    amode, i;
+    MPI_Status  Status;
     int* writebuf = (int*)malloc(write_size*sizeof(int));
     int* readbuf = (int*)malloc (write_size*sizeof(int));
 
     for(i=0; i<write_size; i++)
-	writebuf[i] = i;
+  writebuf[i] = i;
 
     amode = MPI_MODE_CREATE | MPI_MODE_RDWR | MPI_MODE_DELETE_ON_CLOSE;
 
     mpio_result = MPI_File_open(MPI_COMM_WORLD, testfile, amode,
-	    MPI_INFO_NULL, &fh);
+      MPI_INFO_NULL, &fh);
     CHECK_SUCCESS(mpio_result);
 
     /* A random process writes out all the data */
     if(rank == (rand() % numprocs))
     {
-	for(i=0; i<numprocs; i++)
-	{
-	    mpio_result = MPI_File_write_at(fh, write_size*i*sizeof(int), writebuf, write_size, MPI_INT, &Status);
-	    CHECK_SUCCESS(mpio_result);
-	}
+  for(i=0; i<numprocs; i++)
+  {
+      mpio_result = MPI_File_write_at(fh, write_size*i*sizeof(int), writebuf, write_size, MPI_INT, &Status);
+      CHECK_SUCCESS(mpio_result);
+  }
     }
 
     MPI_Barrier(MPI_COMM_WORLD);
@@ -625,12 +627,12 @@ static int onewrite_allread_blocks(int numprocs, int rank, int write_size)
  * Each proc reads out 0 1 2 3 starting at displacement i */
 static int onewrite_allread_interlaced(int numprocs, int rank, int write_size)
 {
-    MPI_File	fh = MPI_FILE_NULL;
-    int		mpio_result;
-    int		amode, i;
+    MPI_File  fh = MPI_FILE_NULL;
+    int    mpio_result;
+    int    amode, i;
     MPI_Datatype filetype;
-    MPI_Status	Status;
-    int*	writebuf = (int*) malloc(numprocs*write_size*sizeof(int)); /* Upper bound, not all used */
+    MPI_Status  Status;
+    int*  writebuf = (int*) malloc(numprocs*write_size*sizeof(int)); /* Upper bound, not all used */
     int* readbuf = (int*)malloc (write_size*sizeof(int));
 
 
@@ -647,15 +649,15 @@ static int onewrite_allread_interlaced(int numprocs, int rank, int write_size)
 
     if(rank == (rand() % numprocs))
     {
-	for(i=0; i<write_size; i++)
-	{
-	    int j;
-	    for(j=0; j<numprocs; j++)
-		writebuf[j] = i;
-
-	    mpio_result = MPI_File_write_at(fh, i*numprocs*sizeof(int), writebuf, numprocs, MPI_INT, &Status);
-	    CHECK_SUCCESS(mpio_result);
-	}
+  for(i=0; i<write_size; i++)
+  {
+      int j;
+      for(j=0; j<numprocs; j++)
+    writebuf[j] = i;
+
+      mpio_result = MPI_File_write_at(fh, i*numprocs*sizeof(int), writebuf, numprocs, MPI_INT, &Status);
+      CHECK_SUCCESS(mpio_result);
+  }
     }
 
     MPI_Barrier(MPI_COMM_WORLD);
@@ -667,7 +669,7 @@ static int onewrite_allread_interlaced(int numprocs, int rank, int write_size)
     CHECK_SUCCESS(mpio_result);
 
     for(i=0; i<write_size; i++)
-	writebuf[i] = i;
+  writebuf[i] = i;
 
     vrfy_elements(writebuf, readbuf, write_size, rank);
 
@@ -690,12 +692,12 @@ static int find_writesize(int rank, int numprocs, int size)
     /* Find largest multiple not greater than tmp */
     while(x <= tmp)
     {
-	if( (rank == 0) || (rank == 1) )
-	    x+=2;
-	else
-	    x += (rank+1);
+  if( (rank == 0) || (rank == 1) )
+      x+=2;
+  else
+      x += (rank+1);
 
-	write_size++;
+  write_size++;
     }
 
     return write_size;
@@ -708,16 +710,16 @@ vrfy_elements(int* a, int* b, int size, int rank)
 
     for(i=0; i<size; i++)
     {
-	if(a[i] != b[i])
-	{
-	    if( (rank == 0) && (counter == 0))
-		printf("\n");
-	    if(counter++ < max_err_print)
-		fprintf(stderr, "Arrays do not match!  Prcoess %d, element %d: [%d, %d]\n", rank, i, a[i], b[i]);
-	    else if(counter++ == max_err_print+1)
-		fprintf(stderr, "Printed %d errors.  Omitting the rest\n", max_err_print);
-	    err_flag = -1;
-	}
+  if(a[i] != b[i])
+  {
+      if( (rank == 0) && (counter == 0))
+    printf("\n");
+      if(counter++ < max_err_print)
+    fprintf(stderr, "Arrays do not match!  Prcoess %d, element %d: [%d, %d]\n", rank, i, a[i], b[i]);
+      else if(counter++ == max_err_print+1)
+    fprintf(stderr, "Printed %d errors.  Omitting the rest\n", max_err_print);
+      err_flag = -1;
+  }
     }
     nmismatches += counter;
     fflush(stderr);
@@ -744,7 +746,7 @@ main(int argc, char* argv[])
 
     int numprocs, rank, opt, mpi_tests=1, posix_tests=1;
     int lb, ub, inc;
-    int	write_size = 0;
+    int  write_size = 0;
     char    optstring[] = "h x m p: s: v:";
     char *prefix;
 
@@ -755,63 +757,63 @@ main(int argc, char* argv[])
     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
 
     if (rank == 0)
-	header_msg();
+  header_msg();
     while((opt = getopt(argc, argv, optstring)) != -1)
     {
-	switch(opt)
-	{
-	    case 'h':
-		if(rank == 0)
-		    printf("Usage: %s [options]\n"
-			    "-h       prints this help message\n"
-			    "-x	      run the posix i/o tests ONLY (default: posix and MPI)\n"
-			    "-m	      run the mpi i/o tests ONLY (default: posix and MPI)\n"
-			    "-s size  Run the test for the specific size.  Default is 1024, 4096, 16384, ..., 1048576\n"
-			    "-p path   specifies path for test file.  Default is current directory\n"
-			    "-v num   Specifies number of unmatching entries to print (default 10, pass -1 for all)\n", argv[0]);
-		goto done;
-	    case 'x':
-		mpi_tests = 0;
-		posix_tests = 1;
-		break;
-	    case 'm':
-		mpi_tests = 1;
-		posix_tests = 0;
-		break;
-	    case 'p':
-		/* need 2 extra--1 for the / and 1 for the terminating NULL. */
-		testfile = (char*) HDmalloc(strlen(optarg) + 2 + strlen(TESTFNAME));
-		strcpy(testfile, optarg);
-		/* Append a / just in case they didn't end their path with one */
-		strcat(testfile, "/" TESTFNAME);
-		break;
-	    case 's':
-		write_size = atoi(optarg);
-		break;
-	    case 'v':
-		max_err_print = atoi(optarg);
-		break;
-	}
+  switch(opt)
+  {
+      case 'h':
+    if(rank == 0)
+        printf("Usage: %s [options]\n"
+          "-h       prints this help message\n"
+          "-x        run the posix i/o tests ONLY (default: posix and MPI)\n"
+          "-m        run the mpi i/o tests ONLY (default: posix and MPI)\n"
+          "-s size  Run the test for the specific size.  Default is 1024, 4096, 16384, ..., 1048576\n"
+          "-p path   specifies path for test file.  Default is current directory\n"
+          "-v num   Specifies number of unmatching entries to print (default 10, pass -1 for all)\n", argv[0]);
+    goto done;
+      case 'x':
+    mpi_tests = 0;
+    posix_tests = 1;
+    break;
+      case 'm':
+    mpi_tests = 1;
+    posix_tests = 0;
+    break;
+      case 'p':
+    /* need 2 extra--1 for the / and 1 for the terminating NULL. */
+    testfile = (char*) HDmalloc(strlen(optarg) + 2 + strlen(TESTFNAME));
+    strcpy(testfile, optarg);
+    /* Append a / just in case they didn't end their path with one */
+    strcat(testfile, "/" TESTFNAME);
+    break;
+      case 's':
+    write_size = atoi(optarg);
+    break;
+      case 'v':
+    max_err_print = atoi(optarg);
+    break;
+  }
     }
 
     if( (optind < argc) && (rank == 0))
-	fprintf(stderr, "Unkown command-line argument passed.  Continuing anyway...\n");
+  fprintf(stderr, "Unkown command-line argument passed.  Continuing anyway...\n");
 
     if (!testfile){
-	/* Try environment variable if not given as option. */
-	prefix = getenv_all(MPI_COMM_WORLD, 0, "HDF5_PARAPREFIX");
-	if (prefix)
-	{
-	    /* need 2 extra--1 for the / and 1 for the terminating NULL. */
-	    testfile = (char*) HDmalloc(strlen(prefix) + 2 + strlen(TESTFNAME));
-	    strcpy(testfile, prefix);
-	    /* Append a / just in case they didn't end their path with one */
-	    strcat(testfile, "/" TESTFNAME);
-	}
-	else
-	{
-	    testfile = strdup(TESTFNAME);
-	}
+  /* Try environment variable if not given as option. */
+  prefix = getenv_all(MPI_COMM_WORLD, 0, "HDF5_PARAPREFIX");
+  if (prefix)
+  {
+      /* need 2 extra--1 for the / and 1 for the terminating NULL. */
+      testfile = (char*) HDmalloc(strlen(prefix) + 2 + strlen(TESTFNAME));
+      strcpy(testfile, prefix);
+      /* Append a / just in case they didn't end their path with one */
+      strcat(testfile, "/" TESTFNAME);
+  }
+  else
+  {
+      testfile = strdup(TESTFNAME);
+  }
     }
     printf("Process %d: testfile=%s\n", rank, testfile);
     fflush(stdout);
@@ -819,18 +821,18 @@ main(int argc, char* argv[])
 
     if(write_size == 0)
     {
-	lb = 16*numprocs*sizeof(int);
-	/* 1MB MPIO-IO overlapping is failing in copper. Lower it now pending
-	   permenant fix for copper.*/
-	/* ub = 1024*1024;*/
-	ub = lb*128;
-	inc = 4;
+  lb = 16*numprocs*sizeof(int);
+  /* 1MB MPIO-IO overlapping is failing in copper. Lower it now pending
+     permenant fix for copper.*/
+  /* ub = 1024*1024;*/
+  ub = lb*128;
+  inc = 4;
     }
     else
     {
-	lb = write_size;
-	ub = write_size+1;
-	inc = 2;
+  lb = write_size;
+  ub = write_size+1;
+  inc = 2;
     }
 
 #ifndef STANDALONE
@@ -840,69 +842,69 @@ main(int argc, char* argv[])
 
     for(write_size = lb; write_size <= ub; write_size*=inc)
     {
-	if(rank == 0)
-	    printf("\nTesting size %d\n", write_size);
-
-	if(mpi_tests)
-	{
-	    if(rank == 0)
-		printf("Testing allwrite_allread_blocks with MPI IO\t\t"); fflush(stdout);
-	    allwrite_allread_blocks(numprocs, rank, write_size/(numprocs*sizeof(int)));
-	    PRINT_RESULT();
-	    MPI_Barrier(MPI_COMM_WORLD);
-
-	    if(rank == 0)
-		printf("Testing allwrite_allread_interlaced with MPI IO\t\t"); fflush(stdout);
-	    allwrite_allread_interlaced(numprocs, rank, write_size/(numprocs*sizeof(int)));
-	    PRINT_RESULT();
-	    MPI_Barrier(MPI_COMM_WORLD);
-
-	    if(rank == 0)
-		printf("Testing allwrite_allread_overlap with MPI IO\t\t"); fflush(stdout);
-	    allwrite_allread_overlap(numprocs, rank, write_size);
-	    PRINT_RESULT();
-	    MPI_Barrier(MPI_COMM_WORLD);
-
-	    if(rank == 0)
-		printf("Testing onewrite_allread_blocks with MPI IO\t\t"); fflush(stdout);
-	    onewrite_allread_blocks(numprocs, rank, write_size/(numprocs*sizeof(int)));
-	    PRINT_RESULT();
-	    MPI_Barrier(MPI_COMM_WORLD);
-
-	    if(rank == 0)
-		printf("Testing onewrite_allread_interlaced with MPI IO\t\t"); fflush(stdout);
-	    onewrite_allread_interlaced(numprocs, rank, write_size/(numprocs*sizeof(int)));
-	    PRINT_RESULT();
-	    MPI_Barrier(MPI_COMM_WORLD);
-	}
-
-	if(posix_tests)
-	{
-	    if(rank == 0)
-		printf("Testing allwrite_allread_blocks with POSIX IO\t\t"); fflush(stdout);
-	    posix_allwrite_allread_blocks(numprocs, rank, write_size/(numprocs*sizeof(int)));
-	    PRINT_RESULT();
-	    MPI_Barrier(MPI_COMM_WORLD);
-
-	    if(rank == 0)
-		printf("Testing onewrite_allread_blocks with POSIX IO\t\t"); fflush(stdout);
-	    posix_onewrite_allread_blocks(numprocs, rank, write_size/(numprocs*sizeof(int)));
-	    PRINT_RESULT();
-	    MPI_Barrier(MPI_COMM_WORLD);
-
-	    if(rank == 0)
-		printf("Testing onewrite_allread_interlaced with POSIX IO\t"); fflush(stdout);
-	    posix_onewrite_allread_interlaced(numprocs, rank, write_size/(numprocs*sizeof(int)));
-	    PRINT_RESULT();
-	    MPI_Barrier(MPI_COMM_WORLD);
-
-	/*    if(rank == 0)
-		printf("Testing allwrite_allread_overlap with POSIX IO\t\t"); fflush(stdout);
-	    posix_allwrite_allread_overlap(numprocs, rank, write_size);
-	    PRINT_RESULT();
-	    MPI_Barrier(MPI_COMM_WORLD);
+  if(rank == 0)
+      printf("\nTesting size %d\n", write_size);
+
+  if(mpi_tests)
+  {
+      if(rank == 0)
+    printf("Testing allwrite_allread_blocks with MPI IO\t\t"); fflush(stdout);
+      allwrite_allread_blocks(numprocs, rank, write_size/(numprocs*sizeof(int)));
+      PRINT_RESULT();
+      MPI_Barrier(MPI_COMM_WORLD);
+
+      if(rank == 0)
+    printf("Testing allwrite_allread_interlaced with MPI IO\t\t"); fflush(stdout);
+      allwrite_allread_interlaced(numprocs, rank, write_size/(numprocs*sizeof(int)));
+      PRINT_RESULT();
+      MPI_Barrier(MPI_COMM_WORLD);
+
+      if(rank == 0)
+    printf("Testing allwrite_allread_overlap with MPI IO\t\t"); fflush(stdout);
+      allwrite_allread_overlap(numprocs, rank, write_size);
+      PRINT_RESULT();
+      MPI_Barrier(MPI_COMM_WORLD);
+
+      if(rank == 0)
+    printf("Testing onewrite_allread_blocks with MPI IO\t\t"); fflush(stdout);
+      onewrite_allread_blocks(numprocs, rank, write_size/(numprocs*sizeof(int)));
+      PRINT_RESULT();
+      MPI_Barrier(MPI_COMM_WORLD);
+
+      if(rank == 0)
+    printf("Testing onewrite_allread_interlaced with MPI IO\t\t"); fflush(stdout);
+      onewrite_allread_interlaced(numprocs, rank, write_size/(numprocs*sizeof(int)));
+      PRINT_RESULT();
+      MPI_Barrier(MPI_COMM_WORLD);
+  }
+
+  if(posix_tests)
+  {
+      if(rank == 0)
+    printf("Testing allwrite_allread_blocks with POSIX IO\t\t"); fflush(stdout);
+      posix_allwrite_allread_blocks(numprocs, rank, write_size/(numprocs*sizeof(int)));
+      PRINT_RESULT();
+      MPI_Barrier(MPI_COMM_WORLD);
+
+      if(rank == 0)
+    printf("Testing onewrite_allread_blocks with POSIX IO\t\t"); fflush(stdout);
+      posix_onewrite_allread_blocks(numprocs, rank, write_size/(numprocs*sizeof(int)));
+      PRINT_RESULT();
+      MPI_Barrier(MPI_COMM_WORLD);
+
+      if(rank == 0)
+    printf("Testing onewrite_allread_interlaced with POSIX IO\t"); fflush(stdout);
+      posix_onewrite_allread_interlaced(numprocs, rank, write_size/(numprocs*sizeof(int)));
+      PRINT_RESULT();
+      MPI_Barrier(MPI_COMM_WORLD);
+
+  /*    if(rank == 0)
+    printf("Testing allwrite_allread_overlap with POSIX IO\t\t"); fflush(stdout);
+      posix_allwrite_allread_overlap(numprocs, rank, write_size);
+      PRINT_RESULT();
+      MPI_Barrier(MPI_COMM_WORLD);
 */
-	}
+  }
     }
 
 #ifndef STANDALONE
@@ -912,10 +914,10 @@ main(int argc, char* argv[])
 
 done:
     if (testfile)
-	HDfree(testfile);
+  HDfree(testfile);
     if (rank == 0){
-	printf("\nSummary:\n");
-	fflush(stdout);
+  printf("\nSummary:\n");
+  fflush(stdout);
     }
     MPI_Barrier(MPI_COMM_WORLD);
     printf("Process %d: encountered %d mismatches.\n", rank, nmismatches);
diff --git a/testpar/t_shapesame.c b/testpar/t_shapesame.c
index a62e4f9..2d379d6 100644
--- a/testpar/t_shapesame.c
+++ b/testpar/t_shapesame.c
@@ -29,47 +29,6 @@
 #include "testphdf5.h"
 #include "H5Spkg.h"             /* Dataspaces                           */
 
-/* The following macros are used in the detection of tests that run overlong --
- * so that tests can be ommitted if necessary to get the overall set of tests
- * to complete.
- *
- * Observe that we can't do this if we don't have gettimeofday(), so in that
- * case, the macros resolve to the empty string.
- */
-
-#ifdef H5_HAVE_GETTIMEOFDAY
-
-#define	START_TIMER(time_tests, start_time, vrfy_msg)			\
-	{								\
-            int result;							\
-            if ( time_tests ) {						\
-                    result = HDgettimeofday(&(start_time), NULL);	\
-                    VRFY( (result == 0), (vrfy_msg));			\
-            }								\
-	}
-
-#define STOP_TIMER_AND_UPDATE(time_tests, end_time, vrfy_msg, times)	\
-        {								\
-            int result;							\
-            long long delta_usecs;					\
-            if ( time_tests ) {						\
-                result = HDgettimeofday(&(end_time), NULL);		\
-                VRFY( (result == 0), (vrfy_msg));			\
-                delta_usecs = 						\
-                   (1000000 * (timeval_b.tv_sec - timeval_a.tv_sec)) +	\
-                   (timeval_b.tv_usec - timeval_a.tv_usec);		\
-                HDassert( delta_usecs >= 0L );				\
-                (times) += delta_usecs;					\
-            }								\
-	}
-
-#else /* H5_HAVE_GETTIMEOFDAY */
-
-#define START_TIMER(time_tests, start_time, vrfy_msg)
-
-#define STOP_TIMER_AND_UPDATE(time_tests, end_time, vrfy_msg, times)
-
-#endif /* H5_HAVE_GETTIMEOFDAY */
 
 /* On Lustre (and perhaps other parallel file systems?), we have severe
  * slow downs if two or more processes attempt to access the same file system
@@ -81,101 +40,116 @@
 #define SHAPE_SAME_TEST_ALIGNMENT	((hsize_t)(4 * 1024 * 1024))
 
 
+#define PAR_SS_DR_MAX_RANK	5 	/* must update code if this changes */
+
+struct hs_dr_pio_test_vars_t
+{
+    int		mpi_size;
+    int         mpi_rank;
+    MPI_Comm    mpi_comm;
+    MPI_Info	mpi_info;
+    int         test_num;
+    int         edge_size;
+    int		checker_edge_size;
+    int         chunk_edge_size;
+    int         small_rank;
+    int         large_rank;
+    hid_t       dset_type;
+    uint32_t  * small_ds_buf_0;
+    uint32_t  * small_ds_buf_1;
+    uint32_t  * small_ds_buf_2;
+    uint32_t  * small_ds_slice_buf;
+    uint32_t  * large_ds_buf_0;
+    uint32_t  * large_ds_buf_1;
+    uint32_t  * large_ds_buf_2;
+    uint32_t  * large_ds_slice_buf;
+    int         small_ds_offset;
+    int         large_ds_offset;
+    hid_t       fid;               /* HDF5 file ID */
+    hid_t	xfer_plist;
+    hid_t       full_mem_small_ds_sid;
+    hid_t       full_file_small_ds_sid;
+    hid_t       mem_small_ds_sid;
+    hid_t       file_small_ds_sid_0;
+    hid_t       file_small_ds_sid_1;
+    hid_t	small_ds_slice_sid;
+    hid_t       full_mem_large_ds_sid;
+    hid_t       full_file_large_ds_sid;
+    hid_t       mem_large_ds_sid;
+    hid_t       file_large_ds_sid_0;
+    hid_t       file_large_ds_sid_1;
+    hid_t       file_large_ds_process_slice_sid;
+    hid_t       mem_large_ds_process_slice_sid;
+    hid_t	large_ds_slice_sid;
+    hid_t       small_dataset;     /* Dataset ID */
+    hid_t       large_dataset;     /* Dataset ID */
+    size_t      small_ds_size;
+    size_t      small_ds_slice_size;
+    size_t      large_ds_size;
+    size_t      large_ds_slice_size;
+    hsize_t     dims[PAR_SS_DR_MAX_RANK];
+    hsize_t     chunk_dims[PAR_SS_DR_MAX_RANK];
+    hsize_t     start[PAR_SS_DR_MAX_RANK];
+    hsize_t     stride[PAR_SS_DR_MAX_RANK];
+    hsize_t     count[PAR_SS_DR_MAX_RANK];
+    hsize_t     block[PAR_SS_DR_MAX_RANK];
+    hsize_t   * start_ptr;
+    hsize_t   * stride_ptr;
+    hsize_t   * count_ptr;
+    hsize_t   * block_ptr;
+    int         skips;
+    int	        max_skips;
+    int64_t	total_tests;
+    int64_t	tests_run;
+    int64_t	tests_skipped;
+};
+
 /*-------------------------------------------------------------------------
- * Function:	contig_hyperslab_dr_pio_test__run_test()
+ * Function:	hs_dr_pio_test__setup()
  *
- * Purpose:	Test I/O to/from hyperslab selections of different rank in
- *		the parallel.
+ * Purpose:	Do setup for tests of I/O to/from hyperslab selections of 
+ * 		different rank in the parallel case.
  *
  * Return:	void
  *
- * Programmer:	JRM -- 9/18/09
+ * Programmer:	JRM -- 8/9/11
  *
  * Modifications:
  *
- *		JRM -- 9/16/10
- *		Added express_test parameter.  Use it to control whether 
- *		we set up the chunks so that no chunk is shared between 
- *		processes, and also whether we set an alignment when we 
- *		create the test file.
+ *		None.
  *
  *-------------------------------------------------------------------------
  */
 
-#define PAR_SS_DR_MAX_RANK	5
-#define CONTIG_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 0
+#define CONTIG_HS_DR_PIO_TEST__SETUP__DEBUG 0
 
 static void
-contig_hyperslab_dr_pio_test__run_test(const int test_num,
-                                       const int edge_size,
-                                       const int chunk_edge_size,
-                                       const int small_rank,
-                                       const int large_rank,
-                                       const hbool_t use_collective_io,
-                                       const hid_t dset_type,
-                                       const int express_test)
+hs_dr_pio_test__setup(const int test_num,
+                      const int edge_size,
+                      const int checker_edge_size,
+                      const int chunk_edge_size,
+                      const int small_rank,
+                      const int large_rank,
+                      const hbool_t use_collective_io,
+                      const hid_t dset_type,
+                      const int express_test,
+                      struct hs_dr_pio_test_vars_t * tv_ptr)
 {
-#if CONTIG_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
-    const char *fcnName = "contig_hyperslab_dr_pio_test__run_test()";
-#endif /* CONTIG_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG */
+#if CONTIG_HS_DR_PIO_TEST__SETUP__DEBUG 
+    const char *fcnName = "hs_dr_pio_test__setup()";
+#endif /* CONTIG_HS_DR_PIO_TEST__SETUP__DEBUG */
     const char *filename;
     hbool_t	use_gpfs = FALSE;   /* Use GPFS hints */
     hbool_t	mis_match = FALSE;
-    int		i, j, k, l;
-    size_t	n;
+    int		i;
     int         mrc;
-    int		mpi_size = -1;
-    int         mpi_rank = -1;
-    size_t      start_index;
-    size_t      stop_index;
-    const int   test_max_rank = 5;  /* must update code if this changes */
+    int		mpi_rank; /* needed by the VRFY macro */
     uint32_t	expected_value;
-    uint32_t  * small_ds_buf_0 = NULL;
-    uint32_t  * small_ds_buf_1 = NULL;
-    uint32_t  * small_ds_buf_2 = NULL;
-    uint32_t  * small_ds_slice_buf = NULL;
-    uint32_t  * large_ds_buf_0 = NULL;
-    uint32_t  * large_ds_buf_1 = NULL;
-    uint32_t  * large_ds_buf_2 = NULL;
-    uint32_t  * large_ds_slice_buf = NULL;
     uint32_t  * ptr_0;
     uint32_t  * ptr_1;
-    MPI_Comm    mpi_comm = MPI_COMM_NULL;
-    MPI_Info	mpi_info = MPI_INFO_NULL;
-    hid_t       fid;			/* HDF5 file ID */
     hid_t	acc_tpl;		/* File access templates */
-    hid_t	xfer_plist = H5P_DEFAULT;
-    hid_t       full_mem_small_ds_sid;
-    hid_t       full_file_small_ds_sid;
-    hid_t       mem_small_ds_sid;
-    hid_t       file_small_ds_sid;
-    hid_t	small_ds_slice_sid;
-    hid_t       full_mem_large_ds_sid;
-    hid_t       full_file_large_ds_sid;
-    hid_t       mem_large_ds_sid;
-    hid_t       file_large_ds_sid;
-    hid_t       file_large_ds_process_slice_sid;
-    hid_t       mem_large_ds_process_slice_sid;
-    hid_t	large_ds_slice_sid;
     hid_t       small_ds_dcpl_id = H5P_DEFAULT;
     hid_t       large_ds_dcpl_id = H5P_DEFAULT;
-    hid_t       small_dataset;     /* Dataset ID                   */
-    hid_t       large_dataset;     /* Dataset ID                   */
-    size_t      small_ds_size = 1;
-    size_t      small_ds_slice_size = 1;
-    size_t      large_ds_size = 1;
-    size_t      large_ds_slice_size = 1;
-    hsize_t     dims[PAR_SS_DR_MAX_RANK];
-    hsize_t     chunk_dims[PAR_SS_DR_MAX_RANK];
-    hsize_t     start[PAR_SS_DR_MAX_RANK];
-    hsize_t     stride[PAR_SS_DR_MAX_RANK];
-    hsize_t     count[PAR_SS_DR_MAX_RANK];
-    hsize_t     block[PAR_SS_DR_MAX_RANK];
-    hsize_t   * start_ptr = NULL;
-    hsize_t   * stride_ptr = NULL;
-    hsize_t   * count_ptr = NULL;
-    hsize_t   * block_ptr = NULL;
-    htri_t      check;          /* Shape comparison return value */
     herr_t	ret;		/* Generic return value */
 
     HDassert( edge_size >= 6 );
@@ -183,107 +157,132 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
     HDassert( ( chunk_edge_size == 0 ) || ( chunk_edge_size >= 3 ) );
     HDassert( 1 < small_rank );
     HDassert( small_rank < large_rank );
-    HDassert( large_rank <= test_max_rank );
-    HDassert( test_max_rank <= PAR_SS_DR_MAX_RANK );
+    HDassert( large_rank <= PAR_SS_DR_MAX_RANK );
 
-    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
-    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+    tv_ptr->test_num = test_num;
+    tv_ptr->edge_size = edge_size;
+    tv_ptr->checker_edge_size = checker_edge_size;
+    tv_ptr->chunk_edge_size = chunk_edge_size;
+    tv_ptr->small_rank = small_rank;
+    tv_ptr->large_rank = large_rank;
+    tv_ptr->dset_type = dset_type;
 
-    HDassert( mpi_size >= 1 );
+    MPI_Comm_size(MPI_COMM_WORLD, &(tv_ptr->mpi_size));
+    MPI_Comm_rank(MPI_COMM_WORLD, &(tv_ptr->mpi_rank));
+    /* the VRFY() macro needs the local variable mpi_rank -- set it up now */
+    mpi_rank = tv_ptr->mpi_rank;
 
-    mpi_comm = MPI_COMM_WORLD;
-    mpi_info = MPI_INFO_NULL;
+    HDassert( tv_ptr->mpi_size >= 1 );
 
-    for ( i = 0; i < small_rank - 1; i++ )
+    tv_ptr->mpi_comm = MPI_COMM_WORLD;
+    tv_ptr->mpi_info = MPI_INFO_NULL;
+
+    for ( i = 0; i < tv_ptr->small_rank - 1; i++ )
     {
-        small_ds_size *= (size_t)edge_size;
-        small_ds_slice_size *= (size_t)edge_size;
+        tv_ptr->small_ds_size *= (size_t)(tv_ptr->edge_size);
+        tv_ptr->small_ds_slice_size *= (size_t)(tv_ptr->edge_size);
     }
-    small_ds_size *= (size_t)(mpi_size + 1);
+    tv_ptr->small_ds_size *= (size_t)(tv_ptr->mpi_size + 1);
+
+    /* used by checker board tests only */
+    tv_ptr->small_ds_offset = PAR_SS_DR_MAX_RANK - tv_ptr->small_rank;
 
+    HDassert( 0 < tv_ptr->small_ds_offset );
+    HDassert( tv_ptr->small_ds_offset < PAR_SS_DR_MAX_RANK );
 
-    for ( i = 0; i < large_rank - 1; i++ ) {
+    for ( i = 0; i < tv_ptr->large_rank - 1; i++ ) {
 
-        large_ds_size *= (size_t)edge_size;
-        large_ds_slice_size *= (size_t)edge_size;
+        tv_ptr->large_ds_size *= (size_t)(tv_ptr->edge_size);
+        tv_ptr->large_ds_slice_size *= (size_t)(tv_ptr->edge_size);
     }
-    large_ds_size *= (size_t)(mpi_size + 1);
+    tv_ptr->large_ds_size *= (size_t)(tv_ptr->mpi_size + 1);
+
+    /* used by checker board tests only */
+    tv_ptr->large_ds_offset = PAR_SS_DR_MAX_RANK - tv_ptr->large_rank;
+
+    HDassert( 0 <= tv_ptr->large_ds_offset );
+    HDassert( tv_ptr->large_ds_offset < PAR_SS_DR_MAX_RANK );
 
 
     /* set up the start, stride, count, and block pointers */
-    start_ptr  = &(start[PAR_SS_DR_MAX_RANK - large_rank]);
-    stride_ptr = &(stride[PAR_SS_DR_MAX_RANK - large_rank]);
-    count_ptr  = &(count[PAR_SS_DR_MAX_RANK - large_rank]);
-    block_ptr  = &(block[PAR_SS_DR_MAX_RANK - large_rank]);
+    /* used by contiguous tests only */
+    tv_ptr->start_ptr  = &(tv_ptr->start[PAR_SS_DR_MAX_RANK - tv_ptr->large_rank]);
+    tv_ptr->stride_ptr = &(tv_ptr->stride[PAR_SS_DR_MAX_RANK - tv_ptr->large_rank]);
+    tv_ptr->count_ptr  = &(tv_ptr->count[PAR_SS_DR_MAX_RANK - tv_ptr->large_rank]);
+    tv_ptr->block_ptr  = &(tv_ptr->block[PAR_SS_DR_MAX_RANK - tv_ptr->large_rank]);
 
 
     /* Allocate buffers */
-    small_ds_buf_0 = (uint32_t *)HDmalloc(sizeof(uint32_t) * small_ds_size);
-    VRFY((small_ds_buf_0 != NULL), "malloc of small_ds_buf_0 succeeded");
+    tv_ptr->small_ds_buf_0 = (uint32_t *)HDmalloc(sizeof(uint32_t) * tv_ptr->small_ds_size);
+    VRFY((tv_ptr->small_ds_buf_0 != NULL), "malloc of small_ds_buf_0 succeeded");
 
-    small_ds_buf_1 = (uint32_t *)HDmalloc(sizeof(uint32_t) * small_ds_size);
-    VRFY((small_ds_buf_1 != NULL), "malloc of small_ds_buf_1 succeeded");
+    tv_ptr->small_ds_buf_1 = (uint32_t *)HDmalloc(sizeof(uint32_t) * tv_ptr->small_ds_size);
+    VRFY((tv_ptr->small_ds_buf_1 != NULL), "malloc of small_ds_buf_1 succeeded");
 
-    small_ds_buf_2 = (uint32_t *)HDmalloc(sizeof(uint32_t) * small_ds_size);
-    VRFY((small_ds_buf_2 != NULL), "malloc of small_ds_buf_2 succeeded");
+    tv_ptr->small_ds_buf_2 = (uint32_t *)HDmalloc(sizeof(uint32_t) * tv_ptr->small_ds_size);
+    VRFY((tv_ptr->small_ds_buf_2 != NULL), "malloc of small_ds_buf_2 succeeded");
 
-    small_ds_slice_buf = 
-	(uint32_t *)HDmalloc(sizeof(uint32_t) * small_ds_slice_size);
-    VRFY((small_ds_slice_buf != NULL), "malloc of small_ds_slice_buf succeeded");
+    tv_ptr->small_ds_slice_buf = 
+        (uint32_t *)HDmalloc(sizeof(uint32_t) * tv_ptr->small_ds_slice_size);
+    VRFY((tv_ptr->small_ds_slice_buf != NULL), "malloc of small_ds_slice_buf succeeded");
 
-    large_ds_buf_0 = (uint32_t *)HDmalloc(sizeof(uint32_t) * large_ds_size);
-    VRFY((large_ds_buf_0 != NULL), "malloc of large_ds_buf_0 succeeded");
+    tv_ptr->large_ds_buf_0 = (uint32_t *)HDmalloc(sizeof(uint32_t) * tv_ptr->large_ds_size);
+    VRFY((tv_ptr->large_ds_buf_0 != NULL), "malloc of large_ds_buf_0 succeeded");
 
-    large_ds_buf_1 = (uint32_t *)HDmalloc(sizeof(uint32_t) * large_ds_size);
-    VRFY((large_ds_buf_1 != NULL), "malloc of large_ds_buf_1 succeeded");
+    tv_ptr->large_ds_buf_1 = (uint32_t *)HDmalloc(sizeof(uint32_t) * tv_ptr->large_ds_size);
+    VRFY((tv_ptr->large_ds_buf_1 != NULL), "malloc of large_ds_buf_1 succeeded");
 
-    large_ds_buf_2 = (uint32_t *)HDmalloc(sizeof(uint32_t) * large_ds_size);
-    VRFY((large_ds_buf_2 != NULL), "malloc of large_ds_buf_2 succeeded");
+    tv_ptr->large_ds_buf_2 = (uint32_t *)HDmalloc(sizeof(uint32_t) * tv_ptr->large_ds_size);
+    VRFY((tv_ptr->large_ds_buf_2 != NULL), "malloc of large_ds_buf_2 succeeded");
 
-    large_ds_slice_buf = 
-	(uint32_t *)HDmalloc(sizeof(uint32_t) * large_ds_slice_size);
-    VRFY((large_ds_slice_buf != NULL), "malloc of large_ds_slice_buf succeeded");
+    tv_ptr->large_ds_slice_buf = 
+        (uint32_t *)HDmalloc(sizeof(uint32_t) * tv_ptr->large_ds_slice_size);
+    VRFY((tv_ptr->large_ds_slice_buf != NULL), "malloc of large_ds_slice_buf succeeded");
 
     /* initialize the buffers */
 
-    ptr_0 = small_ds_buf_0;
-    for(i = 0; i < (int)small_ds_size; i++)
+    ptr_0 = tv_ptr->small_ds_buf_0;
+    for(i = 0; i < (int)(tv_ptr->small_ds_size); i++)
         *ptr_0++ = (uint32_t)i;
-    HDmemset(small_ds_buf_1, 0, sizeof(uint32_t) * small_ds_size);
-    HDmemset(small_ds_buf_2, 0, sizeof(uint32_t) * small_ds_size);
+    HDmemset(tv_ptr->small_ds_buf_1, 0, sizeof(uint32_t) * tv_ptr->small_ds_size);
+    HDmemset(tv_ptr->small_ds_buf_2, 0, sizeof(uint32_t) * tv_ptr->small_ds_size);
 
-    HDmemset(small_ds_slice_buf, 0, sizeof(uint32_t) * small_ds_slice_size);
+    HDmemset(tv_ptr->small_ds_slice_buf, 0, sizeof(uint32_t) * tv_ptr->small_ds_slice_size);
 
-    ptr_0 = large_ds_buf_0;
-    for(i = 0; i < (int)large_ds_size; i++)
+    ptr_0 = tv_ptr->large_ds_buf_0;
+    for(i = 0; i < (int)(tv_ptr->large_ds_size); i++)
         *ptr_0++ = (uint32_t)i;
-    HDmemset(large_ds_buf_1, 0, sizeof(uint32_t) * large_ds_size);
-    HDmemset(large_ds_buf_2, 0, sizeof(uint32_t) * large_ds_size);
+    HDmemset(tv_ptr->large_ds_buf_1, 0, sizeof(uint32_t) * tv_ptr->large_ds_size);
+    HDmemset(tv_ptr->large_ds_buf_2, 0, sizeof(uint32_t) * tv_ptr->large_ds_size);
 
-    HDmemset(large_ds_slice_buf, 0, sizeof(uint32_t) * large_ds_slice_size);
+    HDmemset(tv_ptr->large_ds_slice_buf, 0, sizeof(uint32_t) * tv_ptr->large_ds_slice_size);
 
     filename = (const char *)GetTestParameters();
     HDassert( filename != NULL );
-#if CONTIG_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
+#if CONTIG_HS_DR_PIO_TEST__SETUP__DEBUG 
     if ( MAINPROCESS ) {
 
-        HDfprintf(stdout, "%d: test num = %d.\n", mpi_rank, test_num);
-        HDfprintf(stdout, "%d: mpi_size = %d.\n", mpi_rank, mpi_size);
+        HDfprintf(stdout, "%d: test num = %d.\n", tv_ptr->mpi_rank, tv_ptr->test_num);
+        HDfprintf(stdout, "%d: mpi_size = %d.\n", tv_ptr->mpi_rank, tv_ptr->mpi_size);
         HDfprintf(stdout, 
                   "%d: small/large rank = %d/%d, use_collective_io = %d.\n",
-                  mpi_rank, small_rank, large_rank, (int)use_collective_io);
+                  tv_ptr->mpi_rank, tv_ptr->small_rank, tv_ptr->large_rank, 
+                  (int)use_collective_io);
         HDfprintf(stdout, "%d: edge_size = %d, chunk_edge_size = %d.\n",
-                  mpi_rank, edge_size, chunk_edge_size);
+                  tv_ptr->mpi_rank, tv_ptr->edge_size, tv_ptr->chunk_edge_size);
+        HDfprintf(stdout, "%d: checker_edge_size = %d.\n",
+                  tv_ptr->mpi_rank, tv_ptr->checker_edge_size);
         HDfprintf(stdout, "%d: small_ds_size = %d, large_ds_size = %d.\n",
-                  mpi_rank, (int)small_ds_size, (int)large_ds_size);
-        HDfprintf(stdout, "%d: filename = %s.\n", mpi_rank, filename);
+                  tv_ptr->mpi_rank, (int)(tv_ptr->small_ds_size), 
+                  (int)(tv_ptr->large_ds_size));
+        HDfprintf(stdout, "%d: filename = %s.\n", tv_ptr->mpi_rank, filename);
     }
-#endif
+#endif /* CONTIG_HS_DR_PIO_TEST__SETUP__DEBUG */
     /* ----------------------------------------
      * CREATE AN HDF5 FILE WITH PARALLEL ACCESS
      * ---------------------------------------*/
     /* setup file access template */
-    acc_tpl = create_faccess_plist(mpi_comm, mpi_info, facc_type, use_gpfs);
+    acc_tpl = create_faccess_plist(tv_ptr->mpi_comm, tv_ptr->mpi_info, facc_type, use_gpfs);
     VRFY((acc_tpl >= 0), "create_faccess_plist() succeeded");
 
     /* set the alignment -- need it large so that we aren't always hitting the
@@ -297,8 +296,8 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
     }
 
     /* create the file collectively */
-    fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, acc_tpl);
-    VRFY((fid >= 0), "H5Fcreate succeeded");
+    tv_ptr->fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, acc_tpl);
+    VRFY((tv_ptr->fid >= 0), "H5Fcreate succeeded");
 
     MESG("File opened.");
 
@@ -308,60 +307,79 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
 
 
     /* setup dims: */
-    dims[0] = (hsize_t)(mpi_size + 1);
-    dims[1] = dims[2] = dims[3] = dims[4] = (hsize_t)edge_size;
+    tv_ptr->dims[0] = (hsize_t)(tv_ptr->mpi_size + 1);
+    tv_ptr->dims[1] = tv_ptr->dims[2] = 
+        tv_ptr->dims[3] = tv_ptr->dims[4] = (hsize_t)(tv_ptr->edge_size);
 
 
     /* Create small ds dataspaces */
-    full_mem_small_ds_sid = H5Screate_simple(small_rank, dims, NULL);
-    VRFY((full_mem_small_ds_sid != 0), 
+    tv_ptr->full_mem_small_ds_sid = 
+        H5Screate_simple(tv_ptr->small_rank, tv_ptr->dims, NULL);
+    VRFY((tv_ptr->full_mem_small_ds_sid != 0), 
          "H5Screate_simple() full_mem_small_ds_sid succeeded");
 
-    full_file_small_ds_sid = H5Screate_simple(small_rank, dims, NULL);
-    VRFY((full_file_small_ds_sid != 0), 
+    tv_ptr->full_file_small_ds_sid = 
+        H5Screate_simple(tv_ptr->small_rank, tv_ptr->dims, NULL);
+    VRFY((tv_ptr->full_file_small_ds_sid != 0), 
          "H5Screate_simple() full_file_small_ds_sid succeeded");
 
-    mem_small_ds_sid = H5Screate_simple(small_rank, dims, NULL);
-    VRFY((mem_small_ds_sid != 0), 
-	 "H5Screate_simple() mem_small_ds_sid succeeded");
+    tv_ptr->mem_small_ds_sid = H5Screate_simple(tv_ptr->small_rank, tv_ptr->dims, NULL);
+    VRFY((tv_ptr->mem_small_ds_sid != 0), 
+         "H5Screate_simple() mem_small_ds_sid succeeded");
+
+    tv_ptr->file_small_ds_sid_0 = H5Screate_simple(tv_ptr->small_rank, tv_ptr->dims, NULL);
+    VRFY((tv_ptr->file_small_ds_sid_0 != 0), 
+         "H5Screate_simple() file_small_ds_sid_0 succeeded");
 
-    file_small_ds_sid = H5Screate_simple(small_rank, dims, NULL);
-    VRFY((file_small_ds_sid != 0), 
-         "H5Screate_simple() file_small_ds_sid succeeded");
+    /* used by checker board tests only */
+    tv_ptr->file_small_ds_sid_1 = H5Screate_simple(tv_ptr->small_rank, tv_ptr->dims, NULL);
+    VRFY((tv_ptr->file_small_ds_sid_1 != 0), 
+         "H5Screate_simple() file_small_ds_sid_1 succeeded");
 
-    small_ds_slice_sid = H5Screate_simple(small_rank - 1, &(dims[1]), NULL);
-    VRFY((small_ds_slice_sid != 0), 
+    tv_ptr->small_ds_slice_sid = 
+        H5Screate_simple(tv_ptr->small_rank - 1, &(tv_ptr->dims[1]), NULL);
+    VRFY((tv_ptr->small_ds_slice_sid != 0), 
          "H5Screate_simple() small_ds_slice_sid succeeded");
 
 
     /* Create large ds dataspaces */
-    full_mem_large_ds_sid = H5Screate_simple(large_rank, dims, NULL);
-    VRFY((full_mem_large_ds_sid != 0), 
+    tv_ptr->full_mem_large_ds_sid = 
+        H5Screate_simple(tv_ptr->large_rank, tv_ptr->dims, NULL);
+    VRFY((tv_ptr->full_mem_large_ds_sid != 0), 
          "H5Screate_simple() full_mem_large_ds_sid succeeded");
 
-    full_file_large_ds_sid = H5Screate_simple(large_rank, dims, NULL);
-    VRFY((full_file_large_ds_sid != FAIL), 
+    tv_ptr->full_file_large_ds_sid = 
+        H5Screate_simple(tv_ptr->large_rank, tv_ptr->dims, NULL);
+    VRFY((tv_ptr->full_file_large_ds_sid != FAIL), 
          "H5Screate_simple() full_file_large_ds_sid succeeded");
 
-    mem_large_ds_sid = H5Screate_simple(large_rank, dims, NULL);
-    VRFY((mem_large_ds_sid != FAIL), 
+    tv_ptr->mem_large_ds_sid = H5Screate_simple(tv_ptr->large_rank, tv_ptr->dims, NULL);
+    VRFY((tv_ptr->mem_large_ds_sid != FAIL), 
          "H5Screate_simple() mem_large_ds_sid succeeded");
 
-    file_large_ds_sid = H5Screate_simple(large_rank, dims, NULL);
-    VRFY((file_large_ds_sid != FAIL), 
-         "H5Screate_simple() file_large_ds_sid succeeded");
+    tv_ptr->file_large_ds_sid_0 = H5Screate_simple(tv_ptr->large_rank, tv_ptr->dims, NULL);
+    VRFY((tv_ptr->file_large_ds_sid_0 != FAIL), 
+         "H5Screate_simple() file_large_ds_sid_0 succeeded");
+
+    /* used by checker board tests only */
+    tv_ptr->file_large_ds_sid_1 = H5Screate_simple(tv_ptr->large_rank, tv_ptr->dims, NULL);
+    VRFY((tv_ptr->file_large_ds_sid_1 != FAIL), 
+         "H5Screate_simple() file_large_ds_sid_1 succeeded");
 
-    mem_large_ds_process_slice_sid = H5Screate_simple(large_rank, dims, NULL);
-    VRFY((mem_large_ds_process_slice_sid != FAIL), 
+    tv_ptr->mem_large_ds_process_slice_sid = 
+        H5Screate_simple(tv_ptr->large_rank, tv_ptr->dims, NULL);
+    VRFY((tv_ptr->mem_large_ds_process_slice_sid != FAIL), 
          "H5Screate_simple() mem_large_ds_process_slice_sid succeeded");
 
-    file_large_ds_process_slice_sid = H5Screate_simple(large_rank, dims, NULL);
-    VRFY((file_large_ds_process_slice_sid != FAIL), 
+    tv_ptr->file_large_ds_process_slice_sid = 
+        H5Screate_simple(tv_ptr->large_rank, tv_ptr->dims, NULL);
+    VRFY((tv_ptr->file_large_ds_process_slice_sid != FAIL), 
          "H5Screate_simple() file_large_ds_process_slice_sid succeeded");
 
 
-    large_ds_slice_sid = H5Screate_simple(large_rank - 1, &(dims[1]), NULL);
-    VRFY((large_ds_slice_sid != 0), 
+    tv_ptr->large_ds_slice_sid = 
+        H5Screate_simple(tv_ptr->large_rank - 1, &(tv_ptr->dims[1]), NULL);
+    VRFY((tv_ptr->large_ds_slice_sid != 0), 
          "H5Screate_simple() large_ds_slice_sid succeeded");
 
 
@@ -369,10 +387,10 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
      * large data set creation property lists to specify chunked
      * datasets.
      */
-    if ( chunk_edge_size > 0 ) {
+    if ( tv_ptr->chunk_edge_size > 0 ) {
 
         /* Under Lustre (and perhaps other parallel file systems?) we get 
-	 * locking delays when two or more processes attempt to access the 
+         * locking delays when two or more processes attempt to access the 
          * same file system block.
          *
          * To minimize this problem, I have changed chunk_dims[0] 
@@ -390,14 +408,15 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
          */
         if ( express_test == 0 ) {
 
-            chunk_dims[0] = 1;
+            tv_ptr->chunk_dims[0] = 1;
 
         } else {
 
-            chunk_dims[0] = 1;
+            tv_ptr->chunk_dims[0] = 1;
         }
-        chunk_dims[1] = chunk_dims[2] = 
-                        chunk_dims[3] = chunk_dims[4] = (hsize_t)chunk_edge_size;
+        tv_ptr->chunk_dims[1] = tv_ptr->chunk_dims[2] = 
+                                tv_ptr->chunk_dims[3] = 
+                                tv_ptr->chunk_dims[4] = (hsize_t)(tv_ptr->chunk_edge_size);
 
         small_ds_dcpl_id = H5Pcreate(H5P_DATASET_CREATE);
         VRFY((ret != FAIL), "H5Pcreate() small_ds_dcpl_id succeeded");
@@ -405,7 +424,7 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
         ret = H5Pset_layout(small_ds_dcpl_id, H5D_CHUNKED);
         VRFY((ret != FAIL), "H5Pset_layout() small_ds_dcpl_id succeeded");
 
-        ret = H5Pset_chunk(small_ds_dcpl_id, small_rank, chunk_dims);
+        ret = H5Pset_chunk(small_ds_dcpl_id, tv_ptr->small_rank, tv_ptr->chunk_dims);
         VRFY((ret != FAIL), "H5Pset_chunk() small_ds_dcpl_id succeeded");
 
 
@@ -415,89 +434,88 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
         ret = H5Pset_layout(large_ds_dcpl_id, H5D_CHUNKED);
         VRFY((ret != FAIL), "H5Pset_layout() large_ds_dcpl_id succeeded");
 
-        ret = H5Pset_chunk(large_ds_dcpl_id, large_rank, chunk_dims);
+        ret = H5Pset_chunk(large_ds_dcpl_id, tv_ptr->large_rank, tv_ptr->chunk_dims);
         VRFY((ret != FAIL), "H5Pset_chunk() large_ds_dcpl_id succeeded");
     }
 
     /* create the small dataset */
-    small_dataset = H5Dcreate2(fid, "small_dataset", dset_type,
-                               file_small_ds_sid, H5P_DEFAULT,
-                               small_ds_dcpl_id, H5P_DEFAULT);
+    tv_ptr->small_dataset = H5Dcreate2(tv_ptr->fid, "small_dataset", tv_ptr->dset_type,
+                                       tv_ptr->file_small_ds_sid_0, H5P_DEFAULT,
+                                       small_ds_dcpl_id, H5P_DEFAULT);
     VRFY((ret != FAIL), "H5Dcreate2() small_dataset succeeded");
 
     /* create the large dataset */
-    large_dataset = H5Dcreate2(fid, "large_dataset", dset_type,
-                               file_large_ds_sid, H5P_DEFAULT,
-                               large_ds_dcpl_id, H5P_DEFAULT);
+    tv_ptr->large_dataset = H5Dcreate2(tv_ptr->fid, "large_dataset", tv_ptr->dset_type,
+                                       tv_ptr->file_large_ds_sid_0, H5P_DEFAULT,
+                                       large_ds_dcpl_id, H5P_DEFAULT);
     VRFY((ret != FAIL), "H5Dcreate2() large_dataset succeeded");
 
 
-
     /* setup xfer property list */
-    xfer_plist = H5Pcreate(H5P_DATASET_XFER);
-    VRFY((xfer_plist >= 0), "H5Pcreate(H5P_DATASET_XFER) succeeded");
+    tv_ptr->xfer_plist = H5Pcreate(H5P_DATASET_XFER);
+    VRFY((tv_ptr->xfer_plist >= 0), "H5Pcreate(H5P_DATASET_XFER) succeeded");
 
     if(use_collective_io) {
-        ret = H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
+        ret = H5Pset_dxpl_mpio(tv_ptr->xfer_plist, H5FD_MPIO_COLLECTIVE);
         VRFY((ret >= 0), "H5Pset_dxpl_mpio succeeded");
     }
 
     /* setup selection to write initial data to the small and large data sets */
-    start[0] = (hsize_t)mpi_rank;
-    stride[0] = (hsize_t)(2 * (mpi_size + 1));
-    count[0] = 1;
-    block[0] = 1;
+    tv_ptr->start[0] = (hsize_t)(tv_ptr->mpi_rank);
+    tv_ptr->stride[0] = (hsize_t)(2 * (tv_ptr->mpi_size + 1));
+    tv_ptr->count[0] = 1;
+    tv_ptr->block[0] = 1;
 
-    for ( i = 1; i < large_rank; i++ ) {
+    for ( i = 1; i < tv_ptr->large_rank; i++ ) {
 
-        start[i] = 0;
-        stride[i] = (hsize_t)(2 * edge_size);
-        count[i] = 1;
-        block[i] = (hsize_t)edge_size;
+        tv_ptr->start[i] = 0;
+        tv_ptr->stride[i] = (hsize_t)(2 * tv_ptr->edge_size);
+        tv_ptr->count[i] = 1;
+        tv_ptr->block[i] = (hsize_t)(tv_ptr->edge_size);
     }
 
     /* setup selections for writing initial data to the small data set */
-    ret = H5Sselect_hyperslab(mem_small_ds_sid,
+    ret = H5Sselect_hyperslab(tv_ptr->mem_small_ds_sid,
                               H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
+                              tv_ptr->start,
+                              tv_ptr->stride,
+                              tv_ptr->count,
+                              tv_ptr->block);
     VRFY((ret >= 0), "H5Sselect_hyperslab(mem_small_ds_sid, set) suceeded");
 
-    ret = H5Sselect_hyperslab(file_small_ds_sid,
+    ret = H5Sselect_hyperslab(tv_ptr->file_small_ds_sid_0,
                               H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
-    VRFY((ret >= 0), "H5Sselect_hyperslab(file_small_ds_sid, set) suceeded");
+                              tv_ptr->start,
+                              tv_ptr->stride,
+                              tv_ptr->count,
+                              tv_ptr->block);
+    VRFY((ret >= 0), "H5Sselect_hyperslab(file_small_ds_sid_0, set) suceeded");
 
     if ( MAINPROCESS ) { /* add an additional slice to the selections */
 
-        start[0] = (hsize_t)mpi_size;
+        tv_ptr->start[0] = (hsize_t)(tv_ptr->mpi_size);
 
-        ret = H5Sselect_hyperslab(mem_small_ds_sid,
+        ret = H5Sselect_hyperslab(tv_ptr->mem_small_ds_sid,
                                   H5S_SELECT_OR,
-                                  start,
-                                  stride,
-                                  count,
-                                  block);
+                                  tv_ptr->start,
+                                  tv_ptr->stride,
+                                  tv_ptr->count,
+                                  tv_ptr->block);
         VRFY((ret>= 0), "H5Sselect_hyperslab(mem_small_ds_sid, or) suceeded");
 
-        ret = H5Sselect_hyperslab(file_small_ds_sid,
+        ret = H5Sselect_hyperslab(tv_ptr->file_small_ds_sid_0,
                                   H5S_SELECT_OR,
-                                  start,
-                                  stride,
-                                  count,
-                                  block);
-        VRFY((ret>= 0), "H5Sselect_hyperslab(file_small_ds_sid, or) suceeded");
+                                  tv_ptr->start,
+                                  tv_ptr->stride,
+                                  tv_ptr->count,
+                                  tv_ptr->block);
+        VRFY((ret>= 0), "H5Sselect_hyperslab(file_small_ds_sid_0, or) suceeded");
     }
 
 
     /* write the initial value of the small data set to file */
-    ret = H5Dwrite(small_dataset, dset_type, mem_small_ds_sid, file_small_ds_sid,
-                   xfer_plist, small_ds_buf_0);
+    ret = H5Dwrite(tv_ptr->small_dataset, tv_ptr->dset_type, tv_ptr->mem_small_ds_sid, 
+                   tv_ptr->file_small_ds_sid_0, tv_ptr->xfer_plist, tv_ptr->small_ds_buf_0);
 
     VRFY((ret >= 0), "H5Dwrite() small_dataset initial write succeeded");
 
@@ -511,24 +529,24 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
 
     /* read the small data set back to verify that it contains the 
      * expected data.  Note that each process reads in the entire 
-     * data set.
+     * data set and verifies it.
      */
-    ret = H5Dread(small_dataset,
+    ret = H5Dread(tv_ptr->small_dataset,
                   H5T_NATIVE_UINT32,
-                  full_mem_small_ds_sid,
-                  full_file_small_ds_sid,
-                  xfer_plist,
-                  small_ds_buf_1);
+                  tv_ptr->full_mem_small_ds_sid,
+                  tv_ptr->full_file_small_ds_sid,
+                  tv_ptr->xfer_plist,
+                  tv_ptr->small_ds_buf_1);
     VRFY((ret >= 0), "H5Dread() small_dataset initial read succeeded");
 
 
     /* verify that the correct data was written to the small data set */
     expected_value = 0;
     mis_match = FALSE;
-    ptr_1 = small_ds_buf_1;
+    ptr_1 = tv_ptr->small_ds_buf_1;
 
     i = 0;
-    for ( i = 0; i < (int)small_ds_size; i++ ) {
+    for ( i = 0; i < (int)(tv_ptr->small_ds_size); i++ ) {
 
         if ( *ptr_1 != expected_value ) {
 
@@ -540,72 +558,72 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
     VRFY( (mis_match == FALSE), "small ds init data good.");
 
 
-
     /* setup selections for writing initial data to the large data set */
 
-    start[0] = (hsize_t)mpi_rank;
+    tv_ptr->start[0] = (hsize_t)(tv_ptr->mpi_rank);
 
-    ret = H5Sselect_hyperslab(mem_large_ds_sid,
+    ret = H5Sselect_hyperslab(tv_ptr->mem_large_ds_sid,
                               H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
+                              tv_ptr->start,
+                              tv_ptr->stride,
+                              tv_ptr->count,
+                              tv_ptr->block);
     VRFY((ret >= 0), "H5Sselect_hyperslab(mem_large_ds_sid, set) suceeded");
 
-    ret = H5Sselect_hyperslab(file_large_ds_sid,
+    ret = H5Sselect_hyperslab(tv_ptr->file_large_ds_sid_0,
                               H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
-    VRFY((ret >= 0), "H5Sselect_hyperslab(file_large_ds_sid, set) suceeded");
+                              tv_ptr->start,
+                              tv_ptr->stride,
+                              tv_ptr->count,
+                              tv_ptr->block);
+    VRFY((ret >= 0), "H5Sselect_hyperslab(file_large_ds_sid_0, set) suceeded");
  
     /* In passing, setup the process slice data spaces as well */
 
-    ret = H5Sselect_hyperslab(mem_large_ds_process_slice_sid,
+    ret = H5Sselect_hyperslab(tv_ptr->mem_large_ds_process_slice_sid,
                               H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
+                              tv_ptr->start,
+                              tv_ptr->stride,
+                              tv_ptr->count,
+                              tv_ptr->block);
     VRFY((ret >= 0), 
          "H5Sselect_hyperslab(mem_large_ds_process_slice_sid, set) suceeded");
 
-    ret = H5Sselect_hyperslab(file_large_ds_process_slice_sid,
+    ret = H5Sselect_hyperslab(tv_ptr->file_large_ds_process_slice_sid,
                               H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
+                              tv_ptr->start,
+                              tv_ptr->stride,
+                              tv_ptr->count,
+                              tv_ptr->block);
     VRFY((ret >= 0), 
          "H5Sselect_hyperslab(file_large_ds_process_slice_sid, set) suceeded");
 
     if ( MAINPROCESS ) { /* add an additional slice to the selections */
 
-        start[0] = (hsize_t)mpi_size;
+        tv_ptr->start[0] = (hsize_t)(tv_ptr->mpi_size);
 
-        ret = H5Sselect_hyperslab(mem_large_ds_sid,
+        ret = H5Sselect_hyperslab(tv_ptr->mem_large_ds_sid,
                                   H5S_SELECT_OR,
-                                  start,
-                                  stride,
-                                  count,
-                                  block);
+                                  tv_ptr->start,
+                                  tv_ptr->stride,
+                                  tv_ptr->count,
+                                  tv_ptr->block);
         VRFY((ret>= 0), "H5Sselect_hyperslab(mem_large_ds_sid, or) suceeded");
 
-        ret = H5Sselect_hyperslab(file_large_ds_sid,
+        ret = H5Sselect_hyperslab(tv_ptr->file_large_ds_sid_0,
                                   H5S_SELECT_OR,
-                                  start,
-                                  stride,
-                                  count,
-                                  block);
-        VRFY((ret>= 0), "H5Sselect_hyperslab(file_large_ds_sid, or) suceeded");
+                                  tv_ptr->start,
+                                  tv_ptr->stride,
+                                  tv_ptr->count,
+                                  tv_ptr->block);
+        VRFY((ret>= 0), "H5Sselect_hyperslab(file_large_ds_sid_0, or) suceeded");
     }
 
 
     /* write the initial value of the large data set to file */
-    ret = H5Dwrite(large_dataset, dset_type, mem_large_ds_sid, file_large_ds_sid,
-                   xfer_plist, large_ds_buf_0);
+    ret = H5Dwrite(tv_ptr->large_dataset, tv_ptr->dset_type, 
+                   tv_ptr->mem_large_ds_sid, tv_ptr->file_large_ds_sid_0, 
+                   tv_ptr->xfer_plist, tv_ptr->large_ds_buf_0);
     if ( ret < 0 ) H5Eprint2(H5E_DEFAULT, stderr);
     VRFY((ret >= 0), "H5Dwrite() large_dataset initial write succeeded");
 
@@ -618,26 +636,26 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
     }
 
 
-    /* read the small data set back to verify that it contains the 
+    /* read the large data set back to verify that it contains the 
      * expected data.  Note that each process reads in the entire 
      * data set.
      */
-    ret = H5Dread(large_dataset,
+    ret = H5Dread(tv_ptr->large_dataset,
                   H5T_NATIVE_UINT32,
-                  full_mem_large_ds_sid,
-                  full_file_large_ds_sid,
-                  xfer_plist,
-                  large_ds_buf_1);
+                  tv_ptr->full_mem_large_ds_sid,
+                  tv_ptr->full_file_large_ds_sid,
+                  tv_ptr->xfer_plist,
+                  tv_ptr->large_ds_buf_1);
     VRFY((ret >= 0), "H5Dread() large_dataset initial read succeeded");
 
 
     /* verify that the correct data was written to the large data set */
     expected_value = 0;
     mis_match = FALSE;
-    ptr_1 = large_ds_buf_1;
+    ptr_1 = tv_ptr->large_ds_buf_1;
 
     i = 0;
-    for ( i = 0; i < (int)large_ds_size; i++ ) {
+    for ( i = 0; i < (int)(tv_ptr->large_ds_size); i++ ) {
 
         if ( *ptr_1 != expected_value ) {
 
@@ -657,18 +675,170 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
         VRFY((mrc==MPI_SUCCESS), "Sync initial values check");
     }
 
+    return;
+
+} /* hs_dr_pio_test__setup() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	hs_dr_pio_test__takedown()
+ *
+ * Purpose:	Do takedown after tests of I/O to/from hyperslab selections 
+ *		of different rank in the parallel case.
+ *
+ * Return:	void
+ *
+ * Programmer:	JRM -- 9/18/09
+ *
+ * Modifications:
+ *
+ *		None.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define HS_DR_PIO_TEST__TAKEDOWN__DEBUG 0
+
+static void
+hs_dr_pio_test__takedown( struct hs_dr_pio_test_vars_t * tv_ptr)
+{
+#if HS_DR_PIO_TEST__TAKEDOWN__DEBUG 
+    const char *fcnName = "hs_dr_pio_test__takedown()";
+#endif /* HS_DR_PIO_TEST__TAKEDOWN__DEBUG */
+    int		mpi_rank;       /* needed by the VRFY macro */
+    herr_t	ret;		/* Generic return value */
+
+    /* initialize the local copy of mpi_rank */
+    mpi_rank = tv_ptr->mpi_rank;
+
+    /* Close property lists */
+    if ( tv_ptr->xfer_plist != H5P_DEFAULT ) {
+        ret = H5Pclose(tv_ptr->xfer_plist);
+        VRFY((ret != FAIL), "H5Pclose(xfer_plist) succeeded");
+    }
+
+    /* Close dataspaces */
+    ret = H5Sclose(tv_ptr->full_mem_small_ds_sid);
+    VRFY((ret != FAIL), "H5Sclose(full_mem_small_ds_sid) succeeded");
+
+    ret = H5Sclose(tv_ptr->full_file_small_ds_sid);
+    VRFY((ret != FAIL), "H5Sclose(full_file_small_ds_sid) succeeded");
+
+    ret = H5Sclose(tv_ptr->mem_small_ds_sid);
+    VRFY((ret != FAIL), "H5Sclose(mem_small_ds_sid) succeeded");
+
+    ret = H5Sclose(tv_ptr->file_small_ds_sid_0);
+    VRFY((ret != FAIL), "H5Sclose(file_small_ds_sid_0) succeeded");
+
+    ret = H5Sclose(tv_ptr->file_small_ds_sid_1);
+    VRFY((ret != FAIL), "H5Sclose(file_small_ds_sid_1) succeeded");
+
+    ret = H5Sclose(tv_ptr->small_ds_slice_sid);
+    VRFY((ret != FAIL), "H5Sclose(small_ds_slice_sid) succeeded");
+
+    ret = H5Sclose(tv_ptr->full_mem_large_ds_sid);
+    VRFY((ret != FAIL), "H5Sclose(full_mem_large_ds_sid) succeeded");
+
+    ret = H5Sclose(tv_ptr->full_file_large_ds_sid);
+    VRFY((ret != FAIL), "H5Sclose(full_file_large_ds_sid) succeeded");
+
+    ret = H5Sclose(tv_ptr->mem_large_ds_sid);
+    VRFY((ret != FAIL), "H5Sclose(mem_large_ds_sid) succeeded");
+
+    ret = H5Sclose(tv_ptr->file_large_ds_sid_0);
+    VRFY((ret != FAIL), "H5Sclose(file_large_ds_sid_0) succeeded");
+
+    ret = H5Sclose(tv_ptr->file_large_ds_sid_1);
+    VRFY((ret != FAIL), "H5Sclose(file_large_ds_sid_1) succeeded");
+
+    ret = H5Sclose(tv_ptr->mem_large_ds_process_slice_sid);
+    VRFY((ret != FAIL), "H5Sclose(mem_large_ds_process_slice_sid) succeeded");
+
+    ret = H5Sclose(tv_ptr->file_large_ds_process_slice_sid);
+    VRFY((ret != FAIL), "H5Sclose(file_large_ds_process_slice_sid) succeeded");
+
+    ret = H5Sclose(tv_ptr->large_ds_slice_sid);
+    VRFY((ret != FAIL), "H5Sclose(large_ds_slice_sid) succeeded");
+
+    /* Close Datasets */
+    ret = H5Dclose(tv_ptr->small_dataset);
+    VRFY((ret != FAIL), "H5Dclose(small_dataset) succeeded");
+
+    ret = H5Dclose(tv_ptr->large_dataset);
+    VRFY((ret != FAIL), "H5Dclose(large_dataset) succeeded");
+
+    /* close the file collectively */
+    MESG("about to close file.");
+    ret = H5Fclose(tv_ptr->fid);
+    VRFY((ret != FAIL), "file close succeeded");
+
+    /* Free memory buffers */
+
+    if ( tv_ptr->small_ds_buf_0 != NULL ) HDfree(tv_ptr->small_ds_buf_0);
+    if ( tv_ptr->small_ds_buf_1 != NULL ) HDfree(tv_ptr->small_ds_buf_1);
+    if ( tv_ptr->small_ds_buf_2 != NULL ) HDfree(tv_ptr->small_ds_buf_2);
+    if ( tv_ptr->small_ds_slice_buf != NULL ) HDfree(tv_ptr->small_ds_slice_buf);
+
+    if ( tv_ptr->large_ds_buf_0 != NULL ) HDfree(tv_ptr->large_ds_buf_0);
+    if ( tv_ptr->large_ds_buf_1 != NULL ) HDfree(tv_ptr->large_ds_buf_1);
+    if ( tv_ptr->large_ds_buf_2 != NULL ) HDfree(tv_ptr->large_ds_buf_2);
+    if ( tv_ptr->large_ds_slice_buf != NULL ) HDfree(tv_ptr->large_ds_slice_buf);
+
+    return;
+
+} /* hs_dr_pio_test__takedown() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	contig_hs_dr_pio_test__d2m_l2s()
+ *
+ * Purpose:	Part one of a series of tests of I/O to/from hyperslab 
+ *		selections of different rank in the parallel.
+ *
+ *		Verify that we can read from disk correctly using 
+ *		selections of different rank that H5S_select_shape_same() 
+ *		views as being of the same shape.
+ *
+ *              In this function, we test this by reading small_rank - 1 
+ *		slices from the on disk large cube, and verifying that the 
+ *		data read is correct.  Verify that H5S_select_shape_same() 
+ *		returns true on the memory and file selections.
+ *
+ * Return:	void
+ *
+ * Programmer:	JRM -- 9/10/11
+ *
+ * Modifications:
+ *
+ *		None.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define CONTIG_HS_DR_PIO_TEST__D2M_L2S__DEBUG 0
+
+static void
+contig_hs_dr_pio_test__d2m_l2s(struct hs_dr_pio_test_vars_t * tv_ptr)
+{
+#if CONTIG_HS_DR_PIO_TEST__D2M_L2S__DEBUG 
+    const char *fcnName = "contig_hs_dr_pio_test__run_test()";
+#endif /* CONTIG_HS_DR_PIO_TEST__D2M_L2S__DEBUG */
+    hbool_t	mis_match = FALSE;
+    int		i, j, k, l;
+    size_t	n;
+    int		mpi_rank; /* needed by the VRFY macro */
+    uint32_t	expected_value;
+    uint32_t  * ptr_1;
+    htri_t      check;          /* Shape comparison return value */
+    herr_t	ret;		/* Generic return value */
+
+    /* initialize the local copy of mpi_rank */
+    mpi_rank = tv_ptr->mpi_rank;
 
-    /* first, verify that we can read from disk correctly using selections
-     * of different rank that H5S_select_shape_same() views as being of the
-     * same shape.
-     *
-     * Start by reading small_rank-D - 1 slice from the on disk large cube, 
-     * and verifying that the data read is correct.  Verify that 
-     * H5S_select_shape_same() returns true on the memory and file selections.
-     */
 
     /* We have already done a H5Sselect_all() on the data space 
-     * small_ds_slice_sid, so no need to call H5Sselect_all() again.
+     * small_ds_slice_sid in the initialization phase, so no need to 
+     * call H5Sselect_all() again.
      */
 
     /* set up start, stride, count, and block -- note that we will
@@ -676,27 +846,28 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
      */
     for ( i = 0; i < PAR_SS_DR_MAX_RANK; i++ ) {
 
-        start[i] = 0;
-        stride[i] = (hsize_t)(2 * edge_size);
-        count[i] = 1;
-        if ( (PAR_SS_DR_MAX_RANK - i) > (small_rank - 1) ) {
+        tv_ptr->start[i] = 0;
+        tv_ptr->stride[i] = (hsize_t)(2 * tv_ptr->edge_size);
+        tv_ptr->count[i] = 1;
+        if ( (PAR_SS_DR_MAX_RANK - i) > (tv_ptr->small_rank - 1) ) {
 
-            block[i] = 1;
+            tv_ptr->block[i] = 1;
 
         } else {
 
-            block[i] = (hsize_t)edge_size;
+            tv_ptr->block[i] = (hsize_t)(tv_ptr->edge_size);
         }
     }
 
     /* zero out the buffer we will be reading into */
-    HDmemset(small_ds_slice_buf, 0, sizeof(uint32_t) * small_ds_slice_size);
+    HDmemset(tv_ptr->small_ds_slice_buf, 0, sizeof(uint32_t) * tv_ptr->small_ds_slice_size);
 
-#if CONTIG_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
+#if CONTIG_HS_DR_PIO_TEST__D2M_L2S__DEBUG 
     HDfprintf(stdout, 
               "%s reading slices from big cube on disk into small cube slice.\n",
               fcnName);
-#endif 
+#endif /* CONTIG_HS_DR_PIO_TEST__D2M_L2S__DEBUG */
+
     /* in serial versions of this test, we loop through all the dimensions
      * of the large data set.  However, in the parallel version, each 
      * process only works with that slice of the large cube indicated
@@ -704,9 +875,9 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
      * mpi_rank, and don't itterate over it.
      */
 
-    if ( PAR_SS_DR_MAX_RANK - large_rank == 0 ) {
+    if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 0 ) {
 
-        i = mpi_rank;
+        i = tv_ptr->mpi_rank;
 
     } else {
 
@@ -719,9 +890,9 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
      * test.
      */
 
-    if ( PAR_SS_DR_MAX_RANK - large_rank == 1 ) {
+    if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 1 ) {
 
-        j = mpi_rank;
+        j = tv_ptr->mpi_rank;
 
     } else {
 
@@ -729,9 +900,9 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
     }
 
     do {
-        if ( PAR_SS_DR_MAX_RANK - large_rank == 2 ) {
+        if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 2 ) {
 
-            k = mpi_rank;
+            k = tv_ptr->mpi_rank;
 
         } else {
 
@@ -751,145 +922,213 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
 
             l = 0;
             do {
-                /* we know that small_rank - 1 >= 1 and that 
-                 * large_rank > small_rank by the assertions at the head 
-                 * of this function.  Thus no need for another inner loop.
-                 */
-                start[0] = (hsize_t)i;
-                start[1] = (hsize_t)j;
-                start[2] = (hsize_t)k;
-                start[3] = (hsize_t)l;
-                start[4] = 0;
-
-                ret = H5Sselect_hyperslab(file_large_ds_sid,
-                                          H5S_SELECT_SET,
-                                          start_ptr,
-                                          stride_ptr,
-                                          count_ptr,
-                                          block_ptr);
-                VRFY((ret != FAIL), 
-                     "H5Sselect_hyperslab(file_large_cube_sid) succeeded");
-
-
-                /* verify that H5S_select_shape_same() reports the two
-                 * selections as having the same shape.
-                 */
-                check = H5S_select_shape_same_test(small_ds_slice_sid,
-                                                   file_large_ds_sid);
-                VRFY((check == TRUE), "H5S_select_shape_same_test passed");
-
-
-                /* Read selection from disk */
-#if CONTIG_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
-                HDfprintf(stdout, "%s:%d: start = %d %d %d %d %d.\n", 
-                          fcnName, (int)mpi_rank, 
-                          (int)start[0], (int)start[1], (int)start[2], 
-                          (int)start[3], (int)start[4]);
-                HDfprintf(stdout, "%s slice/file extent dims = %d/%d.\n",
-                          fcnName,
-                          H5Sget_simple_extent_ndims(small_ds_slice_sid),
-                          H5Sget_simple_extent_ndims(file_large_ds_sid));
-#endif 
-                ret = H5Dread(large_dataset,
-                              H5T_NATIVE_UINT32,
-                              small_ds_slice_sid,
-                              file_large_ds_sid,
-                              xfer_plist,
-                              small_ds_slice_buf);
-                VRFY((ret >= 0), "H5Dread() slice from large ds succeeded.");
+                if ( (tv_ptr->skips)++ < tv_ptr->max_skips ) { /* skip the test */
+
+ 		    (tv_ptr->tests_skipped)++;
 
+                } else { /* run the test */
 
-                /* verify that expected data is retrieved */
+                    tv_ptr->skips = 0; /* reset the skips counter */
 
-                mis_match = FALSE;
-                ptr_1 = small_ds_slice_buf;
-                expected_value = (uint32_t)(
-			(i * edge_size * edge_size * edge_size * edge_size) +
-                        (j * edge_size * edge_size * edge_size) +
-                        (k * edge_size * edge_size) +
-                        (l * edge_size));
+                    /* we know that small_rank - 1 >= 1 and that 
+                     * large_rank > small_rank by the assertions at the head 
+                     * of this function.  Thus no need for another inner loop.
+                     */
+                    tv_ptr->start[0] = (hsize_t)i;
+                    tv_ptr->start[1] = (hsize_t)j;
+                    tv_ptr->start[2] = (hsize_t)k;
+                    tv_ptr->start[3] = (hsize_t)l;
+                    tv_ptr->start[4] = 0;
+
+                    ret = H5Sselect_hyperslab(tv_ptr->file_large_ds_sid_0,
+                                              H5S_SELECT_SET,
+                                              tv_ptr->start_ptr,
+                                              tv_ptr->stride_ptr,
+                                              tv_ptr->count_ptr,
+                                              tv_ptr->block_ptr);
+                    VRFY((ret != FAIL), 
+                         "H5Sselect_hyperslab(file_large_cube_sid) succeeded");
+
+
+                    /* verify that H5S_select_shape_same() reports the two
+                     * selections as having the same shape.
+                     */
+                    check = H5S_select_shape_same_test(tv_ptr->small_ds_slice_sid,
+                                                       tv_ptr->file_large_ds_sid_0);
+                    VRFY((check == TRUE), "H5S_select_shape_same_test passed");
+
+
+                    /* Read selection from disk */
+#if CONTIG_HS_DR_PIO_TEST__D2M_L2S__DEBUG 
+                    HDfprintf(stdout, "%s:%d: start = %d %d %d %d %d.\n", 
+                              fcnName, (int)(tv_ptr->mpi_rank), 
+                              (int)(tv_ptr->start[0]), (int)(tv_ptr->start[1]), 
+                              (int)(tv_ptr->start[2]), (int)(tv_ptr->start[3]), 
+                              (int)(tv_ptr->start[4]));
+                    HDfprintf(stdout, "%s slice/file extent dims = %d/%d.\n",
+                              fcnName,
+                              H5Sget_simple_extent_ndims(tv_ptr->small_ds_slice_sid),
+                              H5Sget_simple_extent_ndims(tv_ptr->file_large_ds_sid_0));
+#endif /* CONTIG_HS_DR_PIO_TEST__D2M_L2S__DEBUG */
+                    ret = H5Dread(tv_ptr->large_dataset,
+                                  H5T_NATIVE_UINT32,
+                                  tv_ptr->small_ds_slice_sid,
+                                  tv_ptr->file_large_ds_sid_0,
+                                  tv_ptr->xfer_plist,
+                                  tv_ptr->small_ds_slice_buf);
+                    VRFY((ret >= 0), "H5Dread() slice from large ds succeeded.");
+
+
+                    /* verify that expected data is retrieved */
+
+                    mis_match = FALSE;
+                    ptr_1 = tv_ptr->small_ds_slice_buf;
+                    expected_value = (uint32_t)(
+                        (i * tv_ptr->edge_size * tv_ptr->edge_size * 
+                             tv_ptr->edge_size * tv_ptr->edge_size) +
+                        (j * tv_ptr->edge_size * tv_ptr->edge_size * tv_ptr->edge_size) +
+                        (k * tv_ptr->edge_size * tv_ptr->edge_size) +
+                        (l * tv_ptr->edge_size));
+
+                    for ( n = 0; n < tv_ptr->small_ds_slice_size; n++ ) {
+
+                        if ( *ptr_1 != expected_value ) {
 
-                for ( n = 0; n < small_ds_slice_size; n++ ) {
+                            mis_match = TRUE;
+                        }
 
-                    if ( *ptr_1 != expected_value ) {
+                        *ptr_1 = 0; /* zero data for next use */
 
-                        mis_match = TRUE;
+                        ptr_1++;
+                        expected_value++;
                     }
 
-                    *ptr_1 = 0; /* zero data for next use */
+                    VRFY((mis_match == FALSE), 
+                         "small slice read from large ds data good.");
 
-                    ptr_1++;
-                    expected_value++;
+ 		    (tv_ptr->tests_run)++;
                 }
 
-                VRFY((mis_match == FALSE), 
-                     "small slice read from large ds data good.");
                 l++;
 
-            } while ( ( large_rank > 2 ) &&
-                      ( (small_rank - 1) <= 1 ) &&
-                      ( l < edge_size ) );
+                (tv_ptr->total_tests)++;
+
+            } while ( ( tv_ptr->large_rank > 2 ) &&
+                      ( (tv_ptr->small_rank - 1) <= 1 ) &&
+                      ( l < tv_ptr->edge_size ) );
             k++;
-        } while ( ( large_rank > 3 ) &&
-                  ( (small_rank - 1) <= 2 ) &&
-                  ( k < edge_size ) );
+        } while ( ( tv_ptr->large_rank > 3 ) &&
+                  ( (tv_ptr->small_rank - 1) <= 2 ) &&
+                  ( k < tv_ptr->edge_size ) );
         j++;
-    } while ( ( large_rank > 4 ) &&
-              ( (small_rank - 1) <= 3 ) &&
-              ( j < edge_size ) );
+    } while ( ( tv_ptr->large_rank > 4 ) &&
+              ( (tv_ptr->small_rank - 1) <= 3 ) &&
+              ( j < tv_ptr->edge_size ) );
 
+    return;
 
-    /* similarly, read slices of the on disk small data set into slices 
+} /* contig_hs_dr_pio_test__d2m_l2s() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	contig_hs_dr_pio_test__d2m_s2l()
+ *
+ * Purpose:	Part two of a series of tests of I/O to/from hyperslab 
+ *		selections of different rank in the parallel.
+ *
+ *		Verify that we can read from disk correctly using 
+ *		selections of different rank that H5S_select_shape_same() 
+ *		views as being of the same shape.
+ *
+ *		In this function, we test this by reading slices of the 
+ *		on disk small data set into slices through the in memory 
+ *		large data set, and verify that the correct data (and 
+ *		only the correct data) is read.
+ *
+ * Return:	void
+ *
+ * Programmer:	JRM -- 8/10/11
+ *
+ * Modifications:
+ *
+ *		None.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define CONTIG_HS_DR_PIO_TEST__D2M_S2L__DEBUG 0
+
+static void
+contig_hs_dr_pio_test__d2m_s2l(struct hs_dr_pio_test_vars_t * tv_ptr)
+{
+#if CONTIG_HS_DR_PIO_TEST__D2M_S2L__DEBUG 
+    const char *fcnName = "contig_hs_dr_pio_test__d2m_s2l()";
+#endif /* CONTIG_HS_DR_PIO_TEST__D2M_S2L__DEBUG */
+    hbool_t	mis_match = FALSE;
+    int		i, j, k, l;
+    size_t	n;
+    int		mpi_rank; /* needed by the VRFY macro */
+    size_t      start_index;
+    size_t      stop_index;
+    uint32_t	expected_value;
+    uint32_t  * ptr_1;
+    htri_t      check;          /* Shape comparison return value */
+    herr_t	ret;		/* Generic return value */
+
+    /* initialize the local copy of mpi_rank */
+    mpi_rank = tv_ptr->mpi_rank;
+
+    /* Read slices of the on disk small data set into slices 
      * through the in memory large data set, and verify that the correct 
      * data (and only the correct data) is read.
      */
 
-    start[0] = (hsize_t)mpi_rank;
-    stride[0] = (hsize_t)(2 * (mpi_size + 1));
-    count[0] = 1;
-    block[0] = 1;
+    tv_ptr->start[0] = (hsize_t)(tv_ptr->mpi_rank);
+    tv_ptr->stride[0] = (hsize_t)(2 * (tv_ptr->mpi_size + 1));
+    tv_ptr->count[0] = 1;
+    tv_ptr->block[0] = 1;
 
-    for ( i = 1; i < large_rank; i++ ) {
+    for ( i = 1; i < tv_ptr->large_rank; i++ ) {
 
-        start[i] = 0;
-        stride[i] = (hsize_t)(2 * edge_size);
-        count[i] = 1;
-        block[i] = (hsize_t)edge_size;
+        tv_ptr->start[i] = 0;
+        tv_ptr->stride[i] = (hsize_t)(2 * tv_ptr->edge_size);
+        tv_ptr->count[i] = 1;
+        tv_ptr->block[i] = (hsize_t)(tv_ptr->edge_size);
     }
 
-    ret = H5Sselect_hyperslab(file_small_ds_sid,
+    ret = H5Sselect_hyperslab(tv_ptr->file_small_ds_sid_0,
                               H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
-    VRFY((ret >= 0), "H5Sselect_hyperslab(file_small_ds_sid, set) suceeded");
+                              tv_ptr->start,
+                              tv_ptr->stride,
+                              tv_ptr->count,
+                              tv_ptr->block);
+    VRFY((ret >= 0), "H5Sselect_hyperslab(file_small_ds_sid_0, set) suceeded");
 
 
-#if CONTIG_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
+#if CONTIG_HS_DR_PIO_TEST__D2M_S2L__DEBUG 
     HDfprintf(stdout, 
       "%s reading slices of on disk small data set into slices of big data set.\n",
               fcnName);
-#endif 
+#endif /* CONTIG_HS_DR_PIO_TEST__D2M_S2L__DEBUG */
 
     /* zero out the in memory large ds */
-    HDmemset(large_ds_buf_1, 0, sizeof(uint32_t) * large_ds_size);
+    HDmemset(tv_ptr->large_ds_buf_1, 0, sizeof(uint32_t) * tv_ptr->large_ds_size);
 
     /* set up start, stride, count, and block -- note that we will
      * change start[] so as to read slices of the large cube.
      */
     for ( i = 0; i < PAR_SS_DR_MAX_RANK; i++ ) {
 
-        start[i] = 0;
-        stride[i] = (hsize_t)(2 * edge_size);
-        count[i] = 1;
-        if ( (PAR_SS_DR_MAX_RANK - i) > (small_rank - 1) ) {
+        tv_ptr->start[i] = 0;
+        tv_ptr->stride[i] = (hsize_t)(2 * tv_ptr->edge_size);
+        tv_ptr->count[i] = 1;
+        if ( (PAR_SS_DR_MAX_RANK - i) > (tv_ptr->small_rank - 1) ) {
 
-            block[i] = 1;
+            tv_ptr->block[i] = 1;
 
         } else {
 
-            block[i] = (hsize_t)edge_size;
+            tv_ptr->block[i] = (hsize_t)(tv_ptr->edge_size);
         }
     }
 
@@ -904,9 +1143,9 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
      */
 
 
-    if ( PAR_SS_DR_MAX_RANK - large_rank == 0 ) {
+    if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 0 ) {
 
-        i = mpi_rank;
+        i = tv_ptr->mpi_rank;
 
     } else {
 
@@ -919,9 +1158,9 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
      * test.
      */
 
-    if ( PAR_SS_DR_MAX_RANK - large_rank == 1 ) {
+    if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 1 ) {
 
-        j = mpi_rank;
+        j = tv_ptr->mpi_rank;
 
     } else {
 
@@ -929,9 +1168,9 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
     }
 
     do {
-        if ( PAR_SS_DR_MAX_RANK - large_rank == 2 ) {
+        if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 2 ) {
 
-            k = mpi_rank;
+            k = tv_ptr->mpi_rank;
 
         } else {
 
@@ -951,147 +1190,218 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
 
             l = 0;
             do {
-                /* we know that small_rank >= 1 and that large_rank > small_rank
-                 * by the assertions at the head of this function.  Thus no
-                 * need for another inner loop.
-                 */
-                start[0] = (hsize_t)i;
-                start[1] = (hsize_t)j;
-                start[2] = (hsize_t)k;
-                start[3] = (hsize_t)l;
-                start[4] = 0;
-
-                ret = H5Sselect_hyperslab(mem_large_ds_sid,
-                                          H5S_SELECT_SET,
-                                          start_ptr,
-                                          stride_ptr,
-                                          count_ptr,
-                                          block_ptr);
-                VRFY((ret != FAIL), 
-                     "H5Sselect_hyperslab(mem_large_ds_sid) succeeded");
-
-
-                /* verify that H5S_select_shape_same() reports the two
-                 * selections as having the same shape.
-                 */
-                check = H5S_select_shape_same_test(file_small_ds_sid,
-                                                   mem_large_ds_sid);
-                VRFY((check == TRUE), "H5S_select_shape_same_test passed");
-
-
-                /* Read selection from disk */
-#if CONTIG_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
-                HDfprintf(stdout, "%s:%d: start = %d %d %d %d %d.\n", 
-                          fcnName, (int)mpi_rank, 
-                          (int)start[0], (int)start[1], (int)start[2], 
-                          (int)start[3], (int)start[4]);
-                HDfprintf(stdout, "%s:%d: mem/file extent dims = %d/%d.\n",
-                          fcnName, mpi_rank,
-                          H5Sget_simple_extent_ndims(mem_large_ds_sid),
-                          H5Sget_simple_extent_ndims(file_small_ds_sid));
-#endif 
-                ret = H5Dread(small_dataset,
-                              H5T_NATIVE_UINT32,
-                              mem_large_ds_sid,
-                              file_small_ds_sid,
-                              xfer_plist,
-                              large_ds_buf_1);
-                VRFY((ret >= 0), "H5Dread() slice from small ds succeeded.");
-
-                /* verify that the expected data and only the
-                 * expected data was read.
-                 */
-                ptr_1 = large_ds_buf_1;
-                expected_value = (uint32_t)((size_t)mpi_rank * small_ds_slice_size);
-                start_index = (size_t)(
-                        (i * edge_size * edge_size * edge_size * edge_size) +
-                        (j * edge_size * edge_size * edge_size) +
-                        (k * edge_size * edge_size) +
-                        (l * edge_size));
-                stop_index = start_index + small_ds_slice_size - 1;
-
-                HDassert( start_index < stop_index );
-                HDassert( stop_index <= large_ds_size );
-
-                for ( n = 0; n < large_ds_size; n++ ) {
-
-                    if ( ( n >= start_index ) && ( n <= stop_index ) ) {
-
-                        if ( *ptr_1 != expected_value ) {
+                if ( (tv_ptr->skips)++ < tv_ptr->max_skips ) { /* skip the test */
 
-                            mis_match = TRUE;
-                        }
-                        expected_value++;
+                    (tv_ptr->tests_skipped)++;
 
-                    } else {
+                } else { /* run the test */
 
-                        if ( *ptr_1 != 0 ) {
+                    tv_ptr->skips = 0; /* reset the skips counter */
 
-                            mis_match = TRUE;
+                    /* we know that small_rank >= 1 and that large_rank > small_rank
+                     * by the assertions at the head of this function.  Thus no
+                     * need for another inner loop.
+                     */
+                    tv_ptr->start[0] = (hsize_t)i;
+                    tv_ptr->start[1] = (hsize_t)j;
+                    tv_ptr->start[2] = (hsize_t)k;
+                    tv_ptr->start[3] = (hsize_t)l;
+                    tv_ptr->start[4] = 0;
+
+                    ret = H5Sselect_hyperslab(tv_ptr->mem_large_ds_sid,
+                                              H5S_SELECT_SET,
+                                              tv_ptr->start_ptr,
+                                              tv_ptr->stride_ptr,
+                                              tv_ptr->count_ptr,
+                                              tv_ptr->block_ptr);
+                    VRFY((ret != FAIL), 
+                         "H5Sselect_hyperslab(mem_large_ds_sid) succeeded");
+
+
+                    /* verify that H5S_select_shape_same() reports the two
+                     * selections as having the same shape.
+                     */
+                    check = H5S_select_shape_same_test(tv_ptr->file_small_ds_sid_0,
+                                                       tv_ptr->mem_large_ds_sid);
+                    VRFY((check == TRUE), "H5S_select_shape_same_test passed");
+
+
+                    /* Read selection from disk */
+#if CONTIG_HS_DR_PIO_TEST__D2M_S2L__DEBUG 
+                    HDfprintf(stdout, "%s:%d: start = %d %d %d %d %d.\n", 
+                              fcnName, (int)(tv_ptr->mpi_rank), 
+                              (int)(tv_ptr->start[0]), (int)(tv_ptr->start[1]), 
+                              (int)(tv_ptr->start[2]), (int)(tv_ptr->start[3]), 
+                              (int)(tv_ptr->start[4]));
+                    HDfprintf(stdout, "%s:%d: mem/file extent dims = %d/%d.\n",
+                              fcnName, tv_ptr->mpi_rank,
+                              H5Sget_simple_extent_ndims(tv_ptr->mem_large_ds_sid),
+                              H5Sget_simple_extent_ndims(tv_ptr->file_small_ds_sid_0));
+#endif /* CONTIG_HS_DR_PIO_TEST__D2M_S2L__DEBUG */
+                    ret = H5Dread(tv_ptr->small_dataset,
+                                  H5T_NATIVE_UINT32,
+                                  tv_ptr->mem_large_ds_sid,
+                                  tv_ptr->file_small_ds_sid_0,
+                                  tv_ptr->xfer_plist,
+                                  tv_ptr->large_ds_buf_1);
+                    VRFY((ret >= 0), "H5Dread() slice from small ds succeeded.");
+
+                    /* verify that the expected data and only the
+                     * expected data was read.
+                     */
+                    ptr_1 = tv_ptr->large_ds_buf_1;
+                    expected_value = (uint32_t)
+                        ((size_t)(tv_ptr->mpi_rank) * tv_ptr->small_ds_slice_size);
+                    start_index = (size_t)(
+                        (i * tv_ptr->edge_size * tv_ptr->edge_size * 
+                             tv_ptr->edge_size * tv_ptr->edge_size) +
+                        (j * tv_ptr->edge_size * tv_ptr->edge_size * tv_ptr->edge_size) +
+                        (k * tv_ptr->edge_size * tv_ptr->edge_size) +
+                        (l * tv_ptr->edge_size));
+                    stop_index = start_index + tv_ptr->small_ds_slice_size - 1;
+
+                    HDassert( start_index < stop_index );
+                    HDassert( stop_index <= tv_ptr->large_ds_size );
+
+                    for ( n = 0; n < tv_ptr->large_ds_size; n++ ) {
+
+                        if ( ( n >= start_index ) && ( n <= stop_index ) ) {
+
+                            if ( *ptr_1 != expected_value ) {
+
+                                mis_match = TRUE;
+                            }
+                            expected_value++;
+
+                        } else {
+
+                            if ( *ptr_1 != 0 ) {
+
+                                mis_match = TRUE;
+                            }
                         }
+                        /* zero out the value for the next pass */
+                        *ptr_1 = 0;
+
+                        ptr_1++;
                     }
-                    /* zero out the value for the next pass */
-                    *ptr_1 = 0;
 
-                    ptr_1++;
-                }
+                    VRFY((mis_match == FALSE), 
+                         "small slice read from large ds data good.");
 
-                VRFY((mis_match == FALSE), 
-                     "small slice read from large ds data good.");
+                    (tv_ptr->tests_run)++;
+                }
 
                 l++;
 
-            } while ( ( large_rank > 2 ) &&
-                      ( (small_rank - 1) <= 1 ) &&
-                      ( l < edge_size ) );
+                (tv_ptr->total_tests)++;
+
+            } while ( ( tv_ptr->large_rank > 2 ) &&
+                      ( (tv_ptr->small_rank - 1) <= 1 ) &&
+                      ( l < tv_ptr->edge_size ) );
             k++;
-        } while ( ( large_rank > 3 ) &&
-                  ( (small_rank - 1) <= 2 ) &&
-                  ( k < edge_size ) );
+        } while ( ( tv_ptr->large_rank > 3 ) &&
+                  ( (tv_ptr->small_rank - 1) <= 2 ) &&
+                  ( k < tv_ptr->edge_size ) );
         j++;
-    } while ( ( large_rank > 4 ) &&
-              ( (small_rank - 1) <= 3 ) &&
-              ( j < edge_size ) );
+    } while ( ( tv_ptr->large_rank > 4 ) &&
+              ( (tv_ptr->small_rank - 1) <= 3 ) &&
+              ( j < tv_ptr->edge_size ) );
+
+    return;
+
+} /* contig_hs_dr_pio_test__d2m_s2l() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	contig_hs_dr_pio_test__m2d_l2s()
+ *
+ * Purpose:	Part three of a series of tests of I/O to/from hyperslab 
+ *		selections of different rank in the parallel.
+ *
+ *		Verify that we can write from memory to file using 
+ *		selections of different rank that H5S_select_shape_same() 
+ *		views as being of the same shape.
+ *
+ *		Do this by writing small_rank - 1 dimensional slices from 
+ *		the in memory large data set to the on disk small cube 
+ *		dataset.  After each write, read the slice of the small 
+ *		dataset back from disk, and verify that it contains 
+ *              the expected data. Verify that H5S_select_shape_same() 
+ *		returns true on the memory and file selections.
+ *
+ * Return:	void
+ *
+ * Programmer:	JRM -- 8/10/11
+ *
+ * Modifications:
+ *
+ *		None.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define CONTIG_HS_DR_PIO_TEST__M2D_L2S__DEBUG 0
+
+static void
+contig_hs_dr_pio_test__m2d_l2s(struct hs_dr_pio_test_vars_t * tv_ptr)
+{
+#if CONTIG_HS_DR_PIO_TEST__M2D_L2S__DEBUG 
+    const char *fcnName = "contig_hs_dr_pio_test__m2d_l2s()";
+#endif /* CONTIG_HS_DR_PIO_TEST__M2D_L2S__DEBUG */
+    hbool_t	mis_match = FALSE;
+    int		i, j, k, l;
+    size_t	n;
+    int		mpi_rank; /* needed by the VRFY macro */
+    size_t      start_index;
+    size_t      stop_index;
+    uint32_t	expected_value;
+    uint32_t  * ptr_1;
+    htri_t      check;          /* Shape comparison return value */
+    herr_t	ret;		/* Generic return value */
+
+    /* initialize the local copy of mpi_rank */
+    mpi_rank = tv_ptr->mpi_rank;
 
 
     /* now we go in the opposite direction, verifying that we can write
      * from memory to file using selections of different rank that
      * H5S_select_shape_same() views as being of the same shape.
      *
-     * Start by writing small_rank - 1 D slices from the in memory large data
-     * set to the on disk small cube dataset.  After each write, read the 
+     * Start by writing small_rank - 1 dimensional slices from the in memory large 
+     * data set to the on disk small cube dataset.  After each write, read the 
      * slice of the small dataset back from disk, and verify that it contains 
      * the expected data. Verify that H5S_select_shape_same() returns true on 
      * the memory and file selections.
      */
 
-    start[0] = (hsize_t)mpi_rank;
-    stride[0] = (hsize_t)(2 * (mpi_size + 1));
-    count[0] = 1;
-    block[0] = 1;
+    tv_ptr->start[0] = (hsize_t)(tv_ptr->mpi_rank);
+    tv_ptr->stride[0] = (hsize_t)(2 * (tv_ptr->mpi_size + 1));
+    tv_ptr->count[0] = 1;
+    tv_ptr->block[0] = 1;
 
-    for ( i = 1; i < large_rank; i++ ) {
+    for ( i = 1; i < tv_ptr->large_rank; i++ ) {
 
-        start[i] = 0;
-        stride[i] = (hsize_t)(2 * edge_size);
-        count[i] = 1;
-        block[i] = (hsize_t)edge_size;
+        tv_ptr->start[i] = 0;
+        tv_ptr->stride[i] = (hsize_t)(2 * tv_ptr->edge_size);
+        tv_ptr->count[i] = 1;
+        tv_ptr->block[i] = (hsize_t)(tv_ptr->edge_size);
     }
 
-    ret = H5Sselect_hyperslab(file_small_ds_sid,
+    ret = H5Sselect_hyperslab(tv_ptr->file_small_ds_sid_0,
                               H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
-    VRFY((ret >= 0), "H5Sselect_hyperslab(file_small_ds_sid, set) suceeded");
+                              tv_ptr->start,
+                              tv_ptr->stride,
+                              tv_ptr->count,
+                              tv_ptr->block);
+    VRFY((ret >= 0), "H5Sselect_hyperslab(file_small_ds_sid_0, set) suceeded");
 
-    ret = H5Sselect_hyperslab(mem_small_ds_sid,
+    ret = H5Sselect_hyperslab(tv_ptr->mem_small_ds_sid,
                               H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
+                              tv_ptr->start,
+                              tv_ptr->stride,
+                              tv_ptr->count,
+                              tv_ptr->block);
     VRFY((ret >= 0), "H5Sselect_hyperslab(mem_small_ds_sid, set) suceeded");
 
 
@@ -1100,28 +1410,28 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
      */
     for ( i = 0; i < PAR_SS_DR_MAX_RANK; i++ ) {
 
-        start[i] = 0;
-        stride[i] = (hsize_t)(2 * edge_size);
-        count[i] = 1;
-        if ( (PAR_SS_DR_MAX_RANK - i) > (small_rank - 1) ) {
+        tv_ptr->start[i] = 0;
+        tv_ptr->stride[i] = (hsize_t)(2 * tv_ptr->edge_size);
+        tv_ptr->count[i] = 1;
+        if ( (PAR_SS_DR_MAX_RANK - i) > (tv_ptr->small_rank - 1) ) {
 
-            block[i] = 1;
+            tv_ptr->block[i] = 1;
 
         } else {
 
-            block[i] = (hsize_t)edge_size;
+            tv_ptr->block[i] = (hsize_t)(tv_ptr->edge_size);
         }
     }
 
     /* zero out the in memory small ds */
-    HDmemset(small_ds_buf_1, 0, sizeof(uint32_t) * small_ds_size);
+    HDmemset(tv_ptr->small_ds_buf_1, 0, sizeof(uint32_t) * tv_ptr->small_ds_size);
 
 
-#if CONTIG_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
+#if CONTIG_HS_DR_PIO_TEST__M2D_L2S__DEBUG 
     HDfprintf(stdout, 
               "%s writing slices from big ds to slices of small ds on disk.\n",
               fcnName);
-#endif 
+#endif /* CONTIG_HS_DR_PIO_TEST__M2D_L2S__DEBUG */
 
     /* in serial versions of this test, we loop through all the dimensions
      * of the large data set that don't appear in the small data set.  
@@ -1133,9 +1443,9 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
      */
 
 
-    if ( PAR_SS_DR_MAX_RANK - large_rank == 0 ) {
+    if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 0 ) {
 
-        i = mpi_rank;
+        i = tv_ptr->mpi_rank;
 
     } else {
 
@@ -1148,9 +1458,9 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
      * test.
      */
 
-    if ( PAR_SS_DR_MAX_RANK - large_rank == 1 ) {
+    if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 1 ) {
 
-        j = mpi_rank;
+        j = tv_ptr->mpi_rank;
 
     } else {
 
@@ -1159,9 +1469,9 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
 
     j = 0;
     do {
-        if ( PAR_SS_DR_MAX_RANK - large_rank == 2 ) {
+        if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 2 ) {
 
-            k = mpi_rank;
+            k = tv_ptr->mpi_rank;
 
         } else {
 
@@ -1181,136 +1491,207 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
 
             l = 0;
             do {
-                /* we know that small_rank >= 1 and that large_rank > small_rank
-                 * by the assertions at the head of this function.  Thus no
-                 * need for another inner loop.
-                 */
-
-                /* zero out this rank's slice of the on disk small data set */
-                ret = H5Dwrite(small_dataset,
-                               H5T_NATIVE_UINT32,
-                               mem_small_ds_sid,
-                               file_small_ds_sid,
-                               xfer_plist,
-                               small_ds_buf_2);
-                VRFY((ret >= 0), "H5Dwrite() zero slice to small ds succeeded.");
-
-                /* select the portion of the in memory large cube from which we
-                 * are going to write data.
-                 */
-                start[0] = (hsize_t)i;
-                start[1] = (hsize_t)j;
-                start[2] = (hsize_t)k;
-                start[3] = (hsize_t)l;
-                start[4] = 0;
-
-                ret = H5Sselect_hyperslab(mem_large_ds_sid,
-                                          H5S_SELECT_SET,
-                                          start_ptr,
-                                          stride_ptr,
-                                          count_ptr,
-                                          block_ptr);
-                VRFY((ret >= 0), 
-                     "H5Sselect_hyperslab() mem_large_ds_sid succeeded.");
-
-
-                /* verify that H5S_select_shape_same() reports the in
-                 * memory slice through the cube selection and the
-                 * on disk full square selections as having the same shape.
-                 */
-                check = H5S_select_shape_same_test(file_small_ds_sid,
-                                                   mem_large_ds_sid);
-                VRFY((check == TRUE), "H5S_select_shape_same_test passed.");
-
-
-                /* write the slice from the in memory large data set to the 
-                 * slice of the on disk small dataset. */
-#if CONTIG_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
-                HDfprintf(stdout, "%s:%d: start = %d %d %d %d %d.\n", 
-                          fcnName, (int)mpi_rank,
-                          (int)start[0], (int)start[1], (int)start[2], 
-                          (int)start[3], (int)start[4]);
-                HDfprintf(stdout, "%s:%d: mem/file extent dims = %d/%d.\n",
-                          fcnName, mpi_rank,
-                          H5Sget_simple_extent_ndims(mem_large_ds_sid),
-                          H5Sget_simple_extent_ndims(file_small_ds_sid));
-#endif 
-                ret = H5Dwrite(small_dataset,
-                               H5T_NATIVE_UINT32,
-                               mem_large_ds_sid,
-                               file_small_ds_sid,
-                               xfer_plist,
-                               large_ds_buf_0);
-                VRFY((ret >= 0), "H5Dwrite() slice to large ds succeeded.");
+                if ( (tv_ptr->skips)++ < tv_ptr->max_skips ) { /* skip the test */
+
+                    (tv_ptr->tests_skipped)++;
 
+                } else { /* run the test */
 
-                /* read the on disk square into memory */
-                ret = H5Dread(small_dataset,
-                              H5T_NATIVE_UINT32,
-                              mem_small_ds_sid,
-                              file_small_ds_sid,
-                              xfer_plist,
-                              small_ds_buf_1);
-                VRFY((ret >= 0), "H5Dread() slice from small ds succeeded.");
+                    tv_ptr->skips = 0; /* reset the skips counter */
 
+                    /* we know that small_rank >= 1 and that large_rank > small_rank
+                     * by the assertions at the head of this function.  Thus no
+                     * need for another inner loop.
+                     */
 
-                /* verify that expected data is retrieved */
+                    /* zero out this rank's slice of the on disk small data set */
+                    ret = H5Dwrite(tv_ptr->small_dataset,
+                                   H5T_NATIVE_UINT32,
+                                   tv_ptr->mem_small_ds_sid,
+                                   tv_ptr->file_small_ds_sid_0,
+                                   tv_ptr->xfer_plist,
+                                   tv_ptr->small_ds_buf_2);
+                    VRFY((ret >= 0), "H5Dwrite() zero slice to small ds succeeded.");
+
+                    /* select the portion of the in memory large cube from which we
+                     * are going to write data.
+                     */
+                    tv_ptr->start[0] = (hsize_t)i;
+                    tv_ptr->start[1] = (hsize_t)j;
+                    tv_ptr->start[2] = (hsize_t)k;
+                    tv_ptr->start[3] = (hsize_t)l;
+                    tv_ptr->start[4] = 0;
+
+                    ret = H5Sselect_hyperslab(tv_ptr->mem_large_ds_sid,
+                                              H5S_SELECT_SET,
+                                              tv_ptr->start_ptr,
+                                              tv_ptr->stride_ptr,
+                                              tv_ptr->count_ptr,
+                                              tv_ptr->block_ptr);
+                    VRFY((ret >= 0), 
+                         "H5Sselect_hyperslab() mem_large_ds_sid succeeded.");
+
+
+                    /* verify that H5S_select_shape_same() reports the in
+                     * memory slice through the cube selection and the
+                     * on disk full square selections as having the same shape.
+                     */
+                    check = H5S_select_shape_same_test(tv_ptr->file_small_ds_sid_0,
+                                                       tv_ptr->mem_large_ds_sid);
+                    VRFY((check == TRUE), "H5S_select_shape_same_test passed.");
+
+
+                    /* write the slice from the in memory large data set to the 
+                     * slice of the on disk small dataset. */
+#if CONTIG_HS_DR_PIO_TEST__M2D_L2S__DEBUG 
+                    HDfprintf(stdout, "%s:%d: start = %d %d %d %d %d.\n", 
+                              fcnName, (int)(tv_ptr->mpi_rank),
+                              (int)(tv_ptr->start[0]), (int)(tv_ptr->start[1]), 
+                              (int)(tv_ptr->start[2]), (int)(tv_ptr->start[3]), 
+                              (int)(tv_ptr->start[4]));
+                    HDfprintf(stdout, "%s:%d: mem/file extent dims = %d/%d.\n",
+                              fcnName, tv_ptr->mpi_rank,
+                              H5Sget_simple_extent_ndims(tv_ptr->mem_large_ds_sid),
+                              H5Sget_simple_extent_ndims(tv_ptr->file_small_ds_sid_0));
+#endif /* CONTIG_HS_DR_PIO_TEST__M2D_L2S__DEBUG */
+                    ret = H5Dwrite(tv_ptr->small_dataset,
+                                   H5T_NATIVE_UINT32,
+                                   tv_ptr->mem_large_ds_sid,
+                                   tv_ptr->file_small_ds_sid_0,
+                                   tv_ptr->xfer_plist,
+                                   tv_ptr->large_ds_buf_0);
+                    VRFY((ret >= 0), "H5Dwrite() slice to large ds succeeded.");
+
+
+                    /* read the on disk square into memory */
+                    ret = H5Dread(tv_ptr->small_dataset,
+                                  H5T_NATIVE_UINT32,
+                                  tv_ptr->mem_small_ds_sid,
+                                  tv_ptr->file_small_ds_sid_0,
+                                  tv_ptr->xfer_plist,
+                                  tv_ptr->small_ds_buf_1);
+                    VRFY((ret >= 0), "H5Dread() slice from small ds succeeded.");
+
+
+                    /* verify that expected data is retrieved */
+
+                    mis_match = FALSE;
+                    ptr_1 = tv_ptr->small_ds_buf_1;
+
+                    expected_value = (uint32_t)(
+                        (i * tv_ptr->edge_size * tv_ptr->edge_size * 
+                             tv_ptr->edge_size * tv_ptr->edge_size) +
+                        (j * tv_ptr->edge_size * tv_ptr->edge_size * tv_ptr->edge_size) +
+                        (k * tv_ptr->edge_size * tv_ptr->edge_size) +
+                        (l * tv_ptr->edge_size));
+
+                    start_index = (size_t)(tv_ptr->mpi_rank) * tv_ptr->small_ds_slice_size;
+                    stop_index = start_index + tv_ptr->small_ds_slice_size - 1;
+
+                    HDassert( start_index < stop_index );
+                    HDassert( stop_index <= tv_ptr->small_ds_size );
+
+                    for ( n = 0; n < tv_ptr->small_ds_size; n++ ) {
+
+                        if ( ( n >= start_index ) && ( n <= stop_index ) ) {
+
+                            if ( *ptr_1 != expected_value ) {
+
+                                mis_match = TRUE;
+                            }
+                            expected_value++;
 
-                mis_match = FALSE;
-                ptr_1 = small_ds_buf_1;
+                        } else {
 
-                expected_value = (uint32_t)(
-			(i * edge_size * edge_size * edge_size * edge_size) +
-                        (j * edge_size * edge_size * edge_size) +
-                        (k * edge_size * edge_size) +
-                        (l * edge_size));
+                            if ( *ptr_1 != 0 ) {
 
-                start_index = (size_t)mpi_rank * small_ds_slice_size;
-                stop_index = start_index + small_ds_slice_size - 1;
+                                mis_match = TRUE;
+                            }
+                        }
+                        /* zero out the value for the next pass */
+                        *ptr_1 = 0;
 
-                HDassert( start_index < stop_index );
-                HDassert( stop_index <= small_ds_size );
+                        ptr_1++;
+                    }
 
-                for ( n = 0; n < small_ds_size; n++ ) {
+                    VRFY((mis_match == FALSE), 
+                         "small slice write from large ds data good.");
 
-                    if ( ( n >= start_index ) && ( n <= stop_index ) ) {
+                    (tv_ptr->tests_run)++;
+                }
 
-                        if ( *ptr_1 != expected_value ) {
+                l++;
 
-                            mis_match = TRUE;
-                        }
-                        expected_value++;
+               (tv_ptr->total_tests)++;
 
-                    } else {
+            } while ( ( tv_ptr->large_rank > 2 ) &&
+                      ( (tv_ptr->small_rank - 1) <= 1 ) &&
+                      ( l < tv_ptr->edge_size ) );
+            k++;
+        } while ( ( tv_ptr->large_rank > 3 ) &&
+                  ( (tv_ptr->small_rank - 1) <= 2 ) &&
+                  ( k < tv_ptr->edge_size ) );
+        j++;
+    } while ( ( tv_ptr->large_rank > 4 ) &&
+              ( (tv_ptr->small_rank - 1) <= 3 ) &&
+              ( j < tv_ptr->edge_size ) );
 
-                        if ( *ptr_1 != 0 ) {
+    return;
 
-                            mis_match = TRUE;
-                        }
-                    }
-                    /* zero out the value for the next pass */
-                    *ptr_1 = 0;
+} /* contig_hs_dr_pio_test__m2d_l2s() */
 
-                    ptr_1++;
-                }
 
-                VRFY((mis_match == FALSE), 
-                     "small slice write from large ds data good.");
+/*-------------------------------------------------------------------------
+ * Function:	contig_hs_dr_pio_test__m2d_s2l()
+ *
+ * Purpose:	Part four of a series of tests of I/O to/from hyperslab 
+ *		selections of different rank in the parallel.
+ *
+ *		Verify that we can write from memory to file using 
+ *		selections of different rank that H5S_select_shape_same() 
+ *		views as being of the same shape.
+ *
+ *		Do this by writing the contents of the process's slice of 
+ *		the in memory small data set to slices of the on disk 
+ *		large data set.  After each write, read the process's 
+ *		slice of the large data set back into memory, and verify 
+ *		that it contains the expected data. 
+ *
+ *		Verify that H5S_select_shape_same() returns true on the 
+ *		memory and file selections.
+ *
+ * Return:	void
+ *
+ * Programmer:	JRM -- 8/10/11
+ *
+ * Modifications:
+ *
+ *		None
+ *
+ *-------------------------------------------------------------------------
+ */
 
-                l++;
+#define CONTIG_HS_DR_PIO_TEST__M2D_S2L__DEBUG 0
 
-            } while ( ( large_rank > 2 ) &&
-                      ( (small_rank - 1) <= 1 ) &&
-                      ( l < edge_size ) );
-            k++;
-        } while ( ( large_rank > 3 ) &&
-                  ( (small_rank - 1) <= 2 ) &&
-                  ( k < edge_size ) );
-        j++;
-    } while ( ( large_rank > 4 ) &&
-              ( (small_rank - 1) <= 3 ) &&
-              ( j < edge_size ) );
+static void
+contig_hs_dr_pio_test__m2d_s2l(struct hs_dr_pio_test_vars_t * tv_ptr)
+{
+#if CONTIG_HS_DR_PIO_TEST__M2D_S2L__DEBUG 
+    const char *fcnName = "contig_hs_dr_pio_test__m2d_s2l()";
+#endif /* CONTIG_HS_DR_PIO_TEST__M2D_S2L__DEBUG */
+    hbool_t	mis_match = FALSE;
+    int		i, j, k, l;
+    size_t	n;
+    int		mpi_rank; /* needed by the VRFY macro */
+    size_t      start_index;
+    size_t      stop_index;
+    uint32_t	expected_value;
+    uint32_t  * ptr_1;
+    htri_t      check;          /* Shape comparison return value */
+    herr_t	ret;		/* Generic return value */
 
+    /* initialize the local copy of mpi_rank */
+    mpi_rank = tv_ptr->mpi_rank;
 
     /* Now write the contents of the process's slice of the in memory 
      * small data set to slices of the on disk large data set.  After 
@@ -1323,25 +1704,25 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
     /* select the slice of the in memory small data set associated with 
      * the process's mpi rank.
      */
-    start[0] = (hsize_t)mpi_rank;
-    stride[0] = (hsize_t)(2 * (mpi_size + 1));
-    count[0] = 1;
-    block[0] = 1;
+    tv_ptr->start[0] = (hsize_t)(tv_ptr->mpi_rank);
+    tv_ptr->stride[0] = (hsize_t)(2 * (tv_ptr->mpi_size + 1));
+    tv_ptr->count[0] = 1;
+    tv_ptr->block[0] = 1;
 
-    for ( i = 1; i < large_rank; i++ ) {
+    for ( i = 1; i < tv_ptr->large_rank; i++ ) {
 
-        start[i] = 0;
-        stride[i] = (hsize_t)(2 * edge_size);
-        count[i] = 1;
-        block[i] = (hsize_t)edge_size;
+        tv_ptr->start[i] = 0;
+        tv_ptr->stride[i] = (hsize_t)(2 * tv_ptr->edge_size);
+        tv_ptr->count[i] = 1;
+        tv_ptr->block[i] = (hsize_t)(tv_ptr->edge_size);
     }
 
-    ret = H5Sselect_hyperslab(mem_small_ds_sid,
+    ret = H5Sselect_hyperslab(tv_ptr->mem_small_ds_sid,
                               H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
+                              tv_ptr->start,
+                              tv_ptr->stride,
+                              tv_ptr->count,
+                              tv_ptr->block);
     VRFY((ret >= 0), "H5Sselect_hyperslab(mem_small_ds_sid, set) suceeded");
 
 
@@ -1351,31 +1732,31 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
      */
     for ( i = 0; i < PAR_SS_DR_MAX_RANK; i++ ) {
 
-        start[i] = 0;
-        stride[i] = (hsize_t)(2 * edge_size);
-        count[i] = 1;
-        if ( (PAR_SS_DR_MAX_RANK - i) > (small_rank - 1) ) {
+        tv_ptr->start[i] = 0;
+        tv_ptr->stride[i] = (hsize_t)(2 * tv_ptr->edge_size);
+        tv_ptr->count[i] = 1;
+        if ( (PAR_SS_DR_MAX_RANK - i) > (tv_ptr->small_rank - 1) ) {
 
-            block[i] = 1;
+            tv_ptr->block[i] = 1;
 
         } else {
 
-            block[i] = (hsize_t)edge_size;
+            tv_ptr->block[i] = (hsize_t)(tv_ptr->edge_size);
         }
     }
 
     /* zero out the in memory large ds */
-    HDmemset(large_ds_buf_1, 0, sizeof(uint32_t) * large_ds_size);
+    HDmemset(tv_ptr->large_ds_buf_1, 0, sizeof(uint32_t) * tv_ptr->large_ds_size);
 
-#if CONTIG_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
+#if CONTIG_HS_DR_PIO_TEST__M2D_S2L__DEBUG 
     HDfprintf(stdout, 
          "%s writing process slices of small ds to slices of large ds on disk.\n",
          fcnName);
-#endif 
+#endif /* CONTIG_HS_DR_PIO_TEST__M2D_S2L__DEBUG */
 
-    if ( PAR_SS_DR_MAX_RANK - large_rank == 0 ) {
+    if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 0 ) {
 
-        i = mpi_rank;
+        i = tv_ptr->mpi_rank;
 
     } else {
 
@@ -1388,9 +1769,9 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
      * test.
      */
 
-    if ( PAR_SS_DR_MAX_RANK - large_rank == 1 ) {
+    if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 1 ) {
 
-        j = mpi_rank;
+        j = tv_ptr->mpi_rank;
 
     } else {
 
@@ -1398,9 +1779,9 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
     }
 
     do {
-        if ( PAR_SS_DR_MAX_RANK - large_rank == 2 ) {
+        if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 2 ) {
 
-            k = mpi_rank;
+            k = tv_ptr->mpi_rank;
 
         } else {
 
@@ -1420,216 +1801,410 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
 
             l = 0;
             do {
-                /* we know that small_rank >= 1 and that large_rank > small_rank
-                 * by the assertions at the head of this function.  Thus no
-                 * need for another inner loop.
-                 */
-
-                /* Zero out this processes slice of the on disk large data set.
-                 * Note that this will leave one slice with its original data
-                 * as there is one more slice than processes.
-                  */
-                ret = H5Dwrite(large_dataset,
-                               H5T_NATIVE_UINT32,
-                               large_ds_slice_sid,
-                               file_large_ds_process_slice_sid,
-                               xfer_plist,
-                               large_ds_buf_2);
-		VRFY((ret != FAIL), "H5Dwrite() to zero large ds suceeded");
-
-
-                /* select the portion of the in memory large cube to which we
-                 * are going to write data.
-                 */
-                start[0] = (hsize_t)i;
-                start[1] = (hsize_t)j;
-                start[2] = (hsize_t)k;
-                start[3] = (hsize_t)l;
-                start[4] = 0;
-
-                ret = H5Sselect_hyperslab(file_large_ds_sid,
-                                          H5S_SELECT_SET,
-                                          start_ptr,
-                                          stride_ptr,
-                                          count_ptr,
-                                          block_ptr);
-		VRFY((ret != FAIL), 
-                     "H5Sselect_hyperslab() target large ds slice succeeded");
-
-
-                /* verify that H5S_select_shape_same() reports the in
-                 * memory small data set slice selection and the
-                 * on disk slice through the large data set selection
-                 * as having the same shape.
-                 */
-                check = H5S_select_shape_same_test(mem_small_ds_sid,
-                                                   file_large_ds_sid);
-		VRFY((check == TRUE), "H5S_select_shape_same_test passed");
-
-
-                /* write the small data set slice from memory to the 
-                 * target slice of the disk data set 
-                 */
-#if CONTIG_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
-                HDfprintf(stdout, "%s:%d: start = %d %d %d %d %d.\n", 
-                          fcnName, (int)mpi_rank,
-                          (int)start[0], (int)start[1], (int)start[2], 
-                          (int)start[3], (int)start[4]);
-                HDfprintf(stdout, "%s:%d: mem/file extent dims = %d/%d.\n",
-                          fcnName, mpi_rank,
-                          H5Sget_simple_extent_ndims(mem_small_ds_sid),
-                          H5Sget_simple_extent_ndims(file_large_ds_sid));
-#endif 
-                ret = H5Dwrite(large_dataset,
-                               H5T_NATIVE_UINT32,
-                               mem_small_ds_sid,
-                               file_large_ds_sid,
-                               xfer_plist,
-                               small_ds_buf_0);
-		VRFY((ret != FAIL), 
-                      "H5Dwrite of small ds slice to large ds succeeded");
+                if ( (tv_ptr->skips)++ < tv_ptr->max_skips ) { /* skip the test */
+
+                    (tv_ptr->tests_skipped)++;
+
+#if CONTIG_HS_DR_PIO_TEST__M2D_S2L__DEBUG 
+                    tv_ptr->start[0] = (hsize_t)i;
+                    tv_ptr->start[1] = (hsize_t)j;
+                    tv_ptr->start[2] = (hsize_t)k;
+                    tv_ptr->start[3] = (hsize_t)l;
+                    tv_ptr->start[4] = 0;
+
+                    HDfprintf(stdout, 
+                              "%s:%d: skipping test with start = %d %d %d %d %d.\n", 
+                              fcnName, (int)(tv_ptr->mpi_rank),
+                              (int)(tv_ptr->start[0]), (int)(tv_ptr->start[1]), 
+                              (int)(tv_ptr->start[2]), (int)(tv_ptr->start[3]), 
+                              (int)(tv_ptr->start[4]));
+                    HDfprintf(stdout, "%s:%d: mem/file extent dims = %d/%d.\n",
+                              fcnName, tv_ptr->mpi_rank,
+                              H5Sget_simple_extent_ndims(tv_ptr->mem_small_ds_sid),
+                              H5Sget_simple_extent_ndims(tv_ptr->file_large_ds_sid_0));
+#endif /* CONTIG_HS_DR_PIO_TEST__M2D_S2L__DEBUG */
+                } else { /* run the test */
+
+                    tv_ptr->skips = 0; /* reset the skips counter */
+
+                    /* we know that small_rank >= 1 and that large_rank > small_rank
+                     * by the assertions at the head of this function.  Thus no
+                     * need for another inner loop.
+                     */
+
+                    /* Zero out this processes slice of the on disk large data set.
+                     * Note that this will leave one slice with its original data
+                     * as there is one more slice than processes.
+                     */
+                    ret = H5Dwrite(tv_ptr->large_dataset,
+                                   H5T_NATIVE_UINT32,
+                                   tv_ptr->large_ds_slice_sid,
+                                   tv_ptr->file_large_ds_process_slice_sid,
+                                   tv_ptr->xfer_plist,
+                                   tv_ptr->large_ds_buf_2);
+                    VRFY((ret != FAIL), "H5Dwrite() to zero large ds suceeded");
+
 
+                    /* select the portion of the in memory large cube to which we
+                     * are going to write data.
+                     */
+                    tv_ptr->start[0] = (hsize_t)i;
+                    tv_ptr->start[1] = (hsize_t)j;
+                    tv_ptr->start[2] = (hsize_t)k;
+                    tv_ptr->start[3] = (hsize_t)l;
+                    tv_ptr->start[4] = 0;
+
+                    ret = H5Sselect_hyperslab(tv_ptr->file_large_ds_sid_0,
+                                              H5S_SELECT_SET,
+                                              tv_ptr->start_ptr,
+                                              tv_ptr->stride_ptr,
+                                              tv_ptr->count_ptr,
+                                              tv_ptr->block_ptr);
+                    VRFY((ret != FAIL), 
+                         "H5Sselect_hyperslab() target large ds slice succeeded");
+
+
+                    /* verify that H5S_select_shape_same() reports the in
+                     * memory small data set slice selection and the
+                     * on disk slice through the large data set selection
+                     * as having the same shape.
+                     */
+                    check = H5S_select_shape_same_test(tv_ptr->mem_small_ds_sid,
+                                                       tv_ptr->file_large_ds_sid_0);
+                    VRFY((check == TRUE), "H5S_select_shape_same_test passed");
 
-                /* read this processes slice on the on disk large 
-                 * data set into memory.
-                 */
 
-                ret = H5Dread(large_dataset,
-                              H5T_NATIVE_UINT32,
-                              mem_large_ds_process_slice_sid,
-                              file_large_ds_process_slice_sid,
-                              xfer_plist,
-                              large_ds_buf_1);
-                VRFY((ret != FAIL), 
-                     "H5Dread() of process slice of large ds succeeded");
+                    /* write the small data set slice from memory to the 
+                     * target slice of the disk data set 
+                     */
+#if CONTIG_HS_DR_PIO_TEST__M2D_S2L__DEBUG 
+                    HDfprintf(stdout, "%s:%d: start = %d %d %d %d %d.\n", 
+                              fcnName, (int)(tv_ptr->mpi_rank),
+                              (int)(tv_ptr->start[0]), (int)(tv_ptr->start[1]), 
+                              (int)(tv_ptr->start[2]), (int)(tv_ptr->start[3]), 
+                              (int)(tv_ptr->start[4]));
+                    HDfprintf(stdout, "%s:%d: mem/file extent dims = %d/%d.\n",
+                              fcnName, tv_ptr->mpi_rank,
+                              H5Sget_simple_extent_ndims(tv_ptr->mem_small_ds_sid),
+                              H5Sget_simple_extent_ndims(tv_ptr->file_large_ds_sid_0));
+#endif /* CONTIG_HS_DR_PIO_TEST__M2D_S2L__DEBUG */
+                    ret = H5Dwrite(tv_ptr->large_dataset,
+                                   H5T_NATIVE_UINT32,
+                                   tv_ptr->mem_small_ds_sid,
+                                   tv_ptr->file_large_ds_sid_0,
+                                   tv_ptr->xfer_plist,
+                                   tv_ptr->small_ds_buf_0);
+                    VRFY((ret != FAIL), 
+                          "H5Dwrite of small ds slice to large ds succeeded");
+
+
+                    /* read this processes slice on the on disk large 
+                     * data set into memory.
+                     */
 
+                    ret = H5Dread(tv_ptr->large_dataset,
+                                  H5T_NATIVE_UINT32,
+                                  tv_ptr->mem_large_ds_process_slice_sid,
+                                  tv_ptr->file_large_ds_process_slice_sid,
+                                  tv_ptr->xfer_plist,
+                                  tv_ptr->large_ds_buf_1);
+                    VRFY((ret != FAIL), 
+                         "H5Dread() of process slice of large ds succeeded");
 
-                /* verify that the expected data and only the
-                 * expected data was read.
-                 */
-                ptr_1 = large_ds_buf_1;
-                expected_value = (uint32_t)((size_t)mpi_rank * small_ds_slice_size);
 
-                start_index = (size_t)((i * edge_size * edge_size * edge_size * edge_size) +
-                              (j * edge_size * edge_size * edge_size) +
-                              (k * edge_size * edge_size) +
-                              (l * edge_size));
-                stop_index = start_index + small_ds_slice_size - 1;
+                    /* verify that the expected data and only the
+                     * expected data was read.
+                     */
+                    ptr_1 = tv_ptr->large_ds_buf_1;
+                    expected_value = (uint32_t)
+                	    ((size_t)(tv_ptr->mpi_rank) * tv_ptr->small_ds_slice_size);
 
-                HDassert( start_index < stop_index );
-                HDassert( stop_index < large_ds_size );
+                    start_index = (size_t)
+                                  ((i * tv_ptr->edge_size * tv_ptr->edge_size * 
+                                        tv_ptr->edge_size * tv_ptr->edge_size) +
+                                   (j * tv_ptr->edge_size * tv_ptr->edge_size * 
+                                        tv_ptr->edge_size) +
+                                   (k * tv_ptr->edge_size * tv_ptr->edge_size) +
+                                   (l * tv_ptr->edge_size));
+                    stop_index = start_index + tv_ptr->small_ds_slice_size - 1;
 
-                for ( n = 0; n < large_ds_size; n++ ) {
+                    HDassert( start_index < stop_index );
+                    HDassert( stop_index < tv_ptr->large_ds_size );
 
-                    if ( ( n >= start_index ) && ( n <= stop_index ) ) {
+                    for ( n = 0; n < tv_ptr->large_ds_size; n++ ) {
 
-                        if ( *ptr_1 != expected_value ) {
+                        if ( ( n >= start_index ) && ( n <= stop_index ) ) {
 
-                            mis_match = TRUE;
-                        }
+                            if ( *ptr_1 != expected_value ) {
 
-                        expected_value++;
+                                mis_match = TRUE;
+                            }
 
-                    } else {
+                            expected_value++;
 
-                        if ( *ptr_1 != 0 ) {
+                        } else {
 
-                            mis_match = TRUE;
+                            if ( *ptr_1 != 0 ) {
+
+                                mis_match = TRUE;
+                            }
                         }
+                        /* zero out buffer for next test */
+                        *ptr_1 = 0;
+                        ptr_1++;
                     }
-                    /* zero out buffer for next test */
-                    *ptr_1 = 0;
-                    ptr_1++;
-                }
 
-                VRFY((mis_match == FALSE), 
-                     "small ds slice write to large ds slice data good.");
+                    VRFY((mis_match == FALSE), 
+                         "small ds slice write to large ds slice data good.");
+
+                    (tv_ptr->tests_run)++;
+                }
 
                 l++;
 
-            } while ( ( large_rank > 2 ) &&
-                      ( (small_rank - 1) <= 1 ) &&
-                      ( l < edge_size ) );
+                (tv_ptr->total_tests)++;
+
+            } while ( ( tv_ptr->large_rank > 2 ) &&
+                      ( (tv_ptr->small_rank - 1) <= 1 ) &&
+                      ( l < tv_ptr->edge_size ) );
             k++;
-        } while ( ( large_rank > 3 ) &&
-                  ( (small_rank - 1) <= 2 ) &&
-                  ( k < edge_size ) );
+        } while ( ( tv_ptr->large_rank > 3 ) &&
+                  ( (tv_ptr->small_rank - 1) <= 2 ) &&
+                  ( k < tv_ptr->edge_size ) );
         j++;
-    } while ( ( large_rank > 4 ) &&
-              ( (small_rank - 1) <= 3 ) &&
-              ( j < edge_size ) );
+    } while ( ( tv_ptr->large_rank > 4 ) &&
+              ( (tv_ptr->small_rank - 1) <= 3 ) &&
+              ( j < tv_ptr->edge_size ) );
 
+    return;
 
-    /* Close dataspaces */
-    ret = H5Sclose(full_mem_small_ds_sid);
-    VRFY((ret != FAIL), "H5Sclose(full_mem_small_ds_sid) succeeded");
+} /* contig_hs_dr_pio_test__m2d_s2l() */
 
-    ret = H5Sclose(full_file_small_ds_sid);
-    VRFY((ret != FAIL), "H5Sclose(full_file_small_ds_sid) succeeded");
 
-    ret = H5Sclose(mem_small_ds_sid);
-    VRFY((ret != FAIL), "H5Sclose(mem_small_ds_sid) succeeded");
+/*-------------------------------------------------------------------------
+ * Function:	contig_hs_dr_pio_test__run_test()
+ *
+ * Purpose:	Test I/O to/from hyperslab selections of different rank in
+ *		the parallel.
+ *
+ * Return:	void
+ *
+ * Programmer:	JRM -- 9/18/09
+ *
+ * Modifications:
+ *
+ *		JRM -- 9/16/10
+ *		Added express_test parameter.  Use it to control whether 
+ *		we set up the chunks so that no chunk is shared between 
+ *		processes, and also whether we set an alignment when we 
+ *		create the test file.
+ *
+ *		JRM -- 8/11/11
+ *		Refactored function heavily & broke it into six functions.
+ *		Added the skips_ptr, max_skips, total_tests_ptr, 
+ *		tests_run_ptr, and tests_skiped_ptr parameters to support 
+ *		skipping portions of the test according to the express 
+ *		test value.
+ *
+ *-------------------------------------------------------------------------
+ */
 
-    ret = H5Sclose(file_small_ds_sid);
-    VRFY((ret != FAIL), "H5Sclose(file_small_ds_sid) succeeded");
+#define CONTIG_HS_DR_PIO_TEST__RUN_TEST__DEBUG 0
 
-    ret = H5Sclose(small_ds_slice_sid);
-    VRFY((ret != FAIL), "H5Sclose(small_ds_slice_sid) succeeded");
+static void
+contig_hs_dr_pio_test__run_test(const int test_num,
+                                const int edge_size,
+                                const int chunk_edge_size,
+                                const int small_rank,
+                                const int large_rank,
+                                const hbool_t use_collective_io,
+                                const hid_t dset_type,
+                                int express_test,
+                                int * skips_ptr,
+                                int max_skips,
+                                int64_t * total_tests_ptr,
+                                int64_t * tests_run_ptr,
+                                int64_t * tests_skipped_ptr)
+{
+#if CONTIG_HS_DR_PIO_TEST__RUN_TEST__DEBUG 
+    const char *fcnName = "contig_hs_dr_pio_test__run_test()";
+#endif /* CONTIG_HS_DR_PIO_TEST__RUN_TEST__DEBUG */
+    int		mpi_rank;
+    struct hs_dr_pio_test_vars_t test_vars = 
+    {
+        /* int	       mpi_size                        = */ -1,
+        /* int         mpi_rank                        = */ -1,
+        /* MPI_Comm    mpi_comm                        = */ MPI_COMM_NULL,
+        /* MPI_Inf     mpi_info                        = */ MPI_INFO_NULL,
+        /* int         test_num                        = */ -1,
+        /* int         edge_size                       = */ -1,
+        /* int         checker_edge_size               = */ -1,
+        /* int         chunk_edge_size                 = */ -1,
+        /* int         small_rank                      = */ -1,
+        /* int         large_rank                      = */ -1,
+        /* hid_t       dset_type                       = */ -1,
+        /* uint32_t  * small_ds_buf_0                  = */ NULL,
+        /* uint32_t  * small_ds_buf_1                  = */ NULL,
+        /* uint32_t  * small_ds_buf_2                  = */ NULL,
+        /* uint32_t  * small_ds_slice_buf              = */ NULL,
+        /* uint32_t  * large_ds_buf_0                  = */ NULL,
+        /* uint32_t  * large_ds_buf_1                  = */ NULL, 
+        /* uint32_t  * large_ds_buf_2                  = */ NULL,
+        /* uint32_t  * large_ds_slice_buf              = */ NULL,
+        /* int         small_ds_offset                 = */ -1,
+        /* int         large_ds_offset                 = */ -1,
+        /* hid_t       fid                             = */ -1,  /* HDF5 file ID */
+        /* hid_t       xfer_plist                      = */ H5P_DEFAULT,
+        /* hid_t       full_mem_small_ds_sid           = */ -1,
+        /* hid_t       full_file_small_ds_sid          = */ -1,
+        /* hid_t       mem_small_ds_sid                = */ -1,
+        /* hid_t       file_small_ds_sid_0             = */ -1,
+        /* hid_t       file_small_ds_sid_1             = */ -1,
+        /* hid_t       small_ds_slice_sid              = */ -1,
+        /* hid_t       full_mem_large_ds_sid           = */ -1,
+        /* hid_t       full_file_large_ds_sid          = */ -1,
+        /* hid_t       mem_large_ds_sid                = */ -1,
+        /* hid_t       file_large_ds_sid_0             = */ -1,
+        /* hid_t       file_large_ds_sid_1             = */ -1,
+        /* hid_t       file_large_ds_process_slice_sid = */ -1,
+        /* hid_t       mem_large_ds_process_slice_sid  = */ -1,
+        /* hid_t       large_ds_slice_sid              = */ -1,
+        /* hid_t       small_dataset                   = */ -1,     /* Dataset ID */
+        /* hid_t       large_dataset                   = */ -1,     /* Dataset ID */
+        /* size_t      small_ds_size                   = */ 1,
+        /* size_t      small_ds_slice_size             = */ 1,
+        /* size_t      large_ds_size                   = */ 1,
+        /* size_t      large_ds_slice_size             = */ 1,
+        /* hsize_t     dims[PAR_SS_DR_MAX_RANK]        = */ {0,0,0,0,0},
+        /* hsize_t     chunk_dims[PAR_SS_DR_MAX_RANK]  = */ {0,0,0,0,0},
+        /* hsize_t     start[PAR_SS_DR_MAX_RANK]       = */ {0,0,0,0,0},
+        /* hsize_t     stride[PAR_SS_DR_MAX_RANK]      = */ {0,0,0,0,0},
+        /* hsize_t     count[PAR_SS_DR_MAX_RANK]       = */ {0,0,0,0,0},
+        /* hsize_t     block[PAR_SS_DR_MAX_RANK]       = */ {0,0,0,0,0},
+        /* hsize_t   * start_ptr                       = */ NULL,
+        /* hsize_t   * stride_ptr                      = */ NULL,
+        /* hsize_t   * count_ptr                       = */ NULL,
+        /* hsize_t   * block_ptr                       = */ NULL,
+        /* int 	       skips                           = */ 0,
+        /* int 	       max_skips                       = */ 0,
+        /* int64_t     total_tests                     = */ 0,
+        /* int64_t     tests_run                       = */ 0,
+        /* int64_t     tests_skipped                   = */ 0
+    };
+    struct hs_dr_pio_test_vars_t * tv_ptr = &test_vars;
 
-    ret = H5Sclose(full_mem_large_ds_sid);
-    VRFY((ret != FAIL), "H5Sclose(full_mem_large_ds_sid) succeeded");
+    hs_dr_pio_test__setup(test_num, edge_size, -1, chunk_edge_size,
+                          small_rank, large_rank, use_collective_io,
+                          dset_type, express_test, tv_ptr);
 
-    ret = H5Sclose(full_file_large_ds_sid);
-    VRFY((ret != FAIL), "H5Sclose(full_file_large_ds_sid) succeeded");
+    /* initialize the local copy of mpi_rank */
+    mpi_rank = tv_ptr->mpi_rank;
 
-    ret = H5Sclose(mem_large_ds_sid);
-    VRFY((ret != FAIL), "H5Sclose(mem_large_ds_sid) succeeded");
+    /* initialize skips & max_skips */
+    tv_ptr->skips = *skips_ptr;
+    tv_ptr->max_skips = max_skips;
 
-    ret = H5Sclose(file_large_ds_sid);
-    VRFY((ret != FAIL), "H5Sclose(mem_large_ds_sid) succeeded");
+#if CONTIG_HS_DR_PIO_TEST__RUN_TEST__DEBUG 
+    if ( MAINPROCESS ) {
+        HDfprintf(stdout, "test %d: small rank = %d, large rank = %d.\n",
+                  test_num, small_rank, large_rank);
+        HDfprintf(stdout, "test %d: Initialization complete.\n", test_num);
+    }
+#endif /* CONTIG_HS_DR_PIO_TEST__RUN_TEST__DEBUG */
 
-    ret = H5Sclose(mem_large_ds_process_slice_sid);
-    VRFY((ret != FAIL), "H5Sclose(mem_large_ds_process_slice_sid) succeeded");
+    /* first, verify that we can read from disk correctly using selections
+     * of different rank that H5S_select_shape_same() views as being of the
+     * same shape.
+     *
+     * Start by reading small_rank - 1 dimensional slice from the on disk 
+     * large cube, and verifying that the data read is correct.  Verify that 
+     * H5S_select_shape_same() returns true on the memory and file selections.
+     */
 
-    ret = H5Sclose(file_large_ds_process_slice_sid);
-    VRFY((ret != FAIL), "H5Sclose(file_large_ds_process_slice_sid) succeeded");
+#if CONTIG_HS_DR_PIO_TEST__RUN_TEST__DEBUG 
+    if ( MAINPROCESS ) {
+        HDfprintf(stdout, "test %d: running contig_hs_dr_pio_test__d2m_l2s.\n", test_num);
+    }
+#endif /* CONTIG_HS_DR_PIO_TEST__RUN_TEST__DEBUG */
+    contig_hs_dr_pio_test__d2m_l2s(tv_ptr);
 
-    ret = H5Sclose(large_ds_slice_sid);
-    VRFY((ret != FAIL), "H5Sclose(large_ds_slice_sid) succeeded");
 
+    /* Second, read slices of the on disk small data set into slices 
+     * through the in memory large data set, and verify that the correct 
+     * data (and only the correct data) is read.
+     */
+
+#if CONTIG_HS_DR_PIO_TEST__RUN_TEST__DEBUG 
+    if ( MAINPROCESS ) {
+        HDfprintf(stdout, "test %d: running contig_hs_dr_pio_test__d2m_s2l.\n", test_num);
+    }
+#endif /* CONTIG_HS_DR_PIO_TEST__RUN_TEST__DEBUG */
+    contig_hs_dr_pio_test__d2m_s2l(tv_ptr);
 
-    /* Close Datasets */
-    ret = H5Dclose(small_dataset);
-    VRFY((ret != FAIL), "H5Dclose(small_dataset) succeeded");
 
-    ret = H5Dclose(large_dataset);
-    VRFY((ret != FAIL), "H5Dclose(large_dataset) succeeded");
+    /* now we go in the opposite direction, verifying that we can write
+     * from memory to file using selections of different rank that
+     * H5S_select_shape_same() views as being of the same shape.
+     *
+     * Start by writing small_rank - 1 D slices from the in memory large data
+     * set to the on disk small cube dataset.  After each write, read the 
+     * slice of the small dataset back from disk, and verify that it contains 
+     * the expected data. Verify that H5S_select_shape_same() returns true on 
+     * the memory and file selections.
+     */
 
+#if CONTIG_HS_DR_PIO_TEST__RUN_TEST__DEBUG 
+    if ( MAINPROCESS ) {
+        HDfprintf(stdout, "test %d: running contig_hs_dr_pio_test__m2d_l2s.\n", test_num);
+    }
+#endif /* CONTIG_HS_DR_PIO_TEST__RUN_TEST__DEBUG */
+    contig_hs_dr_pio_test__m2d_l2s(tv_ptr);
 
-    /* close the file collectively */
-    MESG("about to close file.");
-    ret = H5Fclose(fid);
-    VRFY((ret != FAIL), "file close succeeded");
 
-    /* Free memory buffers */
+    /* Now write the contents of the process's slice of the in memory 
+     * small data set to slices of the on disk large data set.  After 
+     * each write, read the process's slice of the large data set back
+     * into memory, and verify that it contains the expected data. 
+     * Verify that H5S_select_shape_same() returns true on the memory 
+     * and file selections.
+     */
+
+#if CONTIG_HS_DR_PIO_TEST__RUN_TEST__DEBUG 
+    if ( MAINPROCESS ) {
+        HDfprintf(stdout, "test %d: running contig_hs_dr_pio_test__m2d_s2l.\n", test_num);
+    }
+#endif /* CONTIG_HS_DR_PIO_TEST__RUN_TEST__DEBUG */
+    contig_hs_dr_pio_test__m2d_s2l(tv_ptr);
 
-    if ( small_ds_buf_0 != NULL ) HDfree(small_ds_buf_0);
-    if ( small_ds_buf_1 != NULL ) HDfree(small_ds_buf_1);
-    if ( small_ds_buf_2 != NULL ) HDfree(small_ds_buf_2);
-    if ( small_ds_slice_buf != NULL ) HDfree(small_ds_slice_buf);
+#if CONTIG_HS_DR_PIO_TEST__RUN_TEST__DEBUG 
+    if ( MAINPROCESS ) {
+        HDfprintf(stdout, 
+            "test %d: Subtests complete -- tests run/skipped/total = %lld/%lld/%lld.\n", 
+             test_num, (long long)(tv_ptr->tests_run), (long long)(tv_ptr->tests_skipped),
+             (long long)(tv_ptr->total_tests));
+    }
+#endif /* CONTIG_HS_DR_PIO_TEST__RUN_TEST__DEBUG */
+
+    hs_dr_pio_test__takedown(tv_ptr);
 
-    if ( large_ds_buf_0 != NULL ) HDfree(large_ds_buf_0);
-    if ( large_ds_buf_1 != NULL ) HDfree(large_ds_buf_1);
-    if ( large_ds_buf_2 != NULL ) HDfree(large_ds_buf_2);
-    if ( large_ds_slice_buf != NULL ) HDfree(large_ds_slice_buf);
+#if CONTIG_HS_DR_PIO_TEST__RUN_TEST__DEBUG 
+    if ( MAINPROCESS ) {
+        HDfprintf(stdout, "test %d: Takedown complete.\n", test_num);
+    }
+#endif /* CONTIG_HS_DR_PIO_TEST__RUN_TEST__DEBUG */
+
+    *skips_ptr = tv_ptr->skips;
+    *total_tests_ptr += tv_ptr->total_tests;
+    *tests_run_ptr += tv_ptr->tests_run;
+    *tests_skipped_ptr += tv_ptr->tests_skipped;
 
     return;
 
-} /* contig_hyperslab_dr_pio_test__run_test() */
+} /* contig_hs_dr_pio_test__run_test() */
 
 
 /*-------------------------------------------------------------------------
- * Function:	contig_hyperslab_dr_pio_test(ShapeSameTestMethods sstest_type)
+ * Function:	contig_hs_dr_pio_test(ShapeSameTestMethods sstest_type)
  *
  * Purpose:	Test I/O to/from hyperslab selections of different rank in
  *		the parallel case.
@@ -1655,43 +2230,37 @@ contig_hyperslab_dr_pio_test__run_test(const int test_num,
  *-------------------------------------------------------------------------
  */
 
+#define CONTIG_HS_DR_PIO_TEST__DEBUG 0
+
 void
-contig_hyperslab_dr_pio_test(ShapeSameTestMethods sstest_type)
+contig_hs_dr_pio_test(ShapeSameTestMethods sstest_type)
 {
+    int         express_test;
+    int         local_express_test;
+    int         mpi_rank = -1;
     int	        test_num = 0;
     int		edge_size = 10;
     int		chunk_edge_size = 0;
     int	        small_rank;
     int	        large_rank;
-    int		skips[4] = {0, 0, 0, 0};
-    int		skip_counters[4] = {0, 0, 0, 0};
-    int		tests_skiped[4] = {0, 0, 0, 0};
     int		mpi_result;
+    int		skips = 0;
+    int		max_skips = 0;
+    /* The following table list the number of sub-tests skipped between 
+     * each test that is actually executed as a function of the express 
+     * test level.  Note that any value in excess of 4880 will cause all
+     * sub tests to be skipped.
+     */
+    int         max_skips_tbl[4] = {0, 4, 64, 1024};
     hid_t	dset_type = H5T_NATIVE_UINT;
-#ifdef H5_HAVE_GETTIMEOFDAY
-    hbool_t	time_tests = TRUE;
-    hbool_t	display_skips = FALSE;
-    int		local_express_test;
-    int		express_test;
-    int		i;
-    int		samples = 0;
-    int		sample_size = 1;
-    int		mpi_size = -1;
-    int         mpi_rank = -1;
-    int		local_skips[4];
-    const int	ind_contig_idx = 0;
-    const int	col_contig_idx = 1;
-    const int	ind_chunked_idx = 2;
-    const int	col_chunked_idx = 3;
-    const int	test_types = 4;
-    long long   max_test_time = 3000000; /* for one test */
-    long long	sample_times[4] = {0, 0, 0, 0};
-    struct timeval timeval_a;
-    struct timeval timeval_b;
-#endif /* H5_HAVE_GETTIMEOFDAY */
+    int64_t	total_tests = 0;
+    int64_t	tests_run = 0;
+    int64_t     tests_skipped = 0;
 
     HDcompile_assert(sizeof(uint32_t) == sizeof(unsigned));
 
+    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+
     local_express_test = GetTestExpress();
 
     mpi_result = MPI_Allreduce((void *)&local_express_test,
@@ -1703,198 +2272,130 @@ contig_hyperslab_dr_pio_test(ShapeSameTestMethods sstest_type)
 
     VRFY((mpi_result == MPI_SUCCESS ), "MPI_Allreduce(0) succeeded");
 
+    if ( local_express_test < 0 ) {
+        max_skips = max_skips_tbl[0];
+    } else if ( local_express_test > 3 ) {
+        max_skips = max_skips_tbl[3];
+    } else {
+        max_skips = max_skips_tbl[local_express_test];
+    }
+
     for ( large_rank = 3; large_rank <= PAR_SS_DR_MAX_RANK; large_rank++ ) {
 
         for ( small_rank = 2; small_rank < large_rank; small_rank++ ) {
-	  switch(sstest_type){
-	  case IND_CONTIG:
-	    /* contiguous data set, independent I/O */
-            chunk_edge_size = 0;
-            if ( skip_counters[ind_contig_idx] < skips[ind_contig_idx] ) {
-
-                skip_counters[ind_contig_idx]++;
-                tests_skiped[ind_contig_idx]++;
-		printf("Test skipped\n");
-            } else {
-                skip_counters[ind_contig_idx] = 0;
-                START_TIMER(time_tests, timeval_a, "HDgettimeofday(0) succeeds.");
-                contig_hyperslab_dr_pio_test__run_test(test_num,
+
+            switch(sstest_type){
+                case IND_CONTIG:
+                    /* contiguous data set, independent I/O */
+                    chunk_edge_size = 0;
+
+                    contig_hs_dr_pio_test__run_test(test_num,
                                                    edge_size,
                                                    chunk_edge_size,
                                                    small_rank,
                                                    large_rank,
                                                    FALSE,  
                                                    dset_type,
-                                                   express_test);
-                STOP_TIMER_AND_UPDATE(time_tests, timeval_b, \
-                                      "HDgettimeofday(1) succeeds.", \
-                                      sample_times[col_contig_idx]);
-            }
-            test_num++;
-	    break;
-	    /* end of case IND_CONTIG */
-
-	  case COL_CONTIG:
-	    /* contiguous data set, collective I/O */
-            chunk_edge_size = 0;
-            if ( skip_counters[col_contig_idx] < skips[col_contig_idx] ) {
-
-                skip_counters[col_contig_idx]++;
-                tests_skiped[col_contig_idx]++;
-		printf("Test skipped\n");
-            } else {
-                skip_counters[col_contig_idx] = 0;
-                START_TIMER(time_tests, timeval_a, "HDgettimeofday(2) succeeds.");
-                contig_hyperslab_dr_pio_test__run_test(test_num,
+                                                   express_test,
+                                                   &skips,
+                                                   max_skips,
+                                                   &total_tests,
+                                                   &tests_run,
+                                                   &tests_skipped);
+                    test_num++;
+                    break;
+                    /* end of case IND_CONTIG */
+
+                case COL_CONTIG:
+                    /* contiguous data set, collective I/O */
+                    chunk_edge_size = 0;
+
+                    contig_hs_dr_pio_test__run_test(test_num,
                                                    edge_size,
                                                    chunk_edge_size,
                                                    small_rank,
                                                    large_rank,
                                                    TRUE,  
                                                    dset_type,
-                                                   express_test);
-                STOP_TIMER_AND_UPDATE(time_tests, timeval_b, \
-                                      "HDgettimeofday(3) succeeds.", \
-                                      sample_times[ind_contig_idx]);
-            }
-            test_num++;
-	    break;
-	    /* end of case COL_CONTIG */
-
-	  case IND_CHUNKED:
-	    /* chunked data set, independent I/O */
-            chunk_edge_size = 5;
-            if ( skip_counters[ind_chunked_idx] < skips[ind_chunked_idx] ) {
-
-                skip_counters[ind_chunked_idx]++;
-                tests_skiped[ind_chunked_idx]++;
-		printf("Test skipped\n");
-            } else {
-                skip_counters[ind_chunked_idx] = 0;
-                START_TIMER(time_tests, timeval_a, "HDgettimeofday(4) succeeds.");
-                contig_hyperslab_dr_pio_test__run_test(test_num,
+                                                   express_test,
+                                                   &skips,
+                                                   max_skips,
+                                                   &total_tests,
+                                                   &tests_run,
+                                                   &tests_skipped);
+                    test_num++;
+                    break;
+                    /* end of case COL_CONTIG */
+
+                case IND_CHUNKED:
+                    /* chunked data set, independent I/O */
+                    chunk_edge_size = 5;
+
+                    contig_hs_dr_pio_test__run_test(test_num,
                                                    edge_size,
                                                    chunk_edge_size,
                                                    small_rank,
                                                    large_rank,
                                                    FALSE,  
                                                    dset_type,
-                                                   express_test);
-                STOP_TIMER_AND_UPDATE(time_tests, timeval_b, \
-                                      "HDgettimeofday(5) succeeds.", \
-                                      sample_times[col_chunked_idx]);
-            }
-            test_num++;
-	    break;
-	    /* end of case IND_CHUNKED */
-
-	  case COL_CHUNKED:
-	    /* chunked data set, collective I/O */
-            chunk_edge_size = 5;
-            if ( skip_counters[col_chunked_idx] < skips[col_chunked_idx] ) {
-
-                skip_counters[col_chunked_idx]++;
-                tests_skiped[col_chunked_idx]++;
-		printf("Test skipped\n");
-            } else {
-                skip_counters[col_chunked_idx] = 0;
-                START_TIMER(time_tests, timeval_a, "HDgettimeofday(6) succeeds.");
-                contig_hyperslab_dr_pio_test__run_test(test_num,
+                                                   express_test,
+                                                   &skips,
+                                                   max_skips,
+                                                   &total_tests,
+                                                   &tests_run,
+                                                   &tests_skipped);
+                    test_num++;
+                    break;
+                    /* end of case IND_CHUNKED */
+
+                case COL_CHUNKED:
+                    /* chunked data set, collective I/O */
+                    chunk_edge_size = 5;
+
+                    contig_hs_dr_pio_test__run_test(test_num,
                                                    edge_size,
                                                    chunk_edge_size,
                                                    small_rank,
                                                    large_rank,
                                                    TRUE,  
                                                    dset_type,
-                                                   express_test);
-                STOP_TIMER_AND_UPDATE(time_tests, timeval_b, \
-                                      "HDgettimeofday(7) succeeds.", \
-                                      sample_times[ind_chunked_idx]);
-            }
-            test_num++;
-	    break;
-	    /* end of case COL_CHUNKED */
-	  } /* end of switch(sstest_type) */
-
-#ifdef H5_HAVE_GETTIMEOFDAY
-            if ( time_tests ) {
-            
-                samples++;
-
-                if ( samples >= sample_size ) {
-
-                    int result;
-
-                    time_tests = FALSE;
-
-                    max_test_time = ((long long)sample_size) * max_test_time;
-
-                    for ( i = 0; i < test_types; i++ ) {
-
-                        if ( ( express_test == 0 ) ||
-                             ( sample_times[i] <= max_test_time ) ) {
-
-                            local_skips[i] = 0;
-
-                        } else {
-
-                            local_skips[i] = (int)(sample_times[i] / max_test_time);
-                        }
-                    }
-
-                    /* do an MPI_Allreduce() with the skips vector to ensure that 
-                     * all processes agree on its contents.
-                     */
-                    result = MPI_Allreduce((void *)local_skips,
-                                           (void *)skips,
-                                           test_types,
-                                           MPI_INT,
-                                           MPI_MAX,
-                                           MPI_COMM_WORLD);
-                    VRFY((result == MPI_SUCCESS ), \
-                         "MPI_Allreduce(1) succeeded");
-                }
+                                                   express_test,
+                                                   &skips,
+                                                   max_skips,
+                                                   &total_tests,
+                                                   &tests_run,
+                                                   &tests_skipped);
+                    test_num++;
+                    break;
+                    /* end of case COL_CHUNKED */
+
+                default:
+                    VRFY((FALSE), "unknown test type");
+                    break;
+
+            } /* end of switch(sstest_type) */
+#if CONTIG_HS_DR_PIO_TEST__DEBUG
+            if ( ( MAINPROCESS ) && ( tests_skipped > 0 ) ) {
+                HDfprintf(stdout, "	run/skipped/total = %lld/%lld/%lld.\n",
+                          tests_run, tests_skipped, total_tests);
             }
-#endif /* H5_HAVE_GETTIMEOFDAY */
-
+#endif /* CONTIG_HS_DR_PIO_TEST__DEBUG */
         }
     }
 
-#ifdef H5_HAVE_GETTIMEOFDAY
-    if ( ( MAINPROCESS ) && ( display_skips ) ) {
-
-        HDfprintf(stdout, "***********************************\n");
-        HDfprintf(stdout, "express_test = %d.\n", express_test);
-        HDfprintf(stdout, "sample_size = %d, max_test_time = %lld.\n",
-                  sample_size, max_test_time);
-        HDfprintf(stdout, "sample_times[]  = %lld, %lld, %lld, %lld.\n", 
-                  sample_times[ind_contig_idx],
-                  sample_times[col_contig_idx],
-                  sample_times[ind_chunked_idx],
-                  sample_times[col_chunked_idx]);
-        HDfprintf(stdout, "skips[]  = %d, %d, %d, %d.\n", 
-                  skips[ind_contig_idx],
-                  skips[col_contig_idx],
-                  skips[ind_chunked_idx],
-                  skips[col_chunked_idx]);
-        HDfprintf(stdout, "tests_skiped[]  = %d, %d, %d, %d.\n", 
-                  tests_skiped[ind_contig_idx],
-                  tests_skiped[col_contig_idx],
-                  tests_skiped[ind_chunked_idx],
-                  tests_skiped[col_chunked_idx]);
-        HDfprintf(stdout, "test_num          = %d.\n", test_num);
-        HDfprintf(stdout, "***********************************\n");
+    if ( ( MAINPROCESS ) && ( tests_skipped > 0 ) ) {
+        HDfprintf(stdout, "	%lld of %lld subtests skipped to expedite testing.\n",
+                  tests_skipped, total_tests);
     }
-#endif /* H5_HAVE_GETTIMEOFDAY */
 
     return;
 
-} /* contig_hyperslab_dr_pio_test() */
+} /* contig_hs_dr_pio_test() */
 
 
 /****************************************************************
 **
-**  checker_board_hyperslab_dr_pio_test__select_checker_board():  
+**  ckrbrd_hs_dr_pio_test__slct_ckrbrd():  
 **	Given a data space of tgt_rank, and dimensions:
 **
 **		(mpi_size + 1), edge_size, ... , edge_size
@@ -1915,21 +2416,19 @@ contig_hyperslab_dr_pio_test(ShapeSameTestMethods sstest_type)
 **
 ****************************************************************/
 
-#define CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG 0
+#define CKRBRD_HS_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG 0
 
 static void
-checker_board_hyperslab_dr_pio_test__select_checker_board(
-                                 const int mpi_rank,
-                                 const hid_t tgt_sid,
-                                 const int tgt_rank,
-                                 const int edge_size,
-                                 const int checker_edge_size,
-                                 const int sel_rank,
-                                 hsize_t sel_start[])
+ckrbrd_hs_dr_pio_test__slct_ckrbrd(const int mpi_rank,
+                                   const hid_t tgt_sid,
+                                   const int tgt_rank,
+                                   const int edge_size,
+                                   const int checker_edge_size,
+                                   const int sel_rank,
+                                   hsize_t sel_start[])
 {
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG 
-    const char *	fcnName = 
-			"checker_board_hyperslab_dr_pio_test__select_checker_board():";
+#if CKRBRD_HS_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG 
+    const char *	fcnName = "ckrbrd_hs_dr_pio_test__slct_ckrbrd():";
 #endif 
     hbool_t		first_selection = TRUE;
     int                 i, j, k, l, m;
@@ -1960,14 +2459,14 @@ checker_board_hyperslab_dr_pio_test__select_checker_board(
     HDassert( n_cube_offset >= 0 );
     HDassert( n_cube_offset <= sel_offset );
 
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG 
+#if CKRBRD_HS_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG 
     HDfprintf(stdout, "%s:%d: edge_size/checker_edge_size = %d/%d\n",
               fcnName, mpi_rank, edge_size, checker_edge_size);
     HDfprintf(stdout, "%s:%d: sel_rank/sel_offset = %d/%d.\n", 
               fcnName, mpi_rank, sel_rank, sel_offset);
     HDfprintf(stdout, "%s:%d: tgt_rank/n_cube_offset = %d/%d.\n", 
               fcnName, mpi_rank, tgt_rank, n_cube_offset);
-#endif /* CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG */ 
+#endif /* CKRBRD_HS_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG */ 
 
     /* First, compute the base count (which assumes start == 0
      * for the associated offset) and offset_count (which
@@ -2117,7 +2616,7 @@ checker_board_hyperslab_dr_pio_test__select_checker_board(
 
                         if ( ((i + j + k + l + m) % 2) == 0 ) {
 
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG 
+#if CKRBRD_HS_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG 
                             HDfprintf(stdout, "%s%d: *** first_selection = %d ***\n", 
                                       fcnName, mpi_rank, (int)first_selection);
                             HDfprintf(stdout, "%s:%d: i/j/k/l/m = %d/%d/%d/%d/%d\n",
@@ -2204,10 +2703,10 @@ checker_board_hyperslab_dr_pio_test__select_checker_board(
     } while ( ( i <= 1 ) &&
               ( 0 >= sel_offset ) );
 
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG 
+#if CKRBRD_HS_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG 
     HDfprintf(stdout, "%s%d: H5Sget_select_npoints(tgt_sid) = %d.\n",
               fcnName, mpi_rank, (int)H5Sget_select_npoints(tgt_sid));
-#endif /* CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG */
+#endif /* CKRBRD_HS_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG */
 
     /* Clip the selection back to the data space proper. */
 
@@ -2224,20 +2723,20 @@ checker_board_hyperslab_dr_pio_test__select_checker_board(
 
     VRFY((ret != FAIL), "H5Sselect_hyperslab(AND) succeeded");
 
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG 
+#if CKRBRD_HS_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG 
     HDfprintf(stdout, "%s%d: H5Sget_select_npoints(tgt_sid) = %d.\n",
               fcnName, mpi_rank, (int)H5Sget_select_npoints(tgt_sid));
     HDfprintf(stdout, "%s%d: done.\n", fcnName, mpi_rank);
-#endif /* CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG */
+#endif /* CKRBRD_HS_DR_PIO_TEST__SELECT_CHECKER_BOARD__DEBUG */
 
     return;
 
-} /* checker_board_hyperslab_dr_pio_test__select_checker_board() */
+} /* ckrbrd_hs_dr_pio_test__slct_ckrbrd() */
 
 
 /****************************************************************
 **
-**  checker_board_hyperslab_dr_pio_test__verify_data(): 
+**  ckrbrd_hs_dr_pio_test__verify_data(): 
 **
 **	Examine the supplied buffer to see if it contains the 
 **	expected data.  Return TRUE if it does, and FALSE 
@@ -2291,19 +2790,18 @@ checker_board_hyperslab_dr_pio_test__select_checker_board(
 **
 ****************************************************************/
 
-#define CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__VERIFY_DATA__DEBUG 0
+#define CKRBRD_HS_DR_PIO_TEST__VERIFY_DATA__DEBUG 0
 
 static hbool_t
-checker_board_hyperslab_dr_pio_test__verify_data(uint32_t * buf_ptr,
-                                                 const int rank,
-                                                 const int edge_size,
-                                                 const int checker_edge_size,
-                                                 uint32_t first_expected_val,
-                                                 hbool_t buf_starts_in_checker)
+ckrbrd_hs_dr_pio_test__verify_data(uint32_t * buf_ptr,
+                                   const int rank,
+                                   const int edge_size,
+                                   const int checker_edge_size,
+                                   uint32_t first_expected_val,
+                                   hbool_t buf_starts_in_checker)
 {
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__VERIFY_DATA__DEBUG
-    const char *	fcnName = 
-			"checker_board_hyperslab_dr_pio_test__verify_data():";
+#if CKRBRD_HS_DR_PIO_TEST__VERIFY_DATA__DEBUG
+    const char *	fcnName = "ckrbrd_hs_dr_pio_test__verify_data():";
 #endif
     hbool_t good_data = TRUE;
     hbool_t in_checker;
@@ -2322,7 +2820,7 @@ checker_board_hyperslab_dr_pio_test__verify_data(uint32_t * buf_ptr,
     HDassert( checker_edge_size <= edge_size );
     HDassert( test_max_rank <= PAR_SS_DR_MAX_RANK );
 
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__VERIFY_DATA__DEBUG 
+#if CKRBRD_HS_DR_PIO_TEST__VERIFY_DATA__DEBUG 
 
     int		mpi_rank;
 
@@ -2385,13 +2883,13 @@ checker_board_hyperslab_dr_pio_test__verify_data(uint32_t * buf_ptr,
 
                     m = 0;
                     z = 0;
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__VERIFY_DATA__DEBUG 
+#if CKRBRD_HS_DR_PIO_TEST__VERIFY_DATA__DEBUG 
                     HDfprintf(stdout, "%d, %d, %d, %d, %d:", i, j, k, l, m);
 #endif
                     in_checker = start_in_checker[3];
                     do
                     {
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__VERIFY_DATA__DEBUG 
+#if CKRBRD_HS_DR_PIO_TEST__VERIFY_DATA__DEBUG 
                         HDfprintf(stdout, " %d", (int)(*val_ptr));
 #endif
                         if ( z >= checker_edge_size ) {
@@ -2426,7 +2924,7 @@ checker_board_hyperslab_dr_pio_test__verify_data(uint32_t * buf_ptr,
  
                     } while ( ( rank >= (test_max_rank - 4) ) &&
                               ( m < edge_size ) );
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__VERIFY_DATA__DEBUG 
+#if CKRBRD_HS_DR_PIO_TEST__VERIFY_DATA__DEBUG 
                     HDfprintf(stdout, "\n");
 #endif
                     l++;
@@ -2448,668 +2946,118 @@ checker_board_hyperslab_dr_pio_test__verify_data(uint32_t * buf_ptr,
 
     return(good_data);
 
-} /* checker_board_hyperslab_dr_pio_test__verify_data() */
+} /* ckrbrd_hs_dr_pio_test__verify_data() */
 
 
 /*-------------------------------------------------------------------------
- * Function:	checker_board_hyperslab_dr_pio_test__run_test()
+ * Function:	ckrbrd_hs_dr_pio_test__d2m_l2s()
  *
- * Purpose:	Test I/O to/from checkerboard selections of hyperslabs of 
- *		different rank in the parallel.
+ * Purpose:	Part one of a series of tests of I/O to/from hyperslab 
+ *		selections of different rank in the parallel.
+ *
+ *		Verify that we can read from disk correctly using checker
+ *		board selections of different rank that 
+ *              H5S_select_shape_same() views as being of the same shape.
+ *
+ *              In this function, we test this by reading small_rank - 1 
+ *		checker board slices from the on disk large cube, and 
+ *		verifying that the data read is correct.  Verify that 
+ *		H5S_select_shape_same() returns true on the memory and 
+ *		file selections.
  *
  * Return:	void
  *
- * Programmer:	JRM -- 10/10/09
+ * Programmer:	JRM -- 9/15/11
  *
  * Modifications:
  *
- *		JRM -- 9/16/10
- *		Added the express_test parameter.  Use it to control 
- *		whether we set an alignment, and whether we allocate
- *		chunks such that no two processes will normally touch
- *		the same chunk.
+ *		None.
  *
  *-------------------------------------------------------------------------
  */
 
-#define PAR_SS_DR_MAX_RANK	5
-#define CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 0
+#define CHECKER_BOARD_HS_DR_PIO_TEST__D2M_L2S__DEBUG 0
 
 static void
-checker_board_hyperslab_dr_pio_test__run_test(const int test_num,
-                                              const int edge_size,
-                                              const int checker_edge_size,
-                                              const int chunk_edge_size,
-                                              const int small_rank,
-                                              const int large_rank,
-                                              const hbool_t use_collective_io,
-                                              const hid_t dset_type,
-                                              const int express_test)
+ckrbrd_hs_dr_pio_test__d2m_l2s(struct hs_dr_pio_test_vars_t * tv_ptr)
 {
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG
-    const char *fcnName = "checker_board_hyperslab_dr_pio_test__run_test()";
-#endif /* CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG */
-    const char *filename;
-    hbool_t	use_gpfs = FALSE;   /* Use GPFS hints */
+#if CHECKER_BOARD_HS_DR_PIO_TEST__D2M_L2S__DEBUG 
+    const char *fcnName = "ckrbrd_hs_dr_pio_test__d2m_l2s()";
+    uint32_t  * ptr_0;
+#endif /* CHECKER_BOARD_HS_DR_PIO_TEST__D2M_L2S__DEBUG */
     hbool_t	data_ok = FALSE;
-    hbool_t	mis_match = FALSE;
     int		i, j, k, l;
-    size_t      u;
-    int         mrc;
-    size_t      start_index;
-    size_t      stop_index;
-    int		small_ds_offset;
-    int         large_ds_offset;
-    const int   test_max_rank = 5;  /* must update code if this changes */
     uint32_t	expected_value;
-    uint32_t  * small_ds_buf_0 = NULL;
-    uint32_t  * small_ds_buf_1 = NULL;
-    uint32_t  * small_ds_buf_2 = NULL;
-    uint32_t  * small_ds_slice_buf = NULL;
-    uint32_t  * large_ds_buf_0 = NULL;
-    uint32_t  * large_ds_buf_1 = NULL;
-    uint32_t  * large_ds_buf_2 = NULL;
-    uint32_t  * large_ds_slice_buf = NULL;
-    uint32_t  * ptr_0;
-    uint32_t  * ptr_1;
-    int		mpi_rank;
-    int		mpi_size;
-    MPI_Comm    mpi_comm = MPI_COMM_NULL;
-    MPI_Info	mpi_info = MPI_INFO_NULL;
-    hid_t       fid;			/* HDF5 file ID */
-    hid_t	acc_tpl;		/* File access templates */
-    hid_t	xfer_plist = H5P_DEFAULT;
-    hid_t       full_mem_small_ds_sid;
-    hid_t       full_file_small_ds_sid;
-    hid_t       mem_small_ds_sid;
-    hid_t       file_small_ds_sid_0;
-    hid_t       file_small_ds_sid_1;
-    hid_t	small_ds_slice_sid;
-    hid_t       full_mem_large_ds_sid;
-    hid_t       full_file_large_ds_sid;
-    hid_t       mem_large_ds_sid;
-    hid_t       file_large_ds_sid_0;
-    hid_t       file_large_ds_sid_1;
-    hid_t       file_large_ds_process_slice_sid;
-    hid_t       mem_large_ds_process_slice_sid;
-    hid_t	large_ds_slice_sid;
-    hid_t       small_ds_dcpl_id = H5P_DEFAULT;
-    hid_t       large_ds_dcpl_id = H5P_DEFAULT;
-    hid_t       small_dataset;     /* Dataset ID                   */
-    hid_t       large_dataset;     /* Dataset ID                   */
-    size_t      small_ds_size = 1;
-    size_t      small_ds_slice_size = 1;
-    size_t      large_ds_size = 1;
-    size_t      large_ds_slice_size = 1;
-    hsize_t     dims[PAR_SS_DR_MAX_RANK];
-    hsize_t     chunk_dims[PAR_SS_DR_MAX_RANK];
-    hsize_t     start[PAR_SS_DR_MAX_RANK];
-    hsize_t     stride[PAR_SS_DR_MAX_RANK];
-    hsize_t     count[PAR_SS_DR_MAX_RANK];
-    hsize_t     block[PAR_SS_DR_MAX_RANK];
+    int		mpi_rank; /* needed by VRFY */
     hsize_t     sel_start[PAR_SS_DR_MAX_RANK];
     htri_t      check;          /* Shape comparison return value */
     herr_t	ret;		/* Generic return value */
 
-    HDassert( edge_size >= 6 );
-    HDassert( edge_size >= chunk_edge_size );
-    HDassert( ( chunk_edge_size == 0 ) || ( chunk_edge_size >= 3 ) );
-    HDassert( 1 < small_rank );
-    HDassert( small_rank < large_rank );
-    HDassert( large_rank <= test_max_rank );
-    HDassert( test_max_rank <= PAR_SS_DR_MAX_RANK );
-
-    MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
-    MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
-
-    HDassert( mpi_size >= 1 );
-
-    mpi_comm = MPI_COMM_WORLD;
-    mpi_info = MPI_INFO_NULL;
-
-    for ( i = 0; i < small_rank - 1; i++ )
-    {
-        small_ds_size *= (size_t)edge_size;
-        small_ds_slice_size *= (size_t)edge_size;
-    }
-    small_ds_size *= (size_t)(mpi_size + 1);
-
-    small_ds_offset = PAR_SS_DR_MAX_RANK - small_rank;
-
-    HDassert( 0 < small_ds_offset );
-    HDassert( small_ds_offset < PAR_SS_DR_MAX_RANK );
-
-
-    for ( i = 0; i < large_rank - 1; i++ ) {
-
-        large_ds_size *= (size_t)edge_size;
-        large_ds_slice_size *= (size_t)edge_size;
-    }
-    large_ds_size *= (size_t)(mpi_size + 1);
-
-    large_ds_offset = PAR_SS_DR_MAX_RANK - large_rank;
-
-    HDassert( 0 <= large_ds_offset );
-    HDassert( large_ds_offset < PAR_SS_DR_MAX_RANK );
-
-
-    /* Allocate buffers */
-    small_ds_buf_0 = (uint32_t *)HDmalloc(sizeof(uint32_t) * small_ds_size);
-    VRFY((small_ds_buf_0 != NULL), "malloc of small_ds_buf_0 succeeded");
-
-    small_ds_buf_1 = (uint32_t *)HDmalloc(sizeof(uint32_t) * small_ds_size);
-    VRFY((small_ds_buf_1 != NULL), "malloc of small_ds_buf_1 succeeded");
-
-    small_ds_buf_2 = (uint32_t *)HDmalloc(sizeof(uint32_t) * small_ds_size);
-    VRFY((small_ds_buf_2 != NULL), "malloc of small_ds_buf_2 succeeded");
-
-    small_ds_slice_buf = 
-	(uint32_t *)HDmalloc(sizeof(uint32_t) * small_ds_slice_size);
-    VRFY((small_ds_slice_buf != NULL), "malloc of small_ds_slice_buf succeeded");
-
-    large_ds_buf_0 = (uint32_t *)HDmalloc(sizeof(uint32_t) * large_ds_size);
-    VRFY((large_ds_buf_0 != NULL), "malloc of large_ds_buf_0 succeeded");
-
-    large_ds_buf_1 = (uint32_t *)HDmalloc(sizeof(uint32_t) * large_ds_size);
-    VRFY((large_ds_buf_1 != NULL), "malloc of large_ds_buf_1 succeeded");
-
-    large_ds_buf_2 = (uint32_t *)HDmalloc(sizeof(uint32_t) * large_ds_size);
-    VRFY((large_ds_buf_2 != NULL), "malloc of large_ds_buf_2 succeeded");
-
-    large_ds_slice_buf = 
-	(uint32_t *)HDmalloc(sizeof(uint32_t) * large_ds_slice_size);
-    VRFY((large_ds_slice_buf != NULL), "malloc of large_ds_slice_buf succeeded");
-
-    /* initialize the buffers */
-
-    ptr_0 = small_ds_buf_0;
-    for(i = 0; i < (int)small_ds_size; i++)
-        *ptr_0++ = (uint32_t)i;
-    HDmemset(small_ds_buf_1, 0, sizeof(uint32_t) * small_ds_size);
-    HDmemset(small_ds_buf_2, 0, sizeof(uint32_t) * small_ds_size);
-
-    HDmemset(small_ds_slice_buf, 0, sizeof(uint32_t) * small_ds_slice_size);
-
-    ptr_0 = large_ds_buf_0;
-    for(i = 0; i < (int)large_ds_size; i++)
-        *ptr_0++ = (uint32_t)i;
-    HDmemset(large_ds_buf_1, 0, sizeof(uint32_t) * large_ds_size);
-    HDmemset(large_ds_buf_2, 0, sizeof(uint32_t) * large_ds_size);
-
-    HDmemset(large_ds_slice_buf, 0, sizeof(uint32_t) * large_ds_slice_size);
-
-    filename = (const char *)GetTestParameters();
-    HDassert( filename != NULL );
-
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG
-    if ( MAINPROCESS ) {
-
-        HDfprintf(stdout, "%s:%d: test num = %d.\n", fcnName, mpi_rank, test_num);
-        HDfprintf(stdout, "%s:%d: mpi_size = %d.\n", fcnName, mpi_rank, mpi_size);
-        HDfprintf(stdout, 
-                  "%s:%d: small/large rank = %d/%d, use_collective_io = %d.\n",
-                  fcnName, mpi_rank, small_rank, large_rank, (int)use_collective_io);
-        HDfprintf(stdout, "%s:%d: edge_size = %d, chunk_edge_size = %d.\n",
-                  fcnName, mpi_rank, edge_size, chunk_edge_size);
-        HDfprintf(stdout, "%s:%d: checker_edge_size = %d.\n", 
-                  fcnName, mpi_rank, checker_edge_size);
-        HDfprintf(stdout, "%s:%d: small_ds_size = %d, large_ds_size = %d.\n",
-                  fcnName, mpi_rank, (int)small_ds_size, (int)large_ds_size);
-        HDfprintf(stdout, "%s:%d: filename = %s.\n", fcnName, mpi_rank, filename);
-    }
-#endif /* CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG */
-
-    /* ----------------------------------------
-     * CREATE AN HDF5 FILE WITH PARALLEL ACCESS
-     * ---------------------------------------*/
-    /* setup file access template */
-    acc_tpl = create_faccess_plist(mpi_comm, mpi_info, facc_type, use_gpfs);
-    VRFY((acc_tpl >= 0), "create_faccess_plist() succeeded");
-
-    /* set the alignment -- need it large so that we aren't always hitting the
-     * the same file system block.  Do this only if express_test is greater
-     * than zero.
-     */
-    if ( express_test > 0 ) {
-
-        ret = H5Pset_alignment(acc_tpl, (hsize_t)0, SHAPE_SAME_TEST_ALIGNMENT);
-        VRFY((ret != FAIL), "H5Pset_alignment() succeeded");
-    }
-
-    /* create the file collectively */
-    fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, acc_tpl);
-    VRFY((fid >= 0), "H5Fcreate succeeded");
-
-    MESG("File opened.");
-
-    /* Release file-access template */
-    ret = H5Pclose(acc_tpl);
-    VRFY((ret >= 0), "H5Pclose(acc_tpl) succeeded");
-
-
-    /* setup dims: */
-    dims[0] = (hsize_t)(mpi_size + 1);
-    dims[1] = dims[2] = dims[3] = dims[4] = (hsize_t)edge_size;
-
-
-    /* Create small ds dataspaces */
-    full_mem_small_ds_sid = H5Screate_simple(small_rank, dims, NULL);
-    VRFY((full_mem_small_ds_sid != 0), 
-         "H5Screate_simple() full_mem_small_ds_sid succeeded");
-
-    full_file_small_ds_sid = H5Screate_simple(small_rank, dims, NULL);
-    VRFY((full_file_small_ds_sid != 0), 
-         "H5Screate_simple() full_file_small_ds_sid succeeded");
-
-    mem_small_ds_sid = H5Screate_simple(small_rank, dims, NULL);
-    VRFY((mem_small_ds_sid != 0), 
-	 "H5Screate_simple() mem_small_ds_sid succeeded");
-
-    file_small_ds_sid_0 = H5Screate_simple(small_rank, dims, NULL);
-    VRFY((file_small_ds_sid_0 != 0), 
-         "H5Screate_simple() file_small_ds_sid_0 succeeded");
-
-    file_small_ds_sid_1 = H5Screate_simple(small_rank, dims, NULL);
-    VRFY((file_small_ds_sid_1 != 0), 
-         "H5Screate_simple() file_small_ds_sid_1 succeeded");
-
-    small_ds_slice_sid = H5Screate_simple(small_rank - 1, &(dims[1]), NULL);
-    VRFY((small_ds_slice_sid != 0), 
-         "H5Screate_simple() small_ds_slice_sid succeeded");
-
-
-    /* Create large ds dataspaces */
-    full_mem_large_ds_sid = H5Screate_simple(large_rank, dims, NULL);
-    VRFY((full_mem_large_ds_sid != 0), 
-         "H5Screate_simple() full_mem_large_ds_sid succeeded");
-
-    full_file_large_ds_sid = H5Screate_simple(large_rank, dims, NULL);
-    VRFY((full_file_large_ds_sid != FAIL), 
-         "H5Screate_simple() full_file_large_ds_sid succeeded");
-
-    mem_large_ds_sid = H5Screate_simple(large_rank, dims, NULL);
-    VRFY((mem_large_ds_sid != FAIL), 
-         "H5Screate_simple() mem_large_ds_sid succeeded");
-
-    file_large_ds_sid_0 = H5Screate_simple(large_rank, dims, NULL);
-    VRFY((file_large_ds_sid_0 != FAIL), 
-         "H5Screate_simple() file_large_ds_sid_0 succeeded");
-
-    file_large_ds_sid_1 = H5Screate_simple(large_rank, dims, NULL);
-    VRFY((file_large_ds_sid_1 != FAIL), 
-         "H5Screate_simple() file_large_ds_sid_1 succeeded");
-
-    mem_large_ds_process_slice_sid = H5Screate_simple(large_rank, dims, NULL);
-    VRFY((mem_large_ds_process_slice_sid != FAIL), 
-         "H5Screate_simple() mem_large_ds_process_slice_sid succeeded");
-
-    file_large_ds_process_slice_sid = H5Screate_simple(large_rank, dims, NULL);
-    VRFY((file_large_ds_process_slice_sid != FAIL), 
-         "H5Screate_simple() file_large_ds_process_slice_sid succeeded");
-
-
-    large_ds_slice_sid = H5Screate_simple(large_rank - 1, &(dims[1]), NULL);
-    VRFY((large_ds_slice_sid != 0), 
-         "H5Screate_simple() large_ds_slice_sid succeeded");
-
-
-    /* if chunk edge size is greater than zero, set up the small and
-     * large data set creation property lists to specify chunked
-     * datasets.
-     */
-    if ( chunk_edge_size > 0 ) {
-
-        /* Under Lustre (and perhaps other parallel file systems?) we get 
-	 * locking delays when two or more processes attempt to access the 
-         * same file system block.
-         *
-         * To minimize this problem, I have changed chunk_dims[0] 
-         * from (mpi_size + 1) to just when any sort of express test is
-         * selected.  Given the structure of the test, and assuming we 
-         * set the alignment large enough, this avoids the contention 
-         * issue by seeing to it that each chunk is only accessed by one 
-         * process.
-         *
-         * One can argue as to whether this is a good thing to do in our 
-         * tests, but for now it is necessary if we want the test to complete
-         * in a reasonable amount of time.
-         *
-         *                                         JRM -- 9/16/10
-         */
-        if ( express_test == 0 ) {
-
-            chunk_dims[0] = 1;
-
-        } else {
-
-            chunk_dims[0] = 1;
-        }
-
-        chunk_dims[1] = chunk_dims[2] = 
-                        chunk_dims[3] = chunk_dims[4] = (hsize_t)chunk_edge_size;
-
-        small_ds_dcpl_id = H5Pcreate(H5P_DATASET_CREATE);
-        VRFY((ret != FAIL), "H5Pcreate() small_ds_dcpl_id succeeded");
-
-        ret = H5Pset_layout(small_ds_dcpl_id, H5D_CHUNKED);
-        VRFY((ret != FAIL), "H5Pset_layout() small_ds_dcpl_id succeeded");
-
-        ret = H5Pset_chunk(small_ds_dcpl_id, small_rank, chunk_dims);
-        VRFY((ret != FAIL), "H5Pset_chunk() small_ds_dcpl_id succeeded");
-
-
-        large_ds_dcpl_id = H5Pcreate(H5P_DATASET_CREATE);
-        VRFY((ret != FAIL), "H5Pcreate() large_ds_dcpl_id succeeded");
-
-        ret = H5Pset_layout(large_ds_dcpl_id, H5D_CHUNKED);
-        VRFY((ret != FAIL), "H5Pset_layout() large_ds_dcpl_id succeeded");
-
-        ret = H5Pset_chunk(large_ds_dcpl_id, large_rank, chunk_dims);
-        VRFY((ret != FAIL), "H5Pset_chunk() large_ds_dcpl_id succeeded");
-    }
-
-    /* create the small dataset */
-    small_dataset = H5Dcreate2(fid, "small_dataset", dset_type,
-                               file_small_ds_sid_0, H5P_DEFAULT,
-                               small_ds_dcpl_id, H5P_DEFAULT);
-    VRFY((ret != FAIL), "H5Dcreate2() small_dataset succeeded");
-
-    /* create the large dataset */
-    large_dataset = H5Dcreate2(fid, "large_dataset", dset_type,
-                               file_large_ds_sid_0, H5P_DEFAULT,
-                               large_ds_dcpl_id, H5P_DEFAULT);
-    VRFY((ret != FAIL), "H5Dcreate2() large_dataset succeeded");
-
-
-    /* setup xfer property list */
-    xfer_plist = H5Pcreate(H5P_DATASET_XFER);
-    VRFY((xfer_plist >= 0), "H5Pcreate(H5P_DATASET_XFER) succeeded");
-
-    if(use_collective_io) {
-        ret = H5Pset_dxpl_mpio(xfer_plist, H5FD_MPIO_COLLECTIVE);
-        VRFY((ret >= 0), "H5Pset_dxpl_mpio succeeded");
-    }
-
-
-    /* setup selection to write initial data to the small and large data sets */
-    start[0] = (hsize_t)mpi_rank;
-    stride[0] = (hsize_t)(2 * (mpi_size + 1));
-    count[0] = 1;
-    block[0] = 1;
-
-    for ( i = 1; i < large_rank; i++ ) {
-
-        start[i] = 0;
-        stride[i] = (hsize_t)(2 * edge_size);
-        count[i] = 1;
-        block[i] = (hsize_t)edge_size;
-    }
-
-    /* setup selections for writing initial data to the small data set */
-    ret = H5Sselect_hyperslab(mem_small_ds_sid,
-                              H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
-    VRFY((ret >= 0), "H5Sselect_hyperslab(mem_small_ds_sid, set) suceeded");
-
-    ret = H5Sselect_hyperslab(file_small_ds_sid_0,
-                              H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
-    VRFY((ret >= 0), "H5Sselect_hyperslab(file_small_ds_sid_0, set) suceeded");
-
-    if ( MAINPROCESS ) { /* add an additional slice to the selections */
-
-        start[0] = (hsize_t)mpi_size;
-
-        ret = H5Sselect_hyperslab(mem_small_ds_sid,
-                                  H5S_SELECT_OR,
-                                  start,
-                                  stride,
-                                  count,
-                                  block);
-        VRFY((ret>= 0), "H5Sselect_hyperslab(mem_small_ds_sid, or) suceeded");
-
-        ret = H5Sselect_hyperslab(file_small_ds_sid_0,
-                                  H5S_SELECT_OR,
-                                  start,
-                                  stride,
-                                  count,
-                                  block);
-        VRFY((ret>= 0), "H5Sselect_hyperslab(file_small_ds_sid_0, or) suceeded");
-    }
-
-
-    /* write the initial value of the small data set to file */
-    ret = H5Dwrite(small_dataset, dset_type, mem_small_ds_sid, file_small_ds_sid_0,
-                   xfer_plist, small_ds_buf_0);
-    VRFY((ret >= 0), "H5Dwrite() small_dataset initial write succeeded");
-
-
-    /* sync with the other processes before checking data */
-    if ( ! use_collective_io ) {
-
-        mrc = MPI_Barrier(MPI_COMM_WORLD);
-        VRFY((mrc==MPI_SUCCESS), "Sync after small dataset writes");
-    }
-
-    /* read the small data set back to verify that it contains the 
-     * expected data.  Note that each process reads in the entire 
-     * data set and verifies it.
-     */
-    ret = H5Dread(small_dataset,
-                  H5T_NATIVE_UINT32,
-                  full_mem_small_ds_sid,
-                  full_file_small_ds_sid,
-                  xfer_plist,
-                  small_ds_buf_1);
-    VRFY((ret >= 0), "H5Dread() small_dataset initial read succeeded");
-
-
-    /* verify that the correct data was written to the small data set */
-    expected_value = 0;
-    mis_match = FALSE;
-    ptr_1 = small_ds_buf_1;
-
-    i = 0;
-    for ( i = 0; i < (int)small_ds_size; i++ ) {
-
-        if ( *ptr_1 != expected_value ) {
-
-            mis_match = TRUE;
-        }
-        ptr_1++;
-        expected_value++;
-    }
-    VRFY( (mis_match == FALSE), "small ds init data good.");
-
-
-
-    /* setup selections for writing initial data to the large data set */
-
-    start[0] = (hsize_t)mpi_rank;
-
-    ret = H5Sselect_hyperslab(mem_large_ds_sid,
-                              H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
-    VRFY((ret >= 0), "H5Sselect_hyperslab(mem_large_ds_sid, set) suceeded");
-
-    ret = H5Sselect_hyperslab(file_large_ds_sid_0,
-                              H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
-    VRFY((ret >= 0), "H5Sselect_hyperslab(file_large_ds_sid_0, set) suceeded");
- 
-    /* In passing, setup the process slice data spaces as well */
-
-    ret = H5Sselect_hyperslab(mem_large_ds_process_slice_sid,
-                              H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
-    VRFY((ret >= 0), 
-         "H5Sselect_hyperslab(mem_large_ds_process_slice_sid, set) suceeded");
-
-    ret = H5Sselect_hyperslab(file_large_ds_process_slice_sid,
-                              H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
-    VRFY((ret >= 0), 
-         "H5Sselect_hyperslab(file_large_ds_process_slice_sid, set) suceeded");
-
-    if ( MAINPROCESS ) { /* add an additional slice to the selections */
-
-        start[0] = (hsize_t)mpi_size;
-
-        ret = H5Sselect_hyperslab(mem_large_ds_sid,
-                                  H5S_SELECT_OR,
-                                  start,
-                                  stride,
-                                  count,
-                                  block);
-        VRFY((ret>= 0), "H5Sselect_hyperslab(mem_large_ds_sid, or) suceeded");
-
-        ret = H5Sselect_hyperslab(file_large_ds_sid_0,
-                                  H5S_SELECT_OR,
-                                  start,
-                                  stride,
-                                  count,
-                                  block);
-        VRFY((ret>= 0), "H5Sselect_hyperslab(file_large_ds_sid_0, or) suceeded");
-    }
-
-
-    /* write the initial value of the large data set to file */
-    ret = H5Dwrite(large_dataset, dset_type, mem_large_ds_sid, file_large_ds_sid_0,
-                   xfer_plist, large_ds_buf_0);
-    if ( ret < 0 ) H5Eprint2(H5E_DEFAULT, stderr);
-    VRFY((ret >= 0), "H5Dwrite() large_dataset initial write succeeded");
-
-
-    /* sync with the other processes before checking data */
-    if ( ! use_collective_io ) {
-
-        mrc = MPI_Barrier(MPI_COMM_WORLD);
-        VRFY((mrc==MPI_SUCCESS), "Sync after large dataset writes");
-    }
-
-
-    /* read the small data set back to verify that it contains the 
-     * expected data.  Note that each process reads in the entire 
-     * data set.
-     */
-    ret = H5Dread(large_dataset,
-                  H5T_NATIVE_UINT32,
-                  full_mem_large_ds_sid,
-                  full_file_large_ds_sid,
-                  xfer_plist,
-                  large_ds_buf_1);
-    VRFY((ret >= 0), "H5Dread() large_dataset initial read succeeded");
-
-
-    /* verify that the correct data was written to the small data set */
-    expected_value = 0;
-    mis_match = FALSE;
-    ptr_1 = large_ds_buf_1;
-
-    i = 0;
-    for ( i = 0; i < (int)large_ds_size; i++ ) {
-
-        if ( *ptr_1 != expected_value ) {
-
-            mis_match = TRUE;
-        }
-        ptr_1++;
-        expected_value++;
-    }
-    VRFY( (mis_match == FALSE), "large ds init data good.");
- 
-    /* sync with the other processes before changing data */
-
-    if ( ! use_collective_io ) {
-
-        mrc = MPI_Barrier(MPI_COMM_WORLD);
-        VRFY((mrc==MPI_SUCCESS), "Sync after initial values check");
-    }
-
+    /* initialize the local copy of mpi_rank */
+    mpi_rank = tv_ptr->mpi_rank;
 
-    /***********************************/
-    /***** INITIALIZATION COMPLETE *****/
-    /***********************************/
 
     /* first, verify that we can read from disk correctly using selections
      * of different rank that H5S_select_shape_same() views as being of the
      * same shape.
      *
-     * Start by reading a (small_rank - 1)-D slice from this processes slice 
-     * of the on disk large data set, and verifying that the data read is 
-     * correct.  Verify that H5S_select_shape_same() returns true on the 
-     * memory and file selections.
+     * Start by reading a (small_rank - 1)-D checker board slice from this 
+     * processes slice of the on disk large data set, and verifying that the 
+     * data read is correct.  Verify that H5S_select_shape_same() returns 
+     * true on the memory and file selections.
      *
      * The first step is to set up the needed checker board selection in the
      * in memory small small cube
      */
 
     sel_start[0] = sel_start[1] = sel_start[2] = sel_start[3] = sel_start[4] = 0;
-    sel_start[small_ds_offset] = (hsize_t)mpi_rank;
+    sel_start[tv_ptr->small_ds_offset] = (hsize_t)(tv_ptr->mpi_rank);
 
-    checker_board_hyperslab_dr_pio_test__select_checker_board(mpi_rank,
-                                                              small_ds_slice_sid,
-                                                              small_rank - 1,
-                                                              edge_size,
-                                                              checker_edge_size,
-                                                              small_rank - 1,
-                                                              sel_start);
+    ckrbrd_hs_dr_pio_test__slct_ckrbrd(tv_ptr->mpi_rank,
+                                       tv_ptr->small_ds_slice_sid,
+                                       tv_ptr->small_rank - 1,
+                                       tv_ptr->edge_size,
+                                       tv_ptr->checker_edge_size,
+                                       tv_ptr->small_rank - 1,
+                                       sel_start);
 
     /* zero out the buffer we will be reading into */
-    HDmemset(small_ds_slice_buf, 0, sizeof(uint32_t) * small_ds_slice_size);
+    HDmemset(tv_ptr->small_ds_slice_buf, 0, sizeof(uint32_t) * tv_ptr->small_ds_slice_size);
 
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
+#if CHECKER_BOARD_HS_DR_PIO_TEST__D2M_L2S__DEBUG 
     HDfprintf(stdout, "%s:%d: initial small_ds_slice_buf = ",
-              fcnName, mpi_rank);
-    ptr_0 = small_ds_slice_buf;
-    for ( i = 0; i < (int)small_ds_slice_size; i++ ) {
-	HDfprintf(stdout, "%d ", (int)(*ptr_0));
+              fcnName, tv_ptr->mpi_rank);
+    ptr_0 = tv_ptr->small_ds_slice_buf;
+    for ( i = 0; i < (int)(tv_ptr->small_ds_slice_size); i++ ) {
+        HDfprintf(stdout, "%d ", (int)(*ptr_0));
         ptr_0++;
     }
     HDfprintf(stdout, "\n");
-#endif /* CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG */ 
+#endif /* CHECKER_BOARD_HS_DR_PIO_TEST__D2M_L2S__DEBUG */ 
 
     /* set up start, stride, count, and block -- note that we will
      * change start[] so as to read slices of the large cube.
      */
     for ( i = 0; i < PAR_SS_DR_MAX_RANK; i++ ) {
 
-        start[i] = 0;
-        stride[i] = (hsize_t)(2 * edge_size);
-        count[i] = 1;
-        if ( (PAR_SS_DR_MAX_RANK - i) > (small_rank - 1) ) {
+        tv_ptr->start[i] = 0;
+        tv_ptr->stride[i] = (hsize_t)(2 * tv_ptr->edge_size);
+        tv_ptr->count[i] = 1;
+        if ( (PAR_SS_DR_MAX_RANK - i) > (tv_ptr->small_rank - 1) ) {
 
-            block[i] = 1;
+            tv_ptr->block[i] = 1;
 
         } else {
 
-            block[i] = (hsize_t)edge_size;
+            tv_ptr->block[i] = (hsize_t)(tv_ptr->edge_size);
         }
     }
 
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
+#if CHECKER_BOARD_HS_DR_PIO_TEST__D2M_L2S__DEBUG 
     HDfprintf(stdout, 
               "%s:%d: reading slice from big ds on disk into small ds slice.\n",
-              fcnName, mpi_rank);
-#endif /* CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG */ 
+              fcnName, tv_ptr->mpi_rank);
+#endif /* CHECKER_BOARD_HS_DR_PIO_TEST__D2M_L2S__DEBUG */ 
     /* in serial versions of this test, we loop through all the dimensions
      * of the large data set.  However, in the parallel version, each 
      * process only works with that slice of the large cube indicated
@@ -3117,9 +3065,9 @@ checker_board_hyperslab_dr_pio_test__run_test(const int test_num,
      * mpi_rank, and don't itterate over it.
      */
 
-    if ( PAR_SS_DR_MAX_RANK - large_rank == 0 ) {
+    if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 0 ) {
 
-        i = mpi_rank;
+        i = tv_ptr->mpi_rank;
 
     } else {
 
@@ -3132,9 +3080,9 @@ checker_board_hyperslab_dr_pio_test__run_test(const int test_num,
      * test.
      */
 
-    if ( PAR_SS_DR_MAX_RANK - large_rank == 1 ) {
+    if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 1 ) {
 
-        j = mpi_rank;
+        j = tv_ptr->mpi_rank;
 
     } else {
 
@@ -3142,9 +3090,9 @@ checker_board_hyperslab_dr_pio_test__run_test(const int test_num,
     }
 
     do {
-        if ( PAR_SS_DR_MAX_RANK - large_rank == 2 ) {
+        if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 2 ) {
 
-            k = mpi_rank;
+            k = tv_ptr->mpi_rank;
 
         } else {
 
@@ -3164,98 +3112,167 @@ checker_board_hyperslab_dr_pio_test__run_test(const int test_num,
 
             l = 0;
             do {
-                /* we know that small_rank - 1 >= 1 and that 
-                 * large_rank > small_rank by the assertions at the head 
-                 * of this function.  Thus no need for another inner loop.
-                 */
-                start[0] = (hsize_t)i;
-                start[1] = (hsize_t)j;
-                start[2] = (hsize_t)k;
-                start[3] = (hsize_t)l;
-                start[4] = 0;
-
-                HDassert( ( start[0] == 0 ) || ( 0 < small_ds_offset + 1 ) );
-                HDassert( ( start[1] == 0 ) || ( 1 < small_ds_offset + 1 ) );
-                HDassert( ( start[2] == 0 ) || ( 2 < small_ds_offset + 1 ) );
-                HDassert( ( start[3] == 0 ) || ( 3 < small_ds_offset + 1 ) );
-                HDassert( ( start[4] == 0 ) || ( 4 < small_ds_offset + 1 ) );
-
-                checker_board_hyperslab_dr_pio_test__select_checker_board
-                (
-                  mpi_rank,
-                  file_large_ds_sid_0,
-                  large_rank,
-                  edge_size,
-                  checker_edge_size,
-                  small_rank - 1,
-                  start
-                );
-
-                /* verify that H5S_select_shape_same() reports the two
-                 * selections as having the same shape.
-                 */
-                check = H5S_select_shape_same_test(small_ds_slice_sid,
-                                                   file_large_ds_sid_0);
-                VRFY((check == TRUE), "H5S_select_shape_same_test passed");
-
-
-                /* Read selection from disk */
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
-                HDfprintf(stdout, "%s:%d: start = %d %d %d %d %d.\n", fcnName,
-                          mpi_rank, start[0], start[1], start[2], start[3], 
-                          start[4]);
-                HDfprintf(stdout, "%s slice/file extent dims = %d/%d.\n",
-                          fcnName,
-                          H5Sget_simple_extent_ndims(small_ds_slice_sid),
-                          H5Sget_simple_extent_ndims(file_large_ds_sid_0));
-#endif /* CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG */ 
-
-                ret = H5Dread(large_dataset,
-                              H5T_NATIVE_UINT32,
-                              small_ds_slice_sid,
-                              file_large_ds_sid_0,
-                              xfer_plist,
-                              small_ds_slice_buf);
-                VRFY((ret >= 0), "H5Dread() slice from large ds succeeded.");
-
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
-		HDfprintf(stdout, "%s:%d: H5Dread() returns.\n", 
-                          fcnName, mpi_rank);
-#endif 
+                if ( (tv_ptr->skips)++ < tv_ptr->max_skips ) { /* skip the test */
+
+                    (tv_ptr->tests_skipped)++;
+
+                } else { /* run the test */
+
+                    tv_ptr->skips = 0; /* reset the skips counter */
+
+                    /* we know that small_rank - 1 >= 1 and that 
+                     * large_rank > small_rank by the assertions at the head 
+                     * of this function.  Thus no need for another inner loop.
+                     */
+                    tv_ptr->start[0] = (hsize_t)i;
+                    tv_ptr->start[1] = (hsize_t)j;
+                    tv_ptr->start[2] = (hsize_t)k;
+                    tv_ptr->start[3] = (hsize_t)l;
+                    tv_ptr->start[4] = 0;
+
+                    HDassert((tv_ptr->start[0] == 0)||(0 < tv_ptr->small_ds_offset + 1));
+                    HDassert((tv_ptr->start[1] == 0)||(1 < tv_ptr->small_ds_offset + 1));
+                    HDassert((tv_ptr->start[2] == 0)||(2 < tv_ptr->small_ds_offset + 1));
+                    HDassert((tv_ptr->start[3] == 0)||(3 < tv_ptr->small_ds_offset + 1));
+                    HDassert((tv_ptr->start[4] == 0)||(4 < tv_ptr->small_ds_offset + 1));
+
+                    ckrbrd_hs_dr_pio_test__slct_ckrbrd
+                    (
+                      tv_ptr->mpi_rank,
+                      tv_ptr->file_large_ds_sid_0,
+                      tv_ptr->large_rank,
+                      tv_ptr->edge_size,
+                      tv_ptr->checker_edge_size,
+                      tv_ptr->small_rank - 1,
+                      tv_ptr->start
+                    );
+
+                    /* verify that H5S_select_shape_same() reports the two
+                     * selections as having the same shape.
+                     */
+                    check = H5S_select_shape_same_test(tv_ptr->small_ds_slice_sid,
+                                                       tv_ptr->file_large_ds_sid_0);
+                    VRFY((check == TRUE), "H5S_select_shape_same_test passed");
+
+
+                    /* Read selection from disk */
+#if CHECKER_BOARD_HS_DR_PIO_TEST__D2M_L2S__DEBUG 
+                    HDfprintf(stdout, "%s:%d: start = %d %d %d %d %d.\n", fcnName,
+                              tv_ptr->mpi_rank, tv_ptr->start[0], tv_ptr->start[1], 
+                              tv_ptr->start[2], tv_ptr->start[3], tv_ptr->start[4]);
+                    HDfprintf(stdout, "%s slice/file extent dims = %d/%d.\n",
+                              fcnName,
+                              H5Sget_simple_extent_ndims(tv_ptr->small_ds_slice_sid),
+                              H5Sget_simple_extent_ndims(tv_ptr->file_large_ds_sid_0));
+#endif /* CHECKER_BOARD_HS_DR_PIO_TEST__D2M_L2S__DEBUG */ 
+
+                    ret = H5Dread(tv_ptr->large_dataset,
+                                  H5T_NATIVE_UINT32,
+                                  tv_ptr->small_ds_slice_sid,
+                                  tv_ptr->file_large_ds_sid_0,
+                                  tv_ptr->xfer_plist,
+                                  tv_ptr->small_ds_slice_buf);
+                    VRFY((ret >= 0), "H5Dread() slice from large ds succeeded.");
+
+#if CHECKER_BOARD_HS_DR_PIO_TEST__D2M_L2S__DEBUG 
+                    HDfprintf(stdout, "%s:%d: H5Dread() returns.\n", 
+                              fcnName, tv_ptr->mpi_rank);
+#endif /* CHECKER_BOARD_HS_DR_PIO_TEST__D2M_L2S__DEBUG */
+
+                    /* verify that expected data is retrieved */
+
+                    expected_value = (uint32_t)
+                        ((i * tv_ptr->edge_size * tv_ptr->edge_size * 
+                              tv_ptr->edge_size * tv_ptr->edge_size) +
+                         (j * tv_ptr->edge_size * tv_ptr->edge_size * tv_ptr->edge_size) +
+                         (k * tv_ptr->edge_size * tv_ptr->edge_size) +
+                         (l * tv_ptr->edge_size));
+
+                    data_ok = ckrbrd_hs_dr_pio_test__verify_data
+                              (
+                                tv_ptr->small_ds_slice_buf,
+                                tv_ptr->small_rank - 1,
+                                tv_ptr->edge_size,
+                                tv_ptr->checker_edge_size,
+                                expected_value,
+                                (hbool_t)TRUE
+                              );
+
+                    VRFY((data_ok == TRUE), 
+                         "small slice read from large ds data good.");
+
+                    (tv_ptr->tests_run)++;
+                }
 
-                /* verify that expected data is retrieved */
-
-                expected_value = (uint32_t)
-			((i * edge_size * edge_size * edge_size * edge_size) +
-                         (j * edge_size * edge_size * edge_size) +
-                         (k * edge_size * edge_size) +
-                         (l * edge_size));
-
-                data_ok = checker_board_hyperslab_dr_pio_test__verify_data
-                          (
-                            small_ds_slice_buf,
-                            small_rank - 1,
-                            edge_size,
-                            checker_edge_size,
-                            expected_value,
-                            (hbool_t)TRUE
-                          );
-
-                VRFY((data_ok == TRUE), 
-                     "small slice read from large ds data good.");
                 l++;
 
-            } while ( ( large_rank > 2 ) &&
-                      ( (small_rank - 1) <= 1 ) &&
-                      ( l < edge_size ) );
+                (tv_ptr->total_tests)++;
+
+            } while ( ( tv_ptr->large_rank > 2 ) &&
+                      ( (tv_ptr->small_rank - 1) <= 1 ) &&
+                      ( l < tv_ptr->edge_size ) );
             k++;
-        } while ( ( large_rank > 3 ) &&
-                  ( (small_rank - 1) <= 2 ) &&
-                  ( k < edge_size ) );
+        } while ( ( tv_ptr->large_rank > 3 ) &&
+                  ( (tv_ptr->small_rank - 1) <= 2 ) &&
+                  ( k < tv_ptr->edge_size ) );
         j++;
-    } while ( ( large_rank > 4 ) &&
-              ( (small_rank - 1) <= 3 ) &&
-              ( j < edge_size ) );
+    } while ( ( tv_ptr->large_rank > 4 ) &&
+              ( (tv_ptr->small_rank - 1) <= 3 ) &&
+              ( j < tv_ptr->edge_size ) );
+
+    return;
+
+} /* ckrbrd_hs_dr_pio_test__d2m_l2s() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	ckrbrd_hs_dr_pio_test__d2m_s2l()
+ *
+ * Purpose:	Part two of a series of tests of I/O to/from hyperslab 
+ *		selections of different rank in the parallel.
+ *
+ *		Verify that we can read from disk correctly using 
+ *		selections of different rank that H5S_select_shape_same() 
+ *		views as being of the same shape.
+ *
+ *		In this function, we test this by reading checker board
+ *		slices of the on disk small data set into slices through 
+ *		the in memory large data set, and verify that the correct 
+ *		data (and only the correct data) is read.
+ *
+ * Return:	void
+ *
+ * Programmer:	JRM -- 8/15/11
+ *
+ * Modifications:
+ *
+ *		None.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define CHECKER_BOARD_HS_DR_PIO_TEST__D2M_S2L__DEBUG 0
+
+static void
+ckrbrd_hs_dr_pio_test__d2m_s2l(struct hs_dr_pio_test_vars_t * tv_ptr)
+{
+#if CHECKER_BOARD_HS_DR_PIO_TEST__D2M_S2L__DEBUG 
+    const char *fcnName = "ckrbrd_hs_dr_pio_test__d2m_s2l()";
+#endif /* CHECKER_BOARD_HS_DR_PIO_TEST__D2M_S2L__DEBUG */
+    hbool_t	data_ok = FALSE;
+    int		i, j, k, l;
+    size_t      u;
+    size_t      start_index;
+    size_t      stop_index;
+    uint32_t	expected_value;
+    uint32_t  * ptr_1;
+    int		mpi_rank; /* needed by VRFY */
+    hsize_t     sel_start[PAR_SS_DR_MAX_RANK];
+    htri_t      check;          /* Shape comparison return value */
+    herr_t	ret;		/* Generic return value */
+
+    /* initialize the local copy of mpi_rank */
+    mpi_rank = tv_ptr->mpi_rank;
 
 
     /* similarly, read slices of the on disk small data set into slices 
@@ -3264,24 +3281,24 @@ checker_board_hyperslab_dr_pio_test__run_test(const int test_num,
      */
 
     sel_start[0] = sel_start[1] = sel_start[2] = sel_start[3] = sel_start[4] = 0;
-    sel_start[small_ds_offset] = (hsize_t)mpi_rank;
+    sel_start[tv_ptr->small_ds_offset] = (hsize_t)(tv_ptr->mpi_rank);
 
-    checker_board_hyperslab_dr_pio_test__select_checker_board(mpi_rank,
-                                                              file_small_ds_sid_0,
-                                                              small_rank,
-                                                              edge_size,
-                                                              checker_edge_size,
-                                                              small_rank - 1,
-                                                              sel_start);
+    ckrbrd_hs_dr_pio_test__slct_ckrbrd(tv_ptr->mpi_rank,
+                                       tv_ptr->file_small_ds_sid_0,
+                                       tv_ptr->small_rank,
+                                       tv_ptr->edge_size,
+                                       tv_ptr->checker_edge_size,
+                                       tv_ptr->small_rank - 1,
+                                       sel_start);
 
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
+#if CHECKER_BOARD_HS_DR_PIO_TEST__D2M_S2L__DEBUG 
     HDfprintf(stdout, 
       "%s reading slices of on disk small data set into slices of big data set.\n",
               fcnName);
-#endif 
+#endif /* CHECKER_BOARD_HS_DR_PIO_TEST__D2M_S2L__DEBUG */
 
     /* zero out the buffer we will be reading into */
-    HDmemset(large_ds_buf_1, 0, sizeof(uint32_t) * large_ds_size);
+    HDmemset(tv_ptr->large_ds_buf_1, 0, sizeof(uint32_t) * tv_ptr->large_ds_size);
 
     /* set up start, stride, count, and block -- note that we will
      * change start[] so as to read the slice of the small data set
@@ -3290,20 +3307,19 @@ checker_board_hyperslab_dr_pio_test__run_test(const int test_num,
      */
     for ( i = 0; i < PAR_SS_DR_MAX_RANK; i++ ) {
 
-        start[i] = 0;
-        stride[i] = (hsize_t)(2 * edge_size);
-        count[i] = 1;
-        if ( (PAR_SS_DR_MAX_RANK - i) > (small_rank - 1) ) {
+        tv_ptr->start[i] = 0;
+        tv_ptr->stride[i] = (hsize_t)(2 * tv_ptr->edge_size);
+        tv_ptr->count[i] = 1;
+        if ( (PAR_SS_DR_MAX_RANK - i) > (tv_ptr->small_rank - 1) ) {
 
-            block[i] = 1;
+            tv_ptr->block[i] = 1;
 
         } else {
 
-            block[i] = (hsize_t)edge_size;
+            tv_ptr->block[i] = (hsize_t)(tv_ptr->edge_size);
         }
     }
 
-
     /* in serial versions of this test, we loop through all the dimensions
      * of the large data set that don't appear in the small data set.  
      *
@@ -3314,9 +3330,9 @@ checker_board_hyperslab_dr_pio_test__run_test(const int test_num,
      */
 
 
-    if ( PAR_SS_DR_MAX_RANK - large_rank == 0 ) {
+    if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 0 ) {
 
-        i = mpi_rank;
+        i = tv_ptr->mpi_rank;
 
     } else {
 
@@ -3329,9 +3345,9 @@ checker_board_hyperslab_dr_pio_test__run_test(const int test_num,
      * test.
      */
 
-    if ( PAR_SS_DR_MAX_RANK - large_rank == 1 ) {
+    if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 1 ) {
 
-        j = mpi_rank;
+        j = tv_ptr->mpi_rank;
 
     } else {
 
@@ -3339,9 +3355,9 @@ checker_board_hyperslab_dr_pio_test__run_test(const int test_num,
     }
 
     do {
-        if ( PAR_SS_DR_MAX_RANK - large_rank == 2 ) {
+        if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 2 ) {
 
-            k = mpi_rank;
+            k = tv_ptr->mpi_rank;
 
         } else {
 
@@ -3361,161 +3377,235 @@ checker_board_hyperslab_dr_pio_test__run_test(const int test_num,
 
             l = 0;
             do {
-                /* we know that small_rank >= 1 and that large_rank > small_rank
-                 * by the assertions at the head of this function.  Thus no
-                 * need for another inner loop.
-                 */
-                start[0] = (hsize_t)i;
-                start[1] = (hsize_t)j;
-                start[2] = (hsize_t)k;
-                start[3] = (hsize_t)l;
-                start[4] = 0;
-
-                HDassert( ( start[0] == 0 ) || ( 0 < small_ds_offset + 1 ) );
-                HDassert( ( start[1] == 0 ) || ( 1 < small_ds_offset + 1 ) );
-                HDassert( ( start[2] == 0 ) || ( 2 < small_ds_offset + 1 ) );
-                HDassert( ( start[3] == 0 ) || ( 3 < small_ds_offset + 1 ) );
-                HDassert( ( start[4] == 0 ) || ( 4 < small_ds_offset + 1 ) );
-
-                checker_board_hyperslab_dr_pio_test__select_checker_board
-                (
-                  mpi_rank,
-                  mem_large_ds_sid,
-                  large_rank,
-                  edge_size,
-                  checker_edge_size,
-                  small_rank - 1,
-                  start
-                );
-
-
-                /* verify that H5S_select_shape_same() reports the two
-                 * selections as having the same shape.
-                 */
-                check = H5S_select_shape_same_test(file_small_ds_sid_0,
-                                                   mem_large_ds_sid);
-                VRFY((check == TRUE), "H5S_select_shape_same_test passed");
-
-
-                /* Read selection from disk */
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
-                HDfprintf(stdout, "%s:%d: start = %d %d %d %d %d.\n", 
-                          fcnName, mpi_rank, 
-                          start[0], start[1], start[2], start[3], start[4]);
-                HDfprintf(stdout, "%s:%d: mem/file extent dims = %d/%d.\n",
-                          fcnName, mpi_rank,
-                          H5Sget_simple_extent_ndims(large_ds_slice_sid),
-                          H5Sget_simple_extent_ndims(file_small_ds_sid_0));
-#endif 
-                ret = H5Dread(small_dataset,
-                              H5T_NATIVE_UINT32,
-                              mem_large_ds_sid,
-                              file_small_ds_sid_0,
-                              xfer_plist,
-                              large_ds_buf_1);
-                VRFY((ret >= 0), "H5Dread() slice from small ds succeeded.");
-
-                /* verify that the expected data and only the
-                 * expected data was read.
-                 */
-                data_ok = TRUE;
-                ptr_1 = large_ds_buf_1;
-                expected_value = (uint32_t)((size_t)mpi_rank * small_ds_slice_size);
-                start_index = (size_t)(
-                        (i * edge_size * edge_size * edge_size * edge_size) +
-                        (j * edge_size * edge_size * edge_size) +
-                        (k * edge_size * edge_size) +
-                        (l * edge_size));
-                stop_index = start_index + small_ds_slice_size - 1;
-
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
-{
-int		m, n;
-
-		HDfprintf(stdout, "%s:%d: expected_value = %d.\n", 
-                          fcnName, mpi_rank, expected_value);
-		HDfprintf(stdout, "%s:%d: start/stop index = %d/%d.\n",
-                          fcnName, mpi_rank, start_index, stop_index);
-                n = 0;
-                for ( m = 0; m < large_ds_size; m ++ ) {
-                    HDfprintf(stdout, "%d ", (int)(*ptr_1));
-                    ptr_1++;
-                    n++;
-                    if ( n >= edge_size ) {
-                        HDfprintf(stdout, "\n");
+                if ( (tv_ptr->skips)++ < tv_ptr->max_skips ) { /* skip the test */
+
+                    (tv_ptr->tests_skipped)++;
+
+                } else { /* run the test */
+
+                    tv_ptr->skips = 0; /* reset the skips counter */
+
+                    /* we know that small_rank >= 1 and that large_rank > small_rank
+                     * by the assertions at the head of this function.  Thus no
+                     * need for another inner loop.
+                     */
+                    tv_ptr->start[0] = (hsize_t)i;
+                    tv_ptr->start[1] = (hsize_t)j;
+                    tv_ptr->start[2] = (hsize_t)k;
+                    tv_ptr->start[3] = (hsize_t)l;
+                    tv_ptr->start[4] = 0;
+
+                    HDassert((tv_ptr->start[0] == 0)||(0 < tv_ptr->small_ds_offset + 1));
+                    HDassert((tv_ptr->start[1] == 0)||(1 < tv_ptr->small_ds_offset + 1));
+                    HDassert((tv_ptr->start[2] == 0)||(2 < tv_ptr->small_ds_offset + 1));
+                    HDassert((tv_ptr->start[3] == 0)||(3 < tv_ptr->small_ds_offset + 1));
+                    HDassert((tv_ptr->start[4] == 0)||(4 < tv_ptr->small_ds_offset + 1));
+
+                    ckrbrd_hs_dr_pio_test__slct_ckrbrd
+                    (
+                      tv_ptr->mpi_rank,
+                      tv_ptr->mem_large_ds_sid,
+                      tv_ptr->large_rank,
+                      tv_ptr->edge_size,
+                      tv_ptr->checker_edge_size,
+                      tv_ptr->small_rank - 1,
+                      tv_ptr->start
+                    );
+
+
+                    /* verify that H5S_select_shape_same() reports the two
+                     * selections as having the same shape.
+                     */
+                    check = H5S_select_shape_same_test(tv_ptr->file_small_ds_sid_0,
+                                                       tv_ptr->mem_large_ds_sid);
+                    VRFY((check == TRUE), "H5S_select_shape_same_test passed");
+
+
+                    /* Read selection from disk */
+#if CHECKER_BOARD_HS_DR_PIO_TEST__D2M_S2L__DEBUG 
+                    HDfprintf(stdout, "%s:%d: start = %d %d %d %d %d.\n", 
+                              fcnName, tv_ptr->mpi_rank, 
+                              tv_ptr->start[0], tv_ptr->start[1], tv_ptr->start[2], 
+                              tv_ptr->start[3], tv_ptr->start[4]); 
+                    HDfprintf(stdout, "%s:%d: mem/file extent dims = %d/%d.\n",
+                              fcnName, tv_ptr->mpi_rank,
+                              H5Sget_simple_extent_ndims(tv_ptr->large_ds_slice_sid),
+                              H5Sget_simple_extent_ndims(tv_ptr->file_small_ds_sid_0));
+#endif /* CHECKER_BOARD_HS_DR_PIO_TEST__D2M_S2L__DEBUG */
+                    ret = H5Dread(tv_ptr->small_dataset,
+                                  H5T_NATIVE_UINT32,
+                                  tv_ptr->mem_large_ds_sid,
+                                  tv_ptr->file_small_ds_sid_0,
+                                  tv_ptr->xfer_plist,
+                                  tv_ptr->large_ds_buf_1);
+                    VRFY((ret >= 0), "H5Dread() slice from small ds succeeded.");
+
+                    /* verify that the expected data and only the
+                     * expected data was read.
+                     */
+                    data_ok = TRUE;
+                    ptr_1 = tv_ptr->large_ds_buf_1;
+                    expected_value = 
+                       (uint32_t)((size_t)(tv_ptr->mpi_rank) * tv_ptr->small_ds_slice_size);
+                    start_index = (size_t)(
+                        (i * tv_ptr->edge_size * tv_ptr->edge_size * 
+                             tv_ptr->edge_size * tv_ptr->edge_size) +
+                        (j * tv_ptr->edge_size * tv_ptr->edge_size * tv_ptr->edge_size) +
+                        (k * tv_ptr->edge_size * tv_ptr->edge_size) +
+                        (l * tv_ptr->edge_size));
+                    stop_index = start_index + tv_ptr->small_ds_slice_size - 1;
+
+#if CHECKER_BOARD_HS_DR_PIO_TEST__D2M_S2L__DEBUG 
+                    {
+                        int m, n;
+
+                        HDfprintf(stdout, "%s:%d: expected_value = %d.\n", 
+                                  fcnName, tv_ptr->mpi_rank, expected_value);
+                        HDfprintf(stdout, "%s:%d: start/stop index = %d/%d.\n",
+                                  fcnName, tv_ptr->mpi_rank, start_index, stop_index);
                         n = 0;
+                        for ( m = 0; (unsigned)m < tv_ptr->large_ds_size; m ++ ) {
+                            HDfprintf(stdout, "%d ", (int)(*ptr_1));
+                            ptr_1++;
+                            n++;
+                            if ( n >= tv_ptr->edge_size ) {
+                                HDfprintf(stdout, "\n");
+                                n = 0;
+                            }
+                        }
+                        HDfprintf(stdout, "\n");
+                        ptr_1 = tv_ptr->large_ds_buf_1;
                     }
-                }
-                HDfprintf(stdout, "\n");
-                fsync(stdout);
-                ptr_1 = large_ds_buf_1;
-}
-#endif 
+#endif /* CHECKER_BOARD_HS_DR_PIO_TEST__D2M_S2L__DEBUG */
 
-                HDassert( start_index < stop_index );
-                HDassert( stop_index <= large_ds_size );
+                    HDassert( start_index < stop_index );
+                    HDassert( stop_index <= tv_ptr->large_ds_size );
 
-                for ( u = 0; u < start_index; u++ ) {
+                    for ( u = 0; u < start_index; u++ ) {
 
-                    if ( *ptr_1 != 0 ) {
+                        if ( *ptr_1 != 0 ) {
 
-			data_ok = FALSE;
-		    }
+                            data_ok = FALSE;
+                        }
 
-                    /* zero out the value for the next pass */
-                    *ptr_1 = 0;
+                        /* zero out the value for the next pass */
+                        *ptr_1 = 0;
 
-                    ptr_1++;
-                }
+                        ptr_1++;
+                    }
+
+                    VRFY((data_ok == TRUE), 
+                         "slice read from small to large ds data good(1).");
 
-                VRFY((data_ok == TRUE), 
-                     "slice read from small to large ds data good(1).");
+                    data_ok = ckrbrd_hs_dr_pio_test__verify_data
+                              (
+                                ptr_1,
+                                tv_ptr->small_rank - 1,
+                                tv_ptr->edge_size,
+                                tv_ptr->checker_edge_size,
+                                expected_value,
+                                (hbool_t)TRUE
+                              );
 
-                data_ok = checker_board_hyperslab_dr_pio_test__verify_data
-                          (
-                            ptr_1,
-                            small_rank - 1,
-                            edge_size,
-                            checker_edge_size,
-                            expected_value,
-                            (hbool_t)TRUE
-                          );
+                    VRFY((data_ok == TRUE), 
+                         "slice read from small to large ds data good(2).");
 
-                VRFY((data_ok == TRUE), 
-                     "slice read from small to large ds data good(2).");
 
+                    ptr_1 = tv_ptr->large_ds_buf_1 + stop_index + 1;
 
-                ptr_1 = large_ds_buf_1 + stop_index + 1;
+                    for ( u = stop_index + 1; u < tv_ptr->large_ds_size; u++ ) {
+
+                        if ( *ptr_1 != 0 ) {
 
-                for ( u = stop_index + 1; u < large_ds_size; u++ ) {
+                            data_ok = FALSE;
+                        }
 
-                    if ( *ptr_1 != 0 ) {
+                        /* zero out the value for the next pass */
+                        *ptr_1 = 0;
 
-			data_ok = FALSE;
-		    }
+                        ptr_1++;
+                    }
 
-                    /* zero out the value for the next pass */
-                    *ptr_1 = 0;
+                    VRFY((data_ok == TRUE), 
+                         "slice read from small to large ds data good(3).");
 
-                    *ptr_1++;
+                    (tv_ptr->tests_run)++;
                 }
 
-                VRFY((data_ok == TRUE), 
-                     "slice read from small to large ds data good(3).");
-
                 l++;
 
-            } while ( ( large_rank > 2 ) &&
-                      ( (small_rank - 1) <= 1 ) &&
-                      ( l < edge_size ) );
+                (tv_ptr->total_tests)++;
+
+            } while ( ( tv_ptr->large_rank > 2 ) &&
+                      ( (tv_ptr->small_rank - 1) <= 1 ) &&
+                      ( l < tv_ptr->edge_size ) );
             k++;
-        } while ( ( large_rank > 3 ) &&
-                  ( (small_rank - 1) <= 2 ) &&
-                  ( k < edge_size ) );
+        } while ( ( tv_ptr->large_rank > 3 ) &&
+                  ( (tv_ptr->small_rank - 1) <= 2 ) &&
+                  ( k < tv_ptr->edge_size ) );
         j++;
-    } while ( ( large_rank > 4 ) &&
-              ( (small_rank - 1) <= 3 ) &&
-              ( j < edge_size ) );
+    } while ( ( tv_ptr->large_rank > 4 ) &&
+              ( (tv_ptr->small_rank - 1) <= 3 ) &&
+              ( j < tv_ptr->edge_size ) );
+
+    return;
+
+} /* ckrbrd_hs_dr_pio_test__d2m_s2l() */
+
+
+/*-------------------------------------------------------------------------
+ * Function:	ckrbrd_hs_dr_pio_test__m2d_l2s()
+ *
+ * Purpose:	Part three of a series of tests of I/O to/from checker
+ *		board hyperslab selections of different rank in the 
+ *		parallel.
+ *
+ *		Verify that we can write from memory to file using checker
+ *		board selections of different rank that 
+ *		H5S_select_shape_same() views as being of the same shape.
+ *
+ *		Do this by writing small_rank - 1 dimensional checker 
+ *		board slices from the in memory large data set to the on 
+ *		disk small cube dataset.  After each write, read the 
+ *		slice of the small dataset back from disk, and verify 
+ *		that it contains the expected data. Verify that 
+ *		H5S_select_shape_same() returns true on the memory and 
+ *		file selections.
+ *
+ * Return:	void
+ *
+ * Programmer:	JRM -- 8/15/11
+ *
+ * Modifications:
+ *
+ *		None.
+ *
+ *-------------------------------------------------------------------------
+ */
+
+#define CHECKER_BOARD_HS_DR_PIO_TEST__M2D_L2S__DEBUG 0
+
+static void
+ckrbrd_hs_dr_pio_test__m2d_l2s(struct hs_dr_pio_test_vars_t * tv_ptr)
+{
+#if CHECKER_BOARD_HS_DR_PIO_TEST__M2D_L2S__DEBUG 
+    const char *fcnName = "ckrbrd_hs_dr_pio_test__m2d_l2s()";
+#endif /* CHECKER_BOARD_HS_DR_PIO_TEST__M2D_L2S__DEBUG */
+    hbool_t	data_ok = FALSE;
+    hbool_t	mis_match = FALSE;
+    int		i, j, k, l;
+    size_t      u;
+    size_t      start_index;
+    size_t      stop_index;
+    uint32_t	expected_value;
+    uint32_t  * ptr_1;
+    int		mpi_rank; /* needed by VRFY */
+    hsize_t     sel_start[PAR_SS_DR_MAX_RANK];
+    htri_t      check;          /* Shape comparison return value */
+    herr_t	ret;		/* Generic return value */
+
+    /* initialize the local copy of mpi_rank */
+    mpi_rank = tv_ptr->mpi_rank;
 
 
     /* now we go in the opposite direction, verifying that we can write
@@ -3529,75 +3619,75 @@ int		m, n;
      * the memory and file selections.
      */
 
-    start[0] = (hsize_t)mpi_rank;
-    stride[0] = (hsize_t)(2 * (mpi_size + 1));
-    count[0] = 1;
-    block[0] = 1;
+    tv_ptr->start[0] = (hsize_t)(tv_ptr->mpi_rank);
+    tv_ptr->stride[0] = (hsize_t)(2 * (tv_ptr->mpi_size + 1));
+    tv_ptr->count[0] = 1;
+    tv_ptr->block[0] = 1;
 
-    for ( i = 1; i < large_rank; i++ ) {
+    for ( i = 1; i < tv_ptr->large_rank; i++ ) {
 
-        start[i] = 0;
-        stride[i] = (hsize_t)(2 * edge_size);
-        count[i] = 1;
-        block[i] = (hsize_t)edge_size;
+        tv_ptr->start[i] = 0;
+        tv_ptr->stride[i] = (hsize_t)(2 * tv_ptr->edge_size);
+        tv_ptr->count[i] = 1;
+        tv_ptr->block[i] = (hsize_t)(tv_ptr->edge_size);
     }
 
-    ret = H5Sselect_hyperslab(file_small_ds_sid_0,
+    ret = H5Sselect_hyperslab(tv_ptr->file_small_ds_sid_0,
                               H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
+                              tv_ptr->start,
+                              tv_ptr->stride,
+                              tv_ptr->count,
+                              tv_ptr->block);
     VRFY((ret >= 0), "H5Sselect_hyperslab(file_small_ds_sid_0, set) suceeded");
 
-    ret = H5Sselect_hyperslab(mem_small_ds_sid,
+    ret = H5Sselect_hyperslab(tv_ptr->mem_small_ds_sid,
                               H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
+                              tv_ptr->start,
+                              tv_ptr->stride,
+                              tv_ptr->count,
+                              tv_ptr->block);
     VRFY((ret >= 0), "H5Sselect_hyperslab(mem_small_ds_sid, set) suceeded");
 
 
     sel_start[0] = sel_start[1] = sel_start[2] = sel_start[3] = sel_start[4] = 0;
-    sel_start[small_ds_offset] = (hsize_t)mpi_rank;
+    sel_start[tv_ptr->small_ds_offset] = (hsize_t)(tv_ptr->mpi_rank);
 
-    checker_board_hyperslab_dr_pio_test__select_checker_board(mpi_rank,
-                                                              file_small_ds_sid_1,
-                                                              small_rank,
-                                                              edge_size,
-                                                              checker_edge_size,
-                                                              small_rank - 1,
-                                                              sel_start);
+    ckrbrd_hs_dr_pio_test__slct_ckrbrd(tv_ptr->mpi_rank,
+                                       tv_ptr->file_small_ds_sid_1,
+                                       tv_ptr->small_rank,
+                                       tv_ptr->edge_size,
+                                       tv_ptr->checker_edge_size,
+                                       tv_ptr->small_rank - 1,
+                                       sel_start);
 
 
     /* set up start, stride, count, and block -- note that we will
      * change start[] so as to read slices of the large cube.
      */
-    for ( i = 0; i < PAR_SS_DR_MAX_RANK; i++ ) {
-
-        start[i] = 0;
-        stride[i] = (hsize_t)(2 * edge_size);
-        count[i] = 1;
-        if ( (PAR_SS_DR_MAX_RANK - i) > (small_rank - 1) ) {
+    for ( i = 0; i < PAR_SS_DR_MAX_RANK; i++ ) {
+
+        tv_ptr->start[i] = 0;
+        tv_ptr->stride[i] = (hsize_t)(2 * tv_ptr->edge_size);
+        tv_ptr->count[i] = 1;
+        if ( (PAR_SS_DR_MAX_RANK - i) > (tv_ptr->small_rank - 1) ) {
 
-            block[i] = 1;
+            tv_ptr->block[i] = 1;
 
         } else {
 
-            block[i] = (hsize_t)edge_size;
+            tv_ptr->block[i] = (hsize_t)(tv_ptr->edge_size);
         }
     }
 
     /* zero out the in memory small ds */
-    HDmemset(small_ds_buf_1, 0, sizeof(uint32_t) * small_ds_size);
+    HDmemset(tv_ptr->small_ds_buf_1, 0, sizeof(uint32_t) * tv_ptr->small_ds_size);
 
 
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
+#if CHECKER_BOARD_HS_DR_PIO_TEST__M2D_L2S__DEBUG 
     HDfprintf(stdout, 
     "%s writing checker boards selections of slices from big ds to slices of small ds on disk.\n",
     fcnName);
-#endif 
+#endif /* CHECKER_BOARD_HS_DR_PIO_TEST__M2D_L2S__DEBUG */
 
     /* in serial versions of this test, we loop through all the dimensions
      * of the large data set that don't appear in the small data set.  
@@ -3609,9 +3699,9 @@ int		m, n;
      */
 
 
-    if ( PAR_SS_DR_MAX_RANK - large_rank == 0 ) {
+    if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 0 ) {
 
-        i = mpi_rank;
+        i = tv_ptr->mpi_rank;
 
     } else {
 
@@ -3624,9 +3714,9 @@ int		m, n;
      * test.
      */
 
-    if ( PAR_SS_DR_MAX_RANK - large_rank == 1 ) {
+    if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 1 ) {
 
-        j = mpi_rank;
+        j = tv_ptr->mpi_rank;
 
     } else {
 
@@ -3635,9 +3725,9 @@ int		m, n;
 
     j = 0;
     do {
-        if ( PAR_SS_DR_MAX_RANK - large_rank == 2 ) {
+        if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 2 ) {
 
-            k = mpi_rank;
+            k = tv_ptr->mpi_rank;
 
         } else {
 
@@ -3657,154 +3747,228 @@ int		m, n;
 
             l = 0;
             do {
-                /* we know that small_rank >= 1 and that large_rank > small_rank
-                 * by the assertions at the head of this function.  Thus no
-                 * need for another inner loop.
-                 */
-
-                /* zero out this rank's slice of the on disk small data set */
-                ret = H5Dwrite(small_dataset,
-                               H5T_NATIVE_UINT32,
-                               mem_small_ds_sid,
-                               file_small_ds_sid_0,
-                               xfer_plist,
-                               small_ds_buf_2);
-                VRFY((ret >= 0), "H5Dwrite() zero slice to small ds succeeded.");
-
-                /* select the portion of the in memory large cube from which we
-                 * are going to write data.
-                 */
-                start[0] = (hsize_t)i;
-                start[1] = (hsize_t)j;
-                start[2] = (hsize_t)k;
-                start[3] = (hsize_t)l;
-                start[4] = 0;
-
-                HDassert( ( start[0] == 0 ) || ( 0 < small_ds_offset + 1 ) );
-                HDassert( ( start[1] == 0 ) || ( 1 < small_ds_offset + 1 ) );
-                HDassert( ( start[2] == 0 ) || ( 2 < small_ds_offset + 1 ) );
-                HDassert( ( start[3] == 0 ) || ( 3 < small_ds_offset + 1 ) );
-                HDassert( ( start[4] == 0 ) || ( 4 < small_ds_offset + 1 ) );
-
-                checker_board_hyperslab_dr_pio_test__select_checker_board
-                (
-                  mpi_rank,
-                  mem_large_ds_sid,
-                  large_rank,
-                  edge_size,
-                  checker_edge_size,
-                  small_rank - 1,
-                  start
-                );
-
-
-                /* verify that H5S_select_shape_same() reports the in
-                 * memory checkerboard selection of the slice through the 
-                 * large dataset and the checkerboard selection of the process
-                 * slice of the small data set as having the same shape.
-                 */
-                check = H5S_select_shape_same_test(file_small_ds_sid_1,
-                                                   mem_large_ds_sid);
-                VRFY((check == TRUE), "H5S_select_shape_same_test passed.");
-
-
-                /* write the checker board selection of the slice from the in 
-                 * memory large data set to the slice of the on disk small 
-                 * dataset. 
-                 */
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
-                HDfprintf(stdout, "%s:%d: start = %d %d %d %d %d.\n", 
-                          fcnName, mpi_rank,
-                          start[0], start[1], start[2], start[3], start[4]);
-                HDfprintf(stdout, "%s:%d: mem/file extent dims = %d/%d.\n",
-                          fcnName, mpi_rank,
-                          H5Sget_simple_extent_ndims(mem_large_ds_sid),
-                          H5Sget_simple_extent_ndims(file_small_ds_sid_1));
-#endif 
-                ret = H5Dwrite(small_dataset,
-                               H5T_NATIVE_UINT32,
-                               mem_large_ds_sid,
-                               file_small_ds_sid_1,
-                               xfer_plist,
-                               large_ds_buf_0);
-                VRFY((ret >= 0), "H5Dwrite() slice to large ds succeeded.");
+                if ( (tv_ptr->skips)++ < tv_ptr->max_skips ) { /* skip the test */
 
+                    (tv_ptr->tests_skipped)++;
 
-                /* read the on disk process slice of the small dataset into memory */
-                ret = H5Dread(small_dataset,
-                              H5T_NATIVE_UINT32,
-                              mem_small_ds_sid,
-                              file_small_ds_sid_0,
-                              xfer_plist,
-                              small_ds_buf_1);
-                VRFY((ret >= 0), "H5Dread() slice from small ds succeeded.");
+                } else { /* run the test */
 
+                    tv_ptr->skips = 0; /* reset the skips counter */
 
-                /* verify that expected data is retrieved */
+                    /* we know that small_rank >= 1 and that large_rank > small_rank
+                     * by the assertions at the head of this function.  Thus no
+                     * need for another inner loop.
+                     */
+    
+                    /* zero out this rank's slice of the on disk small data set */
+                    ret = H5Dwrite(tv_ptr->small_dataset,
+                                   H5T_NATIVE_UINT32,
+                                   tv_ptr->mem_small_ds_sid,
+                                   tv_ptr->file_small_ds_sid_0,
+                                   tv_ptr->xfer_plist,
+                                   tv_ptr->small_ds_buf_2);
+                    VRFY((ret >= 0), "H5Dwrite() zero slice to small ds succeeded.");
+    
+                    /* select the portion of the in memory large cube from which we
+                     * are going to write data.
+                     */
+                    tv_ptr->start[0] = (hsize_t)i;
+                    tv_ptr->start[1] = (hsize_t)j;
+                    tv_ptr->start[2] = (hsize_t)k;
+                    tv_ptr->start[3] = (hsize_t)l;
+                    tv_ptr->start[4] = 0;
+    
+                    HDassert((tv_ptr->start[0] == 0)||(0 < tv_ptr->small_ds_offset + 1));
+                    HDassert((tv_ptr->start[1] == 0)||(1 < tv_ptr->small_ds_offset + 1));
+                    HDassert((tv_ptr->start[2] == 0)||(2 < tv_ptr->small_ds_offset + 1));
+                    HDassert((tv_ptr->start[3] == 0)||(3 < tv_ptr->small_ds_offset + 1));
+                    HDassert((tv_ptr->start[4] == 0)||(4 < tv_ptr->small_ds_offset + 1));
+    
+                    ckrbrd_hs_dr_pio_test__slct_ckrbrd
+                    (
+                      tv_ptr->mpi_rank,
+                      tv_ptr->mem_large_ds_sid,
+                      tv_ptr->large_rank,
+                      tv_ptr->edge_size,
+                      tv_ptr->checker_edge_size,
+                      tv_ptr->small_rank - 1,
+                      tv_ptr->start
+                    );
+    
+    
+                    /* verify that H5S_select_shape_same() reports the in
+                     * memory checkerboard selection of the slice through the 
+                     * large dataset and the checkerboard selection of the process
+                     * slice of the small data set as having the same shape.
+                     */
+                    check = H5S_select_shape_same_test(tv_ptr->file_small_ds_sid_1,
+                                                       tv_ptr->mem_large_ds_sid);
+                    VRFY((check == TRUE), "H5S_select_shape_same_test passed.");
+    
+    
+                    /* write the checker board selection of the slice from the in 
+                     * memory large data set to the slice of the on disk small 
+                     * dataset. 
+                     */
+#if CHECKER_BOARD_HS_DR_PIO_TEST__M2D_L2S__DEBUG 
+                    HDfprintf(stdout, "%s:%d: start = %d %d %d %d %d.\n", 
+                              fcnName, tv_ptr->mpi_rank,
+                              tv_ptr->start[0], tv_ptr->start[1], tv_ptr->start[2], 
+                              tv_ptr->start[3], tv_ptr->start[4]);
+                    HDfprintf(stdout, "%s:%d: mem/file extent dims = %d/%d.\n",
+                              fcnName, tv_ptr->mpi_rank,
+                              H5Sget_simple_extent_ndims(tv_ptr->mem_large_ds_sid),
+                              H5Sget_simple_extent_ndims(tv_ptr->file_small_ds_sid_1));
+#endif /* CHECKER_BOARD_HS_DR_PIO_TEST__M2D_L2S__DEBUG */
+                    ret = H5Dwrite(tv_ptr->small_dataset,
+                                   H5T_NATIVE_UINT32,
+                                   tv_ptr->mem_large_ds_sid,
+                                   tv_ptr->file_small_ds_sid_1,
+                                   tv_ptr->xfer_plist,
+                                   tv_ptr->large_ds_buf_0);
+                    VRFY((ret >= 0), "H5Dwrite() slice to large ds succeeded.");
+    
+    
+                    /* read the on disk process slice of the small dataset into memory */
+                    ret = H5Dread(tv_ptr->small_dataset,
+                                  H5T_NATIVE_UINT32,
+                                  tv_ptr->mem_small_ds_sid,
+                                  tv_ptr->file_small_ds_sid_0,
+                                  tv_ptr->xfer_plist,
+                                  tv_ptr->small_ds_buf_1);
+                    VRFY((ret >= 0), "H5Dread() slice from small ds succeeded.");
+    
+    
+                    /* verify that expected data is retrieved */
+    
+                    mis_match = FALSE;
+    
+                    expected_value = (uint32_t)(
+    			(i * tv_ptr->edge_size * tv_ptr->edge_size * 
+                                 tv_ptr->edge_size * tv_ptr->edge_size) +
+                        (j * tv_ptr->edge_size * tv_ptr->edge_size * tv_ptr->edge_size) +
+                        (k * tv_ptr->edge_size * tv_ptr->edge_size) +
+                        (l * tv_ptr->edge_size));
+    
+                    start_index = (size_t)(tv_ptr->mpi_rank) * tv_ptr->small_ds_slice_size;
+                    stop_index = start_index + tv_ptr->small_ds_slice_size - 1;
+    
+                    HDassert( start_index < stop_index );
+                    HDassert( stop_index <= tv_ptr->small_ds_size );
+    
+                    data_ok = TRUE;
+    
+                    ptr_1 = tv_ptr->small_ds_buf_1;
+                    for ( u = 0; u < start_index; u++, ptr_1++ ) {
+    
+                        if ( *ptr_1 != 0 ) {
 
-                mis_match = FALSE;
+                            data_ok = FALSE;
+                            *ptr_1 = 0;
+                        }
+                    }
 
-                expected_value = (uint32_t)(
-			(i * edge_size * edge_size * edge_size * edge_size) +
-                        (j * edge_size * edge_size * edge_size) +
-                        (k * edge_size * edge_size) +
-                        (l * edge_size));
+                    data_ok &= ckrbrd_hs_dr_pio_test__verify_data
+                               (
+                                 tv_ptr->small_ds_buf_1 + start_index,
+                                 tv_ptr->small_rank - 1,
+                                 tv_ptr->edge_size,
+                                 tv_ptr->checker_edge_size,
+                                 expected_value,
+                                 (hbool_t)TRUE
+                               );
 
-                start_index = (size_t)mpi_rank * small_ds_slice_size;
-                stop_index = start_index + small_ds_slice_size - 1;
 
-                HDassert( start_index < stop_index );
-                HDassert( stop_index <= small_ds_size );
+                    ptr_1 = tv_ptr->small_ds_buf_1;
+                    for ( u = stop_index; u < tv_ptr->small_ds_size; u++, ptr_1++ ) {
 
-                data_ok = TRUE;
+                        if ( *ptr_1 != 0 ) {
 
-                ptr_1 = small_ds_buf_1;
-                for ( u = 0; u < start_index; u++, ptr_1++ ) {
+                            data_ok = FALSE;
+                            *ptr_1 = 0;
+                        }
+                    }
 
-                    if ( *ptr_1 != 0 ) {
+                    VRFY((data_ok == TRUE), 
+                         "large slice write slice to small slice data good.");
 
-                        data_ok = FALSE;
-                        *ptr_1 = 0;
-                    }
+                    (tv_ptr->tests_run)++;
                 }
 
-                data_ok &= checker_board_hyperslab_dr_pio_test__verify_data
-                           (
-                             small_ds_buf_1 + start_index,
-                             small_rank - 1,
-                             edge_size,
-                             checker_edge_size,
-                             expected_value,
-                             (hbool_t)TRUE
-                           );
+                l++;
 
+                (tv_ptr->total_tests)++;
 
-                ptr_1 = small_ds_buf_1;
-                for ( u = stop_index; u < small_ds_size; u++, ptr_1++ ) {
+            } while ( ( tv_ptr->large_rank > 2 ) &&
+                      ( (tv_ptr->small_rank - 1) <= 1 ) &&
+                      ( l < tv_ptr->edge_size ) );
+            k++;
+        } while ( ( tv_ptr->large_rank > 3 ) &&
+                  ( (tv_ptr->small_rank - 1) <= 2 ) &&
+                  ( k < tv_ptr->edge_size ) );
+        j++;
+    } while ( ( tv_ptr->large_rank > 4 ) &&
+              ( (tv_ptr->small_rank - 1) <= 3 ) &&
+              ( j < tv_ptr->edge_size ) );
 
-                    if ( *ptr_1 != 0 ) {
+    return;
 
-                        data_ok = FALSE;
-                        *ptr_1 = 0;
-                    }
-                }
+} /* ckrbrd_hs_dr_pio_test__m2d_l2s() */
 
-                VRFY((data_ok == TRUE), 
-                     "large slice write slice to small slice data good.");
 
-                l++;
+/*-------------------------------------------------------------------------
+ * Function:	ckrbrd_hs_dr_pio_test__m2d_s2l()
+ *
+ * Purpose:	Part four of a series of tests of I/O to/from checker
+ *		board hyperslab selections of different rank in the parallel.
+ *
+ *		Verify that we can write from memory to file using 
+ *		selections of different rank that H5S_select_shape_same() 
+ *		views as being of the same shape.
+ *
+ *		Do this by writing checker board selections of the contents 
+ *		of the process's slice of the in memory small data set to 
+ *		slices of the on disk large data set.  After each write, 
+ *		read the process's slice of the large data set back into 
+ *		memory, and verify that it contains the expected data. 
+ *
+ *		Verify that H5S_select_shape_same() returns true on the 
+ *		memory and file selections.
+ *
+ * Return:	void
+ *
+ * Programmer:	JRM -- 8/15/11
+ *
+ * Modifications:
+ *
+ *		None
+ *
+ *-------------------------------------------------------------------------
+ */
 
-            } while ( ( large_rank > 2 ) &&
-                      ( (small_rank - 1) <= 1 ) &&
-                      ( l < edge_size ) );
-            k++;
-        } while ( ( large_rank > 3 ) &&
-                  ( (small_rank - 1) <= 2 ) &&
-                  ( k < edge_size ) );
-        j++;
-    } while ( ( large_rank > 4 ) &&
-              ( (small_rank - 1) <= 3 ) &&
-              ( j < edge_size ) );
+#define CHECKER_BOARD_HS_DR_PIO_TEST__M2D_S2L__DEBUG 0
+
+static void
+ckrbrd_hs_dr_pio_test__m2d_s2l(struct hs_dr_pio_test_vars_t * tv_ptr)
+{
+#if CHECKER_BOARD_HS_DR_PIO_TEST__M2D_S2L__DEBUG 
+    const char *fcnName = "ckrbrd_hs_dr_pio_test__m2d_s2l()";
+#endif /* CONTIG_HS_DR_PIO_TEST__M2D_S2L__DEBUG */
+    hbool_t	data_ok = FALSE;
+    hbool_t	mis_match = FALSE;
+    int		i, j, k, l;
+    size_t      u;
+    size_t      start_index;
+    size_t      stop_index;
+    uint32_t	expected_value;
+    uint32_t  * ptr_1;
+    int		mpi_rank; /* needed by VRFY */
+    hsize_t     sel_start[PAR_SS_DR_MAX_RANK];
+    htri_t      check;          /* Shape comparison return value */
+    herr_t	ret;		/* Generic return value */
+
+    /* initialize the local copy of mpi_rank */
+    mpi_rank = tv_ptr->mpi_rank;
 
 
     /* Now write the contents of the process's slice of the in memory 
@@ -3815,49 +3979,49 @@ int		m, n;
      * and file selections.
      */
 
-    start[0] = (hsize_t)mpi_rank;
-    stride[0] = (hsize_t)(2 * (mpi_size + 1));
-    count[0] = 1;
-    block[0] = 1;
+    tv_ptr->start[0] = (hsize_t)(tv_ptr->mpi_rank);
+    tv_ptr->stride[0] = (hsize_t)(2 * (tv_ptr->mpi_size + 1));
+    tv_ptr->count[0] = 1;
+    tv_ptr->block[0] = 1;
 
-    for ( i = 1; i < large_rank; i++ ) {
+    for ( i = 1; i < tv_ptr->large_rank; i++ ) {
 
-        start[i] = 0;
-        stride[i] = (hsize_t)(2 * edge_size);
-        count[i] = 1;
-        block[i] = (hsize_t)edge_size;
+        tv_ptr->start[i] = 0;
+        tv_ptr->stride[i] = (hsize_t)(2 * tv_ptr->edge_size);
+        tv_ptr->count[i] = 1;
+        tv_ptr->block[i] = (hsize_t)(tv_ptr->edge_size);
     }
 
-    ret = H5Sselect_hyperslab(file_large_ds_sid_0,
+    ret = H5Sselect_hyperslab(tv_ptr->file_large_ds_sid_0,
                               H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
+                              tv_ptr->start,
+                              tv_ptr->stride,
+                              tv_ptr->count,
+                              tv_ptr->block);
     VRFY((ret >= 0), "H5Sselect_hyperslab(file_large_ds_sid_0, set) suceeded");
 
-    ret = H5Sselect_hyperslab(mem_large_ds_sid,
+    ret = H5Sselect_hyperslab(tv_ptr->mem_large_ds_sid,
                               H5S_SELECT_SET,
-                              start,
-                              stride,
-                              count,
-                              block);
-    VRFY((ret >= 0), "H5Sselect_hyperslab(mem_small_ds_sid, set) suceeded");
+                              tv_ptr->start,
+                              tv_ptr->stride,
+                              tv_ptr->count,
+                              tv_ptr->block);
+    VRFY((ret >= 0), "H5Sselect_hyperslab(tv_ptr->mem_large_ds_sid, set) suceeded");
 
     /* setup a checkerboard selection of the slice of the in memory small 
      * data set associated with the process's mpi rank.
      */
 
     sel_start[0] = sel_start[1] = sel_start[2] = sel_start[3] = sel_start[4] = 0;
-    sel_start[small_ds_offset] = (hsize_t)mpi_rank;
+    sel_start[tv_ptr->small_ds_offset] = (hsize_t)(tv_ptr->mpi_rank);
 
-    checker_board_hyperslab_dr_pio_test__select_checker_board(mpi_rank,
-                                                              mem_small_ds_sid,
-                                                              small_rank,
-                                                              edge_size,
-                                                              checker_edge_size,
-                                                              small_rank - 1,
-                                                              sel_start);
+    ckrbrd_hs_dr_pio_test__slct_ckrbrd(tv_ptr->mpi_rank,
+                                       tv_ptr->mem_small_ds_sid,
+                                       tv_ptr->small_rank,
+                                       tv_ptr->edge_size,
+                                       tv_ptr->checker_edge_size,
+                                       tv_ptr->small_rank - 1,
+                                       sel_start);
 
     /* set up start, stride, count, and block -- note that we will
      * change start[] so as to write checkerboard selections of slices 
@@ -3865,31 +4029,31 @@ int		m, n;
      */
     for ( i = 0; i < PAR_SS_DR_MAX_RANK; i++ ) {
 
-        start[i] = 0;
-        stride[i] = (hsize_t)(2 * edge_size);
-        count[i] = 1;
-        if ( (PAR_SS_DR_MAX_RANK - i) > (small_rank - 1) ) {
+        tv_ptr->start[i] = 0;
+        tv_ptr->stride[i] = (hsize_t)(2 * tv_ptr->edge_size);
+        tv_ptr->count[i] = 1;
+        if ( (PAR_SS_DR_MAX_RANK - i) > (tv_ptr->small_rank - 1) ) {
 
-            block[i] = 1;
+            tv_ptr->block[i] = 1;
 
         } else {
 
-            block[i] = (hsize_t)edge_size;
+            tv_ptr->block[i] = (hsize_t)(tv_ptr->edge_size);
         }
     }
 
     /* zero out the in memory large ds */
-    HDmemset(large_ds_buf_1, 0, sizeof(uint32_t) * large_ds_size);
+    HDmemset(tv_ptr->large_ds_buf_1, 0, sizeof(uint32_t) * tv_ptr->large_ds_size);
 
-#if CONTIG_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG
+#if CHECKER_BOARD_HS_DR_PIO_TEST__M2D_S2L__DEBUG
     HDfprintf(stdout, 
          "%s writing process checkerboard selections of slices of small ds to process slices of large ds on disk.\n",
          fcnName);
-#endif 
+#endif /* CHECKER_BOARD_HS_DR_PIO_TEST__M2D_S2L__DEBUG */
 
-    if ( PAR_SS_DR_MAX_RANK - large_rank == 0 ) {
+    if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 0 ) {
 
-        i = mpi_rank;
+        i = tv_ptr->mpi_rank;
 
     } else {
 
@@ -3902,9 +4066,9 @@ int		m, n;
      * test.
      */
 
-    if ( PAR_SS_DR_MAX_RANK - large_rank == 1 ) {
+    if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 1 ) {
 
-        j = mpi_rank;
+        j = tv_ptr->mpi_rank;
 
     } else {
 
@@ -3912,9 +4076,9 @@ int		m, n;
     }
 
     do {
-        if ( PAR_SS_DR_MAX_RANK - large_rank == 2 ) {
+        if ( PAR_SS_DR_MAX_RANK - tv_ptr->large_rank == 2 ) {
 
-            k = mpi_rank;
+            k = tv_ptr->mpi_rank;
 
         } else {
 
@@ -3934,240 +4098,395 @@ int		m, n;
 
             l = 0;
             do {
-                /* we know that small_rank >= 1 and that large_rank > small_rank
-                 * by the assertions at the head of this function.  Thus no
-                 * need for another inner loop.
-                 */
-
-                /* Zero out this processes slice of the on disk large data set.
-                 * Note that this will leave one slice with its original data
-                 * as there is one more slice than processes.
-                  */
-                ret = H5Dwrite(large_dataset,
-                               H5T_NATIVE_UINT32,
-                               mem_large_ds_sid,
-                               file_large_ds_sid_0,
-                               xfer_plist,
-                               large_ds_buf_2);
-		VRFY((ret != FAIL), "H5Dwrite() to zero large ds suceeded");
-
-
-                /* select the portion of the in memory large cube to which we
-                 * are going to write data.
-                 */
-                start[0] = (hsize_t)i;
-                start[1] = (hsize_t)j;
-                start[2] = (hsize_t)k;
-                start[3] = (hsize_t)l;
-                start[4] = 0;
-
-                HDassert( ( start[0] == 0 ) || ( 0 < small_ds_offset + 1 ) );
-                HDassert( ( start[1] == 0 ) || ( 1 < small_ds_offset + 1 ) );
-                HDassert( ( start[2] == 0 ) || ( 2 < small_ds_offset + 1 ) );
-                HDassert( ( start[3] == 0 ) || ( 3 < small_ds_offset + 1 ) );
-                HDassert( ( start[4] == 0 ) || ( 4 < small_ds_offset + 1 ) );
-
-                checker_board_hyperslab_dr_pio_test__select_checker_board
-                (
-                  mpi_rank,
-                  file_large_ds_sid_1,
-                  large_rank,
-                  edge_size,
-                  checker_edge_size,
-                  small_rank - 1,
-                  start
-                );
-
-
-                /* verify that H5S_select_shape_same() reports the in
-                 * memory small data set slice selection and the
-                 * on disk slice through the large data set selection
-                 * as having the same shape.
-                 */
-                check = H5S_select_shape_same_test(mem_small_ds_sid,
-                                                   file_large_ds_sid_1);
-		VRFY((check == TRUE), "H5S_select_shape_same_test passed");
-
-
-                /* write the small data set slice from memory to the 
-                 * target slice of the disk data set 
-                 */
-#if CHECKER_BOARD_HYPERSLAB_DR_PIO_TEST__RUN_TEST__DEBUG 
-                HDfprintf(stdout, "%s:%d: start = %d %d %d %d %d.\n", 
-                          fcnName, mpi_rank,
-                          start[0], start[1], start[2], start[3], start[4]);
-                HDfprintf(stdout, "%s:%d: mem/file extent dims = %d/%d.\n",
-                          fcnName, mpi_rank,
-                          H5Sget_simple_extent_ndims(mem_small_ds_sid),
-                          H5Sget_simple_extent_ndims(file_large_ds_sid_1));
-#endif 
-                ret = H5Dwrite(large_dataset,
-                               H5T_NATIVE_UINT32,
-                               mem_small_ds_sid,
-                               file_large_ds_sid_1,
-                               xfer_plist,
-                               small_ds_buf_0);
-		VRFY((ret != FAIL), 
-                      "H5Dwrite of small ds slice to large ds succeeded");
+                if ( (tv_ptr->skips)++ < tv_ptr->max_skips ) { /* skip the test */
+
+                    (tv_ptr->tests_skipped)++;
+
+                } else { /* run the test */
+
+                    tv_ptr->skips = 0; /* reset the skips counter */
+
+                    /* we know that small_rank >= 1 and that large_rank > small_rank
+                     * by the assertions at the head of this function.  Thus no
+                     * need for another inner loop.
+                     */
+
+                    /* Zero out this processes slice of the on disk large data set.
+                     * Note that this will leave one slice with its original data
+                     * as there is one more slice than processes.
+                     */
+                    ret = H5Dwrite(tv_ptr->large_dataset,
+                                   H5T_NATIVE_UINT32,
+                                   tv_ptr->mem_large_ds_sid,
+                                   tv_ptr->file_large_ds_sid_0,
+                                   tv_ptr->xfer_plist,
+                                   tv_ptr->large_ds_buf_2);
+                    VRFY((ret != FAIL), "H5Dwrite() to zero large ds suceeded");
 
 
-                /* read this processes slice on the on disk large 
-                 * data set into memory.
-                 */
+                    /* select the portion of the in memory large cube to which we
+                     * are going to write data.
+                     */
+                    tv_ptr->start[0] = (hsize_t)i;
+                    tv_ptr->start[1] = (hsize_t)j;
+                    tv_ptr->start[2] = (hsize_t)k;
+                    tv_ptr->start[3] = (hsize_t)l;
+                    tv_ptr->start[4] = 0;
+
+                    HDassert((tv_ptr->start[0] == 0)||(0 < tv_ptr->small_ds_offset + 1));
+                    HDassert((tv_ptr->start[1] == 0)||(1 < tv_ptr->small_ds_offset + 1));
+                    HDassert((tv_ptr->start[2] == 0)||(2 < tv_ptr->small_ds_offset + 1));
+                    HDassert((tv_ptr->start[3] == 0)||(3 < tv_ptr->small_ds_offset + 1));
+                    HDassert((tv_ptr->start[4] == 0)||(4 < tv_ptr->small_ds_offset + 1));
+
+                    ckrbrd_hs_dr_pio_test__slct_ckrbrd
+                    (
+                      tv_ptr->mpi_rank,
+                      tv_ptr->file_large_ds_sid_1,
+                      tv_ptr->large_rank,
+                      tv_ptr->edge_size,
+                      tv_ptr->checker_edge_size,
+                      tv_ptr->small_rank - 1,
+                      tv_ptr->start
+                    );
+
+
+                    /* verify that H5S_select_shape_same() reports the in
+                     * memory small data set slice selection and the
+                     * on disk slice through the large data set selection
+                     * as having the same shape.
+                     */
+                    check = H5S_select_shape_same_test(tv_ptr->mem_small_ds_sid,
+                                                       tv_ptr->file_large_ds_sid_1);
+                    VRFY((check == TRUE), "H5S_select_shape_same_test passed");
 
-                ret = H5Dread(large_dataset,
-                              H5T_NATIVE_UINT32,
-                              mem_large_ds_sid,
-                              file_large_ds_sid_0,
-                              xfer_plist,
-                              large_ds_buf_1);
-                VRFY((ret != FAIL), 
-                     "H5Dread() of process slice of large ds succeeded");
 
+                    /* write the small data set slice from memory to the 
+                     * target slice of the disk data set 
+                     */
+#if CHECKER_BOARD_HS_DR_PIO_TEST__M2D_S2L__DEBUG 
+                    HDfprintf(stdout, "%s:%d: start = %d %d %d %d %d.\n", 
+                              fcnName, tv_ptr->mpi_rank,
+                              tv_ptr->start[0], tv_ptr->start[1], tv_ptr->start[2], 
+                              tv_ptr->start[3], tv_ptr->start[4]);
+                    HDfprintf(stdout, "%s:%d: mem/file extent dims = %d/%d.\n",
+                              fcnName, tv_ptr->mpi_rank,
+                              H5Sget_simple_extent_ndims(tv_ptr->mem_small_ds_sid),
+                              H5Sget_simple_extent_ndims(tv_ptr->file_large_ds_sid_1));
+#endif /* CHECKER_BOARD_HS_DR_PIO_TEST__M2D_S2L__DEBUG */
+                    ret = H5Dwrite(tv_ptr->large_dataset,
+                                   H5T_NATIVE_UINT32,
+                                   tv_ptr->mem_small_ds_sid,
+                                   tv_ptr->file_large_ds_sid_1,
+                                   tv_ptr->xfer_plist,
+                                   tv_ptr->small_ds_buf_0);
+                    VRFY((ret != FAIL), 
+                         "H5Dwrite of small ds slice to large ds succeeded");
+
+
+                    /* read this processes slice on the on disk large 
+                     * data set into memory.
+                     */
 
-                /* verify that the expected data and only the
-                 * expected data was read.
-                 */
-                expected_value = (uint32_t)((size_t)mpi_rank * small_ds_slice_size);
+                    ret = H5Dread(tv_ptr->large_dataset,
+                                  H5T_NATIVE_UINT32,
+                                  tv_ptr->mem_large_ds_sid,
+                                  tv_ptr->file_large_ds_sid_0,
+                                  tv_ptr->xfer_plist,
+                                  tv_ptr->large_ds_buf_1);
+                    VRFY((ret != FAIL), 
+                         "H5Dread() of process slice of large ds succeeded");
 
-                start_index = (size_t)((i * edge_size * edge_size * edge_size * edge_size) +
-                              (j * edge_size * edge_size * edge_size) +
-                              (k * edge_size * edge_size) +
-                              (l * edge_size));
-                stop_index = start_index + small_ds_slice_size - 1;
 
-                HDassert( start_index < stop_index );
-                HDassert( stop_index < large_ds_size );
+                    /* verify that the expected data and only the
+                     * expected data was read.
+                     */
+                    expected_value = 
+                       (uint32_t)((size_t)(tv_ptr->mpi_rank) * tv_ptr->small_ds_slice_size);
 
+                    start_index = (size_t)
+                        ((i * tv_ptr->edge_size * tv_ptr->edge_size * 
+                              tv_ptr->edge_size * tv_ptr->edge_size) +
+                         (j * tv_ptr->edge_size * tv_ptr->edge_size * tv_ptr->edge_size) +
+                         (k * tv_ptr->edge_size * tv_ptr->edge_size) +
+                         (l * tv_ptr->edge_size));
+                    stop_index = start_index + tv_ptr->small_ds_slice_size - 1;
 
-                mis_match = FALSE;
+                    HDassert( start_index < stop_index );
+                    HDassert( stop_index < tv_ptr->large_ds_size );
 
-                data_ok = TRUE;
 
-                ptr_1 = large_ds_buf_1;
-                for ( u = 0; u < start_index; u++, ptr_1++ ) {
+                    mis_match = FALSE;
 
-                    if ( *ptr_1 != 0 ) {
+                    data_ok = TRUE;
 
-                        data_ok = FALSE;
-                        *ptr_1 = 0;
+                    ptr_1 = tv_ptr->large_ds_buf_1;
+                    for ( u = 0; u < start_index; u++, ptr_1++ ) {
+
+                        if ( *ptr_1 != 0 ) {
+
+                            data_ok = FALSE;
+                            *ptr_1 = 0;
+                        }
                     }
-                }
 
-                data_ok &= checker_board_hyperslab_dr_pio_test__verify_data
-                           (
-                             large_ds_buf_1 + start_index,
-                             small_rank - 1,
-                             edge_size,
-                             checker_edge_size,
-                             expected_value,
-                             (hbool_t)TRUE
-                           );
+                    data_ok &= ckrbrd_hs_dr_pio_test__verify_data
+                               (
+                                 tv_ptr->large_ds_buf_1 + start_index,
+                                 tv_ptr->small_rank - 1,
+                                 tv_ptr->edge_size,
+                                 tv_ptr->checker_edge_size,
+                                 expected_value,
+                                 (hbool_t)TRUE
+                               );
 
 
-                ptr_1 = large_ds_buf_1;
-                for ( u = stop_index; u < small_ds_size; u++, ptr_1++ ) {
+                    ptr_1 = tv_ptr->large_ds_buf_1;
+                    for ( u = stop_index; u < tv_ptr->small_ds_size; u++, ptr_1++ ) {
 
-                    if ( *ptr_1 != 0 ) {
+                        if ( *ptr_1 != 0 ) {
 
-                        data_ok = FALSE;
-                        *ptr_1 = 0;
+                            data_ok = FALSE;
+                            *ptr_1 = 0;
+                        }
                     }
-                }
 
-                VRFY((data_ok == TRUE), 
-                     "small ds cb slice write to large ds slice data good.");
+                    VRFY((data_ok == TRUE), 
+                         "small ds cb slice write to large ds slice data good.");
+
+                    (tv_ptr->tests_run)++;
+                }
 
                 l++;
 
-            } while ( ( large_rank > 2 ) &&
-                      ( (small_rank - 1) <= 1 ) &&
-                      ( l < edge_size ) );
+                (tv_ptr->total_tests)++;
+
+            } while ( ( tv_ptr->large_rank > 2 ) &&
+                      ( (tv_ptr->small_rank - 1) <= 1 ) &&
+                      ( l < tv_ptr->edge_size ) );
             k++;
-        } while ( ( large_rank > 3 ) &&
-                  ( (small_rank - 1) <= 2 ) &&
-                  ( k < edge_size ) );
+        } while ( ( tv_ptr->large_rank > 3 ) &&
+                  ( (tv_ptr->small_rank - 1) <= 2 ) &&
+                  ( k < tv_ptr->edge_size ) );
         j++;
-    } while ( ( large_rank > 4 ) &&
-              ( (small_rank - 1) <= 3 ) &&
-              ( j < edge_size ) );
+    } while ( ( tv_ptr->large_rank > 4 ) &&
+              ( (tv_ptr->small_rank - 1) <= 3 ) &&
+              ( j < tv_ptr->edge_size ) );
 
+    return;
 
-    /* Close dataspaces */
-    ret = H5Sclose(full_mem_small_ds_sid);
-    VRFY((ret != FAIL), "H5Sclose(full_mem_small_ds_sid) succeeded");
+} /* ckrbrd_hs_dr_pio_test__m2d_s2l() */
 
-    ret = H5Sclose(full_file_small_ds_sid);
-    VRFY((ret != FAIL), "H5Sclose(full_file_small_ds_sid) succeeded");
 
-    ret = H5Sclose(mem_small_ds_sid);
-    VRFY((ret != FAIL), "H5Sclose(mem_small_ds_sid) succeeded");
+/*-------------------------------------------------------------------------
+ * Function:	ckrbrd_hs_dr_pio_test__run_test()
+ *
+ * Purpose:	Test I/O to/from checkerboard selections of hyperslabs of 
+ *		different rank in the parallel.
+ *
+ * Return:	void
+ *
+ * Programmer:	JRM -- 10/10/09
+ *
+ * Modifications:
+ *
+ *		JRM -- 9/16/10
+ *		Added the express_test parameter.  Use it to control 
+ *		whether we set an alignment, and whether we allocate
+ *		chunks such that no two processes will normally touch
+ *		the same chunk.
+ *
+ *-------------------------------------------------------------------------
+ */
 
-    ret = H5Sclose(file_small_ds_sid_0);
-    VRFY((ret != FAIL), "H5Sclose(file_small_ds_sid_0) succeeded");
+#define CKRBRD_HS_DR_PIO_TEST__RUN_TEST__DEBUG 0
 
-    ret = H5Sclose(file_small_ds_sid_1);
-    VRFY((ret != FAIL), "H5Sclose(file_small_ds_sid_1) succeeded");
+static void
+ckrbrd_hs_dr_pio_test__run_test(const int test_num,
+                                const int edge_size,
+                                const int checker_edge_size,
+                                const int chunk_edge_size,
+                                const int small_rank,
+                                const int large_rank,
+                                const hbool_t use_collective_io,
+                                const hid_t dset_type,
+                                const int express_test,
+                                int * skips_ptr,
+                                int max_skips,
+                                int64_t * total_tests_ptr,
+                                int64_t * tests_run_ptr,
+                                int64_t * tests_skipped_ptr)
 
-    ret = H5Sclose(small_ds_slice_sid);
-    VRFY((ret != FAIL), "H5Sclose(small_ds_slice_sid) succeeded");
+{
+#if CKRBRD_HS_DR_PIO_TEST__RUN_TEST__DEBUG
+    const char *fcnName = "ckrbrd_hs_dr_pio_test__run_test()";
+#endif /* CKRBRD_HS_DR_PIO_TEST__RUN_TEST__DEBUG */
+    int		mpi_rank; /* needed by VRFY */
+    struct hs_dr_pio_test_vars_t test_vars = 
+    {
+        /* int	       mpi_size                        = */ -1,
+        /* int         mpi_rank                        = */ -1,
+        /* MPI_Comm    mpi_comm                        = */ MPI_COMM_NULL,
+        /* MPI_Inf     mpi_info                        = */ MPI_INFO_NULL,
+        /* int         test_num                        = */ -1,
+        /* int         edge_size                       = */ -1,
+        /* int         checker_edge_size               = */ -1,
+        /* int         chunk_edge_size                 = */ -1,
+        /* int         small_rank                      = */ -1,
+        /* int         large_rank                      = */ -1,
+        /* hid_t       dset_type                       = */ -1,
+        /* uint32_t  * small_ds_buf_0                  = */ NULL,
+        /* uint32_t  * small_ds_buf_1                  = */ NULL,
+        /* uint32_t  * small_ds_buf_2                  = */ NULL,
+        /* uint32_t  * small_ds_slice_buf              = */ NULL,
+        /* uint32_t  * large_ds_buf_0                  = */ NULL,
+        /* uint32_t  * large_ds_buf_1                  = */ NULL, 
+        /* uint32_t  * large_ds_buf_2                  = */ NULL,
+        /* uint32_t  * large_ds_slice_buf              = */ NULL,
+        /* int         small_ds_offset                 = */ -1,
+        /* int         large_ds_offset                 = */ -1,
+        /* hid_t       fid                             = */ -1,  /* HDF5 file ID */
+        /* hid_t       xfer_plist                      = */ H5P_DEFAULT,
+        /* hid_t       full_mem_small_ds_sid           = */ -1,
+        /* hid_t       full_file_small_ds_sid          = */ -1,
+        /* hid_t       mem_small_ds_sid                = */ -1,
+        /* hid_t       file_small_ds_sid_0             = */ -1,
+        /* hid_t       file_small_ds_sid_1             = */ -1,
+        /* hid_t       small_ds_slice_sid              = */ -1,
+        /* hid_t       full_mem_large_ds_sid           = */ -1,
+        /* hid_t       full_file_large_ds_sid          = */ -1,
+        /* hid_t       mem_large_ds_sid                = */ -1,
+        /* hid_t       file_large_ds_sid_0             = */ -1,
+        /* hid_t       file_large_ds_sid_1             = */ -1,
+        /* hid_t       file_large_ds_process_slice_sid = */ -1,
+        /* hid_t       mem_large_ds_process_slice_sid  = */ -1,
+        /* hid_t       large_ds_slice_sid              = */ -1,
+        /* hid_t       small_dataset                   = */ -1,     /* Dataset ID */
+        /* hid_t       large_dataset                   = */ -1,     /* Dataset ID */
+        /* size_t      small_ds_size                   = */ 1,
+        /* size_t      small_ds_slice_size             = */ 1,
+        /* size_t      large_ds_size                   = */ 1,
+        /* size_t      large_ds_slice_size             = */ 1,
+        /* hsize_t     dims[PAR_SS_DR_MAX_RANK]        = */ {0,0,0,0,0},
+        /* hsize_t     chunk_dims[PAR_SS_DR_MAX_RANK]  = */ {0,0,0,0,0},
+        /* hsize_t     start[PAR_SS_DR_MAX_RANK]       = */ {0,0,0,0,0},
+        /* hsize_t     stride[PAR_SS_DR_MAX_RANK]      = */ {0,0,0,0,0},
+        /* hsize_t     count[PAR_SS_DR_MAX_RANK]       = */ {0,0,0,0,0},
+        /* hsize_t     block[PAR_SS_DR_MAX_RANK]       = */ {0,0,0,0,0},
+        /* hsize_t   * start_ptr                       = */ NULL,
+        /* hsize_t   * stride_ptr                      = */ NULL,
+        /* hsize_t   * count_ptr                       = */ NULL,
+        /* hsize_t   * block_ptr                       = */ NULL,
+        /* int 	       skips                           = */ 0,
+        /* int 	       max_skips                       = */ 0,
+        /* int64_t     total_tests                     = */ 0,
+        /* int64_t     tests_run                       = */ 0,
+        /* int64_t     tests_skipped                   = */ 0
+    };
+    struct hs_dr_pio_test_vars_t * tv_ptr = &test_vars;
 
-    ret = H5Sclose(full_mem_large_ds_sid);
-    VRFY((ret != FAIL), "H5Sclose(full_mem_large_ds_sid) succeeded");
+    hs_dr_pio_test__setup(test_num, edge_size, checker_edge_size, 
+                          chunk_edge_size, small_rank, large_rank, 
+                          use_collective_io, dset_type, express_test, 
+                          tv_ptr);
 
-    ret = H5Sclose(full_file_large_ds_sid);
-    VRFY((ret != FAIL), "H5Sclose(full_file_large_ds_sid) succeeded");
 
-    ret = H5Sclose(mem_large_ds_sid);
-    VRFY((ret != FAIL), "H5Sclose(mem_large_ds_sid) succeeded");
+    /* initialize the local copy of mpi_rank */
+    mpi_rank = tv_ptr->mpi_rank;
 
-    ret = H5Sclose(file_large_ds_sid_0);
-    VRFY((ret != FAIL), "H5Sclose(mem_large_ds_sid) succeeded");
 
-    ret = H5Sclose(file_large_ds_sid_1);
-    VRFY((ret != FAIL), "H5Sclose(mem_large_ds_sid) succeeded");
+    /* initialize skips & max_skips */
+    tv_ptr->skips = *skips_ptr;
+    tv_ptr->max_skips = max_skips;
 
-    ret = H5Sclose(mem_large_ds_process_slice_sid);
-    VRFY((ret != FAIL), "H5Sclose(mem_large_ds_process_slice_sid) succeeded");
 
-    ret = H5Sclose(file_large_ds_process_slice_sid);
-    VRFY((ret != FAIL), "H5Sclose(file_large_ds_process_slice_sid) succeeded");
+#if CKRBRD_HS_DR_PIO_TEST__RUN_TEST__DEBUG
+    if ( MAINPROCESS ) {
+        HDfprintf(stdout, "test %d: small rank = %d, large rank = %d.\n",
+                  test_num, small_rank, large_rank);
+        HDfprintf(stdout, "test %d: Initialization complete.\n", test_num);
+    }
+#endif /* CKRBRD_HS_DR_PIO_TEST__RUN_TEST__DEBUG */
 
-    ret = H5Sclose(large_ds_slice_sid);
-    VRFY((ret != FAIL), "H5Sclose(large_ds_slice_sid) succeeded");
 
+    /* first, verify that we can read from disk correctly using selections
+     * of different rank that H5S_select_shape_same() views as being of the
+     * same shape.
+     *
+     * Start by reading a (small_rank - 1)-D slice from this processes slice 
+     * of the on disk large data set, and verifying that the data read is 
+     * correct.  Verify that H5S_select_shape_same() returns true on the 
+     * memory and file selections.
+     *
+     * The first step is to set up the needed checker board selection in the
+     * in memory small small cube
+     */
+
+    ckrbrd_hs_dr_pio_test__d2m_l2s(tv_ptr);
 
-    /* Close Datasets */
-    ret = H5Dclose(small_dataset);
-    VRFY((ret != FAIL), "H5Dclose(small_dataset) succeeded");
 
-    ret = H5Dclose(large_dataset);
-    VRFY((ret != FAIL), "H5Dclose(large_dataset) succeeded");
+    /* similarly, read slices of the on disk small data set into slices 
+     * through the in memory large data set, and verify that the correct 
+     * data (and only the correct data) is read.
+     */
 
+    ckrbrd_hs_dr_pio_test__d2m_s2l(tv_ptr);
 
-    /* close the file collectively */
-    MESG("about to close file.");
-    ret = H5Fclose(fid);
-    VRFY((ret != FAIL), "file close succeeded");
 
-    /* Free memory buffers */
-    if ( small_ds_buf_0 != NULL ) HDfree(small_ds_buf_0);
-    if ( small_ds_buf_1 != NULL ) HDfree(small_ds_buf_1);
-    if ( small_ds_buf_2 != NULL ) HDfree(small_ds_buf_2);
-    if ( small_ds_slice_buf != NULL ) HDfree(small_ds_slice_buf);
+    /* now we go in the opposite direction, verifying that we can write
+     * from memory to file using selections of different rank that
+     * H5S_select_shape_same() views as being of the same shape.
+     *
+     * Start by writing small_rank - 1 D slices from the in memory large data
+     * set to the on disk small dataset.  After each write, read the slice of 
+     * the small dataset back from disk, and verify that it contains the 
+     * expected data. Verify that H5S_select_shape_same() returns true on 
+     * the memory and file selections.
+     */
+
+    ckrbrd_hs_dr_pio_test__m2d_l2s(tv_ptr);
+
+
+    /* Now write the contents of the process's slice of the in memory 
+     * small data set to slices of the on disk large data set.  After 
+     * each write, read the process's slice of the large data set back
+     * into memory, and verify that it contains the expected data. 
+     * Verify that H5S_select_shape_same() returns true on the memory 
+     * and file selections.
+     */
+
+    ckrbrd_hs_dr_pio_test__m2d_s2l(tv_ptr);
+
+
+#if CKRBRD_HS_DR_PIO_TEST__RUN_TEST__DEBUG
+    if ( MAINPROCESS ) {
+        HDfprintf(stdout, 
+            "test %d: Subtests complete -- tests run/skipped/total = %lld/%lld/%lld.\n", 
+             test_num, (long long)(tv_ptr->tests_run), (long long)(tv_ptr->tests_skipped),
+             (long long)(tv_ptr->total_tests));
+    }
+#endif /* CKRBRD_HS_DR_PIO_TEST__RUN_TEST__DEBUG */
+
+    hs_dr_pio_test__takedown(tv_ptr);
 
-    if ( large_ds_buf_0 != NULL ) HDfree(large_ds_buf_0);
-    if ( large_ds_buf_1 != NULL ) HDfree(large_ds_buf_1);
-    if ( large_ds_buf_2 != NULL ) HDfree(large_ds_buf_2);
-    if ( large_ds_slice_buf != NULL ) HDfree(large_ds_slice_buf);
+#if CKRBRD_HS_DR_PIO_TEST__RUN_TEST__DEBUG
+    if ( MAINPROCESS ) {
+        HDfprintf(stdout, "test %d: Takedown complete.\n", test_num);
+    }
+#endif /* CKRBRD_HS_DR_PIO_TEST__RUN_TEST__DEBUG */
+
+    *skips_ptr = tv_ptr->skips;
+    *total_tests_ptr += tv_ptr->total_tests;
+    *tests_run_ptr += tv_ptr->tests_run;
+    *tests_skipped_ptr += tv_ptr->tests_skipped;
 
     return;
 
-} /* checker_board_hyperslab_dr_pio_test__run_test() */
+} /* ckrbrd_hs_dr_pio_test__run_test() */
 
 
 /*-------------------------------------------------------------------------
- * Function:	checker_board_hyperslab_dr_pio_test()
+ * Function:	ckrbrd_hs_dr_pio_test()
  *
  * Purpose:	Test I/O to/from hyperslab selections of different rank in
  *		the parallel case.
@@ -4193,44 +4512,35 @@ int		m, n;
  *-------------------------------------------------------------------------
  */
 
-void
-checker_board_hyperslab_dr_pio_test(ShapeSameTestMethods sstest_type)
+static void
+ckrbrd_hs_dr_pio_test(ShapeSameTestMethods sstest_type)
 {
+    int         express_test;
+    int         local_express_test;
+    int	        mpi_size = -1;
+    int         mpi_rank = -1;
     int	        test_num = 0;
     int		edge_size = 10;
     int         checker_edge_size = 3;
     int		chunk_edge_size = 0;
     int	        small_rank = 3;
     int	        large_rank = 4;
-    int         skips[4] = {0, 0, 0, 0};
-    int         skip_counters[4] = {0, 0, 0, 0};
-    int         tests_skiped[4] = {0, 0, 0, 0};
     int		mpi_result;
     hid_t	dset_type = H5T_NATIVE_UINT;
-#ifdef H5_HAVE_GETTIMEOFDAY
-    hbool_t     time_tests = TRUE;
-    hbool_t	display_skips = FALSE;
-    int         local_express_test;
-    int         express_test;
-    int         i;
-    int         samples = 0;
-    int         sample_size = 1;
-    int         mpi_size = -1;
-    int         mpi_rank = -1;
-    int         local_skips[4];
-    const int   ind_contig_idx = 0;
-    const int   col_contig_idx = 1;
-    const int   ind_chunked_idx = 2;
-    const int   col_chunked_idx = 3;
-    const int   test_types = 4;
-    long long   max_test_time = 3000000; /* for one test */
-    long long   sample_times[4] = {0, 0, 0, 0};
-    struct timeval timeval_a;
-    struct timeval timeval_b;
+    int         skips = 0;
+    int         max_skips = 0;
+    /* The following table list the number of sub-tests skipped between
+     * each test that is actually executed as a function of the express
+     * test level.  Note that any value in excess of 4880 will cause all
+     * sub tests to be skipped.
+     */
+    int         max_skips_tbl[4] = {0, 4, 64, 1024};
+    int64_t     total_tests = 0;
+    int64_t     tests_run = 0;
+    int64_t     tests_skipped = 0;
 
     MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
     MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
-#endif /* H5_HAVE_GETTIMEOFDAY */
 
     local_express_test = GetTestExpress();
 
@@ -4245,6 +4555,14 @@ checker_board_hyperslab_dr_pio_test(ShapeSameTestMethods sstest_type)
 
     VRFY((mpi_result == MPI_SUCCESS ), "MPI_Allreduce(0) succeeded");
 
+    if ( local_express_test < 0 ) {
+        max_skips = max_skips_tbl[0];
+    } else if ( local_express_test > 3 ) {
+        max_skips = max_skips_tbl[3];
+    } else {
+        max_skips = max_skips_tbl[local_express_test];
+    }
+
 #if 0 
     {
         int DebugWait = 1;
@@ -4256,201 +4574,113 @@ checker_board_hyperslab_dr_pio_test(ShapeSameTestMethods sstest_type)
     for ( large_rank = 3; large_rank <= PAR_SS_DR_MAX_RANK; large_rank++ ) {
 
         for ( small_rank = 2; small_rank < large_rank; small_rank++ ) {
-	  switch(sstest_type){
-	  case IND_CONTIG:
-            /* contiguous data set, independent I/O */
-            chunk_edge_size = 0;
-            if ( skip_counters[ind_contig_idx] < skips[ind_contig_idx] ) {
-
-                skip_counters[ind_contig_idx]++;
-                tests_skiped[ind_contig_idx]++;
-		printf("Test skipped\n");
-            } else {
-                skip_counters[ind_contig_idx] = 0;
-                START_TIMER(time_tests, timeval_a, "HDgettimeofday(0) succeeds.");
-
-                checker_board_hyperslab_dr_pio_test__run_test(test_num,
-                                                  edge_size,
-                                                  checker_edge_size,
-                                                  chunk_edge_size,
-                                                  small_rank,
-                                                  large_rank,
-                                                  FALSE,
-                                                  dset_type,
-                                                  express_test);
-                STOP_TIMER_AND_UPDATE(time_tests, timeval_b, \
-                                      "HDgettimeofday(1) succeeds.", \
-                                      sample_times[ind_contig_idx]);
-
-            }
-            test_num++;
-	    break;
-	    /* end of case IND_CONTIG */
-
-	  case COL_CONTIG:
-            /* contiguous data set, collective I/O */
-            chunk_edge_size = 0;
-            if ( skip_counters[col_contig_idx] < skips[col_contig_idx] ) {
-
-                skip_counters[col_contig_idx]++;
-                tests_skiped[col_contig_idx]++;
-		printf("Test skipped\n");
-            } else {
-                skip_counters[col_contig_idx] = 0;
-                START_TIMER(time_tests, timeval_a, "HDgettimeofday(2) succeeds.");
-
-                checker_board_hyperslab_dr_pio_test__run_test(test_num,
-                                                  edge_size,
-                                                  checker_edge_size,
-                                                  chunk_edge_size,
-                                                  small_rank,
-                                                  large_rank,
-                                                  TRUE,
-                                                  dset_type,
-                                                  express_test);
-                STOP_TIMER_AND_UPDATE(time_tests, timeval_b, \
-                                      "HDgettimeofday(3) succeeds.", \
-                                      sample_times[col_contig_idx]);
-
-            }
-            test_num++;
-	    break;
-	    /* end of case COL_CONTIG */
-
-	  case IND_CHUNKED:
-            /* chunked data set, independent I/O */
-            chunk_edge_size = 5;
-            if ( skip_counters[ind_chunked_idx] < skips[ind_chunked_idx] ) {
-
-                skip_counters[ind_chunked_idx]++;
-                tests_skiped[ind_chunked_idx]++;
-		printf("Test skipped\n");
-            } else {
-                skip_counters[ind_chunked_idx] = 0;
-                START_TIMER(time_tests, timeval_a, "HDgettimeofday(4) succeeds.");
-
-                checker_board_hyperslab_dr_pio_test__run_test(test_num,
-                                                  edge_size,
-                                                  checker_edge_size,
-                                                  chunk_edge_size,
-                                                  small_rank,
-                                                  large_rank,
-                                                  FALSE,
-                                                  dset_type,
-                                                  express_test);
-                STOP_TIMER_AND_UPDATE(time_tests, timeval_b, \
-                                      "HDgettimeofday(5) succeeds.", \
-                                      sample_times[ind_chunked_idx]);
-
-            }
-            test_num++;
-	    break;
-	    /* end of case IND_CHUNKED */
-
-	  case COL_CHUNKED:
-            /* chunked data set, collective I/O */
-            chunk_edge_size = 5;
-            if ( skip_counters[col_chunked_idx] < skips[col_chunked_idx] ) {
-
-                skip_counters[col_chunked_idx]++;
-                tests_skiped[col_chunked_idx]++;
-		printf("Test skipped\n");
-            } else {
-                skip_counters[col_chunked_idx] = 0;
-                START_TIMER(time_tests, timeval_a, "HDgettimeofday(6) succeeds.");
-
-                checker_board_hyperslab_dr_pio_test__run_test(test_num,
-                                                  edge_size,
-                                                  checker_edge_size,
-                                                  chunk_edge_size,
-                                                  small_rank,
-                                                  large_rank,
-                                                  TRUE,
-                                                  dset_type,
-                                                  express_test);
-                STOP_TIMER_AND_UPDATE(time_tests, timeval_b, \
-                                      "HDgettimeofday(7) succeeds.", \
-                                      sample_times[col_chunked_idx]);
-
-            }
-            test_num++;
-	    break;
-	    /* end of case COL_CHUNKED */
-	  } /* end of switch(sstest_type) */
-
-#ifdef H5_HAVE_GETTIMEOFDAY
-            if ( time_tests ) {
-
-                samples++;
-
-                if ( samples >= sample_size ) {
-
-                    int result;
-
-                    time_tests = FALSE;
-
-                    max_test_time = ((long long)sample_size) * max_test_time;
-
-                    for ( i = 0; i < test_types; i++ ) {
-
-                        if ( ( express_test == 0 ) ||
-                             ( sample_times[i] <= max_test_time ) ) {
-
-                            local_skips[i] = 0;
-
-                        } else {
-
-                            local_skips[i] = (int)(sample_times[i] / max_test_time);
-                        }
-                    }
-
-                    /* do an MPI_Allreduce() with the skips vector to ensure that
-                     * all processes agree on its contents.
-                     */
-                    result = MPI_Allreduce((void *)local_skips,
-                                           (void *)skips,
-                                           test_types,
-                                           MPI_INT,
-                                           MPI_MAX,
-                                           MPI_COMM_WORLD);
-                    VRFY((result == MPI_SUCCESS ), "MPI_Allreduce() succeeded");
-                }
+            switch(sstest_type){
+                case IND_CONTIG:
+                    /* contiguous data set, independent I/O */
+                    chunk_edge_size = 0;
+                    ckrbrd_hs_dr_pio_test__run_test(test_num,
+                                                    edge_size,
+                                                    checker_edge_size,
+                                                    chunk_edge_size,
+                                                    small_rank,
+                                                    large_rank,
+                                                    FALSE,
+                                                    dset_type,
+                                                    express_test,
+                                                    &skips,
+                                                    max_skips,
+                                                    &total_tests,
+                                                    &tests_run,
+                                                    &tests_skipped);
+                    test_num++;
+                    break;
+                    /* end of case IND_CONTIG */
+
+                 case COL_CONTIG:
+                    /* contiguous data set, collective I/O */
+                    chunk_edge_size = 0;
+                    ckrbrd_hs_dr_pio_test__run_test(test_num,
+                                                    edge_size,
+                                                    checker_edge_size,
+                                                    chunk_edge_size,
+                                                    small_rank,
+                                                    large_rank,
+                                                    TRUE,
+                                                    dset_type,
+                                                    express_test,
+                                                    &skips,
+                                                    max_skips,
+                                                    &total_tests,
+                                                    &tests_run,
+                                                    &tests_skipped);
+                    test_num++;
+                    break;
+                    /* end of case COL_CONTIG */
+
+                case IND_CHUNKED:
+                    /* chunked data set, independent I/O */
+                    chunk_edge_size = 5;
+                    ckrbrd_hs_dr_pio_test__run_test(test_num,
+                                                    edge_size,
+                                                    checker_edge_size,
+                                                    chunk_edge_size,
+                                                    small_rank,
+                                                    large_rank,
+                                                    FALSE,
+                                                    dset_type,
+                                                    express_test,
+                                                    &skips,
+                                                    max_skips,
+                                                    &total_tests,
+                                                    &tests_run,
+                                                    &tests_skipped);
+                    test_num++;
+                    break;
+                    /* end of case IND_CHUNKED */
+
+                case COL_CHUNKED:
+                    /* chunked data set, collective I/O */
+                    chunk_edge_size = 5;
+                    ckrbrd_hs_dr_pio_test__run_test(test_num,
+                                                    edge_size,
+                                                    checker_edge_size,
+                                                    chunk_edge_size,
+                                                    small_rank,
+                                                    large_rank,
+                                                    TRUE,
+                                                    dset_type,
+                                                    express_test,
+                                                    &skips,
+                                                    max_skips,
+                                                    &total_tests,
+                                                    &tests_run,
+                                                    &tests_skipped);
+                    test_num++;
+                    break;
+                    /* end of case COL_CHUNKED */
+
+                default:
+                    VRFY((FALSE), "unknown test type");
+                    break;
+
+            } /* end of switch(sstest_type) */
+#if CONTIG_HS_DR_PIO_TEST__DEBUG
+            if ( ( MAINPROCESS ) && ( tests_skipped > 0 ) ) {
+                HDfprintf(stdout, "     run/skipped/total = %lld/%lld/%lld.\n",
+                          tests_run, tests_skipped, total_tests);
             }
-#endif /* H5_HAVE_GETTIMEOFDAY */
-
+#endif /* CONTIG_HS_DR_PIO_TEST__DEBUG */
         }
     }
 
-#ifdef H5_HAVE_GETTIMEOFDAY
-    if ( ( MAINPROCESS ) && ( display_skips ) ) {
-
-        HDfprintf(stdout, "***********************************\n");
-        HDfprintf(stdout, "express test = %d.\n", express_test);
-        HDfprintf(stdout, "sample_size = %d, max_test_time = %lld.\n",
-                  sample_size, max_test_time);
-        HDfprintf(stdout, "sample_times[]  = %lld, %lld, %lld, %lld.\n",
-                  sample_times[ind_contig_idx],
-                  sample_times[col_contig_idx],
-                  sample_times[ind_chunked_idx],
-                  sample_times[col_chunked_idx]);
-        HDfprintf(stdout, "skips[]  = %d, %d, %d, %d.\n",
-                  skips[ind_contig_idx],
-                  skips[col_contig_idx],
-                  skips[ind_chunked_idx],
-                  skips[col_chunked_idx]);
-        HDfprintf(stdout, "tests_skiped[]  = %d, %d, %d, %d.\n",
-                  tests_skiped[ind_contig_idx],
-                  tests_skiped[col_contig_idx],
-                  tests_skiped[ind_chunked_idx],
-                  tests_skiped[col_chunked_idx]);
-        HDfprintf(stdout, "test_num          = %d.\n", test_num);
-        HDfprintf(stdout, "***********************************\n");
+    if ( ( MAINPROCESS ) && ( tests_skipped > 0 ) ) {
+        HDfprintf(stdout, "     %lld of %lld subtests skipped to expedite testing.\n",
+                  tests_skipped, total_tests);
     }
-#endif /* H5_HAVE_GETTIMEOFDAY */
 
     return;
 
-} /* checker_board_hyperslab_dr_pio_test() */
+} /* ckrbrd_hs_dr_pio_test() */
 
 /* Main Body. Here for now, may have to move them to a separated file later. */
 
@@ -4522,7 +4752,7 @@ void pause_proc(void)
     MPI_Get_processor_name(mpi_name, &mpi_namelen);
 
     if (MAINPROCESS)
-	while ((stat(greenlight, &statbuf) == -1) && loops < maxloop){
+	while ((HDstat(greenlight, &statbuf) == -1) && loops < maxloop){
 	    if (!loops++){
 		printf("Proc %d (%*s, %d): to debug, attach %d\n",
 		    mpi_rank, mpi_namelen, mpi_name, pid, pid);
@@ -4756,28 +4986,28 @@ create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type,
 static void
 sscontig1(void)
 {
-    contig_hyperslab_dr_pio_test(IND_CONTIG);
+    contig_hs_dr_pio_test(IND_CONTIG);
 }
 
 /* Shape Same test using contigous hyperslab using collective IO on contigous datasets */
 static void
 sscontig2(void)
 {
-    contig_hyperslab_dr_pio_test(COL_CONTIG);
+    contig_hs_dr_pio_test(COL_CONTIG);
 }
 
 /* Shape Same test using contigous hyperslab using independent IO on chunked datasets */
 static void
 sscontig3(void)
 {
-    contig_hyperslab_dr_pio_test(IND_CHUNKED);
+    contig_hs_dr_pio_test(IND_CHUNKED);
 }
 
 /* Shape Same test using contigous hyperslab using collective IO on chunked datasets */
 static void
 sscontig4(void)
 {
-    contig_hyperslab_dr_pio_test(COL_CHUNKED);
+    contig_hs_dr_pio_test(COL_CHUNKED);
 }
 
 
@@ -4785,38 +5015,34 @@ sscontig4(void)
 static void
 sschecker1(void)
 {
-    checker_board_hyperslab_dr_pio_test(IND_CONTIG);
+    ckrbrd_hs_dr_pio_test(IND_CONTIG);
 }
 
 /* Shape Same test using checker hyperslab using collective IO on contigous datasets */
 static void
 sschecker2(void)
 {
-    checker_board_hyperslab_dr_pio_test(COL_CONTIG);
+    ckrbrd_hs_dr_pio_test(COL_CONTIG);
 }
 
 /* Shape Same test using checker hyperslab using independent IO on chunked datasets */
 static void
 sschecker3(void)
 {
-    checker_board_hyperslab_dr_pio_test(IND_CHUNKED);
+    ckrbrd_hs_dr_pio_test(IND_CHUNKED);
 }
 
 /* Shape Same test using checker hyperslab using collective IO on chunked datasets */
 static void
 sschecker4(void)
 {
-    checker_board_hyperslab_dr_pio_test(COL_CHUNKED);
+    ckrbrd_hs_dr_pio_test(COL_CHUNKED);
 }
 
 
 int main(int argc, char **argv)
 {
     int mpi_size, mpi_rank;				/* mpi variables */
-    H5Ptest_param_t ndsets_params, ngroups_params;
-    H5Ptest_param_t collngroups_params;
-    H5Ptest_param_t io_mode_confusion_params;
-    H5Ptest_param_t rr_obj_flush_confusion_params;
 
     /* Un-buffer the stdout and stderr */
     setbuf(stderr, NULL);
@@ -4832,6 +5058,7 @@ int main(int argc, char **argv)
     if (MAINPROCESS){
 	printf("===================================\n");
 	printf("Shape Same Tests Start\n");
+        printf("	express_test = %d.\n", GetTestExpress());
 	printf("===================================\n");
     }
 
@@ -4841,7 +5068,7 @@ int main(int argc, char **argv)
      * calls.  By then, MPI calls may not work.
      */
     if (H5dont_atexit() < 0){
-	printf("Failed to turn off atexit processing. Continue.\n", mpi_rank);
+	printf("%d: Failed to turn off atexit processing. Continue.\n", mpi_rank);
     };
     H5open();
     h5_show_hostname();
@@ -4850,6 +5077,7 @@ int main(int argc, char **argv)
     TestInit(argv[0], usage, parse_options);
 
     /* Shape Same tests using contigous hyperslab */
+#if 1
     AddTest("sscontig1", sscontig1, NULL,
 	"Shape Same, contigous hyperslab, ind IO, contig datasets", PARATESTFILE);
     AddTest("sscontig2", sscontig2, NULL,
@@ -4858,6 +5086,7 @@ int main(int argc, char **argv)
 	"Shape Same, contigous hyperslab, ind IO, chunked datasets", PARATESTFILE);
     AddTest("sscontig4", sscontig4, NULL,
 	"Shape Same, contigous hyperslab, col IO, chunked datasets", PARATESTFILE);
+#endif
 
     /* Shape Same tests using checker board hyperslab */
     AddTest("sschecker1", sschecker1, NULL,
@@ -4919,9 +5148,9 @@ int main(int argc, char **argv)
     if (MAINPROCESS){		/* only process 0 reports */
 	printf("===================================\n");
 	if (nerrors)
-	    printf("***PHDF5 tests detected %d errors***\n", nerrors);
+	    printf("***Shape Same tests detected %d errors***\n", nerrors);
 	else
-	    printf("PHDF5 tests finished with no errors\n");
+	    printf("Shape Same tests finished with no errors\n");
 	printf("===================================\n");
     }
     /* close HDF5 library */
diff --git a/testpar/testphdf5.c b/testpar/testphdf5.c
index 8b24f87..e7b462e 100644
--- a/testpar/testphdf5.c
+++ b/testpar/testphdf5.c
@@ -28,15 +28,15 @@ int dim0;
 int dim1;
 int chunkdim0;
 int chunkdim1;
-int nerrors = 0;			/* errors count */
-int ndatasets = 300;			/* number of datasets to create*/
+int nerrors = 0;      /* errors count */
+int ndatasets = 300;      /* number of datasets to create*/
 int ngroups = 512;                      /* number of groups to create in root
                                          * group. */
-int facc_type = FACC_MPIO;		/*Test file access type */
+int facc_type = FACC_MPIO;    /*Test file access type */
 int dxfer_coll_type = DXFER_COLLECTIVE_IO;
 
-H5E_auto2_t old_func;		        /* previous error handler */
-void *old_client_data;			/* previous error handler arg.*/
+H5E_auto2_t old_func;            /* previous error handler */
+void *old_client_data;      /* previous error handler arg.*/
 
 /* other option flags */
 
@@ -48,10 +48,10 @@ void *old_client_data;			/* previous error handler arg.*/
 #define NFILENAME 2
 #define PARATESTFILE filenames[0]
 const char *FILENAME[NFILENAME]={
-	    "ParaTest",
-	    NULL};
-char	filenames[NFILENAME][PATH_MAX];
-hid_t	fapl;				/* file access property list */
+      "ParaTest",
+      NULL};
+char  filenames[NFILENAME][PATH_MAX];
+hid_t  fapl;        /* file access property list */
 
 #ifdef USE_PAUSE
 /* pause the process for a moment to allow debugger to attach if desired. */
@@ -64,7 +64,7 @@ void pause_proc(void)
 {
 
     int pid;
-    h5_stat_t	statbuf;
+    h5_stat_t  statbuf;
     char greenlight[] = "go";
     int maxloop = 10;
     int loops = 0;
@@ -81,15 +81,15 @@ void pause_proc(void)
     MPI_Get_processor_name(mpi_name, &mpi_namelen);
 
     if (MAINPROCESS)
-	while ((stat(greenlight, &statbuf) == -1) && loops < maxloop){
-	    if (!loops++){
-		printf("Proc %d (%*s, %d): to debug, attach %d\n",
-		    mpi_rank, mpi_namelen, mpi_name, pid, pid);
-	    }
-	    printf("waiting(%ds) for file %s ...\n", time_int, greenlight);
-	    fflush(stdout);
-	    sleep(time_int);
-	}
+  while ((HDstat(greenlight, &statbuf) == -1) && loops < maxloop){
+      if (!loops++){
+    printf("Proc %d (%*s, %d): to debug, attach %d\n",
+        mpi_rank, mpi_namelen, mpi_name, pid, pid);
+      }
+      printf("waiting(%ds) for file %s ...\n", time_int, greenlight);
+      fflush(stdout);
+      sleep(time_int);
+  }
     MPI_Barrier(MPI_COMM_WORLD);
 }
 
@@ -101,7 +101,7 @@ int MPI_Init(int *argc, char ***argv)
     pause_proc();
     return (ret_code);
 }
-#endif	/* USE_PAUSE */
+#endif  /* USE_PAUSE */
 
 
 /*
@@ -111,16 +111,16 @@ static void
 usage(void)
 {
     printf("    [-r] [-w] [-m<n_datasets>] [-n<n_groups>] "
-	"[-o] [-f <prefix>] [-d <dim0> <dim1>]\n");
+  "[-o] [-f <prefix>] [-d <dim0> <dim1>]\n");
     printf("\t-m<n_datasets>"
-	"\tset number of datasets for the multiple dataset test\n");
+  "\tset number of datasets for the multiple dataset test\n");
     printf("\t-n<n_groups>"
         "\tset number of groups for the multiple group test\n");
     printf("\t-f <prefix>\tfilename prefix\n");
     printf("\t-2\t\tuse Split-file together with MPIO\n");
     printf("\t-p\t\tuse combo MPI-POSIX driver\n");
     printf("\t-d <factor0> <factor1>\tdataset dimensions factors. Defaults (%d,%d)\n",
-	ROW_FACTOR, COL_FACTOR);
+  ROW_FACTOR, COL_FACTOR);
     printf("\t-c <dim0> <dim1>\tdataset chunk dimensions. Defaults (dim0/10,dim1/10)\n");
     printf("\n");
 }
@@ -132,7 +132,7 @@ usage(void)
 static int
 parse_options(int argc, char **argv)
 {
-    int mpi_size, mpi_rank;				/* mpi variables */
+    int mpi_size, mpi_rank;        /* mpi variables */
 
     MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
     MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
@@ -143,110 +143,110 @@ parse_options(int argc, char **argv)
     chunkdim1 = (dim1+9)/10;
 
     while (--argc){
-	if (**(++argv) != '-'){
-	    break;
-	}else{
-	    switch(*(*argv+1)){
-		case 'm':   ndatasets = atoi((*argv+1)+1);
-			    if (ndatasets < 0){
-				nerrors++;
-				return(1);
-			    }
-			    break;
-	        case 'n':   ngroups = atoi((*argv+1)+1);
-		            if (ngroups < 0){
+  if (**(++argv) != '-'){
+      break;
+  }else{
+      switch(*(*argv+1)){
+    case 'm':   ndatasets = atoi((*argv+1)+1);
+          if (ndatasets < 0){
+        nerrors++;
+        return(1);
+          }
+          break;
+          case 'n':   ngroups = atoi((*argv+1)+1);
+                if (ngroups < 0){
                                 nerrors++;
                                 return(1);
-			    }
+          }
                             break;
-		case 'f':   if (--argc < 1) {
-				nerrors++;
-				return(1);
-			    }
-			    if (**(++argv) == '-') {
-				nerrors++;
-				return(1);
-			    }
-			    paraprefix = *argv;
-			    break;
-		case 'p':   /* Use the MPI-POSIX driver access */
-			    facc_type = FACC_MPIPOSIX;
-			    break;
-		case 'i':   /* Collective MPI-IO access with independent IO  */
-			    dxfer_coll_type = DXFER_INDEPENDENT_IO;
-			    break;
-		case '2':   /* Use the split-file driver with MPIO access */
-			    /* Can use $HDF5_METAPREFIX to define the */
-			    /* meta-file-prefix. */
-			    facc_type = FACC_MPIO | FACC_SPLIT;
-			    break;
-		case 'd':   /* dimensizes */
-			    if (--argc < 2){
-				nerrors++;
-				return(1);
-			    }
-			    dim0 = atoi(*(++argv))*mpi_size;
-			    argc--;
-			    dim1 = atoi(*(++argv))*mpi_size;
-			    /* set default chunkdim sizes too */
-			    chunkdim0 = (dim0+9)/10;
-			    chunkdim1 = (dim1+9)/10;
-			    break;
-		case 'c':   /* chunk dimensions */
-			    if (--argc < 2){
-				nerrors++;
-				return(1);
-			    }
-			    chunkdim0 = atoi(*(++argv));
-			    argc--;
-			    chunkdim1 = atoi(*(++argv));
-			    break;
-		case 'h':   /* print help message--return with nerrors set */
-			    return(1);
-		default:    printf("Illegal option(%s)\n", *argv);
-			    nerrors++;
-			    return(1);
-	    }
-	}
+    case 'f':   if (--argc < 1) {
+        nerrors++;
+        return(1);
+          }
+          if (**(++argv) == '-') {
+        nerrors++;
+        return(1);
+          }
+          paraprefix = *argv;
+          break;
+    case 'p':   /* Use the MPI-POSIX driver access */
+          facc_type = FACC_MPIPOSIX;
+          break;
+    case 'i':   /* Collective MPI-IO access with independent IO  */
+          dxfer_coll_type = DXFER_INDEPENDENT_IO;
+          break;
+    case '2':   /* Use the split-file driver with MPIO access */
+          /* Can use $HDF5_METAPREFIX to define the */
+          /* meta-file-prefix. */
+          facc_type = FACC_MPIO | FACC_SPLIT;
+          break;
+    case 'd':   /* dimensizes */
+          if (--argc < 2){
+        nerrors++;
+        return(1);
+          }
+          dim0 = atoi(*(++argv))*mpi_size;
+          argc--;
+          dim1 = atoi(*(++argv))*mpi_size;
+          /* set default chunkdim sizes too */
+          chunkdim0 = (dim0+9)/10;
+          chunkdim1 = (dim1+9)/10;
+          break;
+    case 'c':   /* chunk dimensions */
+          if (--argc < 2){
+        nerrors++;
+        return(1);
+          }
+          chunkdim0 = atoi(*(++argv));
+          argc--;
+          chunkdim1 = atoi(*(++argv));
+          break;
+    case 'h':   /* print help message--return with nerrors set */
+          return(1);
+    default:    printf("Illegal option(%s)\n", *argv);
+          nerrors++;
+          return(1);
+      }
+  }
     } /*while*/
 
     /* check validity of dimension and chunk sizes */
     if (dim0 <= 0 || dim1 <= 0){
-	printf("Illegal dim sizes (%d, %d)\n", dim0, dim1);
-	nerrors++;
-	return(1);
+  printf("Illegal dim sizes (%d, %d)\n", dim0, dim1);
+  nerrors++;
+  return(1);
     }
     if (chunkdim0 <= 0 || chunkdim1 <= 0){
-	printf("Illegal chunkdim sizes (%d, %d)\n", chunkdim0, chunkdim1);
-	nerrors++;
-	return(1);
+  printf("Illegal chunkdim sizes (%d, %d)\n", chunkdim0, chunkdim1);
+  nerrors++;
+  return(1);
     }
 
     /* Make sure datasets can be divided into equal portions by the processes */
     if ((dim0 % mpi_size) || (dim1 % mpi_size)){
-	if (MAINPROCESS)
-	    printf("dim0(%d) and dim1(%d) must be multiples of processes(%d)\n",
-		    dim0, dim1, mpi_size);
-	nerrors++;
-	return(1);
+  if (MAINPROCESS)
+      printf("dim0(%d) and dim1(%d) must be multiples of processes(%d)\n",
+        dim0, dim1, mpi_size);
+  nerrors++;
+  return(1);
     }
 
     /* compose the test filenames */
     {
-	int i, n;
-
-	n = sizeof(FILENAME)/sizeof(FILENAME[0]) - 1;	/* exclude the NULL */
-
-	for (i=0; i < n; i++)
-	    if (h5_fixname(FILENAME[i],fapl,filenames[i],sizeof(filenames[i]))
-		== NULL){
-		printf("h5_fixname failed\n");
-		nerrors++;
-		return(1);
-	    }
-	printf("Test filenames are:\n");
-	for (i=0; i < n; i++)
-	    printf("    %s\n", filenames[i]);
+  int i, n;
+
+  n = sizeof(FILENAME)/sizeof(FILENAME[0]) - 1;  /* exclude the NULL */
+
+  for (i=0; i < n; i++)
+      if (h5_fixname(FILENAME[i],fapl,filenames[i],sizeof(filenames[i]))
+    == NULL){
+    printf("h5_fixname failed\n");
+    nerrors++;
+    return(1);
+      }
+  printf("Test filenames are:\n");
+  for (i=0; i < n; i++)
+      printf("    %s\n", filenames[i]);
     }
 
     return(0);
@@ -262,7 +262,7 @@ create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type,
 {
     hid_t ret_pl = -1;
     herr_t ret;                 /* generic return value */
-    int mpi_rank;		/* mpi variables */
+    int mpi_rank;    /* mpi variables */
 
     /* need the rank for error checking macros */
     MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
@@ -271,39 +271,39 @@ create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type,
     VRFY((ret_pl >= 0), "H5P_FILE_ACCESS");
 
     if (l_facc_type == FACC_DEFAULT)
-	return (ret_pl);
+  return (ret_pl);
 
     if (l_facc_type == FACC_MPIO){
-	/* set Parallel access with communicator */
-	ret = H5Pset_fapl_mpio(ret_pl, comm, info);
-	VRFY((ret >= 0), "");
-	return(ret_pl);
+  /* set Parallel access with communicator */
+  ret = H5Pset_fapl_mpio(ret_pl, comm, info);
+  VRFY((ret >= 0), "");
+  return(ret_pl);
     }
 
     if (l_facc_type == (FACC_MPIO | FACC_SPLIT)){
-	hid_t mpio_pl;
-
-	mpio_pl = H5Pcreate (H5P_FILE_ACCESS);
-	VRFY((mpio_pl >= 0), "");
-	/* set Parallel access with communicator */
-	ret = H5Pset_fapl_mpio(mpio_pl, comm, info);
-	VRFY((ret >= 0), "");
-
-	/* setup file access template */
-	ret_pl = H5Pcreate (H5P_FILE_ACCESS);
-	VRFY((ret_pl >= 0), "");
-	/* set Parallel access with communicator */
-	ret = H5Pset_fapl_split(ret_pl, ".meta", mpio_pl, ".raw", mpio_pl);
-	VRFY((ret >= 0), "H5Pset_fapl_split succeeded");
-	H5Pclose(mpio_pl);
-	return(ret_pl);
+  hid_t mpio_pl;
+
+  mpio_pl = H5Pcreate (H5P_FILE_ACCESS);
+  VRFY((mpio_pl >= 0), "");
+  /* set Parallel access with communicator */
+  ret = H5Pset_fapl_mpio(mpio_pl, comm, info);
+  VRFY((ret >= 0), "");
+
+  /* setup file access template */
+  ret_pl = H5Pcreate (H5P_FILE_ACCESS);
+  VRFY((ret_pl >= 0), "");
+  /* set Parallel access with communicator */
+  ret = H5Pset_fapl_split(ret_pl, ".meta", mpio_pl, ".raw", mpio_pl);
+  VRFY((ret >= 0), "H5Pset_fapl_split succeeded");
+  H5Pclose(mpio_pl);
+  return(ret_pl);
     }
 
     if (l_facc_type == FACC_MPIPOSIX) {
-	/* set Parallel access with communicator */
-	ret = H5Pset_fapl_mpiposix(ret_pl, comm, use_gpfs);
-	VRFY((ret >= 0), "H5Pset_fapl_mpiposix succeeded");
-	return(ret_pl);
+  /* set Parallel access with communicator */
+  ret = H5Pset_fapl_mpiposix(ret_pl, comm, use_gpfs);
+  VRFY((ret >= 0), "H5Pset_fapl_mpiposix succeeded");
+  return(ret_pl);
     }
 
     /* unknown file access types */
@@ -313,7 +313,7 @@ create_faccess_plist(MPI_Comm comm, MPI_Info info, int l_facc_type,
 
 int main(int argc, char **argv)
 {
-    int mpi_size, mpi_rank;				/* mpi variables */
+    int mpi_size, mpi_rank;        /* mpi variables */
     H5Ptest_param_t ndsets_params, ngroups_params;
     H5Ptest_param_t collngroups_params;
     H5Ptest_param_t io_mode_confusion_params;
@@ -331,9 +331,9 @@ int main(int argc, char **argv)
     dim1 = COL_FACTOR*mpi_size;
 
     if (MAINPROCESS){
-	printf("===================================\n");
-	printf("PHDF5 TESTS START\n");
-	printf("===================================\n");
+  printf("===================================\n");
+  printf("PHDF5 TESTS START\n");
+  printf("===================================\n");
     }
 
     /* Attempt to turn off atexit post processing so that in case errors
@@ -342,7 +342,7 @@ int main(int argc, char **argv)
      * calls.  By then, MPI calls may not work.
      */
     if (H5dont_atexit() < 0){
-	printf("Failed to turn off atexit processing. Continue.\n", mpi_rank);
+  printf("Failed to turn off atexit processing. Continue.\n", mpi_rank);
     };
     H5open();
     h5_show_hostname();
@@ -352,140 +352,140 @@ int main(int argc, char **argv)
 
     /* Tests are generally arranged from least to most complexity... */
     AddTest("mpiodup", test_fapl_mpio_dup, NULL,
-	    "fapl_mpio duplicate", NULL);
+      "fapl_mpio duplicate", NULL);
     AddTest("posixdup", test_fapl_mpiposix_dup, NULL,
-	    "fapl_mpiposix duplicate", NULL);
+      "fapl_mpiposix duplicate", NULL);
 
     AddTest("split", test_split_comm_access, NULL,
-	    "dataset using split communicators", PARATESTFILE);
+      "dataset using split communicators", PARATESTFILE);
 
     AddTest("idsetw", dataset_writeInd, NULL,
-	    "dataset independent write", PARATESTFILE);
+      "dataset independent write", PARATESTFILE);
     AddTest("idsetr", dataset_readInd, NULL,
-	    "dataset independent read", PARATESTFILE);
+      "dataset independent read", PARATESTFILE);
 
     AddTest("cdsetw", dataset_writeAll, NULL,
-	    "dataset collective write", PARATESTFILE);
+      "dataset collective write", PARATESTFILE);
     AddTest("cdsetr", dataset_readAll, NULL,
-	    "dataset collective read", PARATESTFILE);
+      "dataset collective read", PARATESTFILE);
 
     AddTest("eidsetw", extend_writeInd, NULL,
-	    "extendible dataset independent write", PARATESTFILE);
+      "extendible dataset independent write", PARATESTFILE);
     AddTest("eidsetr", extend_readInd, NULL,
-	    "extendible dataset independent read", PARATESTFILE);
+      "extendible dataset independent read", PARATESTFILE);
     AddTest("ecdsetw", extend_writeAll, NULL,
-	    "extendible dataset collective write", PARATESTFILE);
+      "extendible dataset collective write", PARATESTFILE);
     AddTest("ecdsetr", extend_readAll, NULL,
-	    "extendible dataset collective read", PARATESTFILE);
+      "extendible dataset collective read", PARATESTFILE);
     AddTest("eidsetw2", extend_writeInd2, NULL,
-	    "extendible dataset independent write #2", PARATESTFILE);
+      "extendible dataset independent write #2", PARATESTFILE);
     AddTest("selnone", none_selection_chunk, NULL,
             "chunked dataset with none-selection", PARATESTFILE);
     AddTest("calloc", test_chunk_alloc, NULL,
-	    "parallel extend Chunked allocation on serial file", PARATESTFILE);
+      "parallel extend Chunked allocation on serial file", PARATESTFILE);
     AddTest("fltread", test_filter_read, NULL,
-	    "parallel read of dataset written serially with filters", PARATESTFILE);
+      "parallel read of dataset written serially with filters", PARATESTFILE);
 
 #ifdef H5_HAVE_FILTER_DEFLATE
     AddTest("cmpdsetr", compress_readAll, NULL,
-	    "compressed dataset collective read", PARATESTFILE);
+      "compressed dataset collective read", PARATESTFILE);
 #endif /* H5_HAVE_FILTER_DEFLATE */
 
     ndsets_params.name = PARATESTFILE;
     ndsets_params.count = ndatasets;
     AddTest("ndsetw", multiple_dset_write, NULL,
-	    "multiple datasets write", &ndsets_params);
+      "multiple datasets write", &ndsets_params);
 
     ngroups_params.name = PARATESTFILE;
     ngroups_params.count = ngroups;
     AddTest("ngrpw", multiple_group_write, NULL,
-	    "multiple groups write", &ngroups_params);
+      "multiple groups write", &ngroups_params);
     AddTest("ngrpr", multiple_group_read, NULL,
-	    "multiple groups read", &ngroups_params);
+      "multiple groups read", &ngroups_params);
 
     AddTest("compact", compact_dataset, NULL,
-	    "compact dataset test", PARATESTFILE);
+      "compact dataset test", PARATESTFILE);
 
     collngroups_params.name = PARATESTFILE;
     collngroups_params.count = ngroups;
     AddTest("cngrpw", collective_group_write, NULL,
-	    "collective group and dataset write", &collngroups_params);
+      "collective group and dataset write", &collngroups_params);
     AddTest("ingrpr", independent_group_read, NULL,
-	    "independent group and dataset read", &collngroups_params);
+      "independent group and dataset read", &collngroups_params);
     AddTest("bigdset", big_dataset, NULL,
             "big dataset test", PARATESTFILE);
     AddTest("fill", dataset_fillvalue, NULL,
-	    "dataset fill value", PARATESTFILE);
+      "dataset fill value", PARATESTFILE);
 
     AddTest("cchunk1",
-	coll_chunk1,NULL, "simple collective chunk io",PARATESTFILE);
+  coll_chunk1,NULL, "simple collective chunk io",PARATESTFILE);
     AddTest("cchunk2",
-	coll_chunk2,NULL, "noncontiguous collective chunk io",PARATESTFILE);
+  coll_chunk2,NULL, "noncontiguous collective chunk io",PARATESTFILE);
     AddTest("cchunk3",
-	coll_chunk3,NULL, "multi-chunk collective chunk io",PARATESTFILE);
+  coll_chunk3,NULL, "multi-chunk collective chunk io",PARATESTFILE);
     AddTest("cchunk4",
         coll_chunk4,NULL, "collective chunk io with partial non-selection ",PARATESTFILE);
 
     if((mpi_size < 3)&& MAINPROCESS ) {
-	printf("Collective chunk IO optimization APIs ");
-	printf("needs at least 3 processes to participate\n");
-	printf("Collective chunk IO API tests will be skipped \n");
+  printf("Collective chunk IO optimization APIs ");
+  printf("needs at least 3 processes to participate\n");
+  printf("Collective chunk IO API tests will be skipped \n");
     }
     AddTest((mpi_size <3)? "-cchunk5":"cchunk5" ,
         coll_chunk5,NULL,
-	"linked chunk collective IO without optimization",PARATESTFILE);
+  "linked chunk collective IO without optimization",PARATESTFILE);
     AddTest((mpi_size < 3)? "-cchunk6" : "cchunk6",
-	coll_chunk6,NULL,
-	"multi-chunk collective IO without optimization",PARATESTFILE);
+  coll_chunk6,NULL,
+  "multi-chunk collective IO without optimization",PARATESTFILE);
     AddTest((mpi_size < 3)? "-cchunk7" : "cchunk7",
-	coll_chunk7,NULL,
-	"linked chunk collective IO with optimization",PARATESTFILE);
+  coll_chunk7,NULL,
+  "linked chunk collective IO with optimization",PARATESTFILE);
     AddTest((mpi_size < 3)? "-cchunk8" : "cchunk8",
-	coll_chunk8,NULL,
-	"linked chunk collective IO transferring to multi-chunk",PARATESTFILE);
+  coll_chunk8,NULL,
+  "linked chunk collective IO transferring to multi-chunk",PARATESTFILE);
     AddTest((mpi_size < 3)? "-cchunk9" : "cchunk9",
-	coll_chunk9,NULL,
-	"multiple chunk collective IO with optimization",PARATESTFILE);
+  coll_chunk9,NULL,
+  "multiple chunk collective IO with optimization",PARATESTFILE);
     AddTest((mpi_size < 3)? "-cchunk10" : "cchunk10",
-	coll_chunk10,NULL,
-	"multiple chunk collective IO transferring to independent IO",PARATESTFILE);
+  coll_chunk10,NULL,
+  "multiple chunk collective IO transferring to independent IO",PARATESTFILE);
 
 
 
 /* irregular collective IO tests*/
     AddTest("ccontw",
-	coll_irregular_cont_write,NULL,
-	"collective irregular contiguous write",PARATESTFILE);
+  coll_irregular_cont_write,NULL,
+  "collective irregular contiguous write",PARATESTFILE);
     AddTest("ccontr",
-	coll_irregular_cont_read,NULL,
-	"collective irregular contiguous read",PARATESTFILE);
+  coll_irregular_cont_read,NULL,
+  "collective irregular contiguous read",PARATESTFILE);
     AddTest("cschunkw",
-	coll_irregular_simple_chunk_write,NULL,
-	"collective irregular simple chunk write",PARATESTFILE);
+  coll_irregular_simple_chunk_write,NULL,
+  "collective irregular simple chunk write",PARATESTFILE);
     AddTest("cschunkr",
-	coll_irregular_simple_chunk_read,NULL,
-	"collective irregular simple chunk read",PARATESTFILE);
+  coll_irregular_simple_chunk_read,NULL,
+  "collective irregular simple chunk read",PARATESTFILE);
     AddTest("ccchunkw",
-	coll_irregular_complex_chunk_write,NULL,
-	"collective irregular complex chunk write",PARATESTFILE);
+  coll_irregular_complex_chunk_write,NULL,
+  "collective irregular complex chunk write",PARATESTFILE);
     AddTest("ccchunkr",
-	coll_irregular_complex_chunk_read,NULL,
-	"collective irregular complex chunk read",PARATESTFILE);
+  coll_irregular_complex_chunk_read,NULL,
+  "collective irregular complex chunk read",PARATESTFILE);
 
     AddTest("null", null_dataset, NULL,
-	    "null dataset test", PARATESTFILE);
+      "null dataset test", PARATESTFILE);
 
     io_mode_confusion_params.name  = PARATESTFILE;
     io_mode_confusion_params.count = 0; /* value not used */
 
     AddTest("I/Omodeconf", io_mode_confusion, NULL,
-	    "I/O mode confusion test -- hangs quickly on failure",
+      "I/O mode confusion test -- hangs quickly on failure",
             &io_mode_confusion_params);
 
     rr_obj_flush_confusion_params.name = PARATESTFILE;
     rr_obj_flush_confusion_params.count = 0; /* value not used */
     AddTest("rrobjflushconf", rr_obj_hdr_flush_confusion, NULL,
-	    "round robin object header flush confusion test",
+      "round robin object header flush confusion test",
             &rr_obj_flush_confusion_params);
 
     AddTest("tldsc",
@@ -498,6 +498,9 @@ int main(int argc, char **argv)
             "test mpi derived type management", 
             PARATESTFILE);
 
+    AddTest("actualio", actual_io_mode_tests, NULL,
+            "test actual io mode proprerty",
+            PARATESTFILE);
 
     /* Display testing information */
     TestInfo(argv[0]);
@@ -510,15 +513,15 @@ int main(int argc, char **argv)
     TestParseCmdLine(argc, argv);
 
     if (facc_type == FACC_MPIPOSIX && MAINPROCESS){
-	printf("===================================\n"
-	       "   Using MPIPOSIX driver\n"
-	       "===================================\n");
+  printf("===================================\n"
+         "   Using MPIPOSIX driver\n"
+         "===================================\n");
     }
 
     if (dxfer_coll_type == DXFER_INDEPENDENT_IO && MAINPROCESS){
-	printf("===================================\n"
-	       "   Using Independent I/O with file set view to replace collective I/O \n"
-	       "===================================\n");
+  printf("===================================\n"
+         "   Using Independent I/O with file set view to replace collective I/O \n"
+         "===================================\n");
     }
 
 
@@ -543,16 +546,16 @@ int main(int argc, char **argv)
     {
         int temp;
         MPI_Allreduce(&nerrors, &temp, 1, MPI_INT, MPI_MAX, MPI_COMM_WORLD);
-	nerrors=temp;
+  nerrors=temp;
     }
 
-    if (MAINPROCESS){		/* only process 0 reports */
-	printf("===================================\n");
-	if (nerrors)
-	    printf("***PHDF5 tests detected %d errors***\n", nerrors);
-	else
-	    printf("PHDF5 tests finished with no errors\n");
-	printf("===================================\n");
+    if (MAINPROCESS){    /* only process 0 reports */
+  printf("===================================\n");
+  if (nerrors)
+      printf("***PHDF5 tests detected %d errors***\n", nerrors);
+  else
+      printf("PHDF5 tests finished with no errors\n");
+  printf("===================================\n");
     }
     /* close HDF5 library */
     H5close();
diff --git a/testpar/testphdf5.h b/testpar/testphdf5.h
index 2b83047..11656f9 100644
--- a/testpar/testphdf5.h
+++ b/testpar/testphdf5.h
@@ -160,6 +160,19 @@ enum H5TEST_COLL_CHUNK_API {API_NONE=0,API_LINK_HARD,
 #define NPOINTS          4          /* Number of points that will be selected
                                                                 and overwritten */
 
+/* Definitions of the selection mode for the test_actual_io_function. */
+#define TEST_ACTUAL_IO_NO_COLLECTIVE                    0
+#define TEST_ACTUAL_IO_RESET                            1
+#define TEST_ACTUAL_IO_MULTI_CHUNK_IND                  2
+#define TEST_ACTUAL_IO_MULTI_CHUNK_COL                  3
+#define TEST_ACTUAL_IO_MULTI_CHUNK_MIX                  4
+#define TEST_ACTUAL_IO_MULTI_CHUNK_MIX_DISAGREE         5
+#define TEST_ACTUAL_IO_MULTI_CHUNK_NO_OPT_IND           6
+#define TEST_ACTUAL_IO_MULTI_CHUNK_NO_OPT_COL           7
+#define TEST_ACTUAL_IO_MULTI_CHUNK_NO_OPT_MIX_DISAGREE  8 
+#define TEST_ACTUAL_IO_LINK_CHUNK                       9
+#define TEST_ACTUAL_IO_CONTIGUOUS                       10
+
 /* Don't erase these lines, they are put here for debugging purposes */
 /*
 #define MSPACE1_RANK     1
@@ -173,9 +186,9 @@ enum H5TEST_COLL_CHUNK_API {API_NONE=0,API_LINK_HARD,
 #define MSPACE_DIM1      8
 #define MSPACE_DIM2      9
 #define NPOINTS          4
+*/ /* end of debugging macro */
 
 
-*/ /* end of debugging macro */
 /* type definitions */
 typedef struct H5Ptest_param_t  /* holds extra test parameters */
 {
@@ -222,6 +235,7 @@ void dataset_readAll(void);
 void extend_readInd(void);
 void extend_readAll(void);
 void none_selection_chunk(void);
+void actual_io_mode_tests(void);
 void test_chunk_alloc(void);
 void test_filter_read(void);
 void compact_dataset(void);
diff --git a/tools/Makefile.in b/tools/Makefile.in
index 225ecd4..70cc001 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -179,6 +179,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -199,10 +200,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -246,7 +249,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/tools/h5copy/CMakeLists.txt b/tools/h5copy/CMakeLists.txt
index b15f5c1..11cebca 100644
--- a/tools/h5copy/CMakeLists.txt
+++ b/tools/h5copy/CMakeLists.txt
@@ -70,13 +70,6 @@ IF (BUILD_TESTING)
     )
   ENDFOREACH (h5_file ${HDF5_REFERENCE_TEST_FILES})
   
-  ADD_CUSTOM_COMMAND (
-      TARGET     h5copy
-      POST_BUILD
-      COMMAND    ${CMAKE_COMMAND}
-      ARGS       -E copy_if_different ${HDF5_TOOLS_H5COPY_SOURCE_DIR}/testfiles/h5copytst.h5 ${PROJECT_BINARY_DIR}/h5copytst.h5
-  )
-  
 ##############################################################################
 ##############################################################################
 ###           T H E   T E S T S  M A C R O S                               ###
@@ -131,10 +124,10 @@ IF (BUILD_TESTING)
   MACRO (ADD_H5LS_TEST file filetest)
     # If using memchecker add tests without using scripts
     IF (HDF5_ENABLE_USING_MEMCHECKER)
-      ADD_TEST (NAME H5COPY-H5LS_${file}-${filetest} COMMAND $<TARGET_FILE:h5ls> -Svr ./testfiles/${file}.out.h5)
+      ADD_TEST (NAME H5COPY-h5ls_${file}-${filetest} COMMAND $<TARGET_FILE:h5ls> -Svr ./testfiles/${file}.out.h5)
     ELSE (HDF5_ENABLE_USING_MEMCHECKER)
       ADD_TEST (
-          NAME H5COPY-H5LS_${file}-${filetest}
+          NAME H5COPY-h5ls_${file}-${filetest}
           COMMAND "${CMAKE_COMMAND}"
               -D "TEST_PROGRAM=$<TARGET_FILE:h5ls>"
               -D "TEST_ARGS=-Svr;./testfiles/${file}.out.h5"
@@ -147,9 +140,9 @@ IF (BUILD_TESTING)
       )
     ENDIF (HDF5_ENABLE_USING_MEMCHECKER)
     IF (NOT "${last_test}" STREQUAL "")
-      SET_TESTS_PROPERTIES (H5COPY-H5LS_${file}-${filetest} PROPERTIES DEPENDS ${last_test})
+      SET_TESTS_PROPERTIES (H5COPY-h5ls_${file}-${filetest} PROPERTIES DEPENDS ${last_test})
     ENDIF (NOT "${last_test}" STREQUAL "")
-    SET (last_test "H5COPY-H5LS_${file}-${filetest}")
+    SET (last_test "H5COPY-h5ls_${file}-${filetest}")
   ENDMACRO (ADD_H5LS_TEST)
 
   #
@@ -159,7 +152,7 @@ IF (BUILD_TESTING)
   MACRO (ADD_H5_CMP_TEST testname resultcode infile outfile vparam sparam srcname dparam dstname)
     # If using memchecker add tests without using scripts
     IF (HDF5_ENABLE_USING_MEMCHECKER)
-      ADD_TEST (NAME H5COPY-CMP-${testname} COMMAND $<TARGET_FILE:h5copy> -i ${infile} -o ./testfiles/${outfile} ${vparam} ${sparam} ${srcname} ${dparam} ${dstname} ${ARGN})
+      ADD_TEST (NAME H5COPY-CMP-${testname} COMMAND $<TARGET_FILE:h5copy> -i ./testfiles/${infile} -o ./testfiles/${outfile} ${vparam} ${sparam} ${srcname} ${dparam} ${dstname} ${ARGN})
       IF (${resultcode} STREQUAL "1")
         SET_TESTS_PROPERTIES (H5COPY-CMP-${testname} PROPERTIES WILL_FAIL "true")
       ENDIF (${resultcode} STREQUAL "1")
@@ -168,7 +161,7 @@ IF (BUILD_TESTING)
           NAME H5COPY-CMP-${testname}
           COMMAND "${CMAKE_COMMAND}"
               -D "TEST_PROGRAM=$<TARGET_FILE:h5copy>"
-              -D "TEST_ARGS=-i;${infile};-o;./testfiles/${outfile};${vparam};${sparam};${srcname};${dparam};${dstname}"
+              -D "TEST_ARGS=-i;./testfiles/${infile};-o;./testfiles/${outfile};${vparam};${sparam};${srcname};${dparam};${dstname}"
               -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
               -D "TEST_OUTPUT=./testfiles/${testname}.out.out"
               -D "TEST_EXPECT=${resultcode}"
diff --git a/tools/h5copy/Makefile.in b/tools/h5copy/Makefile.in
index 14e6649..b71ee70 100644
--- a/tools/h5copy/Makefile.in
+++ b/tools/h5copy/Makefile.in
@@ -181,6 +181,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -201,10 +202,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -248,7 +251,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/tools/h5copy/testfiles/h5copy_misc1.out b/tools/h5copy/testfiles/h5copy_misc1.out
index 370b1a5..10dd1a6 100644
--- a/tools/h5copy/testfiles/h5copy_misc1.out
+++ b/tools/h5copy/testfiles/h5copy_misc1.out
@@ -1,3 +1,3 @@
-Copying file <h5copytst.h5> and object </simple> to file <./testfiles/h5copytst.out.h5> and object </g1/g2/simple>
+Copying file <./testfiles/h5copytst.h5> and object </simple> to file <./testfiles/h5copytst.out.h5> and object </g1/g2/simple>
 Error in copy...Exiting
 h5copy error: group </g1> doesn't exist. Use -p to create parent groups.
diff --git a/tools/h5copy/testfiles/h5copytst.out.ls b/tools/h5copy/testfiles/h5copytst.out.ls
index af6cd8f..6598c8f 100644
--- a/tools/h5copy/testfiles/h5copytst.out.ls
+++ b/tools/h5copy/testfiles/h5copytst.out.ls
@@ -6,57 +6,57 @@ Opened "./testfiles/h5copytst.out.h5" with sec2 driver.
     Location:  1:96
     Links:     1
 /A                       Group
-    Location:  1:90032
+    Location:  1:88336
     Links:     1
 /A/B1                    Group
-    Location:  1:90736
+    Location:  1:89040
     Links:     1
 /A/B1/simple             Dataset {6/6}
-    Location:  1:89904
+    Location:  1:88208
     Links:     1
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /A/B2                    Group
-    Location:  1:94272
+    Location:  1:92576
     Links:     1
 /A/B2/simple2            Dataset {6/6}
-    Location:  1:94144
+    Location:  1:92448
     Links:     1
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /C                       Group
-    Location:  1:97480
+    Location:  1:95784
     Links:     1
 /C/D                     Group
-    Location:  1:98184
+    Location:  1:96488
     Links:     1
 /C/D/simple              Dataset {6/6}
-    Location:  1:97352
+    Location:  1:95656
     Links:     1
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /E                       Group
-    Location:  1:112096
+    Location:  1:110400
     Links:     1
 /E/F                     Group
-    Location:  1:112800
+    Location:  1:111104
     Links:     1
 /E/F/grp_dsets           Group
-    Location:  1:100296
+    Location:  1:98600
     Links:     1
 /E/F/grp_dsets/chunk     Dataset {6/6}
-    Location:  1:104480
+    Location:  1:102784
     Links:     1
     Chunks:    {2} 8 bytes
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /E/F/grp_dsets/compact   Dataset {6/6}
-    Location:  1:104936
+    Location:  1:103240
     Links:     1
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /E/F/grp_dsets/compound  Dataset {2/2}
-    Location:  1:105072
+    Location:  1:103376
     Links:     1
     Storage:   <details removed for portability>
     Type:      struct {
@@ -64,60 +64,60 @@ Opened "./testfiles/h5copytst.out.h5" with sec2 driver.
                    "str2"             +20   20-byte null-terminated ASCII string
                } 40 bytes
 /E/F/grp_dsets/compressed Dataset {6/6}
-    Location:  1:107384
+    Location:  1:105688
     Links:     1
     Chunks:    {2} 8 bytes
     Storage:   <details removed for portability>
     Filter-0:  deflate-1 OPT {1}
     Type:      32-bit little-endian integer
 /E/F/grp_dsets/named_vl  Dataset {2/2}
-    Location:  1:111696
+    Location:  1:109952
     Links:     1
     Storage:   <details removed for portability>
-    Type:      shared-1:107552 variable length of
+    Type:      shared-1:110080 variable length of
                    32-bit little-endian integer
 /E/F/grp_dsets/nested_vl Dataset {2/2}
-    Location:  1:111824
+    Location:  1:110128
     Links:     1
     Storage:   <details removed for portability>
     Type:      variable length of
                    variable length of
                        32-bit little-endian integer
 /E/F/grp_dsets/simple    Dataset {6/6}
-    Location:  1:111968
+    Location:  1:110272
     Links:     1
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /E/F/grp_dsets/vl        Type
-    Location:  1:107552
+    Location:  1:110080
     Links:     2
-    Type:      shared-1:107552 variable length of
+    Type:      shared-1:110080 variable length of
                    32-bit little-endian integer
 /G                       Group
-    Location:  1:127744
+    Location:  1:126048
     Links:     1
 /G/H                     Group
-    Location:  1:128448
+    Location:  1:126752
     Links:     1
 /G/H/grp_nested          Group
-    Location:  1:114824
+    Location:  1:113128
     Links:     1
 /G/H/grp_nested/grp_dsets Group
-    Location:  1:115616
+    Location:  1:113920
     Links:     1
 /G/H/grp_nested/grp_dsets/chunk Dataset {6/6}
-    Location:  1:119800
+    Location:  1:118104
     Links:     1
     Chunks:    {2} 8 bytes
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /G/H/grp_nested/grp_dsets/compact Dataset {6/6}
-    Location:  1:120256
+    Location:  1:118560
     Links:     1
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /G/H/grp_nested/grp_dsets/compound Dataset {2/2}
-    Location:  1:120392
+    Location:  1:118696
     Links:     1
     Storage:   <details removed for portability>
     Type:      struct {
@@ -125,34 +125,34 @@ Opened "./testfiles/h5copytst.out.h5" with sec2 driver.
                    "str2"             +20   20-byte null-terminated ASCII string
                } 40 bytes
 /G/H/grp_nested/grp_dsets/compressed Dataset {6/6}
-    Location:  1:122704
+    Location:  1:121008
     Links:     1
     Chunks:    {2} 8 bytes
     Storage:   <details removed for portability>
     Filter-0:  deflate-1 OPT {1}
     Type:      32-bit little-endian integer
 /G/H/grp_nested/grp_dsets/named_vl Dataset {2/2}
-    Location:  1:127016
+    Location:  1:125272
     Links:     1
     Storage:   <details removed for portability>
-    Type:      shared-1:122872 variable length of
+    Type:      shared-1:125400 variable length of
                    32-bit little-endian integer
 /G/H/grp_nested/grp_dsets/nested_vl Dataset {2/2}
-    Location:  1:127144
+    Location:  1:125448
     Links:     1
     Storage:   <details removed for portability>
     Type:      variable length of
                    variable length of
                        32-bit little-endian integer
 /G/H/grp_nested/grp_dsets/simple Dataset {6/6}
-    Location:  1:127288
+    Location:  1:125592
     Links:     1
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /G/H/grp_nested/grp_dsets/vl Type
-    Location:  1:122872
+    Location:  1:125400
     Links:     2
-    Type:      shared-1:122872 variable length of
+    Type:      shared-1:125400 variable length of
                    32-bit little-endian integer
 /chunk                   Dataset {6/6}
     Location:  1:6312
@@ -181,21 +181,21 @@ Opened "./testfiles/h5copytst.out.h5" with sec2 driver.
     Filter-0:  deflate-1 OPT {1}
     Type:      32-bit little-endian integer
 /grp_dsets               Group
-    Location:  1:33856
+    Location:  1:32160
     Links:     1
 /grp_dsets/chunk         Dataset {6/6}
-    Location:  1:38040
+    Location:  1:36344
     Links:     1
     Chunks:    {2} 8 bytes
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /grp_dsets/compact       Dataset {6/6}
-    Location:  1:38496
+    Location:  1:36800
     Links:     1
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /grp_dsets/compound      Dataset {2/2}
-    Location:  1:38632
+    Location:  1:36936
     Links:     1
     Storage:   <details removed for portability>
     Type:      struct {
@@ -203,62 +203,62 @@ Opened "./testfiles/h5copytst.out.h5" with sec2 driver.
                    "str2"             +20   20-byte null-terminated ASCII string
                } 40 bytes
 /grp_dsets/compressed    Dataset {6/6}
-    Location:  1:40944
+    Location:  1:39248
     Links:     1
     Chunks:    {2} 8 bytes
     Storage:   <details removed for portability>
     Filter-0:  deflate-1 OPT {1}
     Type:      32-bit little-endian integer
 /grp_dsets/named_vl      Dataset {2/2}
-    Location:  1:45256
+    Location:  1:43512
     Links:     1
     Storage:   <details removed for portability>
-    Type:      shared-1:41112 variable length of
+    Type:      shared-1:43640 variable length of
                    32-bit little-endian integer
 /grp_dsets/nested_vl     Dataset {2/2}
-    Location:  1:45384
+    Location:  1:43688
     Links:     1
     Storage:   <details removed for portability>
     Type:      variable length of
                    variable length of
                        32-bit little-endian integer
 /grp_dsets/simple        Dataset {6/6}
-    Location:  1:45528
+    Location:  1:43832
     Links:     1
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /grp_dsets/simple_group  Dataset {6/6}
-    Location:  1:61640
+    Location:  1:59944
     Links:     1
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /grp_dsets/vl            Type
-    Location:  1:41112
+    Location:  1:43640
     Links:     2
-    Type:      shared-1:41112 variable length of
+    Type:      shared-1:43640 variable length of
                    32-bit little-endian integer
 /grp_empty               Group
-    Location:  1:33064
+    Location:  1:31368
     Links:     1
 /grp_nested              Group
-    Location:  1:46320
+    Location:  1:44624
     Links:     1
 /grp_nested/grp_dsets    Group
-    Location:  1:47112
+    Location:  1:45416
     Links:     1
 /grp_nested/grp_dsets/chunk Dataset {6/6}
-    Location:  1:51296
+    Location:  1:49600
     Links:     1
     Chunks:    {2} 8 bytes
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /grp_nested/grp_dsets/compact Dataset {6/6}
-    Location:  1:51752
+    Location:  1:50056
     Links:     1
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /grp_nested/grp_dsets/compound Dataset {2/2}
-    Location:  1:51888
+    Location:  1:50192
     Links:     1
     Storage:   <details removed for portability>
     Type:      struct {
@@ -266,51 +266,51 @@ Opened "./testfiles/h5copytst.out.h5" with sec2 driver.
                    "str2"             +20   20-byte null-terminated ASCII string
                } 40 bytes
 /grp_nested/grp_dsets/compressed Dataset {6/6}
-    Location:  1:54200
+    Location:  1:52504
     Links:     1
     Chunks:    {2} 8 bytes
     Storage:   <details removed for portability>
     Filter-0:  deflate-1 OPT {1}
     Type:      32-bit little-endian integer
 /grp_nested/grp_dsets/named_vl Dataset {2/2}
-    Location:  1:58512
+    Location:  1:56768
     Links:     1
     Storage:   <details removed for portability>
-    Type:      shared-1:54368 variable length of
+    Type:      shared-1:56896 variable length of
                    32-bit little-endian integer
 /grp_nested/grp_dsets/nested_vl Dataset {2/2}
-    Location:  1:58640
+    Location:  1:56944
     Links:     1
     Storage:   <details removed for portability>
     Type:      variable length of
                    variable length of
                        32-bit little-endian integer
 /grp_nested/grp_dsets/simple Dataset {6/6}
-    Location:  1:58784
+    Location:  1:57088
     Links:     1
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /grp_nested/grp_dsets/vl Type
-    Location:  1:54368
+    Location:  1:56896
     Links:     2
-    Type:      shared-1:54368 variable length of
+    Type:      shared-1:56896 variable length of
                    32-bit little-endian integer
 /grp_rename              Group
-    Location:  1:62848
+    Location:  1:61152
     Links:     1
 /grp_rename/chunk        Dataset {6/6}
-    Location:  1:67032
+    Location:  1:65336
     Links:     1
     Chunks:    {2} 8 bytes
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /grp_rename/compact      Dataset {6/6}
-    Location:  1:67488
+    Location:  1:65792
     Links:     1
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /grp_rename/compound     Dataset {2/2}
-    Location:  1:67624
+    Location:  1:65928
     Links:     1
     Storage:   <details removed for portability>
     Type:      struct {
@@ -318,28 +318,28 @@ Opened "./testfiles/h5copytst.out.h5" with sec2 driver.
                    "str2"             +20   20-byte null-terminated ASCII string
                } 40 bytes
 /grp_rename/compressed   Dataset {6/6}
-    Location:  1:69936
+    Location:  1:68240
     Links:     1
     Chunks:    {2} 8 bytes
     Storage:   <details removed for portability>
     Filter-0:  deflate-1 OPT {1}
     Type:      32-bit little-endian integer
 /grp_rename/grp_dsets    Group
-    Location:  1:75728
+    Location:  1:74032
     Links:     1
 /grp_rename/grp_dsets/chunk Dataset {6/6}
-    Location:  1:79912
+    Location:  1:78216
     Links:     1
     Chunks:    {2} 8 bytes
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /grp_rename/grp_dsets/compact Dataset {6/6}
-    Location:  1:80368
+    Location:  1:78672
     Links:     1
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /grp_rename/grp_dsets/compound Dataset {2/2}
-    Location:  1:80504
+    Location:  1:78808
     Links:     1
     Storage:   <details removed for portability>
     Type:      struct {
@@ -347,73 +347,73 @@ Opened "./testfiles/h5copytst.out.h5" with sec2 driver.
                    "str2"             +20   20-byte null-terminated ASCII string
                } 40 bytes
 /grp_rename/grp_dsets/compressed Dataset {6/6}
-    Location:  1:82816
+    Location:  1:81120
     Links:     1
     Chunks:    {2} 8 bytes
     Storage:   <details removed for portability>
     Filter-0:  deflate-1 OPT {1}
     Type:      32-bit little-endian integer
 /grp_rename/grp_dsets/named_vl Dataset {2/2}
-    Location:  1:87128
+    Location:  1:85384
     Links:     1
     Storage:   <details removed for portability>
-    Type:      shared-1:82984 variable length of
+    Type:      shared-1:85512 variable length of
                    32-bit little-endian integer
 /grp_rename/grp_dsets/nested_vl Dataset {2/2}
-    Location:  1:87256
+    Location:  1:85560
     Links:     1
     Storage:   <details removed for portability>
     Type:      variable length of
                    variable length of
                        32-bit little-endian integer
 /grp_rename/grp_dsets/simple Dataset {6/6}
-    Location:  1:87400
+    Location:  1:85704
     Links:     1
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /grp_rename/grp_dsets/vl Type
-    Location:  1:82984
+    Location:  1:85512
     Links:     2
-    Type:      shared-1:82984 variable length of
+    Type:      shared-1:85512 variable length of
                    32-bit little-endian integer
 /grp_rename/named_vl     Dataset {2/2}
-    Location:  1:74248
+    Location:  1:72504
     Links:     1
     Storage:   <details removed for portability>
-    Type:      shared-1:70104 variable length of
+    Type:      shared-1:72632 variable length of
                    32-bit little-endian integer
 /grp_rename/nested_vl    Dataset {2/2}
-    Location:  1:74376
+    Location:  1:72680
     Links:     1
     Storage:   <details removed for portability>
     Type:      variable length of
                    variable length of
                        32-bit little-endian integer
 /grp_rename/simple       Dataset {6/6}
-    Location:  1:74520
+    Location:  1:72824
     Links:     1
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /grp_rename/vl           Type
-    Location:  1:70104
+    Location:  1:72632
     Links:     2
-    Type:      shared-1:70104 variable length of
+    Type:      shared-1:72632 variable length of
                    32-bit little-endian integer
 /named_vl                Dataset {2/2}
-    Location:  1:13200
+    Location:  1:19296
     Links:     1
     Storage:   <details removed for portability>
-    Type:      shared-1:13152 variable length of
+    Type:      shared-1:19424 variable length of
                    32-bit little-endian integer
 /nested_vl               Dataset {2/2}
-    Location:  1:27488
+    Location:  1:25792
     Links:     1
     Storage:   <details removed for portability>
     Type:      variable length of
                    variable length of
                        32-bit little-endian integer
 /rename                  Dataset {2/2}
-    Location:  1:31856
+    Location:  1:30160
     Links:     1
     Storage:   <details removed for portability>
     Type:      struct {
@@ -426,7 +426,7 @@ Opened "./testfiles/h5copytst.out.h5" with sec2 driver.
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
 /simple_top              Dataset {6/6}
-    Location:  1:29680
+    Location:  1:27984
     Links:     1
     Storage:   <details removed for portability>
     Type:      32-bit little-endian integer
diff --git a/tools/h5copy/testh5copy.sh b/tools/h5copy/testh5copy.sh
index 3f28559..65cd353 100644
--- a/tools/h5copy/testh5copy.sh
+++ b/tools/h5copy/testh5copy.sh
@@ -19,6 +19,24 @@
 # Thursday, July 20, 2006
 #
 
+# The build (current) directory might be different than the source directory.
+if test -z "$srcdir"; then
+    srcdir=.
+fi
+
+# source dirs
+SRC_TOOLS="$srcdir/.."
+SRC_TOOLS_TESTFILES="$SRC_TOOLS/testfiles"
+# testfiles source dirs for tools
+SRC_H5LS_TESTFILES="$SRC_TOOLS_TESTFILES"
+SRC_H5DUMP_TESTFILES="$SRC_TOOLS_TESTFILES"
+SRC_H5DIFF_TESTFILES="$SRC_TOOLS/h5diff/testfiles"
+SRC_H5COPY_TESTFILES="$SRC_TOOLS/h5copy/testfiles"
+SRC_H5REPACK_TESTFILES="$SRC_TOOLS/h5repack/testfiles"
+SRC_H5JAM_TESTFILES="$SRC_TOOLS/h5jam/testfiles"
+SRC_H5STAT_TESTFILES="$SRC_TOOLS/h5stat/testfiles"
+SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/h5import/testfiles"
+
 TESTNAME=h5copy
 EXIT_SUCCESS=0
 EXIT_FAILURE=1
@@ -29,6 +47,31 @@ HDF_FILE2=h5copy_ref.h5
 HDF_EXT_SRC_FILE=h5copy_extlinks_src.h5
 HDF_EXT_TRG_FILE=h5copy_extlinks_trg.h5
 
+######################################################################
+# test files
+# --------------------------------------------------------------------
+# All the test files copy from source directory to test directory
+# NOTE: Keep this framework to add/remove test files.
+#       Any test files from other tools can be used in this framework.
+#       This list are also used for checking exist.
+#       Comment '#' without space can be used.
+# --------------------------------------------------------------------
+# List of files that will be copied over to local test dir
+LIST_HDF5_TEST_FILES="
+$SRC_H5COPY_TESTFILES/$HDF_FILE1
+$SRC_H5COPY_TESTFILES/$HDF_FILE2
+$SRC_H5COPY_TESTFILES/$HDF_EXT_SRC_FILE
+$SRC_H5COPY_TESTFILES/$HDF_EXT_TRG_FILE
+"
+
+# List of expect files that will be copied over to local test dir
+LIST_OTHER_TEST_FILES="
+$SRC_H5COPY_TESTFILES/h5copy_extlinks_src.out.ls
+$SRC_H5COPY_TESTFILES/h5copy_ref.out.ls
+$SRC_H5COPY_TESTFILES/h5copytst.out.ls
+$SRC_H5COPY_TESTFILES/h5copy_misc1.out
+"
+
 H5COPY=h5copy               # The tool name
 H5COPY_BIN=`pwd`/$H5COPY    # The path of the tool binary
 H5DIFF=h5diff               # The h5diff tool name 
@@ -38,19 +81,14 @@ H5LS_ARGS=-Svr              # Arguments to the h5ls tool
 H5LS_BIN=`pwd`/../h5ls/$H5LS # The path of the h5ls tool binary
 CMP='cmp -s'
 DIFF='diff -c'
+CP='cp'
 
 nerrors=0
 verbose=yes
 h5haveexitcode=yes	    # default is yes
 
-# The build (current) directory might be different than the source directory.
-if test -z "$srcdir"; then
-    srcdir=.
-fi
-INDIR=$srcdir/testfiles
-OUTDIR=./testfiles
-
-test -d $OUTDIR || mkdir $OUTDIR
+TESTDIR=./testfiles
+test -d $TESTDIR || mkdir $TESTDIR
 
 # RUNSERIAL is used. Check if it can return exit code from executalbe correctly.
 if [ -n "$RUNSERIAL_NOEXITCODE" ]; then
@@ -59,6 +97,31 @@ if [ -n "$RUNSERIAL_NOEXITCODE" ]; then
     h5haveexitcode=no
 fi
 
+#
+# copy test files and expected output files from source dirs to test dir
+#
+COPY_TESTFILES="$LIST_HDF5_TEST_FILES $LIST_OTHER_TEST_FILES"
+
+COPY_TESTFILES_TO_TESTDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_TESTFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            if [ -a $tstfile ]; then
+                $CP -f $tstfile $TESTDIR
+            else
+                echo "Error: FAILED to copy $tstfile."
+                echo "       $tstfile doesn't exist!"
+                exit $EXIT_FAILURE
+            fi
+        fi
+    done
+}
+
 # Print a "SKIP" message
 SKIP() {
 	 TESTING $H5COPY $@
@@ -100,6 +163,9 @@ VERIFY_OUTPUT()
     echo "Verifying output files $* $SPACES" | cut -c1-70 | tr -d '\012'
 }
 
+# Source in the output filter function definitions.
+. $srcdir/../../bin/output_filter.sh
+
 # Run a test and print PASS or *FAIL*. If h5copy can complete
 # with exit status 0, consider it pass. If a test fails then increment
 # the `nerrors' global variable.
@@ -112,6 +178,8 @@ VERIFY_OUTPUT()
 
 TOOLTEST() 
 {
+    actualout="$TESTDIR/tooltest.actualout"
+    actualerr="$TESTDIR/tooltest.actualerr"
      runh5diff=yes
      if [ "$1" = -i ]; then
       inputfile=$2
@@ -130,19 +198,19 @@ TOOLTEST()
     echo " output for '$H5COPY $@'"
     echo "#############################"
     $RUNSERIAL $H5COPY_BIN $@
-    ) > output.out
+    ) > $actualout 2> $actualerr
     RET=$?
     if [ $RET != 0 ]; then
         echo "*FAILED*"
         echo "failed result is:"
-        cat output.out
+        cat $actualout
         nerrors="`expr $nerrors + 1`"
     else
         echo " PASSED"
 
         # Clean up output file
         if test -z "$HDF5_NOCLEANUP"; then
-           rm -f output.out
+           rm -f $actualout $actualerr
         fi
     fi
     
@@ -181,9 +249,11 @@ CMP_OUTPUT()
 
 TOOLTEST_FAIL() 
 {
-    expectout="$INDIR/$1"
-    actualout="$OUTDIR/$1.out"
-    actualerr="$OUTDIR/$1.err"
+    expectout="$TESTDIR/$1"
+    actualout="$TESTDIR/$1.actualout"
+    actualerr="$TESTDIR/$1.actualerr"
+    actualout_sav=${actualout}-sav
+    actualerr_sav=${actualerr}-sav
     shift
     if [ "$1" = -i ]; then
       inputfile=$2
@@ -199,7 +269,13 @@ TOOLTEST_FAIL()
     #echo "#############################"
     $RUNSERIAL $H5COPY_BIN $@
     ) > $actualout 2> $actualerr
+
     RET=$?
+    # save actualout and actualerr in case they are needed later.
+    cp $actualout $actualout_sav
+    STDOUT_FILTER $actualout
+    cp $actualerr $actualerr_sav
+    STDERR_FILTER $actualerr
     if [ $RET != 0 ]; then
         echo " PASSED"
         # Verifying output text from h5copy
@@ -219,7 +295,7 @@ TOOLTEST_FAIL()
 
     # Clean up output file
     if test -z "$HDF5_NOCLEANUP"; then
-       rm -f $actualout $actualerr
+       rm -f $actualout $actualerr $actualout_sav $actualerr_sav
     fi
 }
 
@@ -259,8 +335,8 @@ H5DIFFTEST_FAIL()
 #
 H5LSTEST() 
 {
-    expect="$INDIR/`basename $1 .h5`.ls"
-    actual="$OUTDIR/`basename $1 .h5`.out"
+    expect="$TESTDIR/`basename $1 .h5`.ls"
+    actual="$TESTDIR/`basename $1 .h5`.ls.actualout"
 
     # Stderr is included in stdout so that the diff can detect
     # any unexpected output from that stream too.
@@ -302,8 +378,8 @@ H5LSTEST()
 # <none>
 COPY_OBJECTS() 
 {
-    TESTFILE="$INDIR/$HDF_FILE1"
-    FILEOUT="$OUTDIR/`basename $HDF_FILE1 .h5`.out.h5"
+    TESTFILE="$TESTDIR/$HDF_FILE1"
+    FILEOUT="$TESTDIR/`basename $HDF_FILE1 .h5`.out.h5"
 
     # Remove any output file left over from previous test run
     rm -f $FILEOUT
@@ -362,8 +438,8 @@ COPY_OBJECTS()
 # <none>
 COPY_REFERENCES() 
 {
-    TESTFILE="$INDIR/$HDF_FILE2"
-    FILEOUT="$OUTDIR/`basename $HDF_FILE2 .h5`.out.h5"
+    TESTFILE="$TESTDIR/$HDF_FILE2"
+    FILEOUT="$TESTDIR/`basename $HDF_FILE2 .h5`.out.h5"
 
     # Remove any output file left over from previous test run
     rm -f $FILEOUT
@@ -388,8 +464,8 @@ COPY_REFERENCES()
 # <none>
 COPY_EXT_LINKS() 
 {
-    TESTFILE="$INDIR/$HDF_EXT_SRC_FILE"
-    FILEOUT="$OUTDIR/`basename $HDF_EXT_SRC_FILE .h5`.out.h5"
+    TESTFILE="$TESTDIR/$HDF_EXT_SRC_FILE"
+    FILEOUT="$TESTDIR/`basename $HDF_EXT_SRC_FILE .h5`.out.h5"
 
     # Remove any output file left over from previous test run
     rm -f $FILEOUT
@@ -434,8 +510,8 @@ COPY_EXT_LINKS()
 # <none>
 TEST_MISC() 
 {
-    TESTFILE="$HDF_FILE1"
-    FILEOUT="$OUTDIR/`basename $HDF_FILE1 .h5`.out.h5"
+    TESTFILE="$TESTDIR/$HDF_FILE1"
+    FILEOUT="$TESTDIR/`basename $HDF_FILE1 .h5`.out.h5"
 
     # Remove any output file left over from previous test run
     rm -f $FILEOUT
@@ -462,7 +538,10 @@ TEST_MISC()
 ##############################################################################
 ###           T H E   T E S T S                                            ###
 ##############################################################################
+# prepare for test
+COPY_TESTFILES_TO_TESTDIR
 
+# Start tests
 COPY_OBJECTS 
 COPY_REFERENCES
 COPY_EXT_LINKS
diff --git a/tools/h5diff/CMakeLists.txt b/tools/h5diff/CMakeLists.txt
index 97c3a3c..cb5fa5f 100644
--- a/tools/h5diff/CMakeLists.txt
+++ b/tools/h5diff/CMakeLists.txt
@@ -19,6 +19,15 @@ TARGET_LINK_LIBRARIES (h5diff  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
 
 SET (H5_DEP_EXECUTABLES h5diff)
 
+IF (H5_HAVE_PARALLEL)
+  ADD_EXECUTABLE (ph5diff
+      ${HDF5_TOOLS_H5DIFF_SOURCE_DIR}/h5diff_common.c
+      ${HDF5_TOOLS_H5DIFF_SOURCE_DIR}/ph5diff_main.c
+  )
+  TARGET_NAMING (ph5diff ${LIB_TYPE})
+  TARGET_LINK_LIBRARIES (ph5diff  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_LIB_TARGET})
+ENDIF (H5_HAVE_PARALLEL)
+
 ##############################################################################
 ##############################################################################
 ###           T E S T I N G                                                ###
@@ -69,6 +78,10 @@ IF (BUILD_TESTING)
       h5diff_205.txt
       h5diff_206.txt
       h5diff_207.txt
+      h5diff_208.txt
+      h5diff_220.txt
+      h5diff_221.txt
+      h5diff_222.txt
       h5diff_21.txt
       h5diff_22.txt
       h5diff_23.txt
@@ -148,6 +161,7 @@ IF (BUILD_TESTING)
       h5diff_517.txt
       h5diff_518.txt
       h5diff_530.txt
+      h5diff_540.txt
       h5diff_600.txt
       h5diff_601.txt
       h5diff_603.txt
@@ -175,6 +189,15 @@ IF (BUILD_TESTING)
       h5diff_627.txt
       h5diff_628.txt
       h5diff_629.txt
+      h5diff_630.txt
+      h5diff_631.txt
+      h5diff_640.txt
+      h5diff_641.txt
+      h5diff_642.txt
+      h5diff_643.txt
+      h5diff_644.txt
+      h5diff_645.txt
+      h5diff_646.txt
       h5diff_70.txt
       h5diff_700.txt
       h5diff_701.txt
@@ -209,6 +232,8 @@ IF (BUILD_TESTING)
       h5diff_extlink_trg.h5
       h5diff_ext2softlink_src.h5
       h5diff_ext2softlink_trg.h5
+      h5diff_dset_zero_dim_size1.h5
+      h5diff_dset_zero_dim_size2.h5
       h5diff_danglelinks1.h5
       h5diff_danglelinks2.h5
       h5diff_grp_recurse1.h5
@@ -224,6 +249,10 @@ IF (BUILD_TESTING)
       h5diff_comp_vl_strs.h5
       h5diff_attr_v_level1.h5
       h5diff_attr_v_level2.h5
+      compounds_array_vlen1.h5
+      compounds_array_vlen2.h5
+      non_comparables1.h5
+      non_comparables2.h5
   )
 
   FOREACH (txt_file ${HDF5_REFERENCE_FILES})
@@ -317,8 +346,17 @@ IF (BUILD_TESTING)
       IF (NOT ${resultcode} STREQUAL "0")
         SET_TESTS_PROPERTIES (H5DIFF-${resultfile} PROPERTIES WILL_FAIL "true")
       ENDIF (NOT ${resultcode} STREQUAL "0")
+      IF (NOT "${last_test}" STREQUAL "")
+        SET_TESTS_PROPERTIES (H5DIFF-${resultfile} PROPERTIES DEPENDS ${last_test})
+      ENDIF (NOT "${last_test}" STREQUAL "")
+      SET (last_test "H5DIFF-${resultfile}")
     ELSE (HDF5_ENABLE_USING_MEMCHECKER)
       ADD_TEST (
+          NAME H5DIFF-clear-${resultfile}-objects
+          COMMAND    ${CMAKE_COMMAND}
+              -E remove ${resultfile}.out ${resultfile}.out.err
+      )
+      ADD_TEST (
           NAME H5DIFF-${resultfile}
           COMMAND "${CMAKE_COMMAND}"
               -D "TEST_PROGRAM=$<TARGET_FILE:h5diff>"
@@ -330,12 +368,74 @@ IF (BUILD_TESTING)
               -D "TEST_APPEND=EXIT CODE:"
               -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
       )
+      SET_TESTS_PROPERTIES (H5DIFF-${resultfile} PROPERTIES DEPENDS "H5DIFF-clear-${resultfile}-objects")
+    ENDIF (HDF5_ENABLE_USING_MEMCHECKER)
+    IF (H5_HAVE_PARALLEL)
+      ADD_PH5_TEST (${resultfile} ${resultcode} ${ARGN})
+    ENDIF (H5_HAVE_PARALLEL)
+  ENDMACRO (ADD_H5_TEST file)
+
+  MACRO (ADD_PH5_TEST resultfile resultcode)
+    # If using memchecker add tests without using scripts
+    IF (HDF5_ENABLE_USING_MEMCHECKER)
+      ADD_TEST (NAME PH5DIFF-${resultfile} COMMAND $<TARGET_FILE:ph5diff> ${MPIEXEC} ${MPIEXEC_PREFLAGS} ${MPIEXEC_NUMPROC_FLAG} ${MPIEXEC_MAX_NUMPROCS} ${MPIEXEC_POSTFLAGS} ${ARGN})
+      IF (NOT ${resultcode} STREQUAL "0")
+        SET_TESTS_PROPERTIES (PH5DIFF-${resultfile} PROPERTIES WILL_FAIL "true")
+      ENDIF (NOT ${resultcode} STREQUAL "0")
+      IF (NOT "${last_test}" STREQUAL "")
+        SET_TESTS_PROPERTIES (PH5DIFF-${resultfile} PROPERTIES DEPENDS ${last_test})
+      ENDIF (NOT "${last_test}" STREQUAL "")
+      SET (last_test "PH5DIFF-${resultfile}")
+    ELSE (HDF5_ENABLE_USING_MEMCHECKER)
+      ADD_TEST (
+          NAME PH5DIFF-clear-${resultfile}-objects
+          COMMAND    ${CMAKE_COMMAND}
+              -E remove ${resultfile}_p.out ${resultfile}_p.out.err
+      )
+      ADD_TEST (
+          NAME PH5DIFF-${resultfile}
+          COMMAND "${CMAKE_COMMAND}"
+              -D "TEST_PROGRAM=${MPIEXEC};${MPIEXEC_PREFLAGS};${MPIEXEC_NUMPROC_FLAG};${MPIEXEC_MAX_NUMPROCS};${MPIEXEC_POSTFLAGS};$<TARGET_FILE:ph5diff>"
+              -D "TEST_ARGS:STRING=${ARGN}"
+              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
+              -D "TEST_OUTPUT=P_${resultfile}.out"
+              -D "TEST_EXPECT=${resultcode}"
+              -D "TEST_REFERENCE=${resultfile}.txt"
+              -D "TEST_SKIP_COMPARE=TRUE"
+              -P "${HDF5_RESOURCES_DIR}/prunTest.cmake"
+      )
+      SET_TESTS_PROPERTIES (PH5DIFF-${resultfile} PROPERTIES DEPENDS "PH5DIFF-clear-${resultfile}-objects")
     ENDIF (HDF5_ENABLE_USING_MEMCHECKER)
+  ENDMACRO (ADD_PH5_TEST file)
+
+   # ADD_H5_NO_OUTPUT_TEST
+   # Purpose to verify only exitcode without output comparison
+   # Don't use this if possible; this may be removed.
+   MACRO (ADD_H5_NO_OUTPUT_TEST testname resultcode)
+    # If using memchecker add tests without using scripts
+    IF (NOT HDF5_ENABLE_USING_MEMCHECKER)
+      ADD_TEST (
+          NAME H5DIFF-clear-${testname}-objects
+          COMMAND    ${CMAKE_COMMAND}
+              -E remove ${testname}.out ${testname}.out.err
+      )
+      # if there was a previous test
+      IF (NOT "${last_test}" STREQUAL "")
+        SET_TESTS_PROPERTIES (H5DIFF-clear-${testname}-objects PROPERTIES DEPENDS ${last_test})
+      ENDIF (NOT "${last_test}" STREQUAL "")
+      SET (last_test "H5DIFF-clear-${testname}-objects")
+    ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER)
+
+    ADD_TEST (NAME H5DIFF-${testname} COMMAND $<TARGET_FILE:h5diff> ${ARGN})
+    IF (NOT ${resultcode} STREQUAL "0")
+      SET_TESTS_PROPERTIES (H5DIFF-${testname} PROPERTIES WILL_FAIL "true")
+    ENDIF (NOT ${resultcode} STREQUAL "0")
+
     IF (NOT "${last_test}" STREQUAL "")
-      SET_TESTS_PROPERTIES (H5DIFF-${resultfile} PROPERTIES DEPENDS ${last_test})
+      SET_TESTS_PROPERTIES (H5DIFF-${testname} PROPERTIES DEPENDS ${last_test})
     ENDIF (NOT "${last_test}" STREQUAL "")
-    SET (last_test "H5DIFF-${resultfile}")
-  ENDMACRO (ADD_H5_TEST file)
+    SET (last_test "H5DIFF-${testname}")
+  ENDMACRO (ADD_H5_NO_OUTPUT_TEST)
 
 ##############################################################################
 ##############################################################################
@@ -364,6 +464,8 @@ IF (BUILD_TESTING)
   SET (FILE16 h5diff_extlink_trg.h5)
   SET (FILE17 h5diff_ext2softlink_src.h5)
   SET (FILE18 h5diff_ext2softlink_trg.h5)
+  SET (FILE19 h5diff_dset_zero_dim_size1.h5)
+  SET (FILE20 h5diff_dset_zero_dim_size2.h5)
   SET (DANGLE_LINK_FILE1 h5diff_danglelinks1.h5)
   SET (DANGLE_LINK_FILE2 h5diff_danglelinks2.h5)
   SET (GRP_RECURSE_FILE1 h5diff_grp_recurse1.h5)
@@ -381,13 +483,16 @@ IF (BUILD_TESTING)
   SET (EXCLUDE_FILE2_2 h5diff_exclude2-2.h5)
   # compound type with multiple vlen string types
   SET (COMP_VL_STRS_FILE h5diff_comp_vl_strs.h5)
+  # container types (array,vlen) with multiple nested compound types
+  SET (COMPS_ARRAY_VLEN_FILE1 compounds_array_vlen1.h5)
+  SET (COMPS_ARRAY_VLEN_FILE2 compounds_array_vlen2.h5)
   # attrs with verbose option level
   SET (ATTR_VERBOSE_LEVEL_FILE1 h5diff_attr_v_level1.h5)
   SET (ATTR_VERBOSE_LEVEL_FILE2 h5diff_attr_v_level2.h5)
 
-
-  # Remove any output file left over from previous test run
-  ADD_TEST (
+  IF (HDF5_ENABLE_USING_MEMCHECKER)
+    # Remove any output file left over from previous test run
+    ADD_TEST (
       NAME H5DIFF-clearall-objects
       COMMAND    ${CMAKE_COMMAND}
           -E remove 
@@ -447,6 +552,14 @@ IF (BUILD_TESTING)
           h5diff_206.out.err
           h5diff_207.out
           h5diff_207.out.err
+          h5diff_208.out
+          h5diff_208.out.err
+          h5diff_220.out
+          h5diff_220.out.err
+          h5diff_221.out
+          h5diff_221.out.err
+          h5diff_222.out
+          h5diff_222.out.err
           h5diff_21.out
           h5diff_21.out.err
           h5diff_22.out
@@ -605,6 +718,8 @@ IF (BUILD_TESTING)
           h5diff_518.out.err
           h5diff_530.out
           h5diff_530.out.err
+          h5diff_540.out
+          h5diff_540.out.err
           h5diff_600.out
           h5diff_600.out.err
           h5diff_601.out
@@ -659,6 +774,20 @@ IF (BUILD_TESTING)
           h5diff_628.out.err
           h5diff_629.out
           h5diff_629.out.err
+          h5diff_640.out
+          h5diff_640.out.err
+          h5diff_641.out
+          h5diff_641.out.err
+          h5diff_642.out
+          h5diff_642.out.err
+          h5diff_643.out
+          h5diff_643.out.err
+          h5diff_644.out
+          h5diff_644.out.err
+          h5diff_645.out
+          h5diff_645.out.err
+          h5diff_646.out
+          h5diff_646.out.err
           h5diff_70.out
           h5diff_70.out.err
           h5diff_700.out
@@ -687,11 +816,12 @@ IF (BUILD_TESTING)
           h5diff_80.out.err
           h5diff_90.out
           h5diff_90.out.err
-  )
-  IF (NOT "${last_test}" STREQUAL "")
-    SET_TESTS_PROPERTIES (H5DIFF-clearall-objects PROPERTIES DEPENDS ${last_test})
-  ENDIF (NOT "${last_test}" STREQUAL "")
-  SET (last_test "H5DIFF-clearall-objects")
+    )
+    IF (NOT "${last_test}" STREQUAL "")
+      SET_TESTS_PROPERTIES (H5DIFF-clearall-objects PROPERTIES DEPENDS ${last_test})
+    ENDIF (NOT "${last_test}" STREQUAL "")
+    SET (last_test "H5DIFF-clearall-objects")
+  ENDIF (HDF5_ENABLE_USING_MEMCHECKER)
 
 # ############################################################################
 # # Common usage
@@ -728,10 +858,10 @@ ADD_H5_TEST (h5diff_16_3 1 -v -p 0.02 ${FILE1} ${FILE1} g1/dset9 g1/dset10)
 ADD_H5_TEST (h5diff_17 1 -v ${FILE1} ${FILE2})   
 
 # 1.7 test 32-bit INFINITY
-ADD_H5_TEST (h5diff_171 0 -v ${FILE1} ${FILE1} /g1/fp19)
+ADD_H5_TEST (h5diff_171 0 -v ${FILE1} ${FILE1} /g1/fp19 /g1/fp19_COPY)
 
 # 1.7 test 64-bit INFINITY
-ADD_H5_TEST (h5diff_172 0 -v ${FILE1} ${FILE1} /g1/fp20)
+ADD_H5_TEST (h5diff_172 0 -v ${FILE1} ${FILE1} /g1/fp20 /g1/fp20_COPY)
 
 # 1.8 quiet mode 
 ADD_H5_TEST (h5diff_18 1 -q ${FILE1} ${FILE2}) 
@@ -739,7 +869,6 @@ ADD_H5_TEST (h5diff_18 1 -q ${FILE1} ${FILE2})
 # 1.8 -v and -q
 ADD_H5_TEST (h5diff_18_1 2 -v -q ${FILE1} ${FILE2})
 
-
 # ##############################################################################
 # # not comparable types
 # ##############################################################################
@@ -775,8 +904,6 @@ ADD_H5_TEST (h5diff_27 1 -v ${FILE3} ${FILE3} t1 t2)
 # 2.8
 ADD_H5_TEST (h5diff_28 1 -v ${FILE3} ${FILE3} l1 l2)
 
-
-
 # ##############################################################################
 # # Dataset datatypes
 # ##############################################################################
@@ -812,19 +939,16 @@ ADD_H5_TEST (h5diff_58 1 -v ${FILE7} ${FILE8} refreg)
 # # Error messages
 # ##############################################################################
 
-
 # 6.0: Check if the command line number of arguments is less than 3
 ADD_H5_TEST (h5diff_600 1 ${FILE1}) 
 
 # 6.1: Check if non-exist object name is specified 
 ADD_H5_TEST (h5diff_601 2 ${FILE1} ${FILE1} nono_obj)
 
-
 # ##############################################################################
 # # -d 
 # ##############################################################################
 
-
 # 6.3: negative value
 ADD_H5_TEST (h5diff_603 1 -d -4 ${FILE1} ${FILE2} g1/dset3 g1/dset4)
 
@@ -877,7 +1001,6 @@ ADD_H5_TEST (h5diff_618 0 -p 2 ${FILE1} ${FILE2} g1/dset3 g1/dset4)
 # 6.19: number smaller than smallest difference
 ADD_H5_TEST (h5diff_619 1 -p 0.005 ${FILE1} ${FILE2} g1/dset3 g1/dset4)
 
-
 # ##############################################################################
 # # -n
 # ##############################################################################
@@ -911,6 +1034,13 @@ ADD_H5_TEST (h5diff_628 1 -n 1 ${FILE1} ${FILE2} g1/dset3 g1/dset4)
 #ADD_H5_TEST (h5diff_629 2 file1.h6 file2.h6)
 
 # ##############################################################################
+# # NaN
+# ##############################################################################
+# 6.30: test (NaN == NaN) must be true based on our documentation -- XCAO
+ADD_H5_TEST (h5diff_630 0 -v -d "0.0001" ${FILE1} ${FILE1} g1/fp18 g1/fp18_COPY)
+ADD_H5_TEST (h5diff_631 0 -v --use-system-epsilon ${FILE1} ${FILE1} g1/fp18 g1/fp18_COPY)
+
+# ##############################################################################
 # 7.  attributes
 # ##############################################################################
 ADD_H5_TEST (h5diff_70 1 -v ${FILE5} ${FILE6}) 
@@ -944,8 +1074,6 @@ ADD_H5_TEST (h5diff_709 0 -v2 ${ATTR_VERBOSE_LEVEL_FILE1} ${ATTR_VERBOSE_LEVEL_F
 # file vs file
 ADD_H5_TEST (h5diff_710 1 -v2 ${ATTR_VERBOSE_LEVEL_FILE1} ${ATTR_VERBOSE_LEVEL_FILE2})
 
-
-
 # ##############################################################################
 # 8.  all dataset datatypes
 # ##############################################################################
@@ -988,12 +1116,27 @@ ADD_H5_TEST (h5diff_204 0 -c ${FILE2} ${FILE2} g2/dset4  g2/dset5)
 
 ADD_H5_TEST (h5diff_205 0 -c ${FILE2} ${FILE2} g2/dset5  g2/dset6)
 
-
 # not comparable in compound
 ADD_H5_TEST (h5diff_206 0 -c ${FILE2} ${FILE2} g2/dset7  g2/dset8)
 
 ADD_H5_TEST (h5diff_207 0 -c ${FILE2} ${FILE2} g2/dset8  g2/dset9)
 
+# not comparable in dataspace of zero dimension size
+ADD_H5_TEST (h5diff_208 0 -c ${FILE19} ${FILE20}) 
+
+# non-comparable dataset with comparable attribute, and other comparable datasets. 
+# All the rest comparables should display differences.
+ADD_H5_TEST (h5diff_220 1 -c non_comparables1.h5 non_comparables2.h5 /g1)
+
+# comparable dataset with non-comparable attribute and other comparable attributes.
+# Also test non-compatible attributes with different type, dimention, rank.
+# All the rest comparables should display differences.
+ADD_H5_TEST (h5diff_221 1 -c non_comparables1.h5 non_comparables2.h5 /g2)
+
+# entire file
+# All the rest comparables should display differences
+ADD_H5_TEST (h5diff_222 1 -c non_comparables1.h5 non_comparables2.h5)
+
 # ##############################################################################
 # # Links compare without --follow-symlinks nor --no-dangling-links
 # ##############################################################################
@@ -1081,7 +1224,6 @@ ADD_H5_TEST (h5diff_424 1 --follow-symlinks -v ${FILE18} ${FILE17} /dset2 /ext_l
 # extlink_to_softlink_to_dset1 vs extlink_to_softlink_to_dset2"
 ADD_H5_TEST (h5diff_425 1 --follow-symlinks -v ${FILE17} ${FILE17} /ext_link_to_slink1 /ext_link_to_slink2)
 
-
 # ##############################################################################
 # # Dangling links compare (--follow-symlinks and --no-dangling-links)
 # ##############################################################################
@@ -1163,7 +1305,6 @@ ADD_H5_TEST (h5diff_516 0 -v --follow-symlinks ${GRP_RECURSE1_EXT} ${GRP_RECURSE
 ADD_H5_TEST (h5diff_517 1 -v ${GRP_RECURSE1_EXT} ${GRP_RECURSE2_EXT1} /g1)
 ADD_H5_TEST (h5diff_518 0 -v --follow-symlinks ${GRP_RECURSE1_EXT} ${GRP_RECURSE2_EXT1} /g1)
 
-
 # ##############################################################################
 # # Exclude path (--exclude-path)
 # ##############################################################################
@@ -1189,9 +1330,27 @@ ADD_H5_TEST (h5diff_484 0 -v --exclude-path "/dset3" ${EXCLUDE_FILE1_1} ${EXCLUD
 # ##############################################################################
 # # diff various multiple vlen and fixed strings in a compound type dataset
 # ##############################################################################
-ADD_H5_TEST (h5diff_530 0 -v  ${COMP_VL_STRS_FILE} ${COMP_VL_STRS_FILE})
+ADD_H5_TEST (h5diff_530 0 -v  ${COMP_VL_STRS_FILE} ${COMP_VL_STRS_FILE} /group /group_copy)
 
-  
+# ##############################################################################
+# # Test container types (array,vlen) with multiple nested compound types
+# # Complex compound types in dataset and attribute
+# ##############################################################################
+ADD_H5_TEST (h5diff_540 1 -v ${COMPS_ARRAY_VLEN_FILE1} ${COMPS_ARRAY_VLEN_FILE2})
+
+# ##############################################################################
+# # Test mutually exclusive options 
+# ##############################################################################
+#
+# Test with -d , -p and --use-system-epsilon. 
+ADD_H5_TEST (h5diff_640 1 -v -d 5 -p 0.05 --use-system-epsilon ${FILE1} ${FILE2} /g1/dset3 /g1/dset4)
+ADD_H5_TEST (h5diff_641 1 -v -d 5 -p 0.05 ${FILE1} ${FILE2} /g1/dset3 /g1/dset4)
+ADD_H5_TEST (h5diff_642 1 -v -p 0.05 -d 5 ${FILE1} ${FILE2} /g1/dset3 /g1/dset4)
+ADD_H5_TEST (h5diff_643 1 -v -d 5 --use-system-epsilon ${FILE1} ${FILE2} /g1/dset3 /g1/dset4)
+ADD_H5_TEST (h5diff_644 1 -v --use-system-epsilon -d 5 ${FILE1} ${FILE2} /g1/dset3 /g1/dset4)
+ADD_H5_TEST (h5diff_645 1 -v -p 0.05 --use-system-epsilon ${FILE1} ${FILE2} /g1/dset3 /g1/dset4)
+ADD_H5_TEST (h5diff_646 1 -v --use-system-epsilon -p 0.05 ${FILE1} ${FILE2} /g1/dset3 /g1/dset4)
+ 
 ENDIF (BUILD_TESTING)
 
 ##############################################################################
@@ -1211,3 +1370,14 @@ INSTALL (
     COMPONENT
         toolsapplications
 )
+
+IF (H5_HAVE_PARALLEL)
+  INSTALL (
+      TARGETS
+          ph5diff
+      RUNTIME DESTINATION
+          ${HDF5_INSTALL_BIN_DIR}/tools
+      COMPONENT
+          toolsapplications
+  )
+ENDIF (H5_HAVE_PARALLEL)
diff --git a/tools/h5diff/Makefile.in b/tools/h5diff/Makefile.in
index eabe9b0..25884b2 100644
--- a/tools/h5diff/Makefile.in
+++ b/tools/h5diff/Makefile.in
@@ -188,6 +188,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -208,10 +209,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -255,7 +258,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/tools/h5diff/h5diff_common.c b/tools/h5diff/h5diff_common.c
index fd679d3..f7532f2 100644
--- a/tools/h5diff/h5diff_common.c
+++ b/tools/h5diff/h5diff_common.c
@@ -46,6 +46,31 @@ static struct long_options l_opts[] = {
     { NULL, 0, '\0' }
 };
 
+/*-------------------------------------------------------------------------
+ * Function: check_options
+ *
+ * Purpose: parse command line input
+ *
+ *-------------------------------------------------------------------------
+ */
+static check_options(diff_opt_t* options)
+{
+    /*--------------------------------------------------------------
+     * check for mutually exclusive options 
+     *--------------------------------------------------------------*/
+
+    /* check between -d , -p, --use-system-epsilon.
+     * These options are mutually exclusive.
+     */
+    if ((options->d + options->p + options->use_system_epsilon) > 1)
+    {
+        printf("%s error: -d, -p and --use-system-epsilon options are mutually-exclusive;\n", PROGRAMNAME);
+        printf("use no more than one.\n");
+        printf("Try '-h' or '--help' option for more information or see the %s entry in the 'HDF5 Reference Manual'.\n", PROGRAMNAME);
+        h5diff_exit(EXIT_FAILURE);
+    }
+}
+
 
 /*-------------------------------------------------------------------------
  * Function: parse_command_line
@@ -104,27 +129,27 @@ void parse_command_line(int argc,
                  * short opt 
                  */
                 if (!strcmp (argv[i], "-v"))  /* no arg */
-	        	{
+            {
                     opt_ind--;
                     options->m_verbose_level = 0;
                     break;
-        		}
+            }
                 else if (!strncmp (argv[i], "-v", 2))
-        		{
+            {
                     options->m_verbose_level = atoi(&argv[i][2]);
                     break;
-        		}		
+            }    
 
                 /* 
                  * long opt 
                  */
                 if (!strcmp (argv[i], "--verbose"))  /* no arg */
-	        	{
+            {
                     options->m_verbose_level = 0;
                     break;
-        		}
-        		else if ( !strncmp (argv[i], "--verbose", 9) && argv[i][9]=='=')
-        		{
+            }
+            else if ( !strncmp (argv[i], "--verbose", 9) && argv[i][9]=='=')
+            {
                     options->m_verbose_level = atoi(&argv[i][10]);
                     break;
                 }
@@ -231,14 +256,13 @@ void parse_command_line(int argc,
         }
     }
 
+    /* check options */
+    check_options(options);
+
     /* if exclude-path option is used, keep the exclude path list */
     if (options->exclude_path)
         options->exclude = exclude_head;
 
-    /* if use system epsilon, unset -p and -d option */
-    if (options->use_system_epsilon)
-        options->d = options->p = 0;
-
     /* check for file names to be processed */
     if (argc <= opt_ind || argv[ opt_ind + 1 ] == NULL)
     {
@@ -297,7 +321,10 @@ void parse_command_line(int argc,
              printf("--------------------------------\n");
              printf("Some objects are not comparable\n");
              printf("--------------------------------\n");
-             printf("Use -c for a list of objects.\n");
+             if (options->m_verbose)
+                 printf("Use -c for a list of objects without details of differences.\n");
+             else
+                 printf("Use -c for a list of objects.\n");
          }
 
 
@@ -424,97 +451,98 @@ check_d_input( const char *str )
 void usage(void)
 {
  printf("usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] \n");
- printf("  file1                    File name of the first HDF5 file\n");
- printf("  file2                    File name of the second HDF5 file\n");
- printf("  [obj1]                   Name of an HDF5 object, in absolute path\n");
- printf("  [obj2]                   Name of an HDF5 object, in absolute path\n");
+ printf("  file1             File name of the first HDF5 file\n");
+ printf("  file2             File name of the second HDF5 file\n");
+ printf("  [obj1]            Name of an HDF5 object, in absolute path\n");
+ printf("  [obj2]            Name of an HDF5 object, in absolute path\n");
  printf("\n");
  printf("  OPTIONS\n");
- printf("   -h, --help              Print a usage message and exit.\n");
- printf("   -V, --version           Print version number and exit.\n");
- printf("   -r, --report            Report mode. Print differences.\n");
- printf("   -v --verbose            Verbose mode. Print differences information and list\n");
- printf("                           of objects.\n");
- printf("   -vN --verbose=N         Verbose mode with level. Print differences and list\n");
- printf("                           of objects.\n");
- printf("                           Level of detail depends on value of N:\n");
- printf("                            0 : Identical to '-v' or '--verbose'.\n");
- printf("                            1 : All level 0 information plus one-line attribute\n");
- printf("                                status summary.\n");
- printf("                            2 : All level 1 information plus extended attribute\n");
- printf("                                status report.\n");
- printf("   -q, --quiet             Quiet mode. Do not produce output.\n");
- printf("   --follow-symlinks       Follow symbolic links (soft links and external links)\n");
- printf("                           and compare the links' target objects.\n");
- printf("                           If symbolic link(s) with the same name exist in the\n");
- printf("                           files being compared, then determine whether the \n");
- printf("                           target of each link is an existing object (dataset,\n");
- printf("                           group, or named datatype) or the link is a dangling\n");
- printf("                           link (a soft or external link pointing to a target\n");
- printf("                           object that does not yet exist).\n");
- printf("                           - If both symbolic links are dangling links, they\n");
- printf("                             are treated as being the same; by default, h5diff\n");
- printf("                             returns an exit code of 0. If, however, \n");
- printf("                             --no-dangling-links is used with --follow-symlinks,\n");
- printf("                             this situation is treated as an error and h5diff \n");
- printf("                             returns an exit code of 2.\n");
- printf("                           - If only one of the two links is a dangling link,\n");
- printf("                             they are treated as being different and h5diff \n");
- printf("                             returns an exit code of 1. If, however, \n");
- printf("                             --no-dangling-links is used with --follow-symlinks,\n");
- printf("                             this situation is treated as an error and h5diff \n");
- printf("                             returns an exit code of 2.\n");
- printf("                           - If both symbolic links point to existing objects,\n");
- printf("                             h5diff compares the two objects.\n");
- printf("                           If any symbolic link specified in the call to h5diff\n");
- printf("                           does not exist, h5diff treats it as an error and\n");
- printf("                           returns an exit code of 2.\n");
- printf("   --no-dangling-links     Must be used with --follow-symlinks option;\n");
- printf("                           otherwise, h5diff shows error message and returns\n");
- printf("                           an exit code of 2.\n");
- printf("                           Check for any symbolic links (soft links or external\n");
- printf("                           links) that do not resolve to an existing object\n");
- printf("                           (dataset, group, or named datatype).  If any\n");
- printf("                           dangling link is found, this situation is treated as\n");
- printf("                           an error and h5diff returns an exit code of 2.\n");
- printf("   -c, --compare           List objects that are not comparable\n");
- printf("   -N, --nan               Avoid NaNs detection\n");
- printf("   -n C, --count=C         Print differences up to C number, C is a positive\n");
- printf("                           integer.\n");
- printf("   -d D, --delta=D         Print difference if (|a-b| > D), D is a positive\n");
- printf("                           number.\n");
- printf("   -p R, --relative=R      Print difference if (|(a-b)/b| > R), R is a positive\n");
- printf("                           number.\n");
- printf("   --use-system-epsilon    Print difference if (|a-b| > EPSILON), EPSILON is\n");
- printf("                           a system epsilon value.\n");
- printf("                           If the system epsilon is not defined, the below\n");
- printf("                           one of the following predefined values will be used:\n");
- printf("                             FLT_EPSILON = 1.19209E-07 for floating-point type\n");
- printf("                             DBL_EPSILON = 2.22045E-16 for double percision type\n");
- printf("   --exclude-path \"path\"   Exclude the specified path to an object when\n");
- printf("                           comparing files or groups. If a group is excluded,\n");
- printf("                           all member objects will also be excluded.\n");
- printf("                           The specified path is excluded wherever it occurs.\n");
- printf("                           This flexibility enables the same option to exclude\n");
- printf("                           either objects that exist only in one file or\n");
- printf("                           common objects that are known to differ.\n");
+ printf("   -h, --help\n");
+ printf("         Print a usage message and exit.\n");
+ printf("   -V, --version\n");
+ printf("         Print version number and exit.\n");
+ printf("   -r, --report\n");
+ printf("         Report mode. Print differences.\n");
+ printf("   -v --verbose\n");
+ printf("         Verbose mode. Print differences information and list of objects.\n");
+ printf("   -vN --verbose=N\n");
+ printf("         Verbose mode with level. Print differences and list of objects.\n");
+ printf("         Level of detail depends on value of N:\n");
+ printf("          0 : Identical to '-v' or '--verbose'.\n");
+ printf("          1 : All level 0 information plus one-line attribute\n");
+ printf("              status summary.\n");
+ printf("          2 : All level 1 information plus extended attribute\n");
+ printf("              status report.\n");
+ printf("   -q, --quiet\n");
+ printf("         Quiet mode. Do not produce output.\n");
+ printf("   --follow-symlinks\n");
+ printf("         Follow symbolic links (soft links and external links and compare the)\n");
+ printf("         links' target objects.\n");
+ printf("         If symbolic link(s) with the same name exist in the files being\n");
+ printf("         compared, then determine whether the target of each link is an existing\n");
+ printf("         object (dataset, group, or named datatype) or the link is a dangling\n");
+ printf("         link (a soft or external link pointing to a target object that does\n");
+ printf("         not yet exist).\n");
+ printf("         - If both symbolic links are dangling links, they are treated as being\n");
+ printf("           the same; by default, h5diff returns an exit code of 0.\n");
+ printf("           If, however, --no-dangling-links is used with --follow-symlinks,\n");
+ printf("           this situation is treated as an error and h5diff returns an\n");
+ printf("           exit code of 2.\n");
+ printf("         - If only one of the two links is a dangling link,they are treated as\n");
+ printf("           being different and h5diff returns an exit code of 1.\n");
+ printf("           If, however, --no-dangling-links is used with --follow-symlinks,\n");
+ printf("           this situation is treated as an error and h5diff returns an\n");
+ printf("           exit code of 2.\n");
+ printf("         - If both symbolic links point to existing objects, h5diff compares the\n");
+ printf("           two objects.\n");
+ printf("         If any symbolic link specified in the call to h5diff does not exist,\n");
+ printf("         h5diff treats it as an error and returns an exit code of 2.\n");
+ printf("   --no-dangling-links\n");
+ printf("         Must be used with --follow-symlinks option; otherwise, h5diff shows\n");
+ printf("         error message and returns an exit code of 2.\n");
+ printf("         Check for any symbolic links (soft links or external links) that do not\n");
+ printf("         resolve to an existing object (dataset, group, or named datatype).\n");
+ printf("         If any dangling link is found, this situation is treated as an error\n");
+ printf("         and h5diff returns an exit code of 2.\n");
+ printf("   -c, --compare\n");
+ printf("         List objects that are not comparable\n");
+ printf("   -N, --nan\n");
+ printf("         Avoid NaNs detection\n");
+ printf("   -n C, --count=C\n");
+ printf("         Print differences up to C. C must be a positive integer.\n");
+ printf("   -d D, --delta=D\n");
+ printf("         Print difference if (|a-b| > D). D must be a positive number.\n");
+ printf("         Can not use with '-p' or '--use-system-epsilon'.\n");
+ printf("   -p R, --relative=R\n");
+ printf("         Print difference if (|(a-b)/b| > R). R must be a positive number.\n");
+ printf("         Can not use with '-d' or '--use-system-epsilon'.\n");
+ printf("   --use-system-epsilon\n");
+ printf("         Print difference if (|a-b| > EPSILON), EPSILON is system defined value.\n");
+ printf("         If the system epsilon is not defined,one of the following predefined\n");
+ printf("         values will be used:\n");
+ printf("           FLT_EPSILON = 1.19209E-07 for floating-point type\n");
+ printf("           DBL_EPSILON = 2.22045E-16 for double precision type\n");
+ printf("         Can not use with '-p' or '-d'.\n");
+ printf("   --exclude-path \"path\" \n");
+ printf("         Exclude the specified path to an object when comparing files or groups.\n");
+ printf("         If a group is excluded, all member objects will also be excluded.\n");
+ printf("         The specified path is excluded wherever it occurs.\n");
+ printf("         This flexibility enables the same option to exclude either objects that\n");
+ printf("         exist only in one file or common objects that are known to differ.\n");
  printf("\n");
- printf("                           When comparing files, \"path\" is the absolute path to\n");
- printf("                           the excluded object; when comparing groups, \"path\" is\n");
- printf("                           similar to the relative path from the group to the\n");
- printf("                           excluded object. This \"path\" can be taken from the\n");
- printf("                           first section of the output of the --verbose option.\n");
- printf("                           For example, if you are comparing the group /groupA\n");
- printf("                           in two files and you want to exclude\n");
- printf("                           /groupA/groupB/groupC in both files, the exclude\n");
- printf("                           option would read as follows:\n");
- printf("                             --exclude-path \"/groupB/groupC\"\n");
+ printf("         When comparing files, \"path\" is the absolute path to the excluded;\n");
+ printf("         object; when comparing groups, \"path\" is similar to the relative\n");
+ printf("         path from the group to the excluded object. This \"path\" can be\n");
+ printf("         taken from the first section of the output of the --verbose option.\n");
+ printf("         For example, if you are comparing the group /groupA in two files and\n");
+ printf("         you want to exclude /groupA/groupB/groupC in both files, the exclude\n");
+ printf("         option would read as follows:\n");
+ printf("           --exclude-path \"/groupB/groupC\"\n");
  printf("\n");
- printf("                           If there are multiple paths to an object, only the\n");
- printf("                           specified path(s) will be excluded; the comparison\n");
- printf("                           will include any path not explicitly excluded.\n");
- printf("                           This option can be used repeatedly to exclude\n");
- printf("                           multiple paths.\n");
+ printf("         If there are multiple paths to an object, only the specified path(s)\n");
+ printf("         will be excluded; the comparison will include any path not explicitly\n");
+ printf("         excluded.\n");
+ printf("         This option can be used repeatedly to exclude multiple paths.\n");
  printf("\n");
 
  printf(" Modes of output:\n");
@@ -567,35 +595,3 @@ void usage(void)
  printf("  '/g1/dset1' and '/g1/dset2' in the same file\n");
  printf("\n");
 }
-
-
-/*-------------------------------------------------------------------------
- * Function: h5diff_exit
- *
- * Purpose: dismiss phdiff worker processes and exit
- *
- * Return: none
- *
- * Programmer: Albert Cheng
- * Date: Feb 6, 2005
- *
- * Comments:
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-void h5diff_exit(int status)
-{
-#ifdef H5_HAVE_PARALLEL
-    /* if in parallel mode, dismiss workers, close down MPI, then exit */
-    if((g_nTasks > 1) && g_Parallel) {
-        phdiff_dismiss_workers();
-        MPI_Barrier(MPI_COMM_WORLD);
-    }
-    if(g_Parallel)
-        MPI_Finalize();
-#endif
-    exit(status);
-}
-
diff --git a/tools/h5diff/h5diff_common.h b/tools/h5diff/h5diff_common.h
index 5a601df..5b1317f 100644
--- a/tools/h5diff/h5diff_common.h
+++ b/tools/h5diff/h5diff_common.h
@@ -17,14 +17,13 @@
 #define H5DIFFCOMMON_H__
 
 #include "h5tools.h"
+/* Name of tool */
+#define PROGRAMNAME "h5diff"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-H5TOOLS_DLLVAR unsigned char g_Parallel;
-H5TOOLS_DLLVAR int g_nTasks;
-
 void usage(void);
 void parse_command_line(int argc, const char* argv[], const char** fname1, const char** fname2, const char** objname1, const char** objname2, diff_opt_t* options);
 void h5diff_exit(int status);
diff --git a/tools/h5diff/h5diff_main.c b/tools/h5diff/h5diff_main.c
index 297eb48..a014a9e 100644
--- a/tools/h5diff/h5diff_main.c
+++ b/tools/h5diff/h5diff_main.c
@@ -20,8 +20,6 @@
 #include "h5diff_common.h"
 #include "h5tools_utils.h"
 
-/* Name of tool */
-#define PROGRAMNAME "h5diff"
 
 /*-------------------------------------------------------------------------
  * Function: main
@@ -119,3 +117,24 @@ out:
     return ret;
 }
 
+/*-------------------------------------------------------------------------
+ * Function: h5diff_exit
+ *
+ * Purpose: dismiss phdiff worker processes and exit
+ *
+ * Return: none
+ *
+ * Programmer: Albert Cheng
+ * Date: Feb 6, 2005
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void h5diff_exit(int status)
+{
+    exit(status);
+}
+
diff --git a/tools/h5diff/h5diffgentest.c b/tools/h5diff/h5diffgentest.c
index 66f1ce8..7ea9365 100644
--- a/tools/h5diff/h5diffgentest.c
+++ b/tools/h5diff/h5diffgentest.c
@@ -53,6 +53,8 @@
 #define FILE16   "h5diff_extlink_trg.h5"
 #define FILE17   "h5diff_ext2softlink_src.h5"
 #define FILE18   "h5diff_ext2softlink_trg.h5"
+#define FILE19   "h5diff_dset_zero_dim_size1.h5"
+#define FILE20   "h5diff_dset_zero_dim_size2.h5"
 #define DANGLE_LINK_FILE1   "h5diff_danglelinks1.h5"
 #define DANGLE_LINK_FILE2   "h5diff_danglelinks2.h5"
 #define GRP_RECURSE_FILE1   "h5diff_grp_recurse1.h5"
@@ -73,13 +75,26 @@
 /* attribute compre with verbose level */
 #define ATTR_VERBOSE_LEVEL_FILE1 "h5diff_attr_v_level1.h5"
 #define ATTR_VERBOSE_LEVEL_FILE2 "h5diff_attr_v_level2.h5"
+/* file containing valid/invalid enum value mix */
+#define ENUM_INVALID_VALUES "h5diff_enum_invalid_values.h5"
+/* file with container types (array,vlen) with multiple compounds */
+#define COMPS_COMPLEX1   "compounds_array_vlen1.h5"
+#define COMPS_COMPLEX2   "compounds_array_vlen2.h5"
+/* non-comparable dataset and attribute */
+#define NON_COMPARBLES1 "non_comparables1.h5"
+#define NON_COMPARBLES2 "non_comparables2.h5"
 
 #define UIMAX    4294967295u /*Maximum value for a variable of type unsigned int */
 #define STR_SIZE 3
 #define GBLL    ((unsigned long long) 1024 * 1024 *1024 )
 
-
 #define MY_LINKCLASS 187
+
+/* Dataspace of 0 dimension size */
+#define SPACE1_RANK 2
+#define SPACE1_DIM1 0
+#define SPACE1_DIM2 0
+
 /* A UD link traversal function.  Shouldn't actually be called. */
 static hid_t UD_traverse(UNUSED const char * link_name, UNUSED hid_t cur_group,
                          UNUSED const void * udata, UNUSED size_t udata_size, UNUSED hid_t lapl_id)
@@ -110,6 +125,7 @@ static int test_types(const char *fname);
 static int test_datatypes(const char *fname);
 static int test_attributes(const char *fname,int make_diffs);
 static int test_datasets(const char *fname,int make_diffs);
+static int test_special_datasets(const char *fname,int make_diffs);
 static int test_hyperslab(const char *fname,int make_diffs);
 static int test_link_name(const char *fname1);
 static int test_soft_links(const char *fname1);
@@ -121,8 +137,14 @@ static int test_group_recurse(const char *fname1, const char *fname2);
 static int test_group_recurse2(void);
 static int test_exclude_obj1(const char *fname1, const char *fname2);
 static int test_exclude_obj2(const char *fname1, const char *fname2);
-static int test_comp_vlen_strings(const char *fname1);
+static int test_comp_vlen_strings(const char *fname1, const char *grp_name, int is_file_new);
 static int test_attributes_verbose_level(const char *fname1, const char *fname2);
+static int test_enums(const char *fname);
+static void test_comps_array (const char *fname, const char *dset, const char *attr,int diff, int is_file_new);
+static void test_comps_vlen (const char *fname, const char *dset,const char *attr, int diff, int is_file_new);
+static void test_comps_array_vlen (const char *fname, const char *dset, const char *attr, int diff, int is_file_new);
+static void test_comps_vlen_arry (const char *fname, const char *dset,const char *attr, int diff, int is_file_new);
+static void test_non_comparables (const char *fname, int diff);
 
 /* called by test_attributes() and test_datasets() */
 static void write_attr_in(hid_t loc_id,const char* dset_name,hid_t fid,int make_diffs);
@@ -173,6 +195,10 @@ int main(void)
 
     test_ext2soft_links(FILE17, FILE18);
 
+    /* generate 2 files, the second call creates a similar file with differences */
+    test_special_datasets(FILE19,0);
+    test_special_datasets(FILE20,1);
+
     test_dangle_links(DANGLE_LINK_FILE1, DANGLE_LINK_FILE2);
 
     test_group_recurse(GRP_RECURSE_FILE1, GRP_RECURSE_FILE2);
@@ -182,7 +208,38 @@ int main(void)
     test_exclude_obj2(EXCLUDE_FILE2_1, EXCLUDE_FILE2_2);
 
     /* diff various multiple vlen and fixlen string types in a compound dataset */
-    test_comp_vlen_strings(COMP_VL_STRS_FILE );
+    test_comp_vlen_strings(COMP_VL_STRS_FILE, "group", 1);
+    test_comp_vlen_strings(COMP_VL_STRS_FILE, "group_copy", 0);
+
+    /* diff when invalid enum values are present.
+     * This will probably grow to involve more extensive testing of
+     * enums so it has been given its own test file and test (apart
+     * from the basic type testing).
+     */
+    test_enums(ENUM_INVALID_VALUES);
+
+    /* -------------------------------------------------
+     * Create test files with dataset and attribute with container types 
+     * (array, vlen) with multiple nested compound types.
+     */
+    /* file1 */
+    test_comps_array(COMPS_COMPLEX1,"dset1", "attr1", 0, 1);
+    test_comps_vlen(COMPS_COMPLEX1,"dset2", "attr2", 0, 0);
+    test_comps_array_vlen(COMPS_COMPLEX1,"dset3", "attr3", 0, 0);
+    test_comps_vlen_arry(COMPS_COMPLEX1,"dset4", "attr4", 0, 0);
+    /* file2 */
+    test_comps_array(COMPS_COMPLEX2,"dset1", "attr1", 5, 1);
+    test_comps_vlen(COMPS_COMPLEX2,"dset2", "attr2",5, 0);
+    test_comps_array_vlen(COMPS_COMPLEX2,"dset3", "attr3", 5, 0);
+    test_comps_vlen_arry(COMPS_COMPLEX2,"dset4", "attr4", 5, 0);
+
+    /*-------------------------------------------------
+     * Create test files with non-comparable dataset and attributes with 
+     * comparable datasets and attributes.  All the comparables should display 
+     * differences.
+     */
+    test_non_comparables(NON_COMPARBLES1,0);
+    test_non_comparables(NON_COMPARBLES2,5);
 
     return 0;
 }
@@ -312,7 +369,7 @@ int test_basic(const char *fname1, const char *fname2, const char *fname3)
     *-------------------------------------------------------------------------
     */
     {
-        /* epsilon = 0.0000001 = 1e-7 
+        /* epsilon = 0.0000001 = 1e-7
          * system epsilon for float : FLT_EPSILON = 1.19209E-07
          */
         float  data11[3][2] ={{0.000000f,0.0000001f},{0.0000001f, 0.00000022f},{0.0000001f,0.0000001f}};
@@ -393,7 +450,7 @@ int test_basic(const char *fname1, const char *fname2, const char *fname3)
         data17[5] = 1;
 
         data18[0] = (float) sqrt( (double)-1 );
-        data18[1] = (float) sqrt( (double)-1 );
+        data18[1] = (float) sqrt( (double)-10000 );
         data18[2] = 1;
         data18[3] = 1;
         data18[4] = 1;
@@ -401,6 +458,7 @@ int test_basic(const char *fname1, const char *fname2, const char *fname3)
 
         write_dset(gid1,1,dims1,"fp17",H5T_NATIVE_DOUBLE,data17);
         write_dset(gid1,1,dims1,"fp18",H5T_NATIVE_DOUBLE,data18);
+        write_dset(gid1,1,dims1,"fp18_COPY",H5T_NATIVE_DOUBLE,data18);
     }
 
     /*------------------------------------------------------------------------
@@ -418,7 +476,9 @@ int test_basic(const char *fname1, const char *fname2, const char *fname3)
         data20[3] = data20[4] = data20[5] = -log(0);
 
         write_dset(gid1,1,dims1,"fp19",H5T_NATIVE_FLOAT,data19);
+        write_dset(gid1,1,dims1,"fp19_COPY",H5T_NATIVE_FLOAT,data19);
         write_dset(gid1,1,dims1,"fp20",H5T_NATIVE_DOUBLE,data20);
+        write_dset(gid1,1,dims1,"fp20_COPY",H5T_NATIVE_DOUBLE,data20);
     }
 
     /*-------------------------------------------------------------------------
@@ -907,14 +967,13 @@ int test_attributes(const char *file,
 /*-------------------------------------------------------------------------
 * Function: test_attributes_verbose_level
 *
-* Purpose: Cresting test files for testing attributes along with 
+* Purpose: Cresting test files for testing attributes along with
 * levels of verbos option
 *
 *-------------------------------------------------------------------------
 */
 static int test_attributes_verbose_level(const char *fname1, const char *fname2)
 {
-    int i;
     herr_t  status = SUCCEED;
     hid_t   fid1, fid2;
     hid_t   f1_gid, f2_gid;
@@ -1015,7 +1074,7 @@ static int test_attributes_verbose_level(const char *fname1, const char *fname2)
         goto out;
     }
 
-    
+
 
 
     /*----------------------------------------------------------------------
@@ -1096,7 +1155,7 @@ static int test_attributes_verbose_level(const char *fname1, const char *fname2)
 
    /*----------------------------------
     * CASE1 - Same attr number, all Same attr name
-    * add attr to group 
+    * add attr to group
     */
     write_attr(f1_gid,1,attr_dims,"integer1",H5T_NATIVE_INT,f1_attr_idata);
     write_attr(f1_gid,1,attr_dims,"float1",H5T_NATIVE_FLOAT,f1_attr_fdata);
@@ -1105,8 +1164,8 @@ static int test_attributes_verbose_level(const char *fname1, const char *fname2)
     write_attr(f2_gid,1,attr_dims,"float1",H5T_NATIVE_FLOAT,f2_attr_fdata);
 
    /*----------------------------------
-    * CASE2 - Same attr number, some Same attr name 
-    * add attr to dset 
+    * CASE2 - Same attr number, some Same attr name
+    * add attr to dset
     */
     write_attr(f1_did,1,attr_dims,"integer1",H5T_NATIVE_INT,f1_attr_idata);
     write_attr(f1_did,1,attr_dims,"float2",H5T_NATIVE_FLOAT,f1_attr_fdata);
@@ -1115,8 +1174,8 @@ static int test_attributes_verbose_level(const char *fname1, const char *fname2)
     write_attr(f2_did,1,attr_dims,"float3",H5T_NATIVE_FLOAT,f2_attr_fdata);
 
    /*----------------------------------
-    * CASE3 - Same attr number, all different attr name 
-    * add attr to ntype 
+    * CASE3 - Same attr number, all different attr name
+    * add attr to ntype
     */
     write_attr(f1_tid,1,attr_dims,"integer1",H5T_NATIVE_INT,f1_attr_idata);
     write_attr(f1_tid,1,attr_dims,"float2",H5T_NATIVE_FLOAT,f1_attr_fdata);
@@ -1136,11 +1195,11 @@ static int test_attributes_verbose_level(const char *fname1, const char *fname2)
 
     write_attr(f2_gid2,1,attr_dims,"integer1",H5T_NATIVE_INT,f2_attr_idata);
     write_attr(f2_gid2,1,attr_dims,"float2",H5T_NATIVE_FLOAT,f2_attr_fdata);
-    
+
 
    /*----------------------------------
     * CASE5 - Different attr number, all different attr name
-    * add attr to g3  
+    * add attr to g3
     */
     write_attr(f1_gid3,1,attr_dims,"integer10",H5T_NATIVE_INT,f1_attr_idata);
     write_attr(f1_gid3,1,attr_dims,"float11",H5T_NATIVE_FLOAT,f1_attr_fdata);
@@ -1250,6 +1309,62 @@ int test_datasets(const char *file,
 }
 
 /*-------------------------------------------------------------------------
+* Function: test_special_datasets
+*
+* Purpose: Check datasets with datasapce of zero dimension size.
+*-------------------------------------------------------------------------
+*/
+static
+int test_special_datasets(const char *file,
+                  int make_diffs /* flag to modify data buffers */)
+{
+    hid_t   fid;
+    hid_t   did;
+    hid_t   sid0, sid;
+    hsize_t dims0[SPACE1_RANK]={SPACE1_DIM1, SPACE1_DIM2};
+    hsize_t dims[SPACE1_RANK]={SPACE1_DIM1, SPACE1_DIM2};
+    herr_t  status;
+
+    /* Create a file  */
+    if((fid = H5Fcreate(file, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+        return -1;
+
+    /* Create a dataset with zero dimension size */
+    sid0 = H5Screate_simple(SPACE1_RANK, dims0, NULL);
+    did  = H5Dcreate2(fid, "dset1", H5T_NATIVE_INT, sid0, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* close dataset */
+    status = H5Dclose(did);
+    assert(status >= 0);
+
+    /* close dataspace */
+    status = H5Sclose(sid0);
+    assert(status >= 0);
+
+    /* Create a dataset with zero dimension size in one file but the other one
+     * has a dataset with a non-zero dimension size */
+    if(make_diffs) {
+        dims[1] = SPACE1_DIM2 + 4;
+    }
+
+    sid = H5Screate_simple(SPACE1_RANK, dims, NULL);
+    did  = H5Dcreate2(fid, "dset2", H5T_NATIVE_INT, sid, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* close dataspace */
+    status = H5Sclose(sid);
+    assert(status >= 0);
+
+    /* close dataset */
+    status = H5Dclose(did);
+    assert(status >= 0);
+
+    /* close file */
+    status = H5Fclose(fid);
+    assert(status >= 0);
+    return status;
+}
+
+/*-------------------------------------------------------------------------
 *
 * Purpose: Create test files to compare links, one has longer name than
 *          the other and short name is subset of long name.
@@ -2569,9 +2684,9 @@ static int test_group_recurse(const char *fname1, const char *fname2)
     }
 
     /*------------------------------
-     * external circle route test 
+     * external circle route test
      * file1/grp11 <-> file2/grp10  via elink_grp_circle link
-     */     
+     */
     /* file1 */
     status = H5Lcreate_external(fname2, "/grp11", gid10_f1, "elink_grp_circle", H5P_DEFAULT, H5P_DEFAULT);
     if (status < 0)
@@ -2616,7 +2731,7 @@ out:
 
 /*-------------------------------------------------------------------------
 *
-* Purpose: 
+* Purpose:
 *   For testing comparing group member objects recursively via multiple
 *   linked external links
 *
@@ -2631,18 +2746,15 @@ static int test_group_recurse2(void)
     hid_t       grp1=0, grp2;
     hid_t       grp3=0;
     hid_t       grp4=0;
-    hid_t       tid;
     hid_t       dset1, dset2;
     hid_t       datatype, dataspace;   /* handles */
     hid_t       fileid2;
     hid_t       fileid3;
     hid_t       fileid4;
-    hid_t       fileid4_1;
     hsize_t     dimsf[2];              /* dataset dimensions */
     herr_t      status=0;
     int data1[4][2] = {{0,0},{1,1},{2,2},{3,3}};
     int data2[4][2] = {{0,0},{0,1},{0,2},{3,3}};
-    int         i, j;
 
    /*-----------------------------------------------------------------------
     * FILE 1
@@ -2784,7 +2896,7 @@ static int test_group_recurse2(void)
     fileid4 = H5Fcreate(GRP_RECURSE2_EXT3, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
 
    /*-----------------------------------------------
-    * Groups 
+    * Groups
     */
     grp4 = H5Gcreate2(fileid4, "/g4", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
     if (grp4 < 0)
@@ -2821,7 +2933,7 @@ static int test_group_recurse2(void)
     fileid3 = H5Fcreate(GRP_RECURSE2_EXT2, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
 
    /*-----------------------------------------------
-    * Groups 
+    * Groups
     */
     grp2 = H5Gcreate2(fileid3, "g2", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
     if (grp2 < 0)
@@ -2877,7 +2989,7 @@ static int test_group_recurse2(void)
     fileid2 = H5Fcreate(GRP_RECURSE2_EXT1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
 
    /*-----------------------------------------------
-    * Groups 
+    * Groups
     */
     grp1 = H5Gcreate2(fileid2, "g1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
     if (grp1 < 0)
@@ -3006,7 +3118,7 @@ static int test_exclude_obj1(const char *fname1, const char *fname2)
 
 
     /*-----------------------------------------------------------------------
-    * Datasets 
+    * Datasets
     *------------------------------------------------------------------------*/
     /* file1 */
     status = write_dset(fid1,2,dims2,"dset1",H5T_NATIVE_INT,data1);
@@ -3080,7 +3192,7 @@ out:
 *
 * Purpose: Create test files for excluding obj.
 *          different structure and name
-* Test : exclude different objs to verify the rest are same 
+* Test : exclude different objs to verify the rest are same
 *
 * Programmer: Jonathan Kim (July, 21, 2010)
 *
@@ -3151,7 +3263,7 @@ static int test_exclude_obj2(const char *fname1, const char *fname2)
 
 
     /*-----------------------------------------------------------------------
-    * Datasets 
+    * Datasets
     *------------------------------------------------------------------------*/
     /* file1 */
     status = write_dset(fid1,2,dims2,"dset10",H5T_NATIVE_INT,data1);
@@ -3226,7 +3338,7 @@ out:
 /*-------------------------------------------------------------------------
 *
 * Purpose: Create test files for multiple variable length string/string array
-*          along with fixed length string/string array types in 
+*          along with fixed length string/string array types in
 *          a compound type dataset.
 *
 * Programmer: Jonathan Kim (Oct, 26, 2010)
@@ -3241,11 +3353,12 @@ out:
 #define FIXLEN_STR_ARRY_SIZE 30
 #define COMP_RANK 1
 #define COMP_DIM 1
-static int test_comp_vlen_strings(const char *fname1)
+static int test_comp_vlen_strings(const char *fname1, const char *grp_name, int is_file_new)
 {
     int i;
 
     hid_t    fid1;      /* file id */
+    hid_t    gid;
 
     /* compound1 datatype */
     typedef struct comp1_t
@@ -3411,8 +3524,8 @@ static int test_comp_vlen_strings(const char *fname1)
     /* objref */
     hsize_t    objref_dims[1]={1};
 
-    /*------------------------------------------ 
-     * compound dataset 
+    /*------------------------------------------
+     * compound dataset
      *------------------------------------------*/
     hid_t    sid_comp=0;      /* dataspace ID */
     hid_t    tid1_comp=0;      /* datatype ID */
@@ -3536,10 +3649,34 @@ static int test_comp_vlen_strings(const char *fname1)
     /*-----------------------------------------------------------------------
     * Create file(s)
     *------------------------------------------------------------------------*/
-    fid1 = H5Fcreate (fname1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
-    if (fid1 < 0)
+    if (is_file_new == 1)
     {
-        fprintf(stderr, "Error: %s> H5Fcreate failed.\n", fname1);
+        fid1 = H5Fcreate (fname1, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+        if (fid1 < 0)
+        {
+            fprintf(stderr, "Error: %s> H5Fcreate failed.\n", fname1);
+            status = FAIL;
+            goto out;
+        }
+    }
+    else
+    {
+        fid1 = H5Fopen (fname1, H5F_ACC_RDWR, H5P_DEFAULT);
+        if (fid1 < 0)
+        {
+            fprintf(stderr, "Error: %s> H5Fopen failed.\n", fname1);
+            status = FAIL;
+            goto out;
+        }
+    }
+
+    /*-----------------------------------------------------------------------
+    * Create group
+    *------------------------------------------------------------------------*/
+    gid = H5Gcreate2(fid1, grp_name, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    if (gid < 0)
+    {
+        fprintf(stderr, "Error: %s> H5Gcreate2 failed.\n", fname1);
         status = FAIL;
         goto out;
     }
@@ -3759,7 +3896,7 @@ static int test_comp_vlen_strings(const char *fname1)
 
 
     /* Write data to compound 1 dataset buffer */
-    did_comp = H5Dcreate2(fid1, "Compound_dset1", tid1_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    did_comp = H5Dcreate2(gid, "Compound_dset1", tid1_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
     status = H5Dwrite(did_comp, tid1_comp, H5S_ALL, H5S_ALL, H5P_DEFAULT, &comp1_buf);
     if (status < 0)
     {
@@ -3770,89 +3907,89 @@ static int test_comp_vlen_strings(const char *fname1)
     H5Dclose(did_comp);
 
     /* Write data to compound 2 dataset buffer */
-    did_comp = H5Dcreate2(fid1, "Compound_dset2", tid2_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    did_comp = H5Dcreate2(gid, "Compound_dset2", tid2_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
     status = H5Dwrite(did_comp, tid2_comp, H5S_ALL, H5S_ALL, H5P_DEFAULT, &comp2_buf);
     if (status < 0)
     {
         fprintf(stderr, "Error: %s> H5Dwrite failed.\n", fname1);
         status = FAIL;
         goto out;
-    } 
+    }
     H5Dclose(did_comp);
 
     /* Write data to compound 3 dataset buffer */
-    did_comp = H5Dcreate2(fid1, "Compound_dset3", tid3_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    did_comp = H5Dcreate2(gid, "Compound_dset3", tid3_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
     status = H5Dwrite(did_comp, tid3_comp, H5S_ALL, H5S_ALL, H5P_DEFAULT, &comp3_buf);
     if (status < 0)
     {
         fprintf(stderr, "Error: %s> H5Dwrite failed.\n", fname1);
         status = FAIL;
         goto out;
-    } 
+    }
     H5Dclose(did_comp);
 
     /* Write data to compound 4 dataset buffer */
-    did_comp = H5Dcreate2(fid1, "Compound_dset4", tid4_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    did_comp = H5Dcreate2(gid, "Compound_dset4", tid4_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
     status = H5Dwrite(did_comp, tid4_comp, H5S_ALL, H5S_ALL, H5P_DEFAULT, &comp4_buf);
     if (status < 0)
     {
         fprintf(stderr, "Error: %s> H5Dwrite failed.\n", fname1);
         status = FAIL;
         goto out;
-    } 
+    }
     H5Dclose(did_comp);
 
     /* Write data to compound 5 dataset buffer */
-    did_comp = H5Dcreate2(fid1, "Compound_dset5", tid5_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    did_comp = H5Dcreate2(gid, "Compound_dset5", tid5_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
     status = H5Dwrite(did_comp, tid5_comp, H5S_ALL, H5S_ALL, H5P_DEFAULT, &comp5_buf);
     if (status < 0)
     {
         fprintf(stderr, "Error: %s> H5Dwrite failed.\n", fname1);
         status = FAIL;
         goto out;
-    } 
+    }
     H5Dclose(did_comp);
 
     /* Write data to compound 6 dataset buffer */
-    did_comp = H5Dcreate2(fid1, "Compound_dset6", tid6_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    did_comp = H5Dcreate2(gid, "Compound_dset6", tid6_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
     status = H5Dwrite(did_comp, tid6_comp, H5S_ALL, H5S_ALL, H5P_DEFAULT, &comp6_buf);
     if (status < 0)
     {
         fprintf(stderr, "Error: %s> H5Dwrite failed.\n", fname1);
         status = FAIL;
         goto out;
-    } 
+    }
     H5Dclose(did_comp);
 
     /* Write data to compound 7 dataset buffer */
-    did_comp = H5Dcreate2(fid1, "Compound_dset7", tid7_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    did_comp = H5Dcreate2(gid, "Compound_dset7", tid7_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
     status = H5Dwrite(did_comp, tid7_comp, H5S_ALL, H5S_ALL, H5P_DEFAULT, &comp7_buf);
     if (status < 0)
     {
         fprintf(stderr, "Error: %s> H5Dwrite failed.\n", fname1);
         status = FAIL;
         goto out;
-    } 
+    }
     H5Dclose(did_comp);
 
     /* Write data to compound 8 dataset buffer */
-    did_comp = H5Dcreate2(fid1, "Compound_dset8", tid8_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    did_comp = H5Dcreate2(gid, "Compound_dset8", tid8_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
     status = H5Dwrite(did_comp, tid8_comp, H5S_ALL, H5S_ALL, H5P_DEFAULT, &comp8_buf);
     if (status < 0)
     {
         fprintf(stderr, "Error: %s> H5Dwrite failed.\n", fname1);
         status = FAIL;
         goto out;
-    } 
+    }
     H5Dclose(did_comp);
 
     /* Write data to compound 9 dataset buffer */
-    did_comp = H5Dcreate2(fid1, "Compound_dset9", tid9_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    did_comp = H5Dcreate2(gid, "Compound_dset9", tid9_comp, sid_comp, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
 
     /* obj references */
-    status=H5Rcreate(&(comp9_buf.objref1),fid1,"/Compound_dset2",H5R_OBJECT,-1);
-    status=H5Rcreate(&(comp9_buf.objref2),fid1,"/Compound_dset3",H5R_OBJECT,-1);
-    status=H5Rcreate(&(comp9_buf.objref3),fid1,"/Compound_dset4",H5R_OBJECT,-1);
+    status=H5Rcreate(&(comp9_buf.objref1),gid,"Compound_dset2",H5R_OBJECT,-1);
+    status=H5Rcreate(&(comp9_buf.objref2),gid,"Compound_dset3",H5R_OBJECT,-1);
+    status=H5Rcreate(&(comp9_buf.objref3),gid,"Compound_dset4",H5R_OBJECT,-1);
 
     status = H5Dwrite(did_comp, tid9_comp, H5S_ALL, H5S_ALL, H5P_DEFAULT, &comp9_buf);
     if (status < 0)
@@ -3860,7 +3997,7 @@ static int test_comp_vlen_strings(const char *fname1)
         fprintf(stderr, "Error: %s> H5Dwrite failed.\n", fname1);
         status = FAIL;
         goto out;
-    } 
+    }
 
 
     H5Dclose(did_comp);
@@ -3872,6 +4009,8 @@ out:
     *-----------------------------------------------------------------------*/
     if(fid1)
         H5Fclose(fid1);
+    if(gid)
+        H5Gclose(gid);
     /* vlen string */
     if(tid_vlen_str)
         H5Tclose(tid_vlen_str);
@@ -3923,6 +4062,836 @@ out:
     return status;
 }
 
+
+/*-------------------------------------------------------------------------
+*
+* Purpose: Test diffs of enum values which may include invalid values.
+*
+* Programmer: Dana Robinson
+*
+*-------------------------------------------------------------------------*/
+
+static int
+test_enums(const char *fname)
+{
+    hid_t       fid  = -1;
+
+    hid_t       tid       = -1;
+    int         enum_val  = -1;
+
+    /* The data in the two arrays cover the following cases:
+     *
+     *   V = valid enum value, I = invalid enum value
+     *
+     *   0:  I-I (same value)
+     *   1:  V-I
+     *   2:  I-V
+     *   3:  V-V (same value)
+     *   4:  I-I (different values) SKIPPED FOR NOW
+     *   5:  V-V (different values)
+     */
+    /* *** NOTE ***
+     *
+     * There is a bug in H5Dread() where invalid enum values are always
+     * returned as -1 so two different invalid enum values cannot be
+     * properly compared.  Test 4 has been adjusted to pass here
+     * while we fix the issue.
+     */
+    int         data1[6] = {9, 0, 9, 0, 9, 0};
+    /*int         data1[6] = {9, 0, 9, 0, 8, 0};  */
+    int         data2[6] = {9, 9, 0, 0, 9, 1};
+
+    hsize_t     dims = 6;
+
+    herr_t      status = SUCCEED;
+
+    /*-----------------------------------------------------------------------
+     * Create the file
+     *---------------------------------------------------------------------*/
+
+    fid = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+
+    /*-----------------------------------------------------------------------
+     * Create enum types
+     *---------------------------------------------------------------------*/
+
+    tid = H5Tenum_create(H5T_NATIVE_INT);
+    enum_val = 0;
+    status = H5Tenum_insert(tid, "YIN", &enum_val);
+    enum_val = 1;
+    status = H5Tenum_insert(tid, "YANG", &enum_val);
+
+    /*-----------------------------------------------------------------------
+     * Create datasets containing enum data.
+     *---------------------------------------------------------------------*/
+
+    status = write_dset(fid, 1, &dims, "dset1", tid, data1);
+    status = write_dset(fid, 1, &dims, "dset2", tid, data2);
+
+out:
+    /*-----------------------------------------------------------------------
+     * Close
+     *---------------------------------------------------------------------*/
+    if(fid)
+        H5Fclose(fid);
+    if(tid)
+        H5Tclose(tid);
+
+    return status;
+}
+
+/*-------------------------------------------------------------------------
+*
+* Purpose: 
+*   Create test files with dataset and attribute with container types 
+*   (array, vlen) with multiple nested compound types.
+*
+* Function: test_comps_array()
+*  - type: compound->array->compound
+*
+* Function: test_comps_vlen()
+*  - type: compound->vlen->compound
+*
+* Function: test_comps_array_vlen()
+*  - type: compound->array->compound->vlen->compound
+*
+* Function: test_comps_vlen_arry()
+*  - type: compound->vlen->compound->array->compound
+*
+* Programmer: Jonathan Kim (Sep, 1, 2011)
+*
+*-------------------------------------------------------------------------*/
+#define SDIM_DSET 2
+#define SDIM_CMPD_ARRAY 2
+
+static void test_comps_array (const char *fname, const char *dset, const char *attr,int diff, int is_file_new)
+{
+    /* sub compound 2 */
+    typedef struct {        
+        int i2;
+        float f2;
+    } cmpd2_t;
+
+    /* top compound 1 */
+    typedef struct {
+        int i1;
+        cmpd2_t cmpd2[SDIM_CMPD_ARRAY];
+    } cmpd1_t;
+
+    cmpd1_t wdata[SDIM_DSET];   /* dataset with compound1 */
+
+    hid_t  fid;  /* HDF5 File IDs  */
+    hid_t  did_dset; /* Dataset ID   */
+    hid_t  sid_dset;       /* Dataset space ID   */
+    hid_t  tid_cmpd1;       /* Compound1 type ID   */
+    hid_t  tid_arry1;       /* Array type ID in compound1   */
+    hid_t  tid_cmpd2;       /* Compound2 type ID   */
+    hid_t  tid_attr;
+    hsize_t  sdims_dset[] = {SDIM_DSET};
+    hsize_t  sdims_cmpd_arry[] = {SDIM_CMPD_ARRAY};
+    int     i,j;       
+    herr_t  ret;  /* Generic return value  */
+
+    /* Initialize array data to write */
+    for(i=0; i < SDIM_DSET; i++)
+    {
+        wdata[i].i1 = i;
+        for(j=0; j < SDIM_CMPD_ARRAY; j++) 
+        {
+            wdata[i].cmpd2[j].i2 = i*10 + diff;
+            wdata[i].cmpd2[j].f2 = (float)(i*10.5) + diff;
+        } /* end for */
+    }
+
+   /*-----------------------------------------------------------------------
+    * Create file(s)
+    *------------------------------------------------------------------------*/
+    if (is_file_new == 1)
+        fid = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    else
+        fid = H5Fopen (fname, H5F_ACC_RDWR, H5P_DEFAULT);
+
+
+    /* -------------------------------
+     * Create a sub compound2 datatype  */
+    tid_cmpd2 = H5Tcreate(H5T_COMPOUND, sizeof(cmpd2_t));
+
+    /* Insert integer field */
+    ret = H5Tinsert(tid_cmpd2, "int2", HOFFSET(cmpd2_t, i2), H5T_NATIVE_INT);
+    assert(ret >= 0);
+
+    /* Insert float field */
+    ret = H5Tinsert(tid_cmpd2, "float2", HOFFSET(cmpd2_t, f2), H5T_NATIVE_FLOAT);
+    assert(ret >= 0);
+
+    /*-----------------------------------
+     * Create a top compound1.
+     */
+    tid_cmpd1 = H5Tcreate (H5T_COMPOUND, sizeof(cmpd1_t));
+
+    ret = H5Tinsert(tid_cmpd1, "int1", HOFFSET(cmpd1_t, i1), H5T_NATIVE_INT);
+    assert(ret >= 0);
+
+    /* Create an array datatype */
+    tid_arry1 = H5Tarray_create2(tid_cmpd2, 1, sdims_cmpd_arry);
+    /* insert the array */
+    ret = H5Tinsert(tid_cmpd1, "array_cmpd1", HOFFSET(cmpd1_t, cmpd2), tid_arry1);
+    assert(ret >= 0);
+
+
+    /* -------------------
+     * Create a dataset 
+     */
+    /* Create dataspace for datasets */
+    sid_dset = H5Screate_simple(1, sdims_dset, NULL);
+
+    did_dset = H5Dcreate2(fid, dset, tid_cmpd1, sid_dset, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Write dataset to disk */
+    ret = H5Dwrite(did_dset, tid_cmpd1, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
+    assert(ret >= 0);
+
+    /*-----------------------------------
+     * Create an attribute in root group
+     */
+    tid_attr = H5Acreate2(fid, attr, tid_cmpd1, sid_dset, H5P_DEFAULT, H5P_DEFAULT);
+    ret = H5Awrite(tid_attr, tid_cmpd1, wdata);
+    assert(ret >= 0);
+
+    /* ----------------
+     * Close Dataset */
+    ret = H5Aclose(tid_attr);
+    assert(ret >= 0);
+    ret = H5Tclose(tid_arry1);
+    assert(ret >= 0);
+    ret = H5Dclose(did_dset);
+    assert(ret >= 0);
+    ret = H5Tclose(tid_cmpd1);
+    assert(ret >= 0);
+    ret = H5Tclose(tid_cmpd2);
+    assert(ret >= 0);
+    ret = H5Sclose(sid_dset);
+    assert(ret >= 0);
+    ret = H5Fclose(fid);
+    assert(ret >= 0);
+}
+
+
+
+static void test_comps_vlen (const char * fname, const char *dset, const char *attr, int diff, int is_file_new)
+{
+    /* sub compound 2 */
+    typedef struct {       
+        int i2;
+        float f2;
+    } cmpd2_t;
+
+    /* top compound 1 */
+    typedef struct { 
+        int i1;
+        hvl_t vl;   /* VL information for compound2 */
+    } cmpd1_t;
+
+    cmpd1_t wdata[SDIM_DSET];   /* Dataset for compound1 */ 
+
+    hid_t  fid;  /* HDF5 File ID */
+    hid_t  did_dset; /* dataset ID   */
+    hid_t  sid_dset;  /* dataset space ID */
+    hid_t  tid_cmpd2; /* compound2 type ID */
+    hid_t  tid_cmpd1; /* compound1 type ID */
+    hid_t  tid_cmpd1_vlen;
+    hsize_t  sdims_dset[] = {SDIM_DSET};
+
+    unsigned       i,j;        /* counting variables */
+    herr_t  ret;  /* Generic return value  */
+
+    /* Allocate and initialize VL data to write */
+    for(i=0; i<SDIM_DSET; i++)
+    {
+        wdata[i].i1 = i;
+        wdata[i].vl.p = malloc((i+1)*sizeof(cmpd2_t));
+        wdata[i].vl.len = i+1;
+        for(j=0; j<(i+1); j++)
+        {
+            ((cmpd2_t *)wdata[i].vl.p)[j].i2 = i*10 + diff;
+            ((cmpd2_t *)wdata[i].vl.p)[j].f2 = (float)(i*10.5) + diff;
+        } /* end for */
+    } /* end for */
+
+    /*-----------------------------------------------------------------------
+     * Create file(s)
+     *------------------------------------------------------------------------*/
+    if (is_file_new == 1)
+        fid = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    else
+        fid = H5Fopen (fname, H5F_ACC_RDWR, H5P_DEFAULT);
+
+    /* -----------------------------
+     * Create sub compound2 type */
+    tid_cmpd2 = H5Tcreate(H5T_COMPOUND, sizeof(cmpd2_t));
+
+    /* Insert fields */
+    ret = H5Tinsert(tid_cmpd2, "int2", HOFFSET(cmpd2_t, i2), H5T_NATIVE_INT);
+    assert(ret >= 0);
+    ret = H5Tinsert(tid_cmpd2, "float2", HOFFSET(cmpd2_t, f2), H5T_NATIVE_FLOAT);
+    assert(ret >= 0);
+
+    /* ---------------------------
+     * Create top compound1 type */
+    tid_cmpd1 = H5Tcreate(H5T_COMPOUND, sizeof(cmpd1_t));
+    /* Insert fields */
+    ret = H5Tinsert(tid_cmpd1, "int1", HOFFSET(cmpd1_t, i1), H5T_NATIVE_INT);
+    assert(ret >= 0);
+    /* Create a VL datatype */
+    tid_cmpd1_vlen = H5Tvlen_create(tid_cmpd2);
+
+    ret = H5Tinsert(tid_cmpd1, "vlen_cmpd1", HOFFSET(cmpd1_t, vl), tid_cmpd1_vlen);
+    assert(ret >= 0);
+
+    /* -------------------------------
+     * Create dataset with compound1 
+     */
+    /* Create dataspace for dataset */
+    sid_dset = H5Screate_simple(1, sdims_dset, NULL);
+
+    /* Create a dataset */
+    did_dset = H5Dcreate2(fid, dset, tid_cmpd1, sid_dset, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Write dataset to disk */
+    ret = H5Dwrite(did_dset, tid_cmpd1, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
+    assert(ret >= 0);
+
+    /* Reclaim the write VL data */
+    ret = H5Dvlen_reclaim(tid_cmpd1, sid_dset, H5P_DEFAULT, wdata);
+    assert(ret >= 0);
+
+    /*-----------------------------------
+     * Create an attribute in root group
+     */
+    /* TODO: creating vlen with compound type doesn't work for attribute now. 
+     * so add this later when it's fixed 
+    tid_attr = H5Acreate2(fid, attr, tid_cmpd1, sid_dset, H5P_DEFAULT, H5P_DEFAULT);
+    ret = H5Awrite(tid_attr, tid_cmpd1, wdata);
+    assert(ret >= 0);
+    */
+
+    /* ----------------
+     * Close IDs */
+    ret = H5Dclose(did_dset);
+    assert(ret >= 0);
+    ret = H5Tclose(tid_cmpd2);
+    assert(ret >= 0);
+    ret = H5Tclose(tid_cmpd1);
+    assert(ret >= 0);
+    ret = H5Sclose(sid_dset);
+    assert(ret >= 0);
+    ret = H5Tclose(tid_cmpd1_vlen);
+    assert(ret >= 0);
+    ret = H5Fclose(fid);
+    assert(ret >= 0);
+}
+
+
+static void test_comps_array_vlen (const char * fname, const char *dset,const char *attr, int diff, int is_file_new)
+{
+    typedef struct {       
+        int i3;
+        float f3;
+    } cmpd3_t;
+ 
+    typedef struct {        /* Typedef for compound datatype */
+        int i2;
+        hvl_t vl;   /* VL information to write */
+    } cmpd2_t;
+
+    typedef struct {
+        int i1;
+        cmpd2_t cmpd2[SDIM_CMPD_ARRAY];
+    } cmpd1_t;
+
+    cmpd1_t wdata[SDIM_DSET];   /* Information to write */
+    hid_t  fid;  /* HDF5 File IDs  */
+    hid_t  did_dset; /* Dataset ID   */
+    hid_t  sid_dset;       /* Dataspace ID   */
+    hid_t  tid_cmpd1;       /* Compound1 Datatype ID   */
+    hid_t  tid_arry1;       /* Array Datatype ID   */
+    hid_t  tid_cmpd2;       /* Compound2 Datatype ID   */
+    hid_t  tid_cmpd2_vlen;
+    hid_t  tid_cmpd3;       /* Compound3 Datatype ID   */
+    hsize_t  sdims_dset[] = {SDIM_DSET};
+    hsize_t  sdims_arry[] = {SDIM_CMPD_ARRAY};
+    int        i,j,k;        /* counting variables */
+    herr_t  ret;  /* Generic return value  */
+
+
+
+    /* Initialize array data to write in compound1 */
+    for(i=0; i < SDIM_DSET; i++)
+    {
+        wdata[i].i1 = i;
+        /* Allocate and initialize VL data to write in compound2 */
+        for(j=0; j < SDIM_CMPD_ARRAY; j++) 
+        {
+            wdata[i].cmpd2[j].i2 = j*10;
+            wdata[i].cmpd2[j].vl.p = malloc((j+1)*sizeof(cmpd3_t));
+            wdata[i].cmpd2[j].vl.len = j+1;
+            for(k=0; k<(j+1); k++) 
+            {
+                /* Initialize data of compound3 */
+                ((cmpd3_t *)wdata[i].cmpd2[j].vl.p)[k].i3 = j*10 + diff;
+                ((cmpd3_t *)wdata[i].cmpd2[j].vl.p)[k].f3 = (float)(j*10.5) + diff;
+            } /* end for */
+        } /* end for */
+    }
+
+    /*-----------------------------------------------------------------------
+     * Create file(s)
+     *------------------------------------------------------------------------*/
+    if (is_file_new == 1)
+        fid = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    else
+        fid = H5Fopen (fname, H5F_ACC_RDWR, H5P_DEFAULT);
+
+    /* Create dataspace for datasets */
+    sid_dset = H5Screate_simple(1, sdims_dset, NULL);
+
+    /*-------------------------------------
+     * Create a sub compound3 datatype  */
+    tid_cmpd3 = H5Tcreate(H5T_COMPOUND, sizeof(cmpd3_t));
+
+    /* Insert integer field */
+    ret = H5Tinsert(tid_cmpd3, "int", HOFFSET(cmpd3_t, i3), H5T_NATIVE_INT);
+    assert(ret >= 0);
+
+    /* Insert float field */
+    ret = H5Tinsert(tid_cmpd3, "float", HOFFSET(cmpd3_t, f3), H5T_NATIVE_FLOAT);
+    assert(ret >= 0);
+
+
+    /*-------------------------------------
+     * Create a sub compound2 datatype  */
+    tid_cmpd2 = H5Tcreate(H5T_COMPOUND, sizeof(cmpd2_t));
+
+    /* Insert integer field */
+    ret = H5Tinsert(tid_cmpd2, "int", HOFFSET(cmpd2_t, i2), H5T_NATIVE_INT);
+    assert(ret >= 0);
+    /* Create a VL datatype */
+    tid_cmpd2_vlen = H5Tvlen_create(tid_cmpd3);
+    ret = H5Tinsert(tid_cmpd2, "vlen", HOFFSET(cmpd2_t, vl), tid_cmpd2_vlen);
+    assert(ret >= 0);
+
+
+    /*-----------------------------------
+     * Create a top compound1 datatype for dataset.
+     */
+    tid_cmpd1 = H5Tcreate (H5T_COMPOUND, sizeof(cmpd1_t));
+
+    /* Create an array datatype */
+    tid_arry1 = H5Tarray_create2(tid_cmpd2, 1, sdims_arry);
+    /* insert the array */
+    H5Tinsert(tid_cmpd1, "array_comp", HOFFSET(cmpd1_t, cmpd2), tid_arry1);
+
+
+    /* ----------------------
+     * Create a dataset */
+    did_dset = H5Dcreate2(fid, dset, tid_cmpd1, sid_dset, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Write dataset to disk */
+    ret = H5Dwrite(did_dset, tid_cmpd1, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
+    assert(ret >= 0);
+
+    /* Reclaim the write VL data */
+    ret = H5Dvlen_reclaim(tid_cmpd1, sid_dset, H5P_DEFAULT, wdata);
+    assert(ret >= 0);
+
+    /*-----------------------------------
+     * Create an attribute in root group
+     */
+    /* TODO: creating vlen with compound type doesn't work for attribute now. 
+     * so add this later when it's fixed
+    tid_attr = H5Acreate2(fid, attr, tid_cmpd1, sid_dset, H5P_DEFAULT, H5P_DEFAULT);
+    ret = H5Awrite(tid_attr, tid_cmpd1, wdata);
+    assert(ret >= 0);
+    */
+
+    /*-------------------
+     * Close IDs */
+    ret = H5Tclose(tid_arry1);
+    assert(ret >= 0);
+    ret = H5Dclose(did_dset);
+    assert(ret >= 0);
+    ret = H5Sclose(sid_dset);
+    assert(ret >= 0);
+    ret = H5Tclose(tid_cmpd3);
+    assert(ret >= 0);
+    ret = H5Tclose(tid_cmpd2);
+    assert(ret >= 0);
+    ret = H5Tclose(tid_cmpd2_vlen);
+    assert(ret >= 0);
+    ret = H5Tclose(tid_cmpd1);
+    assert(ret >= 0);
+    ret = H5Fclose(fid);
+    assert(ret >= 0);
+}
+
+
+static void test_comps_vlen_arry (const char * fname, const char *dset, const char *attr, int diff, int is_file_new)
+{
+    /* sub compound 3 */
+    typedef struct {       
+        int i3;
+        float f3;
+    } cmpd3_t;
+
+    /* sub compound 2 */
+    typedef struct {       
+        int i2;
+        cmpd3_t cmpd3[SDIM_CMPD_ARRAY];
+    } cmpd2_t;
+
+    /* top compound 1 */
+    typedef struct { 
+        int i1;
+        hvl_t vl;   /* VL information for compound2 */
+    } cmpd1_t;
+
+    cmpd1_t wdata[SDIM_DSET];   /* Dataset for compound1 */
+
+    hid_t  fid;  /* HDF5 File ID */
+    hid_t  did_dset; /* dataset ID   */
+    hid_t  sid_dset;  /* dataset space ID */
+    hid_t  tid_cmpd3; /* compound3 type ID */
+    hid_t  tid_cmpd2; /* compound2 type ID */
+    hid_t  tid_cmpd2_arry;
+    hid_t  tid_cmpd1; /* compound1 type ID */
+    hid_t  tid_cmpd1_vlen;
+    hsize_t  sdims_dset[] = {SDIM_DSET};
+    hsize_t  sdims_cmpd_arry[] = {SDIM_CMPD_ARRAY};
+
+    unsigned       i,j,k;        /* counting variables */
+    herr_t  ret;  /* Generic return value  */
+
+    /* Allocate and initialize VL data to write */
+    for(i=0; i<SDIM_DSET; i++)
+    {
+        /* compound 1 data */
+        wdata[i].i1 = i;
+        wdata[i].vl.p = malloc((i+1)*sizeof(cmpd2_t));
+        wdata[i].vl.len = i+1;
+        for(j=0; j<(i+1); j++)
+        {
+            /* compound2 data */
+            ((cmpd2_t *)wdata[i].vl.p)[j].i2 = i*10 + diff;
+            for (k=0; k < SDIM_CMPD_ARRAY; k++)
+            {
+                /* compound 3 data */
+                ((cmpd2_t *)(wdata[i].vl.p))[j].cmpd3[k].i3 = k*10.5 + diff;
+                ((cmpd2_t *)(wdata[i].vl.p))[j].cmpd3[k].f3 = (float)(k*10.5) + diff;
+            }
+        } /* end for */
+    } /* end for */
+
+    /*-----------------------------------------------------------------------
+     * Create file(s)
+     *------------------------------------------------------------------------*/
+    if (is_file_new == 1)
+        fid = H5Fcreate(fname, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    else
+        fid = H5Fopen (fname, H5F_ACC_RDWR, H5P_DEFAULT);
+
+    /* -----------------------------
+     * Create sub compound3 type */
+    tid_cmpd3 = H5Tcreate(H5T_COMPOUND, sizeof(cmpd3_t));
+
+    /* Insert fields */
+    ret = H5Tinsert(tid_cmpd3, "int3", HOFFSET(cmpd3_t, i3), H5T_NATIVE_INT);
+    assert(ret >= 0);
+    ret = H5Tinsert(tid_cmpd3, "float3", HOFFSET(cmpd3_t, f3), H5T_NATIVE_FLOAT);
+    assert(ret >= 0);
+
+    /* -----------------------------
+     * Create sub compound2 type */
+    tid_cmpd2 = H5Tcreate(H5T_COMPOUND, sizeof(cmpd2_t));
+
+    ret = H5Tinsert(tid_cmpd2, "int2", HOFFSET(cmpd2_t, i2), H5T_NATIVE_INT);
+    assert(ret >= 0);
+
+    tid_cmpd2_arry = H5Tarray_create2(tid_cmpd3, 1, sdims_cmpd_arry);
+    ret = H5Tinsert(tid_cmpd2, "array_cmpd2", HOFFSET(cmpd2_t, cmpd3), tid_cmpd2_arry);
+    assert(ret >= 0);
+
+    /* ---------------------------
+     * Create top compound1 type
+     */
+    /* Create a VL datatype */
+    tid_cmpd1 = H5Tcreate(H5T_COMPOUND, sizeof(cmpd1_t));
+    /* Insert fields */
+    ret = H5Tinsert(tid_cmpd1, "int1", HOFFSET(cmpd1_t, i1), H5T_NATIVE_INT);
+    assert(ret >= 0);
+    tid_cmpd1_vlen = H5Tvlen_create(tid_cmpd2);
+    ret = H5Tinsert(tid_cmpd1, "vlen_cmpd1", HOFFSET(cmpd1_t, vl), tid_cmpd1_vlen);
+    assert(ret >= 0);
+
+    /* -------------------------------
+     * Create dataset with compound1 
+     */
+    /* Create dataspace for dataset */
+    sid_dset = H5Screate_simple(1, sdims_dset, NULL);
+
+    /* Create a dataset */
+    did_dset = H5Dcreate2(fid, dset, tid_cmpd1, sid_dset, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+
+    /* Write dataset to disk */
+    ret = H5Dwrite(did_dset, tid_cmpd1, H5S_ALL, H5S_ALL, H5P_DEFAULT, wdata);
+    assert(ret >= 0);
+
+    /* Reclaim the write VL data */
+    ret = H5Dvlen_reclaim(tid_cmpd1, sid_dset, H5P_DEFAULT, wdata);
+    assert(ret >= 0);
+
+    /*-----------------------------------
+     * Create an attribute in root group
+     */
+    /* TODO: creating vlen with compound type doesn't work for attribute now.
+     * so add this later when it's fixed
+    tid_attr = H5Acreate2(fid, attr, tid_cmpd1, sid_dset, H5P_DEFAULT, H5P_DEFAULT);
+    ret = H5Awrite(tid_attr, tid_cmpd1, wdata);
+    assert(ret >= 0);
+    */
+
+    /* ----------------
+     * Close IDs */
+    ret = H5Dclose(did_dset);
+    assert(ret >= 0);
+    ret = H5Sclose(sid_dset);
+    assert(ret >= 0);
+    ret = H5Tclose(tid_cmpd3);
+    assert(ret >= 0);
+    ret = H5Tclose(tid_cmpd2_arry);
+    assert(ret >= 0);
+    ret = H5Tclose(tid_cmpd2);
+    assert(ret >= 0);
+    ret = H5Tclose(tid_cmpd1_vlen);
+    assert(ret >= 0);
+    ret = H5Tclose(tid_cmpd1);
+    assert(ret >= 0);
+    ret = H5Fclose(fid);
+    assert(ret >= 0);
+}
+
+
+/*-------------------------------------------------------------------------
+* Function: test_non_comparables
+*
+* Purpose: 
+*   Create test files with non-comparable dataset and attributes with 
+*   comparable datasets and attributes.  All the comparables should display 
+*   differences.
+*
+*-------------------------------------------------------------------------*/
+#define DIM_ARRY 3
+static void test_non_comparables (const char * fname, int make_diffs)
+{
+    hid_t   fid=0;
+    hid_t   gid1=0;
+    hid_t   gid2=0;
+    hid_t   did1=0;
+    hid_t   did2=0;
+    hid_t   sid1=0;
+    hid_t   tid_dset1=0;
+    hid_t   tid_attr1=0;
+    hsize_t dims1_1[1] = {DIM_ARRY};
+    hsize_t dims1_2[1] = {DIM_ARRY+1};
+    hsize_t dims2[2] = {DIM_ARRY, 1};
+    int data1[DIM_ARRY] = {0,0,0};
+    int data2[DIM_ARRY] = {1,1,1};
+    int data3[DIM_ARRY+1] = {1,1,1,1};
+    int data1_dim2[DIM_ARRY][1] = {0,0,0};
+    int rank_attr;
+    char data1_str[DIM_ARRY][STR_SIZE]= {"ab","cd","ef"};
+    herr_t  status = SUCCEED;
+    int i;
+    void *dset_data_ptr1=NULL;
+    void *dset_data_ptr2=NULL;
+    void *dset_data_ptr3=NULL;
+    void *attr_data_ptr1=NULL;
+    void *attr_data_ptr2=NULL;
+    void *attr_data_ptr3=NULL;
+    void *attr_data_ptr4=NULL;
+    void *attr2_dim_ptr=NULL;
+    void *attr3_dim_ptr=NULL;
+
+    /* init */
+    tid_dset1=H5Tcopy(H5T_NATIVE_INT);
+    dset_data_ptr1=(int*)&data1;
+    dset_data_ptr2=(int*)&data1;
+    dset_data_ptr3=(int*)&data1;
+    tid_attr1=H5Tcopy(H5T_NATIVE_INT);
+    attr_data_ptr1=(int*)&data1;
+    attr_data_ptr3=(int*)&data1;
+    attr_data_ptr4=(int*)&data1;
+    attr2_dim_ptr=(hsize_t*)&dims1_1;
+    attr3_dim_ptr=(hsize_t*)&dims1_1;
+    rank_attr=1;
+
+    if (make_diffs)
+    {
+        /* ------------
+         * group1 */
+        tid_dset1=H5Tcopy(H5T_C_S1);
+        H5Tset_size(tid_dset1, (size_t)STR_SIZE);
+        dset_data_ptr1=(char*)&data1_str;
+        dset_data_ptr2=(int*)&data2;
+        attr_data_ptr1=(int*)&data2;
+
+        /* ----------- 
+         * group2 
+         */
+        dset_data_ptr3=(int*)&data2;
+        /* dset1/attr1 */
+        tid_attr1=H5Tcopy(H5T_C_S1);
+        H5Tset_size(tid_attr1, (size_t)STR_SIZE);
+        attr_data_ptr2=(char*)&data1_str;
+
+        /* dset1/attr2 */
+        attr2_dim_ptr=(hsize_t*)&dims1_2;
+
+        /* dset1/attr3 */
+        attr_data_ptr3=(int*)&data1_dim2;
+        attr3_dim_ptr=(hsize_t*)&dims2;
+        rank_attr=2;
+
+        /* dset1/attr4 */
+        attr_data_ptr4=(int*)&data2;
+
+    }
+
+
+   /*-----------------------------------------------------------------------
+    * Create file(s)
+    *------------------------------------------------------------------------*/
+    fid = H5Fcreate (fname, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    if (fid < 0)
+    {
+        fprintf(stderr, "Error: %s> H5Fcreate failed.\n", fname);
+        status = FAIL;
+        goto out;
+    }
+
+    /*-----------------------------------------------------------------------
+    * Groups
+    *------------------------------------------------------------------------*/
+    gid1 = H5Gcreate2(fid, "g1", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    if (gid1 < 0)
+    {
+        fprintf(stderr, "Error: %s> H5Gcreate2 failed.\n", fname);
+        status = FAIL;
+        goto out;
+    }
+
+    gid2 = H5Gcreate2(fid, "g2", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+    if (gid2 < 0)
+    {
+        fprintf(stderr, "Error: %s> H5Gcreate2 failed.\n", fname);
+        status = FAIL;
+        goto out;
+    }
+
+    /*-----------------------------------------------------------------------
+    * Datasets in /g1
+    *------------------------------------------------------------------------*/
+    if((sid1 = H5Screate_simple(1, dims1_1, NULL)) < 0)
+         goto out;
+
+    /*  dset1 */
+    if((did1 = H5Dcreate2(gid1, "dset1", tid_dset1, sid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+    {
+        fprintf(stderr, "Error: %s> H5Dcreate2 failed.\n", "dset1");
+        status = FAIL;
+        goto out;
+    }
+
+    if(H5Dwrite(did1, tid_dset1, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset_data_ptr1) < 0)
+    {
+        fprintf(stderr, "Error: %s> H5Dwrite failed.\n", "dset1");
+        status = FAIL;
+        goto out;
+    }
+    write_attr(did1,1,dims1_1,"attr", H5T_NATIVE_INT, attr_data_ptr1);
+
+    /*  dset2 */
+    status = write_dset(gid1, 1, dims1_1,"dset2", H5T_NATIVE_INT, dset_data_ptr2);
+    if (status == FAIL)
+    {
+        fprintf(stderr, "Error: %s> write_dset failed\n", fname);
+        goto out;
+    }
+
+    /*-----------------------------------------------------------------------
+    * Datasets in /g2
+    *------------------------------------------------------------------------*/
+    /* ---------
+     *  dset1 */
+    if((did2 = H5Dcreate2(gid2, "dset1", H5T_NATIVE_INT, sid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+    {
+        fprintf(stderr, "Error: %s> H5Dcreate2 failed.\n", "dset1");
+        status = FAIL;
+        goto out;
+    }
+
+    if(H5Dwrite(did2, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, dset_data_ptr3) < 0)
+    {
+        fprintf(stderr, "Error: %s> H5Dwrite failed.\n", "dset1");
+        status = FAIL;
+        goto out;
+    }
+    /* attr1 - non-compatible : different type */
+    write_attr(did2,1,dims1_1,"attr1", tid_attr1, attr_data_ptr2);
+
+
+    /* attr2 - non-compatible : same rank, different dimention */
+    write_attr(did2,1, attr2_dim_ptr,"attr2", H5T_NATIVE_INT, data3);
+
+    /* attr3 - non-compatible : different rank */
+    write_attr(did2, rank_attr,attr3_dim_ptr,"attr3", H5T_NATIVE_INT, attr_data_ptr3);
+
+    /* attr4 - compatible : different data values */
+    write_attr(did2,1,dims1_1,"attr4", H5T_NATIVE_INT, attr_data_ptr4);
+
+    /*----------
+     * dset2 */
+    status = write_dset(gid2, 1, dims1_1,"dset2", H5T_NATIVE_INT, dset_data_ptr3);
+    if (status == FAIL)
+    {
+        fprintf(stderr, "Error: %s> write_dset failed\n", fname);
+        goto out;
+    }
+
+    
+
+out:
+    
+    /*-----------------------------------------------------------------------
+    * Close IDs
+    *-----------------------------------------------------------------------*/
+    if(fid)
+        H5Fclose(fid);
+    if(gid1)
+        H5Gclose(gid1);
+    if(gid2)
+        H5Gclose(gid2);
+    if(did1)
+        H5Dclose(did1);
+    if(did2)
+        H5Dclose(did2);
+    if(sid1)
+        H5Sclose(sid1);
+    if(tid_dset1)
+        H5Tclose(tid_dset1);
+    if(tid_attr1)
+        H5Tclose(tid_attr1);
+}
+
 /*-------------------------------------------------------------------------
 * Function: write_attr_in
 *
diff --git a/tools/h5diff/ph5diff_main.c b/tools/h5diff/ph5diff_main.c
index bac1086..67b0c92 100644
--- a/tools/h5diff/ph5diff_main.c
+++ b/tools/h5diff/ph5diff_main.c
@@ -136,7 +136,7 @@ int main(int argc, const char *argv[])
 static void
 ph5diff_worker(int nID)
 {
-    struct diff_args args;
+    struct diff_mpi_args args;
     hid_t file1_id, file2_id;
     char    filenames[2][MAX_FILENAME];
     char    out_data[PRINT_DATA_MAX_SIZE] = {0};
@@ -177,7 +177,7 @@ ph5diff_worker(int nID)
                 /*Recv parameters for diff from manager task */
                 MPI_Recv(&args, sizeof(args), MPI_BYTE, 0, MPI_TAG_ARGS, MPI_COMM_WORLD, &Status);
                 /*Do the diff */
-                diffs.nfound = diff(file1_id, args.name1, file2_id, args.name2, &(args.options), args.type);
+                diffs.nfound = diff(file1_id, args.name1, file2_id, args.name2, &(args.options), &(args.argdata));
                 diffs.not_cmp = args.options.not_cmp;
 
                 /*If print buffer has something in it, request print token.*/
@@ -245,3 +245,32 @@ ph5diff_worker(int nID)
     }
 }
 
+/*-------------------------------------------------------------------------
+ * Function: h5diff_exit
+ *
+ * Purpose: dismiss phdiff worker processes and exit
+ *
+ * Return: none
+ *
+ * Programmer: Albert Cheng
+ * Date: Feb 6, 2005
+ *
+ * Comments:
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void h5diff_exit(int status)
+{
+    /* if in parallel mode, dismiss workers, close down MPI, then exit */
+    if((g_nTasks > 1) && g_Parallel) {
+        phdiff_dismiss_workers();
+        MPI_Barrier(MPI_COMM_WORLD);
+    }
+    if(g_Parallel)
+        MPI_Finalize();
+
+    exit(status);
+}
+
diff --git a/tools/h5diff/testfiles/compounds_array_vlen1.h5 b/tools/h5diff/testfiles/compounds_array_vlen1.h5
new file mode 100644
index 0000000..398026c
Binary files /dev/null and b/tools/h5diff/testfiles/compounds_array_vlen1.h5 differ
diff --git a/tools/h5diff/testfiles/compounds_array_vlen2.h5 b/tools/h5diff/testfiles/compounds_array_vlen2.h5
new file mode 100644
index 0000000..f6f0868
Binary files /dev/null and b/tools/h5diff/testfiles/compounds_array_vlen2.h5 differ
diff --git a/tools/h5diff/testfiles/h5diff_10.txt b/tools/h5diff/testfiles/h5diff_10.txt
index fd13a5c..a699f00 100644
--- a/tools/h5diff/testfiles/h5diff_10.txt
+++ b/tools/h5diff/testfiles/h5diff_10.txt
@@ -1,95 +1,96 @@
 usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] 
-  file1                    File name of the first HDF5 file
-  file2                    File name of the second HDF5 file
-  [obj1]                   Name of an HDF5 object, in absolute path
-  [obj2]                   Name of an HDF5 object, in absolute path
+  file1             File name of the first HDF5 file
+  file2             File name of the second HDF5 file
+  [obj1]            Name of an HDF5 object, in absolute path
+  [obj2]            Name of an HDF5 object, in absolute path
 
   OPTIONS
-   -h, --help              Print a usage message and exit.
-   -V, --version           Print version number and exit.
-   -r, --report            Report mode. Print differences.
-   -v --verbose            Verbose mode. Print differences information and list
-                           of objects.
-   -vN --verbose=N         Verbose mode with level. Print differences and list
-                           of objects.
-                           Level of detail depends on value of N:
-                            0 : Identical to '-v' or '--verbose'.
-                            1 : All level 0 information plus one-line attribute
-                                status summary.
-                            2 : All level 1 information plus extended attribute
-                                status report.
-   -q, --quiet             Quiet mode. Do not produce output.
-   --follow-symlinks       Follow symbolic links (soft links and external links)
-                           and compare the links' target objects.
-                           If symbolic link(s) with the same name exist in the
-                           files being compared, then determine whether the 
-                           target of each link is an existing object (dataset,
-                           group, or named datatype) or the link is a dangling
-                           link (a soft or external link pointing to a target
-                           object that does not yet exist).
-                           - If both symbolic links are dangling links, they
-                             are treated as being the same; by default, h5diff
-                             returns an exit code of 0. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If only one of the two links is a dangling link,
-                             they are treated as being different and h5diff 
-                             returns an exit code of 1. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If both symbolic links point to existing objects,
-                             h5diff compares the two objects.
-                           If any symbolic link specified in the call to h5diff
-                           does not exist, h5diff treats it as an error and
-                           returns an exit code of 2.
-   --no-dangling-links     Must be used with --follow-symlinks option;
-                           otherwise, h5diff shows error message and returns
-                           an exit code of 2.
-                           Check for any symbolic links (soft links or external
-                           links) that do not resolve to an existing object
-                           (dataset, group, or named datatype).  If any
-                           dangling link is found, this situation is treated as
-                           an error and h5diff returns an exit code of 2.
-   -c, --compare           List objects that are not comparable
-   -N, --nan               Avoid NaNs detection
-   -n C, --count=C         Print differences up to C number, C is a positive
-                           integer.
-   -d D, --delta=D         Print difference if (|a-b| > D), D is a positive
-                           number.
-   -p R, --relative=R      Print difference if (|(a-b)/b| > R), R is a positive
-                           number.
-   --use-system-epsilon    Print difference if (|a-b| > EPSILON), EPSILON is
-                           a system epsilon value.
-                           If the system epsilon is not defined, the below
-                           one of the following predefined values will be used:
-                             FLT_EPSILON = 1.19209E-07 for floating-point type
-                             DBL_EPSILON = 2.22045E-16 for double percision type
-   --exclude-path "path"   Exclude the specified path to an object when
-                           comparing files or groups. If a group is excluded,
-                           all member objects will also be excluded.
-                           The specified path is excluded wherever it occurs.
-                           This flexibility enables the same option to exclude
-                           either objects that exist only in one file or
-                           common objects that are known to differ.
+   -h, --help
+         Print a usage message and exit.
+   -V, --version
+         Print version number and exit.
+   -r, --report
+         Report mode. Print differences.
+   -v --verbose
+         Verbose mode. Print differences information and list of objects.
+   -vN --verbose=N
+         Verbose mode with level. Print differences and list of objects.
+         Level of detail depends on value of N:
+          0 : Identical to '-v' or '--verbose'.
+          1 : All level 0 information plus one-line attribute
+              status summary.
+          2 : All level 1 information plus extended attribute
+              status report.
+   -q, --quiet
+         Quiet mode. Do not produce output.
+   --follow-symlinks
+         Follow symbolic links (soft links and external links and compare the)
+         links' target objects.
+         If symbolic link(s) with the same name exist in the files being
+         compared, then determine whether the target of each link is an existing
+         object (dataset, group, or named datatype) or the link is a dangling
+         link (a soft or external link pointing to a target object that does
+         not yet exist).
+         - If both symbolic links are dangling links, they are treated as being
+           the same; by default, h5diff returns an exit code of 0.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If only one of the two links is a dangling link,they are treated as
+           being different and h5diff returns an exit code of 1.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If both symbolic links point to existing objects, h5diff compares the
+           two objects.
+         If any symbolic link specified in the call to h5diff does not exist,
+         h5diff treats it as an error and returns an exit code of 2.
+   --no-dangling-links
+         Must be used with --follow-symlinks option; otherwise, h5diff shows
+         error message and returns an exit code of 2.
+         Check for any symbolic links (soft links or external links) that do not
+         resolve to an existing object (dataset, group, or named datatype).
+         If any dangling link is found, this situation is treated as an error
+         and h5diff returns an exit code of 2.
+   -c, --compare
+         List objects that are not comparable
+   -N, --nan
+         Avoid NaNs detection
+   -n C, --count=C
+         Print differences up to C. C must be a positive integer.
+   -d D, --delta=D
+         Print difference if (|a-b| > D). D must be a positive number.
+         Can not use with '-p' or '--use-system-epsilon'.
+   -p R, --relative=R
+         Print difference if (|(a-b)/b| > R). R must be a positive number.
+         Can not use with '-d' or '--use-system-epsilon'.
+   --use-system-epsilon
+         Print difference if (|a-b| > EPSILON), EPSILON is system defined value.
+         If the system epsilon is not defined,one of the following predefined
+         values will be used:
+           FLT_EPSILON = 1.19209E-07 for floating-point type
+           DBL_EPSILON = 2.22045E-16 for double precision type
+         Can not use with '-p' or '-d'.
+   --exclude-path "path" 
+         Exclude the specified path to an object when comparing files or groups.
+         If a group is excluded, all member objects will also be excluded.
+         The specified path is excluded wherever it occurs.
+         This flexibility enables the same option to exclude either objects that
+         exist only in one file or common objects that are known to differ.
 
-                           When comparing files, "path" is the absolute path to
-                           the excluded object; when comparing groups, "path" is
-                           similar to the relative path from the group to the
-                           excluded object. This "path" can be taken from the
-                           first section of the output of the --verbose option.
-                           For example, if you are comparing the group /groupA
-                           in two files and you want to exclude
-                           /groupA/groupB/groupC in both files, the exclude
-                           option would read as follows:
-                             --exclude-path "/groupB/groupC"
+         When comparing files, "path" is the absolute path to the excluded;
+         object; when comparing groups, "path" is similar to the relative
+         path from the group to the excluded object. This "path" can be
+         taken from the first section of the output of the --verbose option.
+         For example, if you are comparing the group /groupA in two files and
+         you want to exclude /groupA/groupB/groupC in both files, the exclude
+         option would read as follows:
+           --exclude-path "/groupB/groupC"
 
-                           If there are multiple paths to an object, only the
-                           specified path(s) will be excluded; the comparison
-                           will include any path not explicitly excluded.
-                           This option can be used repeatedly to exclude
-                           multiple paths.
+         If there are multiple paths to an object, only the specified path(s)
+         will be excluded; the comparison will include any path not explicitly
+         excluded.
+         This option can be used repeatedly to exclude multiple paths.
 
  Modes of output:
   Default mode: print the number of differences found and where they occured
diff --git a/tools/h5diff/testfiles/h5diff_17.txt b/tools/h5diff/testfiles/h5diff_17.txt
index 5cb604d..4906a2a 100644
--- a/tools/h5diff/testfiles/h5diff_17.txt
+++ b/tools/h5diff/testfiles/h5diff_17.txt
@@ -22,9 +22,12 @@ file1     file2
     x           /g1/fp16       
     x           /g1/fp17       
     x           /g1/fp18       
+    x           /g1/fp18_COPY  
     x           /g1/fp19       
+    x           /g1/fp19_COPY  
     x           /g1/fp2        
     x           /g1/fp20       
+    x           /g1/fp20_COPY  
     x           /g1/ld         
            x    /g2            
            x    /g2/dset1      
diff --git a/tools/h5diff/testfiles/h5diff_171.txt b/tools/h5diff/testfiles/h5diff_171.txt
index 5314a79..aabe16a 100644
--- a/tools/h5diff/testfiles/h5diff_171.txt
+++ b/tools/h5diff/testfiles/h5diff_171.txt
@@ -1,3 +1,3 @@
-dataset: </g1/fp19> and </g1/fp19>
+dataset: </g1/fp19> and </g1/fp19_COPY>
 0 differences found
 EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_172.txt b/tools/h5diff/testfiles/h5diff_172.txt
index 0269194..852f7b5 100644
--- a/tools/h5diff/testfiles/h5diff_172.txt
+++ b/tools/h5diff/testfiles/h5diff_172.txt
@@ -1,3 +1,3 @@
-dataset: </g1/fp20> and </g1/fp20>
+dataset: </g1/fp20> and </g1/fp20_COPY>
 0 differences found
 EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_20.txt b/tools/h5diff/testfiles/h5diff_20.txt
index 6eba851..3edb543 100644
--- a/tools/h5diff/testfiles/h5diff_20.txt
+++ b/tools/h5diff/testfiles/h5diff_20.txt
@@ -2,5 +2,5 @@
 --------------------------------
 Some objects are not comparable
 --------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
 EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_202.txt b/tools/h5diff/testfiles/h5diff_202.txt
index 53657d3..95ef1da 100644
--- a/tools/h5diff/testfiles/h5diff_202.txt
+++ b/tools/h5diff/testfiles/h5diff_202.txt
@@ -1,3 +1,2 @@
 Not comparable: </g2/dset2> is of class H5T_FLOAT and </g2/dset3> is of class H5T_INTEGER
-Not comparable: </g2/dset2> has sign H5T_SGN_ERROR and </g2/dset3> has sign H5T_SGN_2
 EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_205.txt b/tools/h5diff/testfiles/h5diff_205.txt
index d72797b..bf5650f 100644
--- a/tools/h5diff/testfiles/h5diff_205.txt
+++ b/tools/h5diff/testfiles/h5diff_205.txt
@@ -1,4 +1,3 @@
 Not comparable: </g2/dset5> has rank 2, dimensions [2x2], max dimensions [2x2]
 and </g2/dset6> has rank 2, dimensions [3x2], max dimensions [3x2]
-Not comparable: </g2/dset5> has sign H5T_SGN_2 and </g2/dset6> has sign H5T_SGN_NONE
 EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_208.txt b/tools/h5diff/testfiles/h5diff_208.txt
new file mode 100644
index 0000000..783be90
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_208.txt
@@ -0,0 +1,5 @@
+Not comparable: </dset1> or </dset1> is an empty dataset
+Not comparable: </dset2> or </dset2> is an empty dataset
+Not comparable: </dset2> has rank 2, dimensions [0x0], max dimensions [0x0]
+and </dset2> has rank 2, dimensions [0x4], max dimensions [0x4]
+EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_21.txt b/tools/h5diff/testfiles/h5diff_21.txt
index 238c8b8..1479457 100644
--- a/tools/h5diff/testfiles/h5diff_21.txt
+++ b/tools/h5diff/testfiles/h5diff_21.txt
@@ -2,5 +2,5 @@
 --------------------------------
 Some objects are not comparable
 --------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
 EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_22.txt b/tools/h5diff/testfiles/h5diff_22.txt
index 33c3a3d..3ccb06b 100644
--- a/tools/h5diff/testfiles/h5diff_22.txt
+++ b/tools/h5diff/testfiles/h5diff_22.txt
@@ -2,5 +2,5 @@
 --------------------------------
 Some objects are not comparable
 --------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
 EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_220.txt b/tools/h5diff/testfiles/h5diff_220.txt
new file mode 100644
index 0000000..cadbb6d
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_220.txt
@@ -0,0 +1,8 @@
+Not comparable: </g1/dset1> is of class H5T_INTEGER and </g1/dset1> is of class H5T_STRING
+attribute: <attr of </g1/dset1>> and <attr of </g1/dset1>>
+3 differences found
+dataset: </g1/dset1> and </g1/dset1>
+3 differences found
+dataset: </g1/dset2> and </g1/dset2>
+3 differences found
+EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_221.txt b/tools/h5diff/testfiles/h5diff_221.txt
new file mode 100644
index 0000000..621f5c3
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_221.txt
@@ -0,0 +1,12 @@
+Not comparable: <attr1> is of class H5T_INTEGER and <attr1> is of class H5T_STRING
+Not comparable: <attr2> has rank 1, dimensions [3], max dimensions [3]
+and <attr2> has rank 1, dimensions [4], max dimensions [4]
+Not comparable: <attr3> has rank 1, dimensions [3], max dimensions [3]
+and <attr3> has rank 2, dimensions [3x1], max dimensions [3x1]
+attribute: <attr4 of </g2/dset1>> and <attr4 of </g2/dset1>>
+3 differences found
+dataset: </g2/dset1> and </g2/dset1>
+6 differences found
+dataset: </g2/dset2> and </g2/dset2>
+3 differences found
+EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_222.txt b/tools/h5diff/testfiles/h5diff_222.txt
new file mode 100644
index 0000000..bdecb8a
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_222.txt
@@ -0,0 +1,19 @@
+Not comparable: </g1/dset1> is of class H5T_INTEGER and </g1/dset1> is of class H5T_STRING
+attribute: <attr of </g1/dset1>> and <attr of </g1/dset1>>
+3 differences found
+dataset: </g1/dset1> and </g1/dset1>
+3 differences found
+dataset: </g1/dset2> and </g1/dset2>
+3 differences found
+Not comparable: <attr1> is of class H5T_INTEGER and <attr1> is of class H5T_STRING
+Not comparable: <attr2> has rank 1, dimensions [3], max dimensions [3]
+and <attr2> has rank 1, dimensions [4], max dimensions [4]
+Not comparable: <attr3> has rank 1, dimensions [3], max dimensions [3]
+and <attr3> has rank 2, dimensions [3x1], max dimensions [3x1]
+attribute: <attr4 of </g2/dset1>> and <attr4 of </g2/dset1>>
+3 differences found
+dataset: </g2/dset1> and </g2/dset1>
+6 differences found
+dataset: </g2/dset2> and </g2/dset2>
+3 differences found
+EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_30.txt b/tools/h5diff/testfiles/h5diff_30.txt
new file mode 100644
index 0000000..187589a
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_30.txt
@@ -0,0 +1,9 @@
+dataset: </dset1> and </dset2>
+size:           [6]           [6]
+position        dset1           dset2           difference          
+------------------------------------------------------------
+[ 1 ]          YIN              **INVALID VALUE**
+[ 2 ]          **INVALID VALUE** YIN              
+[ 5 ]          YIN              YANG             
+3 differences found
+EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_505.txt b/tools/h5diff/testfiles/h5diff_505.txt
index 28640b7..a220730 100644
--- a/tools/h5diff/testfiles/h5diff_505.txt
+++ b/tools/h5diff/testfiles/h5diff_505.txt
@@ -2,5 +2,5 @@
 --------------------------------
 Some objects are not comparable
 --------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
 EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_507.txt b/tools/h5diff/testfiles/h5diff_507.txt
index ed2b799..6176f3f 100644
--- a/tools/h5diff/testfiles/h5diff_507.txt
+++ b/tools/h5diff/testfiles/h5diff_507.txt
@@ -2,5 +2,5 @@
 --------------------------------
 Some objects are not comparable
 --------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
 EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_509.txt b/tools/h5diff/testfiles/h5diff_509.txt
index 145cd9d..a51ab35 100644
--- a/tools/h5diff/testfiles/h5diff_509.txt
+++ b/tools/h5diff/testfiles/h5diff_509.txt
@@ -2,5 +2,5 @@
 --------------------------------
 Some objects are not comparable
 --------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
 EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_530.txt b/tools/h5diff/testfiles/h5diff_530.txt
index bd2b435..73d736e 100644
--- a/tools/h5diff/testfiles/h5diff_530.txt
+++ b/tools/h5diff/testfiles/h5diff_530.txt
@@ -1,7 +1,7 @@
 
-file1     file2
+group1   group2
 ---------------------------------------
-    x      x    /              
+    x      x                   
     x      x    /Compound_dset1
     x      x    /Compound_dset2
     x      x    /Compound_dset3
@@ -12,24 +12,24 @@ file1     file2
     x      x    /Compound_dset8
     x      x    /Compound_dset9
 
-group  : </> and </>
+group  : </group> and </group_copy>
 0 differences found
-dataset: </Compound_dset1> and </Compound_dset1>
+dataset: </group/Compound_dset1> and </group_copy/Compound_dset1>
 0 differences found
-dataset: </Compound_dset2> and </Compound_dset2>
+dataset: </group/Compound_dset2> and </group_copy/Compound_dset2>
 0 differences found
-dataset: </Compound_dset3> and </Compound_dset3>
+dataset: </group/Compound_dset3> and </group_copy/Compound_dset3>
 0 differences found
-dataset: </Compound_dset4> and </Compound_dset4>
+dataset: </group/Compound_dset4> and </group_copy/Compound_dset4>
 0 differences found
-dataset: </Compound_dset5> and </Compound_dset5>
+dataset: </group/Compound_dset5> and </group_copy/Compound_dset5>
 0 differences found
-dataset: </Compound_dset6> and </Compound_dset6>
+dataset: </group/Compound_dset6> and </group_copy/Compound_dset6>
 0 differences found
-dataset: </Compound_dset7> and </Compound_dset7>
+dataset: </group/Compound_dset7> and </group_copy/Compound_dset7>
 0 differences found
-dataset: </Compound_dset8> and </Compound_dset8>
+dataset: </group/Compound_dset8> and </group_copy/Compound_dset8>
 0 differences found
-dataset: </Compound_dset9> and </Compound_dset9>
+dataset: </group/Compound_dset9> and </group_copy/Compound_dset9>
 0 differences found
 EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_540.txt b/tools/h5diff/testfiles/h5diff_540.txt
new file mode 100644
index 0000000..a6903c8
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_540.txt
@@ -0,0 +1,86 @@
+
+file1     file2
+---------------------------------------
+    x      x    /              
+    x      x    /dset1         
+    x      x    /dset2         
+    x      x    /dset3         
+    x      x    /dset4         
+
+group  : </> and </>
+0 differences found
+attribute: <attr1 of </>> and <attr1 of </>>
+size:           [2]           [2]
+position        attr1 of </>    attr1 of </>    difference          
+------------------------------------------------------------
+[ 0 ]          0               5               5              
+[ 0 ]          0               5               5              
+[ 0 ]          0               5               5              
+[ 0 ]          0               5               5              
+[ 1 ]          10              15              5              
+[ 1 ]          10.5            15.5            5              
+[ 1 ]          10              15              5              
+[ 1 ]          10.5            15.5            5              
+8 differences found
+dataset: </dset1> and </dset1>
+size:           [2]           [2]
+position        dset1           dset1           difference          
+------------------------------------------------------------
+[ 0 ]          0               5               5              
+[ 0 ]          0               5               5              
+[ 0 ]          0               5               5              
+[ 0 ]          0               5               5              
+[ 1 ]          10              15              5              
+[ 1 ]          10.5            15.5            5              
+[ 1 ]          10              15              5              
+[ 1 ]          10.5            15.5            5              
+8 differences found
+dataset: </dset2> and </dset2>
+size:           [2]           [2]
+position        dset2           dset2           difference          
+------------------------------------------------------------
+[ 0 ]          0               5               5              
+[ 0 ]          0               5               5              
+[ 1 ]          10              15              5              
+[ 1 ]          10.5            15.5            5              
+[ 1 ]          10              15              5              
+[ 1 ]          10.5            15.5            5              
+6 differences found
+dataset: </dset3> and </dset3>
+size:           [2]           [2]
+position        dset3           dset3           difference          
+------------------------------------------------------------
+[ 0 ]          0               5               5              
+[ 0 ]          0               5               5              
+[ 0 ]          10              15              5              
+[ 0 ]          10.5            15.5            5              
+[ 0 ]          10              15              5              
+[ 0 ]          10.5            15.5            5              
+[ 1 ]          0               5               5              
+[ 1 ]          0               5               5              
+[ 1 ]          10              15              5              
+[ 1 ]          10.5            15.5            5              
+[ 1 ]          10              15              5              
+[ 1 ]          10.5            15.5            5              
+12 differences found
+dataset: </dset4> and </dset4>
+size:           [2]           [2]
+position        dset4           dset4           difference          
+------------------------------------------------------------
+[ 0 ]          0               5               5              
+[ 0 ]          0               5               5              
+[ 0 ]          0               5               5              
+[ 0 ]          10              15              5              
+[ 0 ]          10.5            15.5            5              
+[ 1 ]          10              15              5              
+[ 1 ]          0               5               5              
+[ 1 ]          0               5               5              
+[ 1 ]          10              15              5              
+[ 1 ]          10.5            15.5            5              
+[ 1 ]          10              15              5              
+[ 1 ]          0               5               5              
+[ 1 ]          0               5               5              
+[ 1 ]          10              15              5              
+[ 1 ]          10.5            15.5            5              
+15 differences found
+EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_57.txt b/tools/h5diff/testfiles/h5diff_57.txt
index 61aaa57..d5125fe 100644
--- a/tools/h5diff/testfiles/h5diff_57.txt
+++ b/tools/h5diff/testfiles/h5diff_57.txt
@@ -7,5 +7,5 @@ Not comparable: </dset7a> has sign H5T_SGN_2 and </dset7b> has sign H5T_SGN_NONE
 --------------------------------
 Some objects are not comparable
 --------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
 EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_600.txt b/tools/h5diff/testfiles/h5diff_600.txt
index ecf73d8..3c3ad9f 100644
--- a/tools/h5diff/testfiles/h5diff_600.txt
+++ b/tools/h5diff/testfiles/h5diff_600.txt
@@ -1,95 +1,96 @@
 usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] 
-  file1                    File name of the first HDF5 file
-  file2                    File name of the second HDF5 file
-  [obj1]                   Name of an HDF5 object, in absolute path
-  [obj2]                   Name of an HDF5 object, in absolute path
+  file1             File name of the first HDF5 file
+  file2             File name of the second HDF5 file
+  [obj1]            Name of an HDF5 object, in absolute path
+  [obj2]            Name of an HDF5 object, in absolute path
 
   OPTIONS
-   -h, --help              Print a usage message and exit.
-   -V, --version           Print version number and exit.
-   -r, --report            Report mode. Print differences.
-   -v --verbose            Verbose mode. Print differences information and list
-                           of objects.
-   -vN --verbose=N         Verbose mode with level. Print differences and list
-                           of objects.
-                           Level of detail depends on value of N:
-                            0 : Identical to '-v' or '--verbose'.
-                            1 : All level 0 information plus one-line attribute
-                                status summary.
-                            2 : All level 1 information plus extended attribute
-                                status report.
-   -q, --quiet             Quiet mode. Do not produce output.
-   --follow-symlinks       Follow symbolic links (soft links and external links)
-                           and compare the links' target objects.
-                           If symbolic link(s) with the same name exist in the
-                           files being compared, then determine whether the 
-                           target of each link is an existing object (dataset,
-                           group, or named datatype) or the link is a dangling
-                           link (a soft or external link pointing to a target
-                           object that does not yet exist).
-                           - If both symbolic links are dangling links, they
-                             are treated as being the same; by default, h5diff
-                             returns an exit code of 0. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If only one of the two links is a dangling link,
-                             they are treated as being different and h5diff 
-                             returns an exit code of 1. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If both symbolic links point to existing objects,
-                             h5diff compares the two objects.
-                           If any symbolic link specified in the call to h5diff
-                           does not exist, h5diff treats it as an error and
-                           returns an exit code of 2.
-   --no-dangling-links     Must be used with --follow-symlinks option;
-                           otherwise, h5diff shows error message and returns
-                           an exit code of 2.
-                           Check for any symbolic links (soft links or external
-                           links) that do not resolve to an existing object
-                           (dataset, group, or named datatype).  If any
-                           dangling link is found, this situation is treated as
-                           an error and h5diff returns an exit code of 2.
-   -c, --compare           List objects that are not comparable
-   -N, --nan               Avoid NaNs detection
-   -n C, --count=C         Print differences up to C number, C is a positive
-                           integer.
-   -d D, --delta=D         Print difference if (|a-b| > D), D is a positive
-                           number.
-   -p R, --relative=R      Print difference if (|(a-b)/b| > R), R is a positive
-                           number.
-   --use-system-epsilon    Print difference if (|a-b| > EPSILON), EPSILON is
-                           a system epsilon value.
-                           If the system epsilon is not defined, the below
-                           one of the following predefined values will be used:
-                             FLT_EPSILON = 1.19209E-07 for floating-point type
-                             DBL_EPSILON = 2.22045E-16 for double percision type
-   --exclude-path "path"   Exclude the specified path to an object when
-                           comparing files or groups. If a group is excluded,
-                           all member objects will also be excluded.
-                           The specified path is excluded wherever it occurs.
-                           This flexibility enables the same option to exclude
-                           either objects that exist only in one file or
-                           common objects that are known to differ.
+   -h, --help
+         Print a usage message and exit.
+   -V, --version
+         Print version number and exit.
+   -r, --report
+         Report mode. Print differences.
+   -v --verbose
+         Verbose mode. Print differences information and list of objects.
+   -vN --verbose=N
+         Verbose mode with level. Print differences and list of objects.
+         Level of detail depends on value of N:
+          0 : Identical to '-v' or '--verbose'.
+          1 : All level 0 information plus one-line attribute
+              status summary.
+          2 : All level 1 information plus extended attribute
+              status report.
+   -q, --quiet
+         Quiet mode. Do not produce output.
+   --follow-symlinks
+         Follow symbolic links (soft links and external links and compare the)
+         links' target objects.
+         If symbolic link(s) with the same name exist in the files being
+         compared, then determine whether the target of each link is an existing
+         object (dataset, group, or named datatype) or the link is a dangling
+         link (a soft or external link pointing to a target object that does
+         not yet exist).
+         - If both symbolic links are dangling links, they are treated as being
+           the same; by default, h5diff returns an exit code of 0.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If only one of the two links is a dangling link,they are treated as
+           being different and h5diff returns an exit code of 1.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If both symbolic links point to existing objects, h5diff compares the
+           two objects.
+         If any symbolic link specified in the call to h5diff does not exist,
+         h5diff treats it as an error and returns an exit code of 2.
+   --no-dangling-links
+         Must be used with --follow-symlinks option; otherwise, h5diff shows
+         error message and returns an exit code of 2.
+         Check for any symbolic links (soft links or external links) that do not
+         resolve to an existing object (dataset, group, or named datatype).
+         If any dangling link is found, this situation is treated as an error
+         and h5diff returns an exit code of 2.
+   -c, --compare
+         List objects that are not comparable
+   -N, --nan
+         Avoid NaNs detection
+   -n C, --count=C
+         Print differences up to C. C must be a positive integer.
+   -d D, --delta=D
+         Print difference if (|a-b| > D). D must be a positive number.
+         Can not use with '-p' or '--use-system-epsilon'.
+   -p R, --relative=R
+         Print difference if (|(a-b)/b| > R). R must be a positive number.
+         Can not use with '-d' or '--use-system-epsilon'.
+   --use-system-epsilon
+         Print difference if (|a-b| > EPSILON), EPSILON is system defined value.
+         If the system epsilon is not defined,one of the following predefined
+         values will be used:
+           FLT_EPSILON = 1.19209E-07 for floating-point type
+           DBL_EPSILON = 2.22045E-16 for double precision type
+         Can not use with '-p' or '-d'.
+   --exclude-path "path" 
+         Exclude the specified path to an object when comparing files or groups.
+         If a group is excluded, all member objects will also be excluded.
+         The specified path is excluded wherever it occurs.
+         This flexibility enables the same option to exclude either objects that
+         exist only in one file or common objects that are known to differ.
 
-                           When comparing files, "path" is the absolute path to
-                           the excluded object; when comparing groups, "path" is
-                           similar to the relative path from the group to the
-                           excluded object. This "path" can be taken from the
-                           first section of the output of the --verbose option.
-                           For example, if you are comparing the group /groupA
-                           in two files and you want to exclude
-                           /groupA/groupB/groupC in both files, the exclude
-                           option would read as follows:
-                             --exclude-path "/groupB/groupC"
+         When comparing files, "path" is the absolute path to the excluded;
+         object; when comparing groups, "path" is similar to the relative
+         path from the group to the excluded object. This "path" can be
+         taken from the first section of the output of the --verbose option.
+         For example, if you are comparing the group /groupA in two files and
+         you want to exclude /groupA/groupB/groupC in both files, the exclude
+         option would read as follows:
+           --exclude-path "/groupB/groupC"
 
-                           If there are multiple paths to an object, only the
-                           specified path(s) will be excluded; the comparison
-                           will include any path not explicitly excluded.
-                           This option can be used repeatedly to exclude
-                           multiple paths.
+         If there are multiple paths to an object, only the specified path(s)
+         will be excluded; the comparison will include any path not explicitly
+         excluded.
+         This option can be used repeatedly to exclude multiple paths.
 
  Modes of output:
   Default mode: print the number of differences found and where they occured
diff --git a/tools/h5diff/testfiles/h5diff_603.txt b/tools/h5diff/testfiles/h5diff_603.txt
index 776c468..087764a 100644
--- a/tools/h5diff/testfiles/h5diff_603.txt
+++ b/tools/h5diff/testfiles/h5diff_603.txt
@@ -1,96 +1,97 @@
 <-d -4> is not a valid option
 usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] 
-  file1                    File name of the first HDF5 file
-  file2                    File name of the second HDF5 file
-  [obj1]                   Name of an HDF5 object, in absolute path
-  [obj2]                   Name of an HDF5 object, in absolute path
+  file1             File name of the first HDF5 file
+  file2             File name of the second HDF5 file
+  [obj1]            Name of an HDF5 object, in absolute path
+  [obj2]            Name of an HDF5 object, in absolute path
 
   OPTIONS
-   -h, --help              Print a usage message and exit.
-   -V, --version           Print version number and exit.
-   -r, --report            Report mode. Print differences.
-   -v --verbose            Verbose mode. Print differences information and list
-                           of objects.
-   -vN --verbose=N         Verbose mode with level. Print differences and list
-                           of objects.
-                           Level of detail depends on value of N:
-                            0 : Identical to '-v' or '--verbose'.
-                            1 : All level 0 information plus one-line attribute
-                                status summary.
-                            2 : All level 1 information plus extended attribute
-                                status report.
-   -q, --quiet             Quiet mode. Do not produce output.
-   --follow-symlinks       Follow symbolic links (soft links and external links)
-                           and compare the links' target objects.
-                           If symbolic link(s) with the same name exist in the
-                           files being compared, then determine whether the 
-                           target of each link is an existing object (dataset,
-                           group, or named datatype) or the link is a dangling
-                           link (a soft or external link pointing to a target
-                           object that does not yet exist).
-                           - If both symbolic links are dangling links, they
-                             are treated as being the same; by default, h5diff
-                             returns an exit code of 0. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If only one of the two links is a dangling link,
-                             they are treated as being different and h5diff 
-                             returns an exit code of 1. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If both symbolic links point to existing objects,
-                             h5diff compares the two objects.
-                           If any symbolic link specified in the call to h5diff
-                           does not exist, h5diff treats it as an error and
-                           returns an exit code of 2.
-   --no-dangling-links     Must be used with --follow-symlinks option;
-                           otherwise, h5diff shows error message and returns
-                           an exit code of 2.
-                           Check for any symbolic links (soft links or external
-                           links) that do not resolve to an existing object
-                           (dataset, group, or named datatype).  If any
-                           dangling link is found, this situation is treated as
-                           an error and h5diff returns an exit code of 2.
-   -c, --compare           List objects that are not comparable
-   -N, --nan               Avoid NaNs detection
-   -n C, --count=C         Print differences up to C number, C is a positive
-                           integer.
-   -d D, --delta=D         Print difference if (|a-b| > D), D is a positive
-                           number.
-   -p R, --relative=R      Print difference if (|(a-b)/b| > R), R is a positive
-                           number.
-   --use-system-epsilon    Print difference if (|a-b| > EPSILON), EPSILON is
-                           a system epsilon value.
-                           If the system epsilon is not defined, the below
-                           one of the following predefined values will be used:
-                             FLT_EPSILON = 1.19209E-07 for floating-point type
-                             DBL_EPSILON = 2.22045E-16 for double percision type
-   --exclude-path "path"   Exclude the specified path to an object when
-                           comparing files or groups. If a group is excluded,
-                           all member objects will also be excluded.
-                           The specified path is excluded wherever it occurs.
-                           This flexibility enables the same option to exclude
-                           either objects that exist only in one file or
-                           common objects that are known to differ.
+   -h, --help
+         Print a usage message and exit.
+   -V, --version
+         Print version number and exit.
+   -r, --report
+         Report mode. Print differences.
+   -v --verbose
+         Verbose mode. Print differences information and list of objects.
+   -vN --verbose=N
+         Verbose mode with level. Print differences and list of objects.
+         Level of detail depends on value of N:
+          0 : Identical to '-v' or '--verbose'.
+          1 : All level 0 information plus one-line attribute
+              status summary.
+          2 : All level 1 information plus extended attribute
+              status report.
+   -q, --quiet
+         Quiet mode. Do not produce output.
+   --follow-symlinks
+         Follow symbolic links (soft links and external links and compare the)
+         links' target objects.
+         If symbolic link(s) with the same name exist in the files being
+         compared, then determine whether the target of each link is an existing
+         object (dataset, group, or named datatype) or the link is a dangling
+         link (a soft or external link pointing to a target object that does
+         not yet exist).
+         - If both symbolic links are dangling links, they are treated as being
+           the same; by default, h5diff returns an exit code of 0.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If only one of the two links is a dangling link,they are treated as
+           being different and h5diff returns an exit code of 1.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If both symbolic links point to existing objects, h5diff compares the
+           two objects.
+         If any symbolic link specified in the call to h5diff does not exist,
+         h5diff treats it as an error and returns an exit code of 2.
+   --no-dangling-links
+         Must be used with --follow-symlinks option; otherwise, h5diff shows
+         error message and returns an exit code of 2.
+         Check for any symbolic links (soft links or external links) that do not
+         resolve to an existing object (dataset, group, or named datatype).
+         If any dangling link is found, this situation is treated as an error
+         and h5diff returns an exit code of 2.
+   -c, --compare
+         List objects that are not comparable
+   -N, --nan
+         Avoid NaNs detection
+   -n C, --count=C
+         Print differences up to C. C must be a positive integer.
+   -d D, --delta=D
+         Print difference if (|a-b| > D). D must be a positive number.
+         Can not use with '-p' or '--use-system-epsilon'.
+   -p R, --relative=R
+         Print difference if (|(a-b)/b| > R). R must be a positive number.
+         Can not use with '-d' or '--use-system-epsilon'.
+   --use-system-epsilon
+         Print difference if (|a-b| > EPSILON), EPSILON is system defined value.
+         If the system epsilon is not defined,one of the following predefined
+         values will be used:
+           FLT_EPSILON = 1.19209E-07 for floating-point type
+           DBL_EPSILON = 2.22045E-16 for double precision type
+         Can not use with '-p' or '-d'.
+   --exclude-path "path" 
+         Exclude the specified path to an object when comparing files or groups.
+         If a group is excluded, all member objects will also be excluded.
+         The specified path is excluded wherever it occurs.
+         This flexibility enables the same option to exclude either objects that
+         exist only in one file or common objects that are known to differ.
 
-                           When comparing files, "path" is the absolute path to
-                           the excluded object; when comparing groups, "path" is
-                           similar to the relative path from the group to the
-                           excluded object. This "path" can be taken from the
-                           first section of the output of the --verbose option.
-                           For example, if you are comparing the group /groupA
-                           in two files and you want to exclude
-                           /groupA/groupB/groupC in both files, the exclude
-                           option would read as follows:
-                             --exclude-path "/groupB/groupC"
+         When comparing files, "path" is the absolute path to the excluded;
+         object; when comparing groups, "path" is similar to the relative
+         path from the group to the excluded object. This "path" can be
+         taken from the first section of the output of the --verbose option.
+         For example, if you are comparing the group /groupA in two files and
+         you want to exclude /groupA/groupB/groupC in both files, the exclude
+         option would read as follows:
+           --exclude-path "/groupB/groupC"
 
-                           If there are multiple paths to an object, only the
-                           specified path(s) will be excluded; the comparison
-                           will include any path not explicitly excluded.
-                           This option can be used repeatedly to exclude
-                           multiple paths.
+         If there are multiple paths to an object, only the specified path(s)
+         will be excluded; the comparison will include any path not explicitly
+         excluded.
+         This option can be used repeatedly to exclude multiple paths.
 
  Modes of output:
   Default mode: print the number of differences found and where they occured
diff --git a/tools/h5diff/testfiles/h5diff_606.txt b/tools/h5diff/testfiles/h5diff_606.txt
index 762698d..c31a67e 100644
--- a/tools/h5diff/testfiles/h5diff_606.txt
+++ b/tools/h5diff/testfiles/h5diff_606.txt
@@ -1,96 +1,97 @@
 <-d 0x1> is not a valid option
 usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] 
-  file1                    File name of the first HDF5 file
-  file2                    File name of the second HDF5 file
-  [obj1]                   Name of an HDF5 object, in absolute path
-  [obj2]                   Name of an HDF5 object, in absolute path
+  file1             File name of the first HDF5 file
+  file2             File name of the second HDF5 file
+  [obj1]            Name of an HDF5 object, in absolute path
+  [obj2]            Name of an HDF5 object, in absolute path
 
   OPTIONS
-   -h, --help              Print a usage message and exit.
-   -V, --version           Print version number and exit.
-   -r, --report            Report mode. Print differences.
-   -v --verbose            Verbose mode. Print differences information and list
-                           of objects.
-   -vN --verbose=N         Verbose mode with level. Print differences and list
-                           of objects.
-                           Level of detail depends on value of N:
-                            0 : Identical to '-v' or '--verbose'.
-                            1 : All level 0 information plus one-line attribute
-                                status summary.
-                            2 : All level 1 information plus extended attribute
-                                status report.
-   -q, --quiet             Quiet mode. Do not produce output.
-   --follow-symlinks       Follow symbolic links (soft links and external links)
-                           and compare the links' target objects.
-                           If symbolic link(s) with the same name exist in the
-                           files being compared, then determine whether the 
-                           target of each link is an existing object (dataset,
-                           group, or named datatype) or the link is a dangling
-                           link (a soft or external link pointing to a target
-                           object that does not yet exist).
-                           - If both symbolic links are dangling links, they
-                             are treated as being the same; by default, h5diff
-                             returns an exit code of 0. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If only one of the two links is a dangling link,
-                             they are treated as being different and h5diff 
-                             returns an exit code of 1. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If both symbolic links point to existing objects,
-                             h5diff compares the two objects.
-                           If any symbolic link specified in the call to h5diff
-                           does not exist, h5diff treats it as an error and
-                           returns an exit code of 2.
-   --no-dangling-links     Must be used with --follow-symlinks option;
-                           otherwise, h5diff shows error message and returns
-                           an exit code of 2.
-                           Check for any symbolic links (soft links or external
-                           links) that do not resolve to an existing object
-                           (dataset, group, or named datatype).  If any
-                           dangling link is found, this situation is treated as
-                           an error and h5diff returns an exit code of 2.
-   -c, --compare           List objects that are not comparable
-   -N, --nan               Avoid NaNs detection
-   -n C, --count=C         Print differences up to C number, C is a positive
-                           integer.
-   -d D, --delta=D         Print difference if (|a-b| > D), D is a positive
-                           number.
-   -p R, --relative=R      Print difference if (|(a-b)/b| > R), R is a positive
-                           number.
-   --use-system-epsilon    Print difference if (|a-b| > EPSILON), EPSILON is
-                           a system epsilon value.
-                           If the system epsilon is not defined, the below
-                           one of the following predefined values will be used:
-                             FLT_EPSILON = 1.19209E-07 for floating-point type
-                             DBL_EPSILON = 2.22045E-16 for double percision type
-   --exclude-path "path"   Exclude the specified path to an object when
-                           comparing files or groups. If a group is excluded,
-                           all member objects will also be excluded.
-                           The specified path is excluded wherever it occurs.
-                           This flexibility enables the same option to exclude
-                           either objects that exist only in one file or
-                           common objects that are known to differ.
+   -h, --help
+         Print a usage message and exit.
+   -V, --version
+         Print version number and exit.
+   -r, --report
+         Report mode. Print differences.
+   -v --verbose
+         Verbose mode. Print differences information and list of objects.
+   -vN --verbose=N
+         Verbose mode with level. Print differences and list of objects.
+         Level of detail depends on value of N:
+          0 : Identical to '-v' or '--verbose'.
+          1 : All level 0 information plus one-line attribute
+              status summary.
+          2 : All level 1 information plus extended attribute
+              status report.
+   -q, --quiet
+         Quiet mode. Do not produce output.
+   --follow-symlinks
+         Follow symbolic links (soft links and external links and compare the)
+         links' target objects.
+         If symbolic link(s) with the same name exist in the files being
+         compared, then determine whether the target of each link is an existing
+         object (dataset, group, or named datatype) or the link is a dangling
+         link (a soft or external link pointing to a target object that does
+         not yet exist).
+         - If both symbolic links are dangling links, they are treated as being
+           the same; by default, h5diff returns an exit code of 0.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If only one of the two links is a dangling link,they are treated as
+           being different and h5diff returns an exit code of 1.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If both symbolic links point to existing objects, h5diff compares the
+           two objects.
+         If any symbolic link specified in the call to h5diff does not exist,
+         h5diff treats it as an error and returns an exit code of 2.
+   --no-dangling-links
+         Must be used with --follow-symlinks option; otherwise, h5diff shows
+         error message and returns an exit code of 2.
+         Check for any symbolic links (soft links or external links) that do not
+         resolve to an existing object (dataset, group, or named datatype).
+         If any dangling link is found, this situation is treated as an error
+         and h5diff returns an exit code of 2.
+   -c, --compare
+         List objects that are not comparable
+   -N, --nan
+         Avoid NaNs detection
+   -n C, --count=C
+         Print differences up to C. C must be a positive integer.
+   -d D, --delta=D
+         Print difference if (|a-b| > D). D must be a positive number.
+         Can not use with '-p' or '--use-system-epsilon'.
+   -p R, --relative=R
+         Print difference if (|(a-b)/b| > R). R must be a positive number.
+         Can not use with '-d' or '--use-system-epsilon'.
+   --use-system-epsilon
+         Print difference if (|a-b| > EPSILON), EPSILON is system defined value.
+         If the system epsilon is not defined,one of the following predefined
+         values will be used:
+           FLT_EPSILON = 1.19209E-07 for floating-point type
+           DBL_EPSILON = 2.22045E-16 for double precision type
+         Can not use with '-p' or '-d'.
+   --exclude-path "path" 
+         Exclude the specified path to an object when comparing files or groups.
+         If a group is excluded, all member objects will also be excluded.
+         The specified path is excluded wherever it occurs.
+         This flexibility enables the same option to exclude either objects that
+         exist only in one file or common objects that are known to differ.
 
-                           When comparing files, "path" is the absolute path to
-                           the excluded object; when comparing groups, "path" is
-                           similar to the relative path from the group to the
-                           excluded object. This "path" can be taken from the
-                           first section of the output of the --verbose option.
-                           For example, if you are comparing the group /groupA
-                           in two files and you want to exclude
-                           /groupA/groupB/groupC in both files, the exclude
-                           option would read as follows:
-                             --exclude-path "/groupB/groupC"
+         When comparing files, "path" is the absolute path to the excluded;
+         object; when comparing groups, "path" is similar to the relative
+         path from the group to the excluded object. This "path" can be
+         taken from the first section of the output of the --verbose option.
+         For example, if you are comparing the group /groupA in two files and
+         you want to exclude /groupA/groupB/groupC in both files, the exclude
+         option would read as follows:
+           --exclude-path "/groupB/groupC"
 
-                           If there are multiple paths to an object, only the
-                           specified path(s) will be excluded; the comparison
-                           will include any path not explicitly excluded.
-                           This option can be used repeatedly to exclude
-                           multiple paths.
+         If there are multiple paths to an object, only the specified path(s)
+         will be excluded; the comparison will include any path not explicitly
+         excluded.
+         This option can be used repeatedly to exclude multiple paths.
 
  Modes of output:
   Default mode: print the number of differences found and where they occured
diff --git a/tools/h5diff/testfiles/h5diff_612.txt b/tools/h5diff/testfiles/h5diff_612.txt
index c5b3464..05318bd 100644
--- a/tools/h5diff/testfiles/h5diff_612.txt
+++ b/tools/h5diff/testfiles/h5diff_612.txt
@@ -1,96 +1,97 @@
 <-p -4> is not a valid option
 usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] 
-  file1                    File name of the first HDF5 file
-  file2                    File name of the second HDF5 file
-  [obj1]                   Name of an HDF5 object, in absolute path
-  [obj2]                   Name of an HDF5 object, in absolute path
+  file1             File name of the first HDF5 file
+  file2             File name of the second HDF5 file
+  [obj1]            Name of an HDF5 object, in absolute path
+  [obj2]            Name of an HDF5 object, in absolute path
 
   OPTIONS
-   -h, --help              Print a usage message and exit.
-   -V, --version           Print version number and exit.
-   -r, --report            Report mode. Print differences.
-   -v --verbose            Verbose mode. Print differences information and list
-                           of objects.
-   -vN --verbose=N         Verbose mode with level. Print differences and list
-                           of objects.
-                           Level of detail depends on value of N:
-                            0 : Identical to '-v' or '--verbose'.
-                            1 : All level 0 information plus one-line attribute
-                                status summary.
-                            2 : All level 1 information plus extended attribute
-                                status report.
-   -q, --quiet             Quiet mode. Do not produce output.
-   --follow-symlinks       Follow symbolic links (soft links and external links)
-                           and compare the links' target objects.
-                           If symbolic link(s) with the same name exist in the
-                           files being compared, then determine whether the 
-                           target of each link is an existing object (dataset,
-                           group, or named datatype) or the link is a dangling
-                           link (a soft or external link pointing to a target
-                           object that does not yet exist).
-                           - If both symbolic links are dangling links, they
-                             are treated as being the same; by default, h5diff
-                             returns an exit code of 0. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If only one of the two links is a dangling link,
-                             they are treated as being different and h5diff 
-                             returns an exit code of 1. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If both symbolic links point to existing objects,
-                             h5diff compares the two objects.
-                           If any symbolic link specified in the call to h5diff
-                           does not exist, h5diff treats it as an error and
-                           returns an exit code of 2.
-   --no-dangling-links     Must be used with --follow-symlinks option;
-                           otherwise, h5diff shows error message and returns
-                           an exit code of 2.
-                           Check for any symbolic links (soft links or external
-                           links) that do not resolve to an existing object
-                           (dataset, group, or named datatype).  If any
-                           dangling link is found, this situation is treated as
-                           an error and h5diff returns an exit code of 2.
-   -c, --compare           List objects that are not comparable
-   -N, --nan               Avoid NaNs detection
-   -n C, --count=C         Print differences up to C number, C is a positive
-                           integer.
-   -d D, --delta=D         Print difference if (|a-b| > D), D is a positive
-                           number.
-   -p R, --relative=R      Print difference if (|(a-b)/b| > R), R is a positive
-                           number.
-   --use-system-epsilon    Print difference if (|a-b| > EPSILON), EPSILON is
-                           a system epsilon value.
-                           If the system epsilon is not defined, the below
-                           one of the following predefined values will be used:
-                             FLT_EPSILON = 1.19209E-07 for floating-point type
-                             DBL_EPSILON = 2.22045E-16 for double percision type
-   --exclude-path "path"   Exclude the specified path to an object when
-                           comparing files or groups. If a group is excluded,
-                           all member objects will also be excluded.
-                           The specified path is excluded wherever it occurs.
-                           This flexibility enables the same option to exclude
-                           either objects that exist only in one file or
-                           common objects that are known to differ.
+   -h, --help
+         Print a usage message and exit.
+   -V, --version
+         Print version number and exit.
+   -r, --report
+         Report mode. Print differences.
+   -v --verbose
+         Verbose mode. Print differences information and list of objects.
+   -vN --verbose=N
+         Verbose mode with level. Print differences and list of objects.
+         Level of detail depends on value of N:
+          0 : Identical to '-v' or '--verbose'.
+          1 : All level 0 information plus one-line attribute
+              status summary.
+          2 : All level 1 information plus extended attribute
+              status report.
+   -q, --quiet
+         Quiet mode. Do not produce output.
+   --follow-symlinks
+         Follow symbolic links (soft links and external links and compare the)
+         links' target objects.
+         If symbolic link(s) with the same name exist in the files being
+         compared, then determine whether the target of each link is an existing
+         object (dataset, group, or named datatype) or the link is a dangling
+         link (a soft or external link pointing to a target object that does
+         not yet exist).
+         - If both symbolic links are dangling links, they are treated as being
+           the same; by default, h5diff returns an exit code of 0.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If only one of the two links is a dangling link,they are treated as
+           being different and h5diff returns an exit code of 1.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If both symbolic links point to existing objects, h5diff compares the
+           two objects.
+         If any symbolic link specified in the call to h5diff does not exist,
+         h5diff treats it as an error and returns an exit code of 2.
+   --no-dangling-links
+         Must be used with --follow-symlinks option; otherwise, h5diff shows
+         error message and returns an exit code of 2.
+         Check for any symbolic links (soft links or external links) that do not
+         resolve to an existing object (dataset, group, or named datatype).
+         If any dangling link is found, this situation is treated as an error
+         and h5diff returns an exit code of 2.
+   -c, --compare
+         List objects that are not comparable
+   -N, --nan
+         Avoid NaNs detection
+   -n C, --count=C
+         Print differences up to C. C must be a positive integer.
+   -d D, --delta=D
+         Print difference if (|a-b| > D). D must be a positive number.
+         Can not use with '-p' or '--use-system-epsilon'.
+   -p R, --relative=R
+         Print difference if (|(a-b)/b| > R). R must be a positive number.
+         Can not use with '-d' or '--use-system-epsilon'.
+   --use-system-epsilon
+         Print difference if (|a-b| > EPSILON), EPSILON is system defined value.
+         If the system epsilon is not defined,one of the following predefined
+         values will be used:
+           FLT_EPSILON = 1.19209E-07 for floating-point type
+           DBL_EPSILON = 2.22045E-16 for double precision type
+         Can not use with '-p' or '-d'.
+   --exclude-path "path" 
+         Exclude the specified path to an object when comparing files or groups.
+         If a group is excluded, all member objects will also be excluded.
+         The specified path is excluded wherever it occurs.
+         This flexibility enables the same option to exclude either objects that
+         exist only in one file or common objects that are known to differ.
 
-                           When comparing files, "path" is the absolute path to
-                           the excluded object; when comparing groups, "path" is
-                           similar to the relative path from the group to the
-                           excluded object. This "path" can be taken from the
-                           first section of the output of the --verbose option.
-                           For example, if you are comparing the group /groupA
-                           in two files and you want to exclude
-                           /groupA/groupB/groupC in both files, the exclude
-                           option would read as follows:
-                             --exclude-path "/groupB/groupC"
+         When comparing files, "path" is the absolute path to the excluded;
+         object; when comparing groups, "path" is similar to the relative
+         path from the group to the excluded object. This "path" can be
+         taken from the first section of the output of the --verbose option.
+         For example, if you are comparing the group /groupA in two files and
+         you want to exclude /groupA/groupB/groupC in both files, the exclude
+         option would read as follows:
+           --exclude-path "/groupB/groupC"
 
-                           If there are multiple paths to an object, only the
-                           specified path(s) will be excluded; the comparison
-                           will include any path not explicitly excluded.
-                           This option can be used repeatedly to exclude
-                           multiple paths.
+         If there are multiple paths to an object, only the specified path(s)
+         will be excluded; the comparison will include any path not explicitly
+         excluded.
+         This option can be used repeatedly to exclude multiple paths.
 
  Modes of output:
   Default mode: print the number of differences found and where they occured
diff --git a/tools/h5diff/testfiles/h5diff_615.txt b/tools/h5diff/testfiles/h5diff_615.txt
index 58d5c70..fd756b3 100644
--- a/tools/h5diff/testfiles/h5diff_615.txt
+++ b/tools/h5diff/testfiles/h5diff_615.txt
@@ -1,96 +1,97 @@
 <-p 0x1> is not a valid option
 usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] 
-  file1                    File name of the first HDF5 file
-  file2                    File name of the second HDF5 file
-  [obj1]                   Name of an HDF5 object, in absolute path
-  [obj2]                   Name of an HDF5 object, in absolute path
+  file1             File name of the first HDF5 file
+  file2             File name of the second HDF5 file
+  [obj1]            Name of an HDF5 object, in absolute path
+  [obj2]            Name of an HDF5 object, in absolute path
 
   OPTIONS
-   -h, --help              Print a usage message and exit.
-   -V, --version           Print version number and exit.
-   -r, --report            Report mode. Print differences.
-   -v --verbose            Verbose mode. Print differences information and list
-                           of objects.
-   -vN --verbose=N         Verbose mode with level. Print differences and list
-                           of objects.
-                           Level of detail depends on value of N:
-                            0 : Identical to '-v' or '--verbose'.
-                            1 : All level 0 information plus one-line attribute
-                                status summary.
-                            2 : All level 1 information plus extended attribute
-                                status report.
-   -q, --quiet             Quiet mode. Do not produce output.
-   --follow-symlinks       Follow symbolic links (soft links and external links)
-                           and compare the links' target objects.
-                           If symbolic link(s) with the same name exist in the
-                           files being compared, then determine whether the 
-                           target of each link is an existing object (dataset,
-                           group, or named datatype) or the link is a dangling
-                           link (a soft or external link pointing to a target
-                           object that does not yet exist).
-                           - If both symbolic links are dangling links, they
-                             are treated as being the same; by default, h5diff
-                             returns an exit code of 0. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If only one of the two links is a dangling link,
-                             they are treated as being different and h5diff 
-                             returns an exit code of 1. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If both symbolic links point to existing objects,
-                             h5diff compares the two objects.
-                           If any symbolic link specified in the call to h5diff
-                           does not exist, h5diff treats it as an error and
-                           returns an exit code of 2.
-   --no-dangling-links     Must be used with --follow-symlinks option;
-                           otherwise, h5diff shows error message and returns
-                           an exit code of 2.
-                           Check for any symbolic links (soft links or external
-                           links) that do not resolve to an existing object
-                           (dataset, group, or named datatype).  If any
-                           dangling link is found, this situation is treated as
-                           an error and h5diff returns an exit code of 2.
-   -c, --compare           List objects that are not comparable
-   -N, --nan               Avoid NaNs detection
-   -n C, --count=C         Print differences up to C number, C is a positive
-                           integer.
-   -d D, --delta=D         Print difference if (|a-b| > D), D is a positive
-                           number.
-   -p R, --relative=R      Print difference if (|(a-b)/b| > R), R is a positive
-                           number.
-   --use-system-epsilon    Print difference if (|a-b| > EPSILON), EPSILON is
-                           a system epsilon value.
-                           If the system epsilon is not defined, the below
-                           one of the following predefined values will be used:
-                             FLT_EPSILON = 1.19209E-07 for floating-point type
-                             DBL_EPSILON = 2.22045E-16 for double percision type
-   --exclude-path "path"   Exclude the specified path to an object when
-                           comparing files or groups. If a group is excluded,
-                           all member objects will also be excluded.
-                           The specified path is excluded wherever it occurs.
-                           This flexibility enables the same option to exclude
-                           either objects that exist only in one file or
-                           common objects that are known to differ.
+   -h, --help
+         Print a usage message and exit.
+   -V, --version
+         Print version number and exit.
+   -r, --report
+         Report mode. Print differences.
+   -v --verbose
+         Verbose mode. Print differences information and list of objects.
+   -vN --verbose=N
+         Verbose mode with level. Print differences and list of objects.
+         Level of detail depends on value of N:
+          0 : Identical to '-v' or '--verbose'.
+          1 : All level 0 information plus one-line attribute
+              status summary.
+          2 : All level 1 information plus extended attribute
+              status report.
+   -q, --quiet
+         Quiet mode. Do not produce output.
+   --follow-symlinks
+         Follow symbolic links (soft links and external links and compare the)
+         links' target objects.
+         If symbolic link(s) with the same name exist in the files being
+         compared, then determine whether the target of each link is an existing
+         object (dataset, group, or named datatype) or the link is a dangling
+         link (a soft or external link pointing to a target object that does
+         not yet exist).
+         - If both symbolic links are dangling links, they are treated as being
+           the same; by default, h5diff returns an exit code of 0.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If only one of the two links is a dangling link,they are treated as
+           being different and h5diff returns an exit code of 1.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If both symbolic links point to existing objects, h5diff compares the
+           two objects.
+         If any symbolic link specified in the call to h5diff does not exist,
+         h5diff treats it as an error and returns an exit code of 2.
+   --no-dangling-links
+         Must be used with --follow-symlinks option; otherwise, h5diff shows
+         error message and returns an exit code of 2.
+         Check for any symbolic links (soft links or external links) that do not
+         resolve to an existing object (dataset, group, or named datatype).
+         If any dangling link is found, this situation is treated as an error
+         and h5diff returns an exit code of 2.
+   -c, --compare
+         List objects that are not comparable
+   -N, --nan
+         Avoid NaNs detection
+   -n C, --count=C
+         Print differences up to C. C must be a positive integer.
+   -d D, --delta=D
+         Print difference if (|a-b| > D). D must be a positive number.
+         Can not use with '-p' or '--use-system-epsilon'.
+   -p R, --relative=R
+         Print difference if (|(a-b)/b| > R). R must be a positive number.
+         Can not use with '-d' or '--use-system-epsilon'.
+   --use-system-epsilon
+         Print difference if (|a-b| > EPSILON), EPSILON is system defined value.
+         If the system epsilon is not defined,one of the following predefined
+         values will be used:
+           FLT_EPSILON = 1.19209E-07 for floating-point type
+           DBL_EPSILON = 2.22045E-16 for double precision type
+         Can not use with '-p' or '-d'.
+   --exclude-path "path" 
+         Exclude the specified path to an object when comparing files or groups.
+         If a group is excluded, all member objects will also be excluded.
+         The specified path is excluded wherever it occurs.
+         This flexibility enables the same option to exclude either objects that
+         exist only in one file or common objects that are known to differ.
 
-                           When comparing files, "path" is the absolute path to
-                           the excluded object; when comparing groups, "path" is
-                           similar to the relative path from the group to the
-                           excluded object. This "path" can be taken from the
-                           first section of the output of the --verbose option.
-                           For example, if you are comparing the group /groupA
-                           in two files and you want to exclude
-                           /groupA/groupB/groupC in both files, the exclude
-                           option would read as follows:
-                             --exclude-path "/groupB/groupC"
+         When comparing files, "path" is the absolute path to the excluded;
+         object; when comparing groups, "path" is similar to the relative
+         path from the group to the excluded object. This "path" can be
+         taken from the first section of the output of the --verbose option.
+         For example, if you are comparing the group /groupA in two files and
+         you want to exclude /groupA/groupB/groupC in both files, the exclude
+         option would read as follows:
+           --exclude-path "/groupB/groupC"
 
-                           If there are multiple paths to an object, only the
-                           specified path(s) will be excluded; the comparison
-                           will include any path not explicitly excluded.
-                           This option can be used repeatedly to exclude
-                           multiple paths.
+         If there are multiple paths to an object, only the specified path(s)
+         will be excluded; the comparison will include any path not explicitly
+         excluded.
+         This option can be used repeatedly to exclude multiple paths.
 
  Modes of output:
   Default mode: print the number of differences found and where they occured
diff --git a/tools/h5diff/testfiles/h5diff_621.txt b/tools/h5diff/testfiles/h5diff_621.txt
index 1c8f745..fd8c680 100644
--- a/tools/h5diff/testfiles/h5diff_621.txt
+++ b/tools/h5diff/testfiles/h5diff_621.txt
@@ -1,96 +1,97 @@
 <-n -4> is not a valid option
 usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] 
-  file1                    File name of the first HDF5 file
-  file2                    File name of the second HDF5 file
-  [obj1]                   Name of an HDF5 object, in absolute path
-  [obj2]                   Name of an HDF5 object, in absolute path
+  file1             File name of the first HDF5 file
+  file2             File name of the second HDF5 file
+  [obj1]            Name of an HDF5 object, in absolute path
+  [obj2]            Name of an HDF5 object, in absolute path
 
   OPTIONS
-   -h, --help              Print a usage message and exit.
-   -V, --version           Print version number and exit.
-   -r, --report            Report mode. Print differences.
-   -v --verbose            Verbose mode. Print differences information and list
-                           of objects.
-   -vN --verbose=N         Verbose mode with level. Print differences and list
-                           of objects.
-                           Level of detail depends on value of N:
-                            0 : Identical to '-v' or '--verbose'.
-                            1 : All level 0 information plus one-line attribute
-                                status summary.
-                            2 : All level 1 information plus extended attribute
-                                status report.
-   -q, --quiet             Quiet mode. Do not produce output.
-   --follow-symlinks       Follow symbolic links (soft links and external links)
-                           and compare the links' target objects.
-                           If symbolic link(s) with the same name exist in the
-                           files being compared, then determine whether the 
-                           target of each link is an existing object (dataset,
-                           group, or named datatype) or the link is a dangling
-                           link (a soft or external link pointing to a target
-                           object that does not yet exist).
-                           - If both symbolic links are dangling links, they
-                             are treated as being the same; by default, h5diff
-                             returns an exit code of 0. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If only one of the two links is a dangling link,
-                             they are treated as being different and h5diff 
-                             returns an exit code of 1. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If both symbolic links point to existing objects,
-                             h5diff compares the two objects.
-                           If any symbolic link specified in the call to h5diff
-                           does not exist, h5diff treats it as an error and
-                           returns an exit code of 2.
-   --no-dangling-links     Must be used with --follow-symlinks option;
-                           otherwise, h5diff shows error message and returns
-                           an exit code of 2.
-                           Check for any symbolic links (soft links or external
-                           links) that do not resolve to an existing object
-                           (dataset, group, or named datatype).  If any
-                           dangling link is found, this situation is treated as
-                           an error and h5diff returns an exit code of 2.
-   -c, --compare           List objects that are not comparable
-   -N, --nan               Avoid NaNs detection
-   -n C, --count=C         Print differences up to C number, C is a positive
-                           integer.
-   -d D, --delta=D         Print difference if (|a-b| > D), D is a positive
-                           number.
-   -p R, --relative=R      Print difference if (|(a-b)/b| > R), R is a positive
-                           number.
-   --use-system-epsilon    Print difference if (|a-b| > EPSILON), EPSILON is
-                           a system epsilon value.
-                           If the system epsilon is not defined, the below
-                           one of the following predefined values will be used:
-                             FLT_EPSILON = 1.19209E-07 for floating-point type
-                             DBL_EPSILON = 2.22045E-16 for double percision type
-   --exclude-path "path"   Exclude the specified path to an object when
-                           comparing files or groups. If a group is excluded,
-                           all member objects will also be excluded.
-                           The specified path is excluded wherever it occurs.
-                           This flexibility enables the same option to exclude
-                           either objects that exist only in one file or
-                           common objects that are known to differ.
+   -h, --help
+         Print a usage message and exit.
+   -V, --version
+         Print version number and exit.
+   -r, --report
+         Report mode. Print differences.
+   -v --verbose
+         Verbose mode. Print differences information and list of objects.
+   -vN --verbose=N
+         Verbose mode with level. Print differences and list of objects.
+         Level of detail depends on value of N:
+          0 : Identical to '-v' or '--verbose'.
+          1 : All level 0 information plus one-line attribute
+              status summary.
+          2 : All level 1 information plus extended attribute
+              status report.
+   -q, --quiet
+         Quiet mode. Do not produce output.
+   --follow-symlinks
+         Follow symbolic links (soft links and external links and compare the)
+         links' target objects.
+         If symbolic link(s) with the same name exist in the files being
+         compared, then determine whether the target of each link is an existing
+         object (dataset, group, or named datatype) or the link is a dangling
+         link (a soft or external link pointing to a target object that does
+         not yet exist).
+         - If both symbolic links are dangling links, they are treated as being
+           the same; by default, h5diff returns an exit code of 0.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If only one of the two links is a dangling link,they are treated as
+           being different and h5diff returns an exit code of 1.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If both symbolic links point to existing objects, h5diff compares the
+           two objects.
+         If any symbolic link specified in the call to h5diff does not exist,
+         h5diff treats it as an error and returns an exit code of 2.
+   --no-dangling-links
+         Must be used with --follow-symlinks option; otherwise, h5diff shows
+         error message and returns an exit code of 2.
+         Check for any symbolic links (soft links or external links) that do not
+         resolve to an existing object (dataset, group, or named datatype).
+         If any dangling link is found, this situation is treated as an error
+         and h5diff returns an exit code of 2.
+   -c, --compare
+         List objects that are not comparable
+   -N, --nan
+         Avoid NaNs detection
+   -n C, --count=C
+         Print differences up to C. C must be a positive integer.
+   -d D, --delta=D
+         Print difference if (|a-b| > D). D must be a positive number.
+         Can not use with '-p' or '--use-system-epsilon'.
+   -p R, --relative=R
+         Print difference if (|(a-b)/b| > R). R must be a positive number.
+         Can not use with '-d' or '--use-system-epsilon'.
+   --use-system-epsilon
+         Print difference if (|a-b| > EPSILON), EPSILON is system defined value.
+         If the system epsilon is not defined,one of the following predefined
+         values will be used:
+           FLT_EPSILON = 1.19209E-07 for floating-point type
+           DBL_EPSILON = 2.22045E-16 for double precision type
+         Can not use with '-p' or '-d'.
+   --exclude-path "path" 
+         Exclude the specified path to an object when comparing files or groups.
+         If a group is excluded, all member objects will also be excluded.
+         The specified path is excluded wherever it occurs.
+         This flexibility enables the same option to exclude either objects that
+         exist only in one file or common objects that are known to differ.
 
-                           When comparing files, "path" is the absolute path to
-                           the excluded object; when comparing groups, "path" is
-                           similar to the relative path from the group to the
-                           excluded object. This "path" can be taken from the
-                           first section of the output of the --verbose option.
-                           For example, if you are comparing the group /groupA
-                           in two files and you want to exclude
-                           /groupA/groupB/groupC in both files, the exclude
-                           option would read as follows:
-                             --exclude-path "/groupB/groupC"
+         When comparing files, "path" is the absolute path to the excluded;
+         object; when comparing groups, "path" is similar to the relative
+         path from the group to the excluded object. This "path" can be
+         taken from the first section of the output of the --verbose option.
+         For example, if you are comparing the group /groupA in two files and
+         you want to exclude /groupA/groupB/groupC in both files, the exclude
+         option would read as follows:
+           --exclude-path "/groupB/groupC"
 
-                           If there are multiple paths to an object, only the
-                           specified path(s) will be excluded; the comparison
-                           will include any path not explicitly excluded.
-                           This option can be used repeatedly to exclude
-                           multiple paths.
+         If there are multiple paths to an object, only the specified path(s)
+         will be excluded; the comparison will include any path not explicitly
+         excluded.
+         This option can be used repeatedly to exclude multiple paths.
 
  Modes of output:
   Default mode: print the number of differences found and where they occured
diff --git a/tools/h5diff/testfiles/h5diff_622.txt b/tools/h5diff/testfiles/h5diff_622.txt
index 22f216f..f0d38af 100644
--- a/tools/h5diff/testfiles/h5diff_622.txt
+++ b/tools/h5diff/testfiles/h5diff_622.txt
@@ -1,96 +1,97 @@
 <-n 0> is not a valid option
 usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] 
-  file1                    File name of the first HDF5 file
-  file2                    File name of the second HDF5 file
-  [obj1]                   Name of an HDF5 object, in absolute path
-  [obj2]                   Name of an HDF5 object, in absolute path
+  file1             File name of the first HDF5 file
+  file2             File name of the second HDF5 file
+  [obj1]            Name of an HDF5 object, in absolute path
+  [obj2]            Name of an HDF5 object, in absolute path
 
   OPTIONS
-   -h, --help              Print a usage message and exit.
-   -V, --version           Print version number and exit.
-   -r, --report            Report mode. Print differences.
-   -v --verbose            Verbose mode. Print differences information and list
-                           of objects.
-   -vN --verbose=N         Verbose mode with level. Print differences and list
-                           of objects.
-                           Level of detail depends on value of N:
-                            0 : Identical to '-v' or '--verbose'.
-                            1 : All level 0 information plus one-line attribute
-                                status summary.
-                            2 : All level 1 information plus extended attribute
-                                status report.
-   -q, --quiet             Quiet mode. Do not produce output.
-   --follow-symlinks       Follow symbolic links (soft links and external links)
-                           and compare the links' target objects.
-                           If symbolic link(s) with the same name exist in the
-                           files being compared, then determine whether the 
-                           target of each link is an existing object (dataset,
-                           group, or named datatype) or the link is a dangling
-                           link (a soft or external link pointing to a target
-                           object that does not yet exist).
-                           - If both symbolic links are dangling links, they
-                             are treated as being the same; by default, h5diff
-                             returns an exit code of 0. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If only one of the two links is a dangling link,
-                             they are treated as being different and h5diff 
-                             returns an exit code of 1. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If both symbolic links point to existing objects,
-                             h5diff compares the two objects.
-                           If any symbolic link specified in the call to h5diff
-                           does not exist, h5diff treats it as an error and
-                           returns an exit code of 2.
-   --no-dangling-links     Must be used with --follow-symlinks option;
-                           otherwise, h5diff shows error message and returns
-                           an exit code of 2.
-                           Check for any symbolic links (soft links or external
-                           links) that do not resolve to an existing object
-                           (dataset, group, or named datatype).  If any
-                           dangling link is found, this situation is treated as
-                           an error and h5diff returns an exit code of 2.
-   -c, --compare           List objects that are not comparable
-   -N, --nan               Avoid NaNs detection
-   -n C, --count=C         Print differences up to C number, C is a positive
-                           integer.
-   -d D, --delta=D         Print difference if (|a-b| > D), D is a positive
-                           number.
-   -p R, --relative=R      Print difference if (|(a-b)/b| > R), R is a positive
-                           number.
-   --use-system-epsilon    Print difference if (|a-b| > EPSILON), EPSILON is
-                           a system epsilon value.
-                           If the system epsilon is not defined, the below
-                           one of the following predefined values will be used:
-                             FLT_EPSILON = 1.19209E-07 for floating-point type
-                             DBL_EPSILON = 2.22045E-16 for double percision type
-   --exclude-path "path"   Exclude the specified path to an object when
-                           comparing files or groups. If a group is excluded,
-                           all member objects will also be excluded.
-                           The specified path is excluded wherever it occurs.
-                           This flexibility enables the same option to exclude
-                           either objects that exist only in one file or
-                           common objects that are known to differ.
+   -h, --help
+         Print a usage message and exit.
+   -V, --version
+         Print version number and exit.
+   -r, --report
+         Report mode. Print differences.
+   -v --verbose
+         Verbose mode. Print differences information and list of objects.
+   -vN --verbose=N
+         Verbose mode with level. Print differences and list of objects.
+         Level of detail depends on value of N:
+          0 : Identical to '-v' or '--verbose'.
+          1 : All level 0 information plus one-line attribute
+              status summary.
+          2 : All level 1 information plus extended attribute
+              status report.
+   -q, --quiet
+         Quiet mode. Do not produce output.
+   --follow-symlinks
+         Follow symbolic links (soft links and external links and compare the)
+         links' target objects.
+         If symbolic link(s) with the same name exist in the files being
+         compared, then determine whether the target of each link is an existing
+         object (dataset, group, or named datatype) or the link is a dangling
+         link (a soft or external link pointing to a target object that does
+         not yet exist).
+         - If both symbolic links are dangling links, they are treated as being
+           the same; by default, h5diff returns an exit code of 0.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If only one of the two links is a dangling link,they are treated as
+           being different and h5diff returns an exit code of 1.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If both symbolic links point to existing objects, h5diff compares the
+           two objects.
+         If any symbolic link specified in the call to h5diff does not exist,
+         h5diff treats it as an error and returns an exit code of 2.
+   --no-dangling-links
+         Must be used with --follow-symlinks option; otherwise, h5diff shows
+         error message and returns an exit code of 2.
+         Check for any symbolic links (soft links or external links) that do not
+         resolve to an existing object (dataset, group, or named datatype).
+         If any dangling link is found, this situation is treated as an error
+         and h5diff returns an exit code of 2.
+   -c, --compare
+         List objects that are not comparable
+   -N, --nan
+         Avoid NaNs detection
+   -n C, --count=C
+         Print differences up to C. C must be a positive integer.
+   -d D, --delta=D
+         Print difference if (|a-b| > D). D must be a positive number.
+         Can not use with '-p' or '--use-system-epsilon'.
+   -p R, --relative=R
+         Print difference if (|(a-b)/b| > R). R must be a positive number.
+         Can not use with '-d' or '--use-system-epsilon'.
+   --use-system-epsilon
+         Print difference if (|a-b| > EPSILON), EPSILON is system defined value.
+         If the system epsilon is not defined,one of the following predefined
+         values will be used:
+           FLT_EPSILON = 1.19209E-07 for floating-point type
+           DBL_EPSILON = 2.22045E-16 for double precision type
+         Can not use with '-p' or '-d'.
+   --exclude-path "path" 
+         Exclude the specified path to an object when comparing files or groups.
+         If a group is excluded, all member objects will also be excluded.
+         The specified path is excluded wherever it occurs.
+         This flexibility enables the same option to exclude either objects that
+         exist only in one file or common objects that are known to differ.
 
-                           When comparing files, "path" is the absolute path to
-                           the excluded object; when comparing groups, "path" is
-                           similar to the relative path from the group to the
-                           excluded object. This "path" can be taken from the
-                           first section of the output of the --verbose option.
-                           For example, if you are comparing the group /groupA
-                           in two files and you want to exclude
-                           /groupA/groupB/groupC in both files, the exclude
-                           option would read as follows:
-                             --exclude-path "/groupB/groupC"
+         When comparing files, "path" is the absolute path to the excluded;
+         object; when comparing groups, "path" is similar to the relative
+         path from the group to the excluded object. This "path" can be
+         taken from the first section of the output of the --verbose option.
+         For example, if you are comparing the group /groupA in two files and
+         you want to exclude /groupA/groupB/groupC in both files, the exclude
+         option would read as follows:
+           --exclude-path "/groupB/groupC"
 
-                           If there are multiple paths to an object, only the
-                           specified path(s) will be excluded; the comparison
-                           will include any path not explicitly excluded.
-                           This option can be used repeatedly to exclude
-                           multiple paths.
+         If there are multiple paths to an object, only the specified path(s)
+         will be excluded; the comparison will include any path not explicitly
+         excluded.
+         This option can be used repeatedly to exclude multiple paths.
 
  Modes of output:
   Default mode: print the number of differences found and where they occured
diff --git a/tools/h5diff/testfiles/h5diff_623.txt b/tools/h5diff/testfiles/h5diff_623.txt
index 5dce69c..4ab66a5 100644
--- a/tools/h5diff/testfiles/h5diff_623.txt
+++ b/tools/h5diff/testfiles/h5diff_623.txt
@@ -1,96 +1,97 @@
 <-n u> is not a valid option
 usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] 
-  file1                    File name of the first HDF5 file
-  file2                    File name of the second HDF5 file
-  [obj1]                   Name of an HDF5 object, in absolute path
-  [obj2]                   Name of an HDF5 object, in absolute path
+  file1             File name of the first HDF5 file
+  file2             File name of the second HDF5 file
+  [obj1]            Name of an HDF5 object, in absolute path
+  [obj2]            Name of an HDF5 object, in absolute path
 
   OPTIONS
-   -h, --help              Print a usage message and exit.
-   -V, --version           Print version number and exit.
-   -r, --report            Report mode. Print differences.
-   -v --verbose            Verbose mode. Print differences information and list
-                           of objects.
-   -vN --verbose=N         Verbose mode with level. Print differences and list
-                           of objects.
-                           Level of detail depends on value of N:
-                            0 : Identical to '-v' or '--verbose'.
-                            1 : All level 0 information plus one-line attribute
-                                status summary.
-                            2 : All level 1 information plus extended attribute
-                                status report.
-   -q, --quiet             Quiet mode. Do not produce output.
-   --follow-symlinks       Follow symbolic links (soft links and external links)
-                           and compare the links' target objects.
-                           If symbolic link(s) with the same name exist in the
-                           files being compared, then determine whether the 
-                           target of each link is an existing object (dataset,
-                           group, or named datatype) or the link is a dangling
-                           link (a soft or external link pointing to a target
-                           object that does not yet exist).
-                           - If both symbolic links are dangling links, they
-                             are treated as being the same; by default, h5diff
-                             returns an exit code of 0. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If only one of the two links is a dangling link,
-                             they are treated as being different and h5diff 
-                             returns an exit code of 1. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If both symbolic links point to existing objects,
-                             h5diff compares the two objects.
-                           If any symbolic link specified in the call to h5diff
-                           does not exist, h5diff treats it as an error and
-                           returns an exit code of 2.
-   --no-dangling-links     Must be used with --follow-symlinks option;
-                           otherwise, h5diff shows error message and returns
-                           an exit code of 2.
-                           Check for any symbolic links (soft links or external
-                           links) that do not resolve to an existing object
-                           (dataset, group, or named datatype).  If any
-                           dangling link is found, this situation is treated as
-                           an error and h5diff returns an exit code of 2.
-   -c, --compare           List objects that are not comparable
-   -N, --nan               Avoid NaNs detection
-   -n C, --count=C         Print differences up to C number, C is a positive
-                           integer.
-   -d D, --delta=D         Print difference if (|a-b| > D), D is a positive
-                           number.
-   -p R, --relative=R      Print difference if (|(a-b)/b| > R), R is a positive
-                           number.
-   --use-system-epsilon    Print difference if (|a-b| > EPSILON), EPSILON is
-                           a system epsilon value.
-                           If the system epsilon is not defined, the below
-                           one of the following predefined values will be used:
-                             FLT_EPSILON = 1.19209E-07 for floating-point type
-                             DBL_EPSILON = 2.22045E-16 for double percision type
-   --exclude-path "path"   Exclude the specified path to an object when
-                           comparing files or groups. If a group is excluded,
-                           all member objects will also be excluded.
-                           The specified path is excluded wherever it occurs.
-                           This flexibility enables the same option to exclude
-                           either objects that exist only in one file or
-                           common objects that are known to differ.
+   -h, --help
+         Print a usage message and exit.
+   -V, --version
+         Print version number and exit.
+   -r, --report
+         Report mode. Print differences.
+   -v --verbose
+         Verbose mode. Print differences information and list of objects.
+   -vN --verbose=N
+         Verbose mode with level. Print differences and list of objects.
+         Level of detail depends on value of N:
+          0 : Identical to '-v' or '--verbose'.
+          1 : All level 0 information plus one-line attribute
+              status summary.
+          2 : All level 1 information plus extended attribute
+              status report.
+   -q, --quiet
+         Quiet mode. Do not produce output.
+   --follow-symlinks
+         Follow symbolic links (soft links and external links and compare the)
+         links' target objects.
+         If symbolic link(s) with the same name exist in the files being
+         compared, then determine whether the target of each link is an existing
+         object (dataset, group, or named datatype) or the link is a dangling
+         link (a soft or external link pointing to a target object that does
+         not yet exist).
+         - If both symbolic links are dangling links, they are treated as being
+           the same; by default, h5diff returns an exit code of 0.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If only one of the two links is a dangling link,they are treated as
+           being different and h5diff returns an exit code of 1.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If both symbolic links point to existing objects, h5diff compares the
+           two objects.
+         If any symbolic link specified in the call to h5diff does not exist,
+         h5diff treats it as an error and returns an exit code of 2.
+   --no-dangling-links
+         Must be used with --follow-symlinks option; otherwise, h5diff shows
+         error message and returns an exit code of 2.
+         Check for any symbolic links (soft links or external links) that do not
+         resolve to an existing object (dataset, group, or named datatype).
+         If any dangling link is found, this situation is treated as an error
+         and h5diff returns an exit code of 2.
+   -c, --compare
+         List objects that are not comparable
+   -N, --nan
+         Avoid NaNs detection
+   -n C, --count=C
+         Print differences up to C. C must be a positive integer.
+   -d D, --delta=D
+         Print difference if (|a-b| > D). D must be a positive number.
+         Can not use with '-p' or '--use-system-epsilon'.
+   -p R, --relative=R
+         Print difference if (|(a-b)/b| > R). R must be a positive number.
+         Can not use with '-d' or '--use-system-epsilon'.
+   --use-system-epsilon
+         Print difference if (|a-b| > EPSILON), EPSILON is system defined value.
+         If the system epsilon is not defined,one of the following predefined
+         values will be used:
+           FLT_EPSILON = 1.19209E-07 for floating-point type
+           DBL_EPSILON = 2.22045E-16 for double precision type
+         Can not use with '-p' or '-d'.
+   --exclude-path "path" 
+         Exclude the specified path to an object when comparing files or groups.
+         If a group is excluded, all member objects will also be excluded.
+         The specified path is excluded wherever it occurs.
+         This flexibility enables the same option to exclude either objects that
+         exist only in one file or common objects that are known to differ.
 
-                           When comparing files, "path" is the absolute path to
-                           the excluded object; when comparing groups, "path" is
-                           similar to the relative path from the group to the
-                           excluded object. This "path" can be taken from the
-                           first section of the output of the --verbose option.
-                           For example, if you are comparing the group /groupA
-                           in two files and you want to exclude
-                           /groupA/groupB/groupC in both files, the exclude
-                           option would read as follows:
-                             --exclude-path "/groupB/groupC"
+         When comparing files, "path" is the absolute path to the excluded;
+         object; when comparing groups, "path" is similar to the relative
+         path from the group to the excluded object. This "path" can be
+         taken from the first section of the output of the --verbose option.
+         For example, if you are comparing the group /groupA in two files and
+         you want to exclude /groupA/groupB/groupC in both files, the exclude
+         option would read as follows:
+           --exclude-path "/groupB/groupC"
 
-                           If there are multiple paths to an object, only the
-                           specified path(s) will be excluded; the comparison
-                           will include any path not explicitly excluded.
-                           This option can be used repeatedly to exclude
-                           multiple paths.
+         If there are multiple paths to an object, only the specified path(s)
+         will be excluded; the comparison will include any path not explicitly
+         excluded.
+         This option can be used repeatedly to exclude multiple paths.
 
  Modes of output:
   Default mode: print the number of differences found and where they occured
diff --git a/tools/h5diff/testfiles/h5diff_624.txt b/tools/h5diff/testfiles/h5diff_624.txt
index 863e422..f5e7ee3 100644
--- a/tools/h5diff/testfiles/h5diff_624.txt
+++ b/tools/h5diff/testfiles/h5diff_624.txt
@@ -1,96 +1,97 @@
 <-n 0x1> is not a valid option
 usage: h5diff [OPTIONS] file1 file2 [obj1[ obj2]] 
-  file1                    File name of the first HDF5 file
-  file2                    File name of the second HDF5 file
-  [obj1]                   Name of an HDF5 object, in absolute path
-  [obj2]                   Name of an HDF5 object, in absolute path
+  file1             File name of the first HDF5 file
+  file2             File name of the second HDF5 file
+  [obj1]            Name of an HDF5 object, in absolute path
+  [obj2]            Name of an HDF5 object, in absolute path
 
   OPTIONS
-   -h, --help              Print a usage message and exit.
-   -V, --version           Print version number and exit.
-   -r, --report            Report mode. Print differences.
-   -v --verbose            Verbose mode. Print differences information and list
-                           of objects.
-   -vN --verbose=N         Verbose mode with level. Print differences and list
-                           of objects.
-                           Level of detail depends on value of N:
-                            0 : Identical to '-v' or '--verbose'.
-                            1 : All level 0 information plus one-line attribute
-                                status summary.
-                            2 : All level 1 information plus extended attribute
-                                status report.
-   -q, --quiet             Quiet mode. Do not produce output.
-   --follow-symlinks       Follow symbolic links (soft links and external links)
-                           and compare the links' target objects.
-                           If symbolic link(s) with the same name exist in the
-                           files being compared, then determine whether the 
-                           target of each link is an existing object (dataset,
-                           group, or named datatype) or the link is a dangling
-                           link (a soft or external link pointing to a target
-                           object that does not yet exist).
-                           - If both symbolic links are dangling links, they
-                             are treated as being the same; by default, h5diff
-                             returns an exit code of 0. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If only one of the two links is a dangling link,
-                             they are treated as being different and h5diff 
-                             returns an exit code of 1. If, however, 
-                             --no-dangling-links is used with --follow-symlinks,
-                             this situation is treated as an error and h5diff 
-                             returns an exit code of 2.
-                           - If both symbolic links point to existing objects,
-                             h5diff compares the two objects.
-                           If any symbolic link specified in the call to h5diff
-                           does not exist, h5diff treats it as an error and
-                           returns an exit code of 2.
-   --no-dangling-links     Must be used with --follow-symlinks option;
-                           otherwise, h5diff shows error message and returns
-                           an exit code of 2.
-                           Check for any symbolic links (soft links or external
-                           links) that do not resolve to an existing object
-                           (dataset, group, or named datatype).  If any
-                           dangling link is found, this situation is treated as
-                           an error and h5diff returns an exit code of 2.
-   -c, --compare           List objects that are not comparable
-   -N, --nan               Avoid NaNs detection
-   -n C, --count=C         Print differences up to C number, C is a positive
-                           integer.
-   -d D, --delta=D         Print difference if (|a-b| > D), D is a positive
-                           number.
-   -p R, --relative=R      Print difference if (|(a-b)/b| > R), R is a positive
-                           number.
-   --use-system-epsilon    Print difference if (|a-b| > EPSILON), EPSILON is
-                           a system epsilon value.
-                           If the system epsilon is not defined, the below
-                           one of the following predefined values will be used:
-                             FLT_EPSILON = 1.19209E-07 for floating-point type
-                             DBL_EPSILON = 2.22045E-16 for double percision type
-   --exclude-path "path"   Exclude the specified path to an object when
-                           comparing files or groups. If a group is excluded,
-                           all member objects will also be excluded.
-                           The specified path is excluded wherever it occurs.
-                           This flexibility enables the same option to exclude
-                           either objects that exist only in one file or
-                           common objects that are known to differ.
+   -h, --help
+         Print a usage message and exit.
+   -V, --version
+         Print version number and exit.
+   -r, --report
+         Report mode. Print differences.
+   -v --verbose
+         Verbose mode. Print differences information and list of objects.
+   -vN --verbose=N
+         Verbose mode with level. Print differences and list of objects.
+         Level of detail depends on value of N:
+          0 : Identical to '-v' or '--verbose'.
+          1 : All level 0 information plus one-line attribute
+              status summary.
+          2 : All level 1 information plus extended attribute
+              status report.
+   -q, --quiet
+         Quiet mode. Do not produce output.
+   --follow-symlinks
+         Follow symbolic links (soft links and external links and compare the)
+         links' target objects.
+         If symbolic link(s) with the same name exist in the files being
+         compared, then determine whether the target of each link is an existing
+         object (dataset, group, or named datatype) or the link is a dangling
+         link (a soft or external link pointing to a target object that does
+         not yet exist).
+         - If both symbolic links are dangling links, they are treated as being
+           the same; by default, h5diff returns an exit code of 0.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If only one of the two links is a dangling link,they are treated as
+           being different and h5diff returns an exit code of 1.
+           If, however, --no-dangling-links is used with --follow-symlinks,
+           this situation is treated as an error and h5diff returns an
+           exit code of 2.
+         - If both symbolic links point to existing objects, h5diff compares the
+           two objects.
+         If any symbolic link specified in the call to h5diff does not exist,
+         h5diff treats it as an error and returns an exit code of 2.
+   --no-dangling-links
+         Must be used with --follow-symlinks option; otherwise, h5diff shows
+         error message and returns an exit code of 2.
+         Check for any symbolic links (soft links or external links) that do not
+         resolve to an existing object (dataset, group, or named datatype).
+         If any dangling link is found, this situation is treated as an error
+         and h5diff returns an exit code of 2.
+   -c, --compare
+         List objects that are not comparable
+   -N, --nan
+         Avoid NaNs detection
+   -n C, --count=C
+         Print differences up to C. C must be a positive integer.
+   -d D, --delta=D
+         Print difference if (|a-b| > D). D must be a positive number.
+         Can not use with '-p' or '--use-system-epsilon'.
+   -p R, --relative=R
+         Print difference if (|(a-b)/b| > R). R must be a positive number.
+         Can not use with '-d' or '--use-system-epsilon'.
+   --use-system-epsilon
+         Print difference if (|a-b| > EPSILON), EPSILON is system defined value.
+         If the system epsilon is not defined,one of the following predefined
+         values will be used:
+           FLT_EPSILON = 1.19209E-07 for floating-point type
+           DBL_EPSILON = 2.22045E-16 for double precision type
+         Can not use with '-p' or '-d'.
+   --exclude-path "path" 
+         Exclude the specified path to an object when comparing files or groups.
+         If a group is excluded, all member objects will also be excluded.
+         The specified path is excluded wherever it occurs.
+         This flexibility enables the same option to exclude either objects that
+         exist only in one file or common objects that are known to differ.
 
-                           When comparing files, "path" is the absolute path to
-                           the excluded object; when comparing groups, "path" is
-                           similar to the relative path from the group to the
-                           excluded object. This "path" can be taken from the
-                           first section of the output of the --verbose option.
-                           For example, if you are comparing the group /groupA
-                           in two files and you want to exclude
-                           /groupA/groupB/groupC in both files, the exclude
-                           option would read as follows:
-                             --exclude-path "/groupB/groupC"
+         When comparing files, "path" is the absolute path to the excluded;
+         object; when comparing groups, "path" is similar to the relative
+         path from the group to the excluded object. This "path" can be
+         taken from the first section of the output of the --verbose option.
+         For example, if you are comparing the group /groupA in two files and
+         you want to exclude /groupA/groupB/groupC in both files, the exclude
+         option would read as follows:
+           --exclude-path "/groupB/groupC"
 
-                           If there are multiple paths to an object, only the
-                           specified path(s) will be excluded; the comparison
-                           will include any path not explicitly excluded.
-                           This option can be used repeatedly to exclude
-                           multiple paths.
+         If there are multiple paths to an object, only the specified path(s)
+         will be excluded; the comparison will include any path not explicitly
+         excluded.
+         This option can be used repeatedly to exclude multiple paths.
 
  Modes of output:
   Default mode: print the number of differences found and where they occured
diff --git a/tools/h5diff/testfiles/h5diff_630.txt b/tools/h5diff/testfiles/h5diff_630.txt
new file mode 100644
index 0000000..aaf0148
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_630.txt
@@ -0,0 +1,3 @@
+dataset: </g1/fp18> and </g1/fp18_COPY>
+0 differences found
+EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_631.txt b/tools/h5diff/testfiles/h5diff_631.txt
new file mode 100644
index 0000000..aaf0148
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_631.txt
@@ -0,0 +1,3 @@
+dataset: </g1/fp18> and </g1/fp18_COPY>
+0 differences found
+EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_640.txt b/tools/h5diff/testfiles/h5diff_640.txt
new file mode 100644
index 0000000..4c956a6
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_640.txt
@@ -0,0 +1,4 @@
+h5diff error: -d, -p and --use-system-epsilon options are mutually-exclusive;
+use no more than one.
+Try '-h' or '--help' option for more information or see the h5diff entry in the 'HDF5 Reference Manual'.
+EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_641.txt b/tools/h5diff/testfiles/h5diff_641.txt
new file mode 100644
index 0000000..4c956a6
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_641.txt
@@ -0,0 +1,4 @@
+h5diff error: -d, -p and --use-system-epsilon options are mutually-exclusive;
+use no more than one.
+Try '-h' or '--help' option for more information or see the h5diff entry in the 'HDF5 Reference Manual'.
+EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_642.txt b/tools/h5diff/testfiles/h5diff_642.txt
new file mode 100644
index 0000000..4c956a6
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_642.txt
@@ -0,0 +1,4 @@
+h5diff error: -d, -p and --use-system-epsilon options are mutually-exclusive;
+use no more than one.
+Try '-h' or '--help' option for more information or see the h5diff entry in the 'HDF5 Reference Manual'.
+EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_643.txt b/tools/h5diff/testfiles/h5diff_643.txt
new file mode 100644
index 0000000..4c956a6
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_643.txt
@@ -0,0 +1,4 @@
+h5diff error: -d, -p and --use-system-epsilon options are mutually-exclusive;
+use no more than one.
+Try '-h' or '--help' option for more information or see the h5diff entry in the 'HDF5 Reference Manual'.
+EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_644.txt b/tools/h5diff/testfiles/h5diff_644.txt
new file mode 100644
index 0000000..4c956a6
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_644.txt
@@ -0,0 +1,4 @@
+h5diff error: -d, -p and --use-system-epsilon options are mutually-exclusive;
+use no more than one.
+Try '-h' or '--help' option for more information or see the h5diff entry in the 'HDF5 Reference Manual'.
+EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_645.txt b/tools/h5diff/testfiles/h5diff_645.txt
new file mode 100644
index 0000000..4c956a6
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_645.txt
@@ -0,0 +1,4 @@
+h5diff error: -d, -p and --use-system-epsilon options are mutually-exclusive;
+use no more than one.
+Try '-h' or '--help' option for more information or see the h5diff entry in the 'HDF5 Reference Manual'.
+EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_646.txt b/tools/h5diff/testfiles/h5diff_646.txt
new file mode 100644
index 0000000..4c956a6
--- /dev/null
+++ b/tools/h5diff/testfiles/h5diff_646.txt
@@ -0,0 +1,4 @@
+h5diff error: -d, -p and --use-system-epsilon options are mutually-exclusive;
+use no more than one.
+Try '-h' or '--help' option for more information or see the h5diff entry in the 'HDF5 Reference Manual'.
+EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_70.txt b/tools/h5diff/testfiles/h5diff_70.txt
index c6aeb68..47b057c 100644
--- a/tools/h5diff/testfiles/h5diff_70.txt
+++ b/tools/h5diff/testfiles/h5diff_70.txt
@@ -2028,5 +2028,5 @@ position        vlen3D of </g1> vlen3D of </g1> difference
 --------------------------------
 Some objects are not comparable
 --------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
 EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_700.txt b/tools/h5diff/testfiles/h5diff_700.txt
index 99398a9..00c5b07 100644
--- a/tools/h5diff/testfiles/h5diff_700.txt
+++ b/tools/h5diff/testfiles/h5diff_700.txt
@@ -2034,5 +2034,5 @@ position        vlen3D of </g1> vlen3D of </g1> difference
 --------------------------------
 Some objects are not comparable
 --------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
 EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_701.txt b/tools/h5diff/testfiles/h5diff_701.txt
index 3b3e5b6..a4b436f 100644
--- a/tools/h5diff/testfiles/h5diff_701.txt
+++ b/tools/h5diff/testfiles/h5diff_701.txt
@@ -2133,5 +2133,5 @@ position        vlen3D of </g1> vlen3D of </g1> difference
 --------------------------------
 Some objects are not comparable
 --------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
 EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_702.txt b/tools/h5diff/testfiles/h5diff_702.txt
index 99398a9..00c5b07 100644
--- a/tools/h5diff/testfiles/h5diff_702.txt
+++ b/tools/h5diff/testfiles/h5diff_702.txt
@@ -2034,5 +2034,5 @@ position        vlen3D of </g1> vlen3D of </g1> difference
 --------------------------------
 Some objects are not comparable
 --------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
 EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_703.txt b/tools/h5diff/testfiles/h5diff_703.txt
index 3b3e5b6..a4b436f 100644
--- a/tools/h5diff/testfiles/h5diff_703.txt
+++ b/tools/h5diff/testfiles/h5diff_703.txt
@@ -2133,5 +2133,5 @@ position        vlen3D of </g1> vlen3D of </g1> difference
 --------------------------------
 Some objects are not comparable
 --------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
 EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_80.txt b/tools/h5diff/testfiles/h5diff_80.txt
index 1c55b1a..5957d72 100644
--- a/tools/h5diff/testfiles/h5diff_80.txt
+++ b/tools/h5diff/testfiles/h5diff_80.txt
@@ -877,5 +877,5 @@ point #4              (2,8)              (1,7)
 --------------------------------
 Some objects are not comparable
 --------------------------------
-Use -c for a list of objects.
+Use -c for a list of objects without details of differences.
 EXIT CODE: 1
diff --git a/tools/h5diff/testfiles/h5diff_90.txt b/tools/h5diff/testfiles/h5diff_90.txt
index fb23843..9965ab0 100644
--- a/tools/h5diff/testfiles/h5diff_90.txt
+++ b/tools/h5diff/testfiles/h5diff_90.txt
@@ -30,7 +30,6 @@ dataset: </g1/dset4> and </g1/dset4>
 group  : </g2> and </g2>
 0 differences found
 dataset: </g2/dset1> and </g2/dset1>
-Not comparable: </g2/dset1> or </g2/dset1> is an empty dataset
 0 differences found
 dataset: </g2/dset2> and </g2/dset2>
 0 differences found
@@ -47,10 +46,5 @@ dataset: </g2/dset7> and </g2/dset7>
 dataset: </g2/dset8> and </g2/dset8>
 0 differences found
 dataset: </g2/dset9> and </g2/dset9>
-Not comparable: </g2/dset9> or </g2/dset9> is an empty dataset
 0 differences found
---------------------------------
-Some objects are not comparable
---------------------------------
-Use -c for a list of objects.
 EXIT CODE: 0
diff --git a/tools/h5diff/testfiles/h5diff_basic1.h5 b/tools/h5diff/testfiles/h5diff_basic1.h5
index 4f3cf9a..e1396be 100644
Binary files a/tools/h5diff/testfiles/h5diff_basic1.h5 and b/tools/h5diff/testfiles/h5diff_basic1.h5 differ
diff --git a/tools/h5diff/testfiles/h5diff_comp_vl_strs.h5 b/tools/h5diff/testfiles/h5diff_comp_vl_strs.h5
index dac510f..4ad6f19 100644
Binary files a/tools/h5diff/testfiles/h5diff_comp_vl_strs.h5 and b/tools/h5diff/testfiles/h5diff_comp_vl_strs.h5 differ
diff --git a/tools/h5diff/testfiles/h5diff_dset_zero_dim_size1.h5 b/tools/h5diff/testfiles/h5diff_dset_zero_dim_size1.h5
new file mode 100644
index 0000000..cdc7644
Binary files /dev/null and b/tools/h5diff/testfiles/h5diff_dset_zero_dim_size1.h5 differ
diff --git a/tools/h5diff/testfiles/h5diff_dset_zero_dim_size2.h5 b/tools/h5diff/testfiles/h5diff_dset_zero_dim_size2.h5
new file mode 100644
index 0000000..4752ed1
Binary files /dev/null and b/tools/h5diff/testfiles/h5diff_dset_zero_dim_size2.h5 differ
diff --git a/tools/h5diff/testfiles/h5diff_enum_invalid_values.h5 b/tools/h5diff/testfiles/h5diff_enum_invalid_values.h5
new file mode 100755
index 0000000..dd02db9
Binary files /dev/null and b/tools/h5diff/testfiles/h5diff_enum_invalid_values.h5 differ
diff --git a/tools/h5diff/testfiles/non_comparables1.h5 b/tools/h5diff/testfiles/non_comparables1.h5
new file mode 100644
index 0000000..71b65c8
Binary files /dev/null and b/tools/h5diff/testfiles/non_comparables1.h5 differ
diff --git a/tools/h5diff/testfiles/non_comparables2.h5 b/tools/h5diff/testfiles/non_comparables2.h5
new file mode 100644
index 0000000..188ceb9
Binary files /dev/null and b/tools/h5diff/testfiles/non_comparables2.h5 differ
diff --git a/tools/h5diff/testh5diff.sh b/tools/h5diff/testh5diff.sh
index dfa5c97..8de12a5 100755
--- a/tools/h5diff/testh5diff.sh
+++ b/tools/h5diff/testh5diff.sh
@@ -30,49 +30,6 @@
 #    Added test 450 - 459  (dangling links)
 
 
-###############################################################################
-## test file names 
-###############################################################################
-
-FILE1=h5diff_basic1.h5
-FILE2=h5diff_basic2.h5
-FILE3=h5diff_types.h5
-FILE4=h5diff_dtypes.h5
-FILE5=h5diff_attr1.h5
-FILE6=h5diff_attr2.h5
-FILE7=h5diff_dset1.h5
-FILE8=h5diff_dset2.h5
-FILE9=h5diff_hyper1.h5
-FILE10=h5diff_hyper2.h5
-FILE11=h5diff_empty.h5
-FILE12=h5diff_links.h5
-FILE13=h5diff_softlinks.h5
-FILE14=h5diff_linked_softlink.h5
-FILE15=h5diff_extlink_src.h5
-FILE16=h5diff_extlink_trg.h5
-FILE17=h5diff_ext2softlink_src.h5
-FILE18=h5diff_ext2softlink_trg.h5
-DANGLE_LINK_FILE1=h5diff_danglelinks1.h5
-DANGLE_LINK_FILE2=h5diff_danglelinks2.h5
-# group recursive
-GRP_RECURSE_FILE1=h5diff_grp_recurse1.h5
-GRP_RECURSE_FILE2=h5diff_grp_recurse2.h5
-# group recursive - same structure via external links through files
-GRP_RECURSE1_EXT=h5diff_grp_recurse_ext1.h5
-GRP_RECURSE2_EXT1=h5diff_grp_recurse_ext2-1.h5
-GRP_RECURSE2_EXT2=h5diff_grp_recurse_ext2-2.h5
-GRP_RECURSE2_EXT3=h5diff_grp_recurse_ext2-3.h5
-# same structure, same obj name with different value
-EXCLUDE_FILE1_1=h5diff_exclude1-1.h5
-EXCLUDE_FILE1_2=h5diff_exclude1-2.h5
-# different structure and obj names
-EXCLUDE_FILE2_1=h5diff_exclude2-1.h5
-EXCLUDE_FILE2_2=h5diff_exclude2-2.h5
-# compound type with multiple vlen string types
-COMP_VL_STRS_FILE=h5diff_comp_vl_strs.h5
-
-ATTR_VERBOSE_LEVEL_FILE1=h5diff_attr_v_level1.h5
-ATTR_VERBOSE_LEVEL_FILE2=h5diff_attr_v_level2.h5
 
 TESTNAME=h5diff
 EXIT_SUCCESS=0
@@ -83,6 +40,7 @@ H5DIFF_BIN=`pwd`/$H5DIFF    # The path of the tool binary
 
 CMP='cmp -s'
 DIFF='diff -c'
+CP='cp'
 
 nerrors=0
 verbose=yes
@@ -95,7 +53,266 @@ if test -z "$srcdir"; then
    srcdir=.
 fi
 
-test -d ./testfiles || mkdir ./testfiles
+# source dirs
+SRC_TOOLS="$srcdir/.."
+SRC_TOOLS_TESTFILES="$SRC_TOOLS/testfiles"
+# testfiles source dirs for tools
+SRC_H5LS_TESTFILES="$SRC_TOOLS_TESTFILES"
+SRC_H5DUMP_TESTFILES="$SRC_TOOLS_TESTFILES"
+SRC_H5DIFF_TESTFILES="$SRC_TOOLS/h5diff/testfiles"
+SRC_H5COPY_TESTFILES="$SRC_TOOLS/h5copy/testfiles"
+SRC_H5REPACK_TESTFILES="$SRC_TOOLS/h5repack/testfiles"
+SRC_H5JAM_TESTFILES="$SRC_TOOLS/h5jam/testfiles"
+SRC_H5STAT_TESTFILES="$SRC_TOOLS/h5stat/testfiles"
+SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/h5import/testfiles"
+
+TESTDIR=./testfiles
+test -d $TESTDIR || mkdir $TESTDIR
+
+######################################################################
+# test files
+# --------------------------------------------------------------------
+# All the test files copy from source directory to test directory
+# NOTE: Keep this framework to add/remove test files.
+#       Any test files from other tools can be used in this framework.
+#       This list are also used for checking exist.
+#       Comment '#' without space can be used.
+# --------------------------------------------------------------------
+LIST_HDF5_TEST_FILES="
+$SRC_H5DIFF_TESTFILES/h5diff_basic1.h5
+$SRC_H5DIFF_TESTFILES/h5diff_basic2.h5
+$SRC_H5DIFF_TESTFILES/h5diff_types.h5
+$SRC_H5DIFF_TESTFILES/h5diff_dtypes.h5
+$SRC_H5DIFF_TESTFILES/h5diff_attr1.h5
+$SRC_H5DIFF_TESTFILES/h5diff_attr2.h5
+$SRC_H5DIFF_TESTFILES/h5diff_dset1.h5
+$SRC_H5DIFF_TESTFILES/h5diff_dset2.h5
+$SRC_H5DIFF_TESTFILES/h5diff_hyper1.h5
+$SRC_H5DIFF_TESTFILES/h5diff_hyper2.h5
+$SRC_H5DIFF_TESTFILES/h5diff_empty.h5
+$SRC_H5DIFF_TESTFILES/h5diff_links.h5
+$SRC_H5DIFF_TESTFILES/h5diff_softlinks.h5
+$SRC_H5DIFF_TESTFILES/h5diff_linked_softlink.h5
+$SRC_H5DIFF_TESTFILES/h5diff_extlink_src.h5
+$SRC_H5DIFF_TESTFILES/h5diff_extlink_trg.h5
+$SRC_H5DIFF_TESTFILES/h5diff_ext2softlink_src.h5
+$SRC_H5DIFF_TESTFILES/h5diff_ext2softlink_trg.h5
+$SRC_H5DIFF_TESTFILES/h5diff_dset_zero_dim_size1.h5
+$SRC_H5DIFF_TESTFILES/h5diff_dset_zero_dim_size2.h5
+$SRC_H5DIFF_TESTFILES/h5diff_danglelinks1.h5
+$SRC_H5DIFF_TESTFILES/h5diff_danglelinks2.h5
+$SRC_H5DIFF_TESTFILES/h5diff_grp_recurse1.h5
+$SRC_H5DIFF_TESTFILES/h5diff_grp_recurse2.h5
+$SRC_H5DIFF_TESTFILES/h5diff_grp_recurse_ext1.h5
+$SRC_H5DIFF_TESTFILES/h5diff_grp_recurse_ext2-1.h5
+$SRC_H5DIFF_TESTFILES/h5diff_grp_recurse_ext2-2.h5
+$SRC_H5DIFF_TESTFILES/h5diff_grp_recurse_ext2-3.h5
+$SRC_H5DIFF_TESTFILES/h5diff_exclude1-1.h5
+$SRC_H5DIFF_TESTFILES/h5diff_exclude1-2.h5
+$SRC_H5DIFF_TESTFILES/h5diff_exclude2-1.h5
+$SRC_H5DIFF_TESTFILES/h5diff_exclude2-2.h5
+$SRC_H5DIFF_TESTFILES/h5diff_comp_vl_strs.h5
+$SRC_H5DIFF_TESTFILES/compounds_array_vlen1.h5
+$SRC_H5DIFF_TESTFILES/compounds_array_vlen2.h5
+$SRC_H5DIFF_TESTFILES/h5diff_attr_v_level1.h5
+$SRC_H5DIFF_TESTFILES/h5diff_attr_v_level2.h5
+$SRC_H5DIFF_TESTFILES/h5diff_enum_invalid_values.h5
+$SRC_H5DIFF_TESTFILES/non_comparables1.h5
+$SRC_H5DIFF_TESTFILES/non_comparables2.h5
+"
+
+LIST_OTHER_TEST_FILES="
+$SRC_H5DIFF_TESTFILES/h5diff_10.txt
+$SRC_H5DIFF_TESTFILES/h5diff_100.txt
+$SRC_H5DIFF_TESTFILES/h5diff_101.txt
+$SRC_H5DIFF_TESTFILES/h5diff_102.txt
+$SRC_H5DIFF_TESTFILES/h5diff_103.txt
+$SRC_H5DIFF_TESTFILES/h5diff_104.txt
+$SRC_H5DIFF_TESTFILES/h5diff_11.txt
+$SRC_H5DIFF_TESTFILES/h5diff_12.txt
+$SRC_H5DIFF_TESTFILES/h5diff_13.txt
+$SRC_H5DIFF_TESTFILES/h5diff_14.txt
+$SRC_H5DIFF_TESTFILES/h5diff_15.txt
+$SRC_H5DIFF_TESTFILES/h5diff_16_1.txt
+$SRC_H5DIFF_TESTFILES/h5diff_16_2.txt
+$SRC_H5DIFF_TESTFILES/h5diff_16_3.txt
+$SRC_H5DIFF_TESTFILES/h5diff_17.txt
+$SRC_H5DIFF_TESTFILES/h5diff_171.txt
+$SRC_H5DIFF_TESTFILES/h5diff_172.txt
+$SRC_H5DIFF_TESTFILES/h5diff_18_1.txt
+$SRC_H5DIFF_TESTFILES/h5diff_18.txt
+$SRC_H5DIFF_TESTFILES/h5diff_20.txt
+$SRC_H5DIFF_TESTFILES/h5diff_200.txt
+$SRC_H5DIFF_TESTFILES/h5diff_201.txt
+$SRC_H5DIFF_TESTFILES/h5diff_202.txt
+$SRC_H5DIFF_TESTFILES/h5diff_203.txt
+$SRC_H5DIFF_TESTFILES/h5diff_204.txt
+$SRC_H5DIFF_TESTFILES/h5diff_205.txt
+$SRC_H5DIFF_TESTFILES/h5diff_206.txt
+$SRC_H5DIFF_TESTFILES/h5diff_207.txt
+$SRC_H5DIFF_TESTFILES/h5diff_208.txt
+$SRC_H5DIFF_TESTFILES/h5diff_220.txt
+$SRC_H5DIFF_TESTFILES/h5diff_221.txt
+$SRC_H5DIFF_TESTFILES/h5diff_222.txt
+$SRC_H5DIFF_TESTFILES/h5diff_21.txt
+$SRC_H5DIFF_TESTFILES/h5diff_22.txt
+$SRC_H5DIFF_TESTFILES/h5diff_23.txt
+$SRC_H5DIFF_TESTFILES/h5diff_24.txt
+$SRC_H5DIFF_TESTFILES/h5diff_25.txt
+$SRC_H5DIFF_TESTFILES/h5diff_26.txt
+$SRC_H5DIFF_TESTFILES/h5diff_27.txt
+$SRC_H5DIFF_TESTFILES/h5diff_28.txt
+$SRC_H5DIFF_TESTFILES/h5diff_30.txt
+$SRC_H5DIFF_TESTFILES/h5diff_300.txt
+$SRC_H5DIFF_TESTFILES/h5diff_400.txt
+$SRC_H5DIFF_TESTFILES/h5diff_401.txt
+$SRC_H5DIFF_TESTFILES/h5diff_402.txt
+$SRC_H5DIFF_TESTFILES/h5diff_403.txt
+$SRC_H5DIFF_TESTFILES/h5diff_404.txt
+$SRC_H5DIFF_TESTFILES/h5diff_405.txt
+$SRC_H5DIFF_TESTFILES/h5diff_406.txt
+$SRC_H5DIFF_TESTFILES/h5diff_407.txt
+$SRC_H5DIFF_TESTFILES/h5diff_408.txt
+$SRC_H5DIFF_TESTFILES/h5diff_409.txt
+$SRC_H5DIFF_TESTFILES/h5diff_410.txt
+$SRC_H5DIFF_TESTFILES/h5diff_411.txt
+$SRC_H5DIFF_TESTFILES/h5diff_412.txt
+$SRC_H5DIFF_TESTFILES/h5diff_413.txt
+$SRC_H5DIFF_TESTFILES/h5diff_414.txt
+$SRC_H5DIFF_TESTFILES/h5diff_415.txt
+$SRC_H5DIFF_TESTFILES/h5diff_416.txt
+$SRC_H5DIFF_TESTFILES/h5diff_417.txt
+$SRC_H5DIFF_TESTFILES/h5diff_418.txt
+$SRC_H5DIFF_TESTFILES/h5diff_419.txt
+$SRC_H5DIFF_TESTFILES/h5diff_420.txt
+$SRC_H5DIFF_TESTFILES/h5diff_421.txt
+$SRC_H5DIFF_TESTFILES/h5diff_422.txt
+$SRC_H5DIFF_TESTFILES/h5diff_423.txt
+$SRC_H5DIFF_TESTFILES/h5diff_424.txt
+$SRC_H5DIFF_TESTFILES/h5diff_425.txt
+$SRC_H5DIFF_TESTFILES/h5diff_450.txt
+$SRC_H5DIFF_TESTFILES/h5diff_451.txt
+$SRC_H5DIFF_TESTFILES/h5diff_452.txt
+$SRC_H5DIFF_TESTFILES/h5diff_453.txt
+$SRC_H5DIFF_TESTFILES/h5diff_454.txt
+$SRC_H5DIFF_TESTFILES/h5diff_455.txt
+$SRC_H5DIFF_TESTFILES/h5diff_456.txt
+$SRC_H5DIFF_TESTFILES/h5diff_457.txt
+$SRC_H5DIFF_TESTFILES/h5diff_458.txt
+$SRC_H5DIFF_TESTFILES/h5diff_459.txt
+$SRC_H5DIFF_TESTFILES/h5diff_480.txt
+$SRC_H5DIFF_TESTFILES/h5diff_481.txt
+$SRC_H5DIFF_TESTFILES/h5diff_482.txt
+$SRC_H5DIFF_TESTFILES/h5diff_483.txt
+$SRC_H5DIFF_TESTFILES/h5diff_484.txt
+$SRC_H5DIFF_TESTFILES/h5diff_50.txt
+$SRC_H5DIFF_TESTFILES/h5diff_51.txt
+$SRC_H5DIFF_TESTFILES/h5diff_52.txt
+$SRC_H5DIFF_TESTFILES/h5diff_53.txt
+$SRC_H5DIFF_TESTFILES/h5diff_54.txt
+$SRC_H5DIFF_TESTFILES/h5diff_55.txt
+$SRC_H5DIFF_TESTFILES/h5diff_56.txt
+$SRC_H5DIFF_TESTFILES/h5diff_57.txt
+$SRC_H5DIFF_TESTFILES/h5diff_58.txt
+$SRC_H5DIFF_TESTFILES/h5diff_500.txt
+$SRC_H5DIFF_TESTFILES/h5diff_501.txt
+$SRC_H5DIFF_TESTFILES/h5diff_502.txt
+$SRC_H5DIFF_TESTFILES/h5diff_503.txt
+$SRC_H5DIFF_TESTFILES/h5diff_504.txt
+$SRC_H5DIFF_TESTFILES/h5diff_505.txt
+$SRC_H5DIFF_TESTFILES/h5diff_506.txt
+$SRC_H5DIFF_TESTFILES/h5diff_507.txt
+$SRC_H5DIFF_TESTFILES/h5diff_508.txt
+$SRC_H5DIFF_TESTFILES/h5diff_509.txt
+$SRC_H5DIFF_TESTFILES/h5diff_510.txt
+$SRC_H5DIFF_TESTFILES/h5diff_511.txt
+$SRC_H5DIFF_TESTFILES/h5diff_512.txt
+$SRC_H5DIFF_TESTFILES/h5diff_513.txt
+$SRC_H5DIFF_TESTFILES/h5diff_514.txt
+$SRC_H5DIFF_TESTFILES/h5diff_515.txt
+$SRC_H5DIFF_TESTFILES/h5diff_516.txt
+$SRC_H5DIFF_TESTFILES/h5diff_517.txt
+$SRC_H5DIFF_TESTFILES/h5diff_518.txt
+$SRC_H5DIFF_TESTFILES/h5diff_530.txt
+$SRC_H5DIFF_TESTFILES/h5diff_540.txt
+$SRC_H5DIFF_TESTFILES/h5diff_600.txt
+$SRC_H5DIFF_TESTFILES/h5diff_601.txt
+$SRC_H5DIFF_TESTFILES/h5diff_603.txt
+$SRC_H5DIFF_TESTFILES/h5diff_604.txt
+$SRC_H5DIFF_TESTFILES/h5diff_605.txt
+$SRC_H5DIFF_TESTFILES/h5diff_606.txt
+$SRC_H5DIFF_TESTFILES/h5diff_607.txt
+$SRC_H5DIFF_TESTFILES/h5diff_608.txt
+$SRC_H5DIFF_TESTFILES/h5diff_609.txt
+$SRC_H5DIFF_TESTFILES/h5diff_610.txt
+$SRC_H5DIFF_TESTFILES/h5diff_612.txt
+$SRC_H5DIFF_TESTFILES/h5diff_613.txt
+$SRC_H5DIFF_TESTFILES/h5diff_614.txt
+$SRC_H5DIFF_TESTFILES/h5diff_615.txt
+$SRC_H5DIFF_TESTFILES/h5diff_616.txt
+$SRC_H5DIFF_TESTFILES/h5diff_617.txt
+$SRC_H5DIFF_TESTFILES/h5diff_618.txt
+$SRC_H5DIFF_TESTFILES/h5diff_619.txt
+$SRC_H5DIFF_TESTFILES/h5diff_621.txt
+$SRC_H5DIFF_TESTFILES/h5diff_622.txt
+$SRC_H5DIFF_TESTFILES/h5diff_623.txt
+$SRC_H5DIFF_TESTFILES/h5diff_624.txt
+$SRC_H5DIFF_TESTFILES/h5diff_625.txt
+$SRC_H5DIFF_TESTFILES/h5diff_626.txt
+$SRC_H5DIFF_TESTFILES/h5diff_627.txt
+$SRC_H5DIFF_TESTFILES/h5diff_628.txt
+$SRC_H5DIFF_TESTFILES/h5diff_629.txt
+$SRC_H5DIFF_TESTFILES/h5diff_630.txt
+$SRC_H5DIFF_TESTFILES/h5diff_631.txt
+$SRC_H5DIFF_TESTFILES/h5diff_640.txt
+$SRC_H5DIFF_TESTFILES/h5diff_641.txt
+$SRC_H5DIFF_TESTFILES/h5diff_642.txt
+$SRC_H5DIFF_TESTFILES/h5diff_643.txt
+$SRC_H5DIFF_TESTFILES/h5diff_644.txt
+$SRC_H5DIFF_TESTFILES/h5diff_645.txt
+$SRC_H5DIFF_TESTFILES/h5diff_646.txt
+$SRC_H5DIFF_TESTFILES/h5diff_70.txt
+$SRC_H5DIFF_TESTFILES/h5diff_700.txt
+$SRC_H5DIFF_TESTFILES/h5diff_701.txt
+$SRC_H5DIFF_TESTFILES/h5diff_702.txt
+$SRC_H5DIFF_TESTFILES/h5diff_703.txt
+$SRC_H5DIFF_TESTFILES/h5diff_704.txt
+$SRC_H5DIFF_TESTFILES/h5diff_705.txt
+$SRC_H5DIFF_TESTFILES/h5diff_706.txt
+$SRC_H5DIFF_TESTFILES/h5diff_707.txt
+$SRC_H5DIFF_TESTFILES/h5diff_708.txt
+$SRC_H5DIFF_TESTFILES/h5diff_709.txt
+$SRC_H5DIFF_TESTFILES/h5diff_710.txt
+$SRC_H5DIFF_TESTFILES/h5diff_80.txt
+$SRC_H5DIFF_TESTFILES/h5diff_90.txt
+"
+
+#
+# copy test files and expected output files from source dirs to test dir
+#
+COPY_TESTFILES="$LIST_HDF5_TEST_FILES $LIST_OTHER_TEST_FILES $LIST_HDF5_TEST_FILES_XML $LIST_OTHER_TEST_FILES_XML"
+
+COPY_TESTFILES_TO_TESTDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_TESTFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            if [ -a $tstfile ]; then
+                $CP -f $tstfile $TESTDIR
+            else
+                echo "Error: FAILED to copy $tstfile ."
+                echo "       $tstfile doesn't exist!"
+                
+                # Comment out this to CREATE expected file
+                exit $EXIT_FAILURE
+            fi
+        fi
+    done
+}
 
 # Parse option
 #   -p   run ph5diff tests
@@ -138,89 +355,8 @@ TESTING() {
    echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
 }
 
-# Some systems will dump some messages to stdout for various reasons.
-# Remove them from the stdout result file.
-# $1 is the file name of the file to be filtered.
-# Cases of filter needed:
-# 1. Sandia Red-Storm
-#    yod always prints these two lines at the beginning.
-#    LibLustre: NAL NID: 0004a605 (5)
-#    Lustre: OBD class driver Build Version: 1, info at clusterfs.com
-# 2. LANL Lambda
-#    mpijob mirun -np always add an extra line at the end like:
-#    P4 procgroup file is /users/acheng/.lsbatch/host10524.l82
-STDOUT_FILTER() {
-    result_file=$1
-    tmp_file=/tmp/h5test_tmp_$$
-    # Filter Sandia Red-Storm yod messages.
-    cp $result_file $tmp_file
-    sed -e '/^LibLustre:/d' -e '/^Lustre:/d' \
-	< $tmp_file > $result_file
-    # Filter LANL Lambda mpirun message.
-    cp $result_file $tmp_file
-    sed -e '/^P4 procgroup file is/d' \
-	< $tmp_file > $result_file
-    # cleanup
-    rm -f $tmp_file
-}
-
-# Some systems will dump some messages to stderr for various reasons.
-# Remove them from the stderr result file.
-# $1 is the file name of the file to be filtered.
-# Cases of filter needed:
-# 1. MPE:
-# In parallel mode and if MPE library is used, it prints the following
-# two message lines whether the MPE tracing is used or not.
-#    Writing logfile.
-#    Finished writing logfile.
-# 2. LANL MPI:
-# The LANL MPI will print some messages like the following,
-#    LA-MPI: *** mpirun (1.5.10)
-#    LA-MPI: *** 3 process(es) on 2 host(s): 2*fln21 1*fln22
-#    LA-MPI: *** libmpi (1.5.10)
-#    LA-MPI: *** Copyright 2001-2004, ACL, Los Alamos National Laboratory
-# 3. h5diff debug output:
-#    Debug output all have prefix "h5diff debug: ".
-# 4. AIX system prints messages like these when it is aborting:
-#    ERROR: 0031-300  Forcing all remote tasks to exit due to exit code 1 in task 0
-#    ERROR: 0031-250  task 4: Terminated
-#    ERROR: 0031-250  task 3: Terminated
-#    ERROR: 0031-250  task 2: Terminated
-#    ERROR: 0031-250  task 1: Terminated
-# 5. LLNL Blue-Gene mpirun prints messages like there when it exit non-zero:
-#    <Apr 12 15:01:49.075658> BE_MPI (ERROR): The error message in the job record is as follows:
-#    <Apr 12 15:01:49.075736> BE_MPI (ERROR):   "killed by exit(1) on node 0"
-
-
-STDERR_FILTER() {
-    result_file=$1
-    tmp_file=/tmp/h5test_tmp_$$
-    # Filter LLNL Blue-Gene error messages in both serial and parallel modes
-    # since mpirun is used in both modes.
-    cp $result_file $tmp_file
-    sed -e '/ BE_MPI (ERROR): /d' \
-	< $tmp_file > $result_file
-    # Filter MPE messages
-    if test -n "$pmode"; then
-	cp $result_file $tmp_file
-	sed -e '/^Writing logfile./d' -e '/^Finished writing logfile./d' \
-	    < $tmp_file > $result_file
-    fi
-    # Filter LANL MPI messages
-    # and LLNL srun messages
-    # and AIX error messages
-    if test -n "$pmode"; then
-	cp $result_file $tmp_file
-	sed -e '/^LA-MPI:/d' -e '/^srun:/d' -e '/^ERROR:/d' \
-	    < $tmp_file > $result_file
-    fi
-    # Filter h5diff debug output
-	cp $result_file $tmp_file
-	sed -e '/^h5diff debug: /d' \
-	    < $tmp_file > $result_file
-    # clean up temporary files.
-    rm -f $tmp_file
-}
+# Source in the output filter function definitions.
+. $srcdir/../../bin/output_filter.sh
 
 # Run a test and print PASS or *FAIL*.  If a test fails then increment
 # the `nerrors' global variable and (if $verbose is set) display the
@@ -236,9 +372,9 @@ STDERR_FILTER() {
 # that throws the shell script off.
 #
 TOOLTEST() {
-    expect="$srcdir/testfiles/$1"
-    actual="./testfiles/`basename $1 .txt`.out"
-    actual_err="./testfiles/`basename $1 .txt`.err"
+    expect="$TESTDIR/$1"
+    actual="$TESTDIR/`basename $1 .txt`.out"
+    actual_err="$TESTDIR/`basename $1 .txt`.err"
     actual_sav=${actual}-sav
     actual_err_sav=${actual_err}-sav
     shift
@@ -254,7 +390,7 @@ TOOLTEST() {
 	#echo "#############################"
 	#echo "Expected output for '$H5DIFF $@'" 
 	#echo "#############################"
-	cd $srcdir/testfiles
+	cd $TESTDIR
 	eval $RUNCMD $H5DIFF_BIN "$@"
     ) >$actual 2>$actual_err
     EXIT_CODE=$?
@@ -336,6 +472,8 @@ SKIP() {
 # is done first in
 # TESTING with the name only of the test file $TOOL, not its full path $TESTFILE
 ##############################################################################
+# prepare for test
+COPY_TESTFILES_TO_TESTDIR
 
 # ############################################################################
 # # Common usage
@@ -345,43 +483,43 @@ SKIP() {
 TOOLTEST h5diff_10.txt -h
 
 # 1.1 normal mode
-TOOLTEST h5diff_11.txt  $FILE1 $FILE2 
+TOOLTEST h5diff_11.txt  h5diff_basic1.h5 h5diff_basic2.h5 
 
 # 1.2 normal mode with objects
-TOOLTEST h5diff_12.txt  $FILE1 $FILE2  g1/dset1 g1/dset2
+TOOLTEST h5diff_12.txt  h5diff_basic1.h5 h5diff_basic2.h5  g1/dset1 g1/dset2
 
 # 1.3 report mode
-TOOLTEST h5diff_13.txt -r $FILE1 $FILE2 
+TOOLTEST h5diff_13.txt -r h5diff_basic1.h5 h5diff_basic2.h5 
 
 # 1.4 report  mode with objects
-TOOLTEST h5diff_14.txt  -r $FILE1 $FILE2 g1/dset1 g1/dset2
+TOOLTEST h5diff_14.txt  -r h5diff_basic1.h5 h5diff_basic2.h5 g1/dset1 g1/dset2
 
 # 1.5 with -d
-TOOLTEST h5diff_15.txt --report --delta=5 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_15.txt --report --delta=5 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 1.6.1 with -p (int)
-TOOLTEST h5diff_16_1.txt -v -p 0.02 $FILE1 $FILE1 g1/dset5 g1/dset6
+TOOLTEST h5diff_16_1.txt -v -p 0.02 h5diff_basic1.h5 h5diff_basic1.h5 g1/dset5 g1/dset6
 
 # 1.6.2 with -p (unsigned long_long)
-TOOLTEST h5diff_16_2.txt --verbose --relative=0.02 $FILE1 $FILE1 g1/dset7 g1/dset8
+TOOLTEST h5diff_16_2.txt --verbose --relative=0.02 h5diff_basic1.h5 h5diff_basic1.h5 g1/dset7 g1/dset8
 
 # 1.6.3 with -p (double)
-TOOLTEST h5diff_16_3.txt -v -p 0.02 $FILE1 $FILE1 g1/dset9 g1/dset10
+TOOLTEST h5diff_16_3.txt -v -p 0.02 h5diff_basic1.h5 h5diff_basic1.h5 g1/dset9 g1/dset10
 
 # 1.7 verbose mode
-TOOLTEST h5diff_17.txt -v $FILE1 $FILE2   
+TOOLTEST h5diff_17.txt -v h5diff_basic1.h5 h5diff_basic2.h5   
 
 # 1.7 test 32-bit INFINITY
-TOOLTEST h5diff_171.txt -v $FILE1 $FILE1 /g1/fp19
+TOOLTEST h5diff_171.txt -v h5diff_basic1.h5 h5diff_basic1.h5 /g1/fp19 /g1/fp19_COPY
 
 # 1.7 test 64-bit INFINITY
-TOOLTEST h5diff_172.txt -v $FILE1 $FILE1 /g1/fp20
+TOOLTEST h5diff_172.txt -v h5diff_basic1.h5 h5diff_basic1.h5 /g1/fp20 /g1/fp20_COPY
 
 # 1.8 quiet mode 
-TOOLTEST h5diff_18.txt -q $FILE1 $FILE2 
+TOOLTEST h5diff_18.txt -q h5diff_basic1.h5 h5diff_basic2.h5 
 
 # 1.8 -v and -q
-TOOLTEST h5diff_18_1.txt -v -q $FILE1 $FILE2
+TOOLTEST h5diff_18_1.txt -v -q h5diff_basic1.h5 h5diff_basic2.h5
 
 
 # ##############################################################################
@@ -389,35 +527,45 @@ TOOLTEST h5diff_18_1.txt -v -q $FILE1 $FILE2
 # ##############################################################################
 
 # 2.0
-TOOLTEST h5diff_20.txt -v $FILE3 $FILE3  dset g1
+TOOLTEST h5diff_20.txt -v h5diff_types.h5 h5diff_types.h5  dset g1
 
 # 2.1
-TOOLTEST h5diff_21.txt -v $FILE3 $FILE3 dset l1
+TOOLTEST h5diff_21.txt -v h5diff_types.h5 h5diff_types.h5 dset l1
 
 # 2.2
-TOOLTEST h5diff_22.txt -v  $FILE3 $FILE3 dset t1
+TOOLTEST h5diff_22.txt -v  h5diff_types.h5 h5diff_types.h5 dset t1
 
 # ##############################################################################
 # # compare groups, types, links (no differences and differences)
 # ##############################################################################
 
 # 2.3
-TOOLTEST h5diff_23.txt -v $FILE3 $FILE3 g1 g1
+TOOLTEST h5diff_23.txt -v h5diff_types.h5 h5diff_types.h5 g1 g1
 
 # 2.4
-TOOLTEST h5diff_24.txt -v $FILE3 $FILE3 t1 t1
+TOOLTEST h5diff_24.txt -v h5diff_types.h5 h5diff_types.h5 t1 t1
 
 # 2.5
-TOOLTEST h5diff_25.txt -v $FILE3 $FILE3 l1 l1 
+TOOLTEST h5diff_25.txt -v h5diff_types.h5 h5diff_types.h5 l1 l1 
 
 # 2.6
-TOOLTEST h5diff_26.txt -v $FILE3 $FILE3 g1 g2
+TOOLTEST h5diff_26.txt -v h5diff_types.h5 h5diff_types.h5 g1 g2
 
 # 2.7
-TOOLTEST h5diff_27.txt -v $FILE3 $FILE3 t1 t2
+TOOLTEST h5diff_27.txt -v h5diff_types.h5 h5diff_types.h5 t1 t2
 
 # 2.8
-TOOLTEST h5diff_28.txt -v $FILE3 $FILE3 l1 l2
+TOOLTEST h5diff_28.txt -v h5diff_types.h5 h5diff_types.h5 l1 l2
+
+
+# ##############################################################################
+# # Enum value tests (may become more comprehensive in the future)
+# ##############################################################################
+
+# 3.0
+# test enum types which may have invalid values
+TOOLTEST h5diff_30.txt -v h5diff_enum_invalid_values.h5 h5diff_enum_invalid_values.h5 dset1 dset2
+
 
 
 
@@ -426,31 +574,31 @@ TOOLTEST h5diff_28.txt -v $FILE3 $FILE3 l1 l2
 # ##############################################################################
 
 # 5.0
-TOOLTEST h5diff_50.txt -v $FILE4 $FILE4 dset0a dset0b
+TOOLTEST h5diff_50.txt -v h5diff_dtypes.h5 h5diff_dtypes.h5 dset0a dset0b
 
 # 5.1
-TOOLTEST h5diff_51.txt -v $FILE4 $FILE4 dset1a dset1b
+TOOLTEST h5diff_51.txt -v h5diff_dtypes.h5 h5diff_dtypes.h5 dset1a dset1b
 
 # 5.2
-TOOLTEST h5diff_52.txt -v $FILE4 $FILE4 dset2a dset2b
+TOOLTEST h5diff_52.txt -v h5diff_dtypes.h5 h5diff_dtypes.h5 dset2a dset2b
 
 # 5.3
-TOOLTEST h5diff_53.txt -v $FILE4 $FILE4 dset3a dset4b
+TOOLTEST h5diff_53.txt -v h5diff_dtypes.h5 h5diff_dtypes.h5 dset3a dset4b
 
 # 5.4
-TOOLTEST h5diff_54.txt -v $FILE4 $FILE4 dset4a dset4b
+TOOLTEST h5diff_54.txt -v h5diff_dtypes.h5 h5diff_dtypes.h5 dset4a dset4b
 
 # 5.5
-TOOLTEST h5diff_55.txt -v $FILE4 $FILE4 dset5a dset5b
+TOOLTEST h5diff_55.txt -v h5diff_dtypes.h5 h5diff_dtypes.h5 dset5a dset5b
 
 # 5.6
-TOOLTEST h5diff_56.txt -v $FILE4 $FILE4 dset6a dset6b
+TOOLTEST h5diff_56.txt -v h5diff_dtypes.h5 h5diff_dtypes.h5 dset6a dset6b
 
 # 5.7
-TOOLTEST h5diff_57.txt -v $FILE4 $FILE4 dset7a dset7b
+TOOLTEST h5diff_57.txt -v h5diff_dtypes.h5 h5diff_dtypes.h5 dset7a dset7b
 
 # 5.8 (region reference)
-TOOLTEST h5diff_58.txt -v $FILE7 $FILE8 refreg
+TOOLTEST h5diff_58.txt -v h5diff_dset1.h5 h5diff_dset2.h5 refreg
 
 # ##############################################################################
 # # Error messages
@@ -458,10 +606,10 @@ TOOLTEST h5diff_58.txt -v $FILE7 $FILE8 refreg
 
 
 # 6.0: Check if the command line number of arguments is less than 3
-TOOLTEST h5diff_600.txt $FILE1 
+TOOLTEST h5diff_600.txt h5diff_basic1.h5 
 
 # 6.1: Check if non-exist object name is specified 
-TOOLTEST h5diff_601.txt $FILE1 $FILE1 nono_obj
+TOOLTEST h5diff_601.txt h5diff_basic1.h5 h5diff_basic1.h5 nono_obj
 
 
 # ##############################################################################
@@ -470,28 +618,28 @@ TOOLTEST h5diff_601.txt $FILE1 $FILE1 nono_obj
 
 
 # 6.3: negative value
-TOOLTEST h5diff_603.txt -d -4 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_603.txt -d -4 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.4: zero
-TOOLTEST h5diff_604.txt -d 0 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_604.txt -d 0 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.5: non number
-TOOLTEST h5diff_605.txt -d u $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_605.txt -d u h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.6: hexadecimal
-TOOLTEST h5diff_606.txt -d 0x1 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_606.txt -d 0x1 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.7: string
-TOOLTEST h5diff_607.txt -d "1" $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_607.txt -d "1" h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.8: use system epsilon 
-TOOLTEST h5diff_608.txt --use-system-epsilon $FILE1 $FILE2  g1/dset3 g1/dset4
+TOOLTEST h5diff_608.txt --use-system-epsilon h5diff_basic1.h5 h5diff_basic2.h5  g1/dset3 g1/dset4
 
 # 6.9: number larger than biggest difference
-TOOLTEST h5diff_609.txt -d 200 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_609.txt -d 200 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.10: number smaller than smallest difference
-TOOLTEST h5diff_610.txt -d 1 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_610.txt -d 1 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 
 # ##############################################################################
@@ -500,28 +648,28 @@ TOOLTEST h5diff_610.txt -d 1 $FILE1 $FILE2 g1/dset3 g1/dset4
 
 
 # 6.12: negative value
-TOOLTEST h5diff_612.txt -p -4 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_612.txt -p -4 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.13: zero
-TOOLTEST h5diff_613.txt -p 0 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_613.txt -p 0 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.14: non number
-TOOLTEST h5diff_614.txt -p u $FILE1 $FILE2  g1/dset3 g1/dset4
+TOOLTEST h5diff_614.txt -p u h5diff_basic1.h5 h5diff_basic2.h5  g1/dset3 g1/dset4
 
 # 6.15: hexadecimal
-TOOLTEST h5diff_615.txt -p 0x1 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_615.txt -p 0x1 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.16: string
-TOOLTEST h5diff_616.txt -p "0.21" $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_616.txt -p "0.21" h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.17: repeated option
-TOOLTEST h5diff_617.txt -p 0.21 -p 0.22 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_617.txt -p 0.21 -p 0.22 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.18: number larger than biggest difference
-TOOLTEST h5diff_618.txt -p 2 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_618.txt -p 2 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.19: number smaller than smallest difference
-TOOLTEST h5diff_619.txt -p 0.005 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_619.txt -p 0.005 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 
 
@@ -530,287 +678,315 @@ TOOLTEST h5diff_619.txt -p 0.005 $FILE1 $FILE2 g1/dset3 g1/dset4
 # ##############################################################################
 
 # 6.21: negative value
-TOOLTEST h5diff_621.txt -n -4 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_621.txt -n -4 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.22: zero
-TOOLTEST h5diff_622.txt -n 0 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_622.txt -n 0 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.23: non number
-TOOLTEST h5diff_623.txt -n u $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_623.txt -n u h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.24: hexadecimal
-TOOLTEST h5diff_624.txt -n 0x1 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_624.txt -n 0x1 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.25: string
-TOOLTEST h5diff_625.txt -n "2" $FILE1 $FILE2  g1/dset3 g1/dset4
+TOOLTEST h5diff_625.txt -n "2" h5diff_basic1.h5 h5diff_basic2.h5  g1/dset3 g1/dset4
 
 # 6.26: repeated option
-TOOLTEST h5diff_626.txt -n 2 -n 3 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_626.txt -n 2 -n 3 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.27: number larger than biggest difference
-TOOLTEST h5diff_627.txt --count=200 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_627.txt --count=200 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # 6.28: number smaller than smallest difference
-TOOLTEST h5diff_628.txt -n 1 $FILE1 $FILE2 g1/dset3 g1/dset4
+TOOLTEST h5diff_628.txt -n 1 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4
 
 # Disabling this test as it hangs - LRK 20090618
 # 6.29  non valid files
 #TOOLTEST h5diff_629.txt file1.h6 file2.h6
 
+# ##############################################################################
+# # NaN
+# ##############################################################################
+# 6.30: test (NaN == NaN) must be true based on our documentation -- XCAO
+TOOLTEST h5diff_630.txt -v -d "0.0001" h5diff_basic1.h5 h5diff_basic1.h5 g1/fp18 g1/fp18_COPY
+TOOLTEST h5diff_631.txt -v --use-system-epsilon h5diff_basic1.h5 h5diff_basic1.h5 g1/fp18 g1/fp18_COPY
+
 
 # ##############################################################################
 # 7.  attributes
 # ##############################################################################
-TOOLTEST h5diff_70.txt -v $FILE5 $FILE6 
+TOOLTEST h5diff_70.txt -v h5diff_attr1.h5 h5diff_attr2.h5 
 
 # ##################################################
 #  attrs with verbose option level
 # ##################################################
 
-TOOLTEST h5diff_700.txt -v1 $FILE5 $FILE6 
-TOOLTEST h5diff_701.txt -v2 $FILE5 $FILE6 
-TOOLTEST h5diff_702.txt --verbose=1 $FILE5 $FILE6 
-TOOLTEST h5diff_703.txt --verbose=2 $FILE5 $FILE6 
+TOOLTEST h5diff_700.txt -v1 h5diff_attr1.h5 h5diff_attr2.h5 
+TOOLTEST h5diff_701.txt -v2 h5diff_attr1.h5 h5diff_attr2.h5 
+TOOLTEST h5diff_702.txt --verbose=1 h5diff_attr1.h5 h5diff_attr2.h5 
+TOOLTEST h5diff_703.txt --verbose=2 h5diff_attr1.h5 h5diff_attr2.h5 
 
 # same attr number , all same attr name
-TOOLTEST h5diff_704.txt -v2 $ATTR_VERBOSE_LEVEL_FILE1 $ATTR_VERBOSE_LEVEL_FILE2 /g
+TOOLTEST h5diff_704.txt -v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /g
 
 # same attr number , some same attr name
-TOOLTEST h5diff_705.txt -v2 $ATTR_VERBOSE_LEVEL_FILE1 $ATTR_VERBOSE_LEVEL_FILE2 /dset
+TOOLTEST h5diff_705.txt -v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /dset
 
 # same attr number , all different attr name
-TOOLTEST h5diff_706.txt -v2 $ATTR_VERBOSE_LEVEL_FILE1 $ATTR_VERBOSE_LEVEL_FILE2 /ntype
+TOOLTEST h5diff_706.txt -v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /ntype
 
 # different attr number , same attr name (intersected)
-TOOLTEST h5diff_707.txt -v2 $ATTR_VERBOSE_LEVEL_FILE1 $ATTR_VERBOSE_LEVEL_FILE2 /g2
+TOOLTEST h5diff_707.txt -v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /g2
 
 # different attr number , all different attr name 
-TOOLTEST h5diff_708.txt -v2 $ATTR_VERBOSE_LEVEL_FILE1 $ATTR_VERBOSE_LEVEL_FILE2 /g3
+TOOLTEST h5diff_708.txt -v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /g3
 
 # when no attributes exist in both objects
-TOOLTEST h5diff_709.txt -v2 $ATTR_VERBOSE_LEVEL_FILE1 $ATTR_VERBOSE_LEVEL_FILE2 /g4
+TOOLTEST h5diff_709.txt -v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /g4
 
 # file vs file
-TOOLTEST h5diff_710.txt -v2 $ATTR_VERBOSE_LEVEL_FILE1 $ATTR_VERBOSE_LEVEL_FILE2
+TOOLTEST h5diff_710.txt -v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5
 
 # ##############################################################################
 # 8.  all dataset datatypes
 # ##############################################################################
-TOOLTEST h5diff_80.txt -v $FILE7 $FILE8 
+TOOLTEST h5diff_80.txt -v h5diff_dset1.h5 h5diff_dset2.h5 
 
 # 9. compare a file with itself
-TOOLTEST h5diff_90.txt -v $FILE2 $FILE2
+TOOLTEST h5diff_90.txt -v h5diff_basic2.h5 h5diff_basic2.h5
 
 # 10. read by hyperslab, print indexes
 if test -n "$pmode" -a "$mydomainname" = hdfgroup.uiuc.edu; then
     # skip this test which sometimes hangs in some THG machines
-    SKIP -v $FILE9 $FILE10
+    SKIP -v h5diff_hyper1.h5 h5diff_hyper2.h5
 else
-    TOOLTEST h5diff_100.txt -v $FILE9 $FILE10 
+    TOOLTEST h5diff_100.txt -v h5diff_hyper1.h5 h5diff_hyper2.h5 
 fi
 
 # 11. floating point comparison
 # double value
-TOOLTEST h5diff_101.txt -v $FILE1 $FILE1 g1/d1  g1/d2 
+TOOLTEST h5diff_101.txt -v h5diff_basic1.h5 h5diff_basic1.h5 g1/d1  g1/d2 
 
 # float value
-TOOLTEST h5diff_102.txt -v $FILE1 $FILE1 g1/fp1 g1/fp2 
+TOOLTEST h5diff_102.txt -v h5diff_basic1.h5 h5diff_basic1.h5 g1/fp1 g1/fp2 
 
 # with --use-system-epsilon for double value 
-TOOLTEST h5diff_103.txt -v --use-system-epsilon $FILE1 $FILE1 g1/d1  g1/d2 
+TOOLTEST h5diff_103.txt -v --use-system-epsilon h5diff_basic1.h5 h5diff_basic1.h5 g1/d1  g1/d2 
 
 # with --use-system-epsilon for float value
-TOOLTEST h5diff_104.txt -v --use-system-epsilon $FILE1 $FILE1 g1/fp1 g1/fp2 
+TOOLTEST h5diff_104.txt -v --use-system-epsilon h5diff_basic1.h5 h5diff_basic1.h5 g1/fp1 g1/fp2 
 
 
 # not comparable -c flag
-TOOLTEST h5diff_200.txt $FILE2 $FILE2 g2/dset1  g2/dset2 
+TOOLTEST h5diff_200.txt h5diff_basic2.h5 h5diff_basic2.h5 g2/dset1  g2/dset2 
 
-TOOLTEST h5diff_201.txt -c $FILE2 $FILE2 g2/dset1  g2/dset2 
+TOOLTEST h5diff_201.txt -c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset1  g2/dset2 
 
-TOOLTEST h5diff_202.txt -c $FILE2 $FILE2 g2/dset2  g2/dset3
+TOOLTEST h5diff_202.txt -c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset2  g2/dset3
 
-TOOLTEST h5diff_203.txt -c $FILE2 $FILE2 g2/dset3  g2/dset4
+TOOLTEST h5diff_203.txt -c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset3  g2/dset4
 
-TOOLTEST h5diff_204.txt -c $FILE2 $FILE2 g2/dset4  g2/dset5
-
-TOOLTEST h5diff_205.txt -c $FILE2 $FILE2 g2/dset5  g2/dset6
+TOOLTEST h5diff_204.txt -c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset4  g2/dset5
 
+TOOLTEST h5diff_205.txt -c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset5  g2/dset6
 
 # not comparable in compound
-TOOLTEST h5diff_206.txt -c $FILE2 $FILE2 g2/dset7  g2/dset8
+TOOLTEST h5diff_206.txt -c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset7  g2/dset8
+
+TOOLTEST h5diff_207.txt -c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset8  g2/dset9
+
+# not comparable in dataspace of zero dimension size
+TOOLTEST h5diff_208.txt -c h5diff_dset_zero_dim_size1.h5 h5diff_dset_zero_dim_size2.h5 
+
+# non-comparable dataset with comparable attribute, and other comparable datasets. 
+# Also test non-compatible attributes with different type, dimention, rank.
+# All the comparables should display differences.
+TOOLTEST h5diff_220.txt -c non_comparables1.h5 non_comparables2.h5 /g1
 
-TOOLTEST h5diff_207.txt -c $FILE2 $FILE2 g2/dset8  g2/dset9
+# comparable dataset with non-comparable attribute and other comparable attributes.
+# All the comparables should display differences.
+TOOLTEST h5diff_221.txt -c non_comparables1.h5 non_comparables2.h5 /g2
 
+# entire file
+# All the comparables should display differences.
+if test -n "$pmode" -a "$mydomainname" = hdfgroup.uiuc.edu; then
+    # parallel mode: 
+    # skip due to ph5diff hangs on koala (linux64-LE) randomly.    
+    SKIP -c non_comparables1.h5 non_comparables2.h5
+else
+    TOOLTEST h5diff_222.txt -c non_comparables1.h5 non_comparables2.h5
+fi    
+    
 # ##############################################################################
 # # Links compare without --follow-symlinks nor --no-dangling-links
 # ##############################################################################
 # test for bug1749
-TOOLTEST h5diff_300.txt -v $FILE12 $FILE12 /link_g1 /link_g2
+TOOLTEST h5diff_300.txt -v h5diff_links.h5 h5diff_links.h5 /link_g1 /link_g2
 
 # ##############################################################################
 # # Links compare with --follow-symlinks Only
 # ##############################################################################
 # soft links file to file
-TOOLTEST h5diff_400.txt --follow-symlinks -v $FILE13 $FILE13
+TOOLTEST h5diff_400.txt --follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5
 
 # softlink vs dset"
-TOOLTEST h5diff_401.txt --follow-symlinks -v $FILE13 $FILE13 /softlink_dset1_1 /target_dset2
+TOOLTEST h5diff_401.txt --follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_dset1_1 /target_dset2
 
 # dset vs softlink"
-TOOLTEST h5diff_402.txt --follow-symlinks -v $FILE13 $FILE13 /target_dset2 /softlink_dset1_1
+TOOLTEST h5diff_402.txt --follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5 /target_dset2 /softlink_dset1_1
 
 # softlink vs softlink"
-TOOLTEST h5diff_403.txt --follow-symlinks -v $FILE13 $FILE13 /softlink_dset1_1 /softlink_dset2
+TOOLTEST h5diff_403.txt --follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_dset1_1 /softlink_dset2
 
 # extlink vs extlink (FILE)"
-TOOLTEST h5diff_404.txt --follow-symlinks -v $FILE15 $FILE15
+TOOLTEST h5diff_404.txt --follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5
 
 # extlink vs dset"
-TOOLTEST h5diff_405.txt --follow-symlinks -v $FILE15 $FILE16 /ext_link_dset1 /target_group2/x_dset
+TOOLTEST h5diff_405.txt --follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_trg.h5 /ext_link_dset1 /target_group2/x_dset
 
 # dset vs extlink"
-TOOLTEST h5diff_406.txt --follow-symlinks -v $FILE16 $FILE15 /target_group2/x_dset /ext_link_dset1
+TOOLTEST h5diff_406.txt --follow-symlinks -v h5diff_extlink_trg.h5 h5diff_extlink_src.h5 /target_group2/x_dset /ext_link_dset1
 
 # extlink vs extlink"
-TOOLTEST h5diff_407.txt --follow-symlinks -v $FILE15 $FILE15 /ext_link_dset1 /ext_link_dset2
+TOOLTEST h5diff_407.txt --follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_dset1 /ext_link_dset2
 
 # softlink vs extlink"
-TOOLTEST h5diff_408.txt --follow-symlinks -v $FILE13 $FILE15 /softlink_dset1_1 /ext_link_dset2
+TOOLTEST h5diff_408.txt --follow-symlinks -v h5diff_softlinks.h5 h5diff_extlink_src.h5 /softlink_dset1_1 /ext_link_dset2
 
 # extlink vs softlink "
-TOOLTEST h5diff_409.txt --follow-symlinks -v $FILE15 $FILE13 /ext_link_dset2 /softlink_dset1_1
+TOOLTEST h5diff_409.txt --follow-symlinks -v h5diff_extlink_src.h5 h5diff_softlinks.h5 /ext_link_dset2 /softlink_dset1_1
 
 # linked_softlink vs linked_softlink (FILE)"
-TOOLTEST h5diff_410.txt --follow-symlinks -v $FILE14 $FILE14
+TOOLTEST h5diff_410.txt --follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5
 
 # dset2 vs linked_softlink_dset1"
-TOOLTEST h5diff_411.txt --follow-symlinks -v $FILE14 $FILE14 /target_dset2 /softlink1_to_slink2
+TOOLTEST h5diff_411.txt --follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /target_dset2 /softlink1_to_slink2
 
 # linked_softlink_dset1 vs dset2"
-TOOLTEST h5diff_412.txt --follow-symlinks -v $FILE14 $FILE14 /softlink1_to_slink2 /target_dset2
+TOOLTEST h5diff_412.txt --follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /softlink1_to_slink2 /target_dset2
 
 # linked_softlink_to_dset1 vs linked_softlink_to_dset2"
-TOOLTEST h5diff_413.txt --follow-symlinks -v $FILE14 $FILE14 /softlink1_to_slink2 /softlink2_to_slink2
+TOOLTEST h5diff_413.txt --follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /softlink1_to_slink2 /softlink2_to_slink2
 
 # group vs linked_softlink_group1"
-TOOLTEST h5diff_414.txt --follow-symlinks -v $FILE14 $FILE14 /target_group /softlink3_to_slink2
+TOOLTEST h5diff_414.txt --follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /target_group /softlink3_to_slink2
 
 # linked_softlink_group1 vs group"
-TOOLTEST h5diff_415.txt --follow-symlinks -v $FILE14 $FILE14 /softlink3_to_slink2 /target_group
+TOOLTEST h5diff_415.txt --follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /softlink3_to_slink2 /target_group
 
 # linked_softlink_to_group1 vs linked_softlink_to_group2"
-TOOLTEST h5diff_416.txt --follow-symlinks -v $FILE14 $FILE14 /softlink3_to_slink2 /softlink4_to_slink2
+TOOLTEST h5diff_416.txt --follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /softlink3_to_slink2 /softlink4_to_slink2
 
 # non-exist-softlink vs softlink"
-TOOLTEST h5diff_417.txt --follow-symlinks -v $FILE13 $FILE13 /softlink_noexist /softlink_dset2
+TOOLTEST h5diff_417.txt --follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_noexist /softlink_dset2
 
 # softlink vs non-exist-softlink"
-TOOLTEST h5diff_418.txt --follow-symlinks -v $FILE13 $FILE13 /softlink_dset2 /softlink_noexist
+TOOLTEST h5diff_418.txt --follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_dset2 /softlink_noexist
 
 # non-exist-extlink_file vs extlink"
-TOOLTEST h5diff_419.txt --follow-symlinks -v $FILE15 $FILE15 /ext_link_noexist2 /ext_link_dset2
+TOOLTEST h5diff_419.txt --follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_noexist2 /ext_link_dset2
 
 # exlink vs non-exist-extlink_file"
-TOOLTEST h5diff_420.txt --follow-symlinks -v $FILE15 $FILE15 /ext_link_dset2 /ext_link_noexist2
+TOOLTEST h5diff_420.txt --follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_dset2 /ext_link_noexist2
 
 # extlink vs non-exist-extlink_obj"
-TOOLTEST h5diff_421.txt --follow-symlinks -v $FILE15 $FILE15 /ext_link_dset2 /ext_link_noexist1
+TOOLTEST h5diff_421.txt --follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_dset2 /ext_link_noexist1
 
 # non-exist-extlink_obj vs extlink"
-TOOLTEST h5diff_422.txt --follow-symlinks -v $FILE15 $FILE15 /ext_link_noexist1 /ext_link_dset2
+TOOLTEST h5diff_422.txt --follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_noexist1 /ext_link_dset2
 
 # extlink_to_softlink_to_dset1 vs dset2"
-TOOLTEST h5diff_423.txt --follow-symlinks -v $FILE17 $FILE18 /ext_link_to_slink1 /dset2
+TOOLTEST h5diff_423.txt --follow-symlinks -v h5diff_ext2softlink_src.h5 h5diff_ext2softlink_trg.h5 /ext_link_to_slink1 /dset2
 
 # dset2 vs extlink_to_softlink_to_dset1"
-TOOLTEST h5diff_424.txt --follow-symlinks -v $FILE18 $FILE17 /dset2 /ext_link_to_slink1
+TOOLTEST h5diff_424.txt --follow-symlinks -v h5diff_ext2softlink_trg.h5 h5diff_ext2softlink_src.h5 /dset2 /ext_link_to_slink1
 
 # extlink_to_softlink_to_dset1 vs extlink_to_softlink_to_dset2"
-TOOLTEST h5diff_425.txt --follow-symlinks -v $FILE17 $FILE17 /ext_link_to_slink1 /ext_link_to_slink2
+TOOLTEST h5diff_425.txt --follow-symlinks -v h5diff_ext2softlink_src.h5 h5diff_ext2softlink_src.h5 /ext_link_to_slink1 /ext_link_to_slink2
 
 
 # ##############################################################################
 # # Dangling links compare (--follow-symlinks and --no-dangling-links)
 # ##############################################################################
 # dangling links --follow-symlinks (FILE to FILE)
-TOOLTEST h5diff_450.txt  --follow-symlinks -v $DANGLE_LINK_FILE1 $DANGLE_LINK_FILE2
+TOOLTEST h5diff_450.txt  --follow-symlinks -v h5diff_danglelinks1.h5 h5diff_danglelinks2.h5
 
 # dangling links --follow-symlinks and --no-dangling-links (FILE to FILE)
-TOOLTEST h5diff_451.txt  --follow-symlinks -v --no-dangling-links  $DANGLE_LINK_FILE1 $DANGLE_LINK_FILE2 
+TOOLTEST h5diff_451.txt  --follow-symlinks -v --no-dangling-links  h5diff_danglelinks1.h5 h5diff_danglelinks2.h5 
 
 # try --no-dangling-links without --follow-symlinks options
-TOOLTEST h5diff_452.txt  --no-dangling-links  $FILE13 $FILE13
+TOOLTEST h5diff_452.txt  --no-dangling-links  h5diff_softlinks.h5 h5diff_softlinks.h5
 
 # dangling link found for soft links (FILE to FILE)
-TOOLTEST h5diff_453.txt  --follow-symlinks -v --no-dangling-links  $FILE13 $FILE13  
+TOOLTEST h5diff_453.txt  --follow-symlinks -v --no-dangling-links  h5diff_softlinks.h5 h5diff_softlinks.h5  
 
 # dangling link found for soft links (obj to obj)
-TOOLTEST h5diff_454.txt  --follow-symlinks -v --no-dangling-links  $FILE13 $FILE13 /softlink_dset2 /softlink_noexist 
+TOOLTEST h5diff_454.txt  --follow-symlinks -v --no-dangling-links  h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_dset2 /softlink_noexist 
 
 # dangling link found for soft links (obj to obj) Both dangle links
-TOOLTEST h5diff_455.txt  --follow-symlinks -v --no-dangling-links  $FILE13 $FILE13 /softlink_noexist /softlink_noexist 
+TOOLTEST h5diff_455.txt  --follow-symlinks -v --no-dangling-links  h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_noexist /softlink_noexist 
 
 # dangling link found for ext links (FILE to FILE)
-TOOLTEST h5diff_456.txt  --follow-symlinks -v --no-dangling-links  $FILE15 $FILE15 
+TOOLTEST h5diff_456.txt  --follow-symlinks -v --no-dangling-links  h5diff_extlink_src.h5 h5diff_extlink_src.h5 
 
 # dangling link found for ext links (obj to obj). target file exist
-TOOLTEST h5diff_457.txt  --follow-symlinks -v --no-dangling-links  $FILE15 $FILE15 /ext_link_dset1 /ext_link_noexist1 
+TOOLTEST h5diff_457.txt  --follow-symlinks -v --no-dangling-links  h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_dset1 /ext_link_noexist1 
 
 # dangling link found for ext links (obj to obj). target file NOT exist
-TOOLTEST h5diff_458.txt  --follow-symlinks -v --no-dangling-links  $FILE15 $FILE15 /ext_link_dset1 /ext_link_noexist2  
+TOOLTEST h5diff_458.txt  --follow-symlinks -v --no-dangling-links  h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_dset1 /ext_link_noexist2  
 
 # dangling link found for ext links (obj to obj). Both dangle links
-TOOLTEST h5diff_459.txt  --follow-symlinks -v --no-dangling-links  $FILE15 $FILE15 /ext_link_noexist1 /ext_link_noexist2
+TOOLTEST h5diff_459.txt  --follow-symlinks -v --no-dangling-links  h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_noexist1 /ext_link_noexist2
 
 
 # ##############################################################################
 # # test for group diff recursivly
 # ##############################################################################
 # root 
-TOOLTEST h5diff_500.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 / /
-TOOLTEST h5diff_501.txt -v --follow-symlinks $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 / /
+TOOLTEST h5diff_500.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 / /
+TOOLTEST h5diff_501.txt -v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 / /
 
 # root vs group
-TOOLTEST h5diff_502.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 / /grp1/grp2/grp3
+TOOLTEST h5diff_502.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 / /grp1/grp2/grp3
 
 # group vs group (same name and structure)
-TOOLTEST h5diff_503.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /grp1 /grp1
+TOOLTEST h5diff_503.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1 /grp1
 
 # group vs group (different name and structure)
-TOOLTEST h5diff_504.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /grp1/grp2 /grp1/grp2/grp3
+TOOLTEST h5diff_504.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1/grp2 /grp1/grp2/grp3
 
 # groups vs soft-link
-TOOLTEST h5diff_505.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /grp1 /slink_grp1
-TOOLTEST h5diff_506.txt -v --follow-symlinks $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /grp1/grp2 /slink_grp2
+TOOLTEST h5diff_505.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1 /slink_grp1
+TOOLTEST h5diff_506.txt -v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1/grp2 /slink_grp2
 
 # groups vs ext-link
-TOOLTEST h5diff_507.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /grp1 /elink_grp1
-TOOLTEST h5diff_508.txt -v --follow-symlinks $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /grp1 /elink_grp1
+TOOLTEST h5diff_507.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1 /elink_grp1
+TOOLTEST h5diff_508.txt -v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1 /elink_grp1
 
 # soft-link vs ext-link
-TOOLTEST h5diff_509.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /slink_grp1 /elink_grp1
-TOOLTEST h5diff_510.txt -v --follow-symlinks $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /slink_grp1 /elink_grp1
+TOOLTEST h5diff_509.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /slink_grp1 /elink_grp1
+TOOLTEST h5diff_510.txt -v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /slink_grp1 /elink_grp1
 
 # circled ext links
-TOOLTEST h5diff_511.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /grp10 /grp11
-TOOLTEST h5diff_512.txt -v --follow-symlinks $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /grp10 /grp11
+TOOLTEST h5diff_511.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp10 /grp11
+TOOLTEST h5diff_512.txt -v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp10 /grp11
 
 # circled soft2ext-link vs soft2ext-link
-TOOLTEST h5diff_513.txt -v $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /slink_grp10 /slink_grp11
-TOOLTEST h5diff_514.txt -v --follow-symlinks $GRP_RECURSE_FILE1 $GRP_RECURSE_FILE2 /slink_grp10 /slink_grp11
+TOOLTEST h5diff_513.txt -v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /slink_grp10 /slink_grp11
+TOOLTEST h5diff_514.txt -v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /slink_grp10 /slink_grp11
 
 ###############################################################################
 # Test for group recursive diff via multi-linked external links 
-# With follow-symlinks, file $GRP_RECURSE1_EXT and $GRP_RECURSE2_EXT1 should
+# With follow-symlinks, file h5diff_grp_recurse_ext1.h5 and h5diff_grp_recurse_ext2-1.h5 should
 # be same with the external links.
 ###############################################################################
 # file vs file
-TOOLTEST h5diff_515.txt -v $GRP_RECURSE1_EXT $GRP_RECURSE2_EXT1
-TOOLTEST h5diff_516.txt -v --follow-symlinks $GRP_RECURSE1_EXT $GRP_RECURSE2_EXT1
+TOOLTEST h5diff_515.txt -v h5diff_grp_recurse_ext1.h5 h5diff_grp_recurse_ext2-1.h5
+TOOLTEST h5diff_516.txt -v --follow-symlinks h5diff_grp_recurse_ext1.h5 h5diff_grp_recurse_ext2-1.h5
 # group vs group
-TOOLTEST h5diff_517.txt -v $GRP_RECURSE1_EXT $GRP_RECURSE2_EXT1 /g1
-TOOLTEST h5diff_518.txt -v --follow-symlinks $GRP_RECURSE1_EXT $GRP_RECURSE2_EXT1 /g1
+TOOLTEST h5diff_517.txt -v h5diff_grp_recurse_ext1.h5 h5diff_grp_recurse_ext2-1.h5 /g1
+TOOLTEST h5diff_518.txt -v --follow-symlinks h5diff_grp_recurse_ext1.h5 h5diff_grp_recurse_ext2-1.h5 /g1
 
 # ##############################################################################
 # # Exclude objects (--exclude-path)
@@ -819,25 +995,44 @@ TOOLTEST h5diff_518.txt -v --follow-symlinks $GRP_RECURSE1_EXT $GRP_RECURSE2_EXT
 # Same structure, same names and different value.
 #
 # Exclude the object with different value. Expect return - same
-TOOLTEST h5diff_480.txt -v --exclude-path /group1/dset3 $EXCLUDE_FILE1_1 $EXCLUDE_FILE1_2
+TOOLTEST h5diff_480.txt -v --exclude-path /group1/dset3 h5diff_exclude1-1.h5 h5diff_exclude1-2.h5
 # Verify different by not excluding. Expect return - diff
-TOOLTEST h5diff_481.txt -v $EXCLUDE_FILE1_1 $EXCLUDE_FILE1_2
+TOOLTEST h5diff_481.txt -v h5diff_exclude1-1.h5 h5diff_exclude1-2.h5
 
 #
 # Different structure, different names. 
 #
 # Exclude all the different objects. Expect return - same
-TOOLTEST h5diff_482.txt -v --exclude-path "/group1" --exclude-path "/dset1" $EXCLUDE_FILE2_1 $EXCLUDE_FILE2_2
+TOOLTEST h5diff_482.txt -v --exclude-path "/group1" --exclude-path "/dset1" h5diff_exclude2-1.h5 h5diff_exclude2-2.h5
 # Exclude only some different objects. Expect return - diff
-TOOLTEST h5diff_483.txt -v --exclude-path "/group1" $EXCLUDE_FILE2_1 $EXCLUDE_FILE2_2
+TOOLTEST h5diff_483.txt -v --exclude-path "/group1" h5diff_exclude2-1.h5 h5diff_exclude2-2.h5
 
 # Exclude from group compare
-TOOLTEST h5diff_484.txt -v --exclude-path "/dset3" $EXCLUDE_FILE1_1 $EXCLUDE_FILE1_2 /group1
+TOOLTEST h5diff_484.txt -v --exclude-path "/dset3" h5diff_exclude1-1.h5 h5diff_exclude1-2.h5 /group1
 
 # ##############################################################################
 # # diff various multiple vlen and fixed strings in a compound type dataset
 # ##############################################################################
-TOOLTEST h5diff_530.txt -v  $COMP_VL_STRS_FILE $COMP_VL_STRS_FILE
+TOOLTEST h5diff_530.txt -v  h5diff_comp_vl_strs.h5 h5diff_comp_vl_strs.h5 /group /group_copy
+
+# ##############################################################################
+# # Test container types (array,vlen) with multiple nested compound types
+# # Complex compound types in dataset and attribute
+# ##############################################################################
+TOOLTEST h5diff_540.txt -v compounds_array_vlen1.h5 compounds_array_vlen2.h5
+
+# ##############################################################################
+# # Test mutually exclusive options 
+# ##############################################################################
+# Test with -d , -p and --use-system-epsilon. 
+TOOLTEST h5diff_640.txt -v -d 5 -p 0.05 --use-system-epsilon h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4
+TOOLTEST h5diff_641.txt -v -d 5 -p 0.05 h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4
+TOOLTEST h5diff_642.txt -v -p 0.05 -d 5 h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4
+TOOLTEST h5diff_643.txt -v -d 5 --use-system-epsilon h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4
+TOOLTEST h5diff_644.txt -v --use-system-epsilon -d 5 h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4
+TOOLTEST h5diff_645.txt -v -p 0.05 --use-system-epsilon h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4
+TOOLTEST h5diff_646.txt -v --use-system-epsilon -p 0.05 h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4
+
 
 # ##############################################################################
 # # END
diff --git a/tools/h5dump/CMakeLists.txt b/tools/h5dump/CMakeLists.txt
index 05688ec..9623118 100644
--- a/tools/h5dump/CMakeLists.txt
+++ b/tools/h5dump/CMakeLists.txt
@@ -47,6 +47,7 @@ IF (BUILD_TESTING)
       tall-3.ddl
       tall-4s.ddl
       tall-5s.ddl
+      tall-6.ddl
       tallfilters.ddl
       tarray1.ddl
       tarray1_big.ddl
@@ -62,6 +63,11 @@ IF (BUILD_TESTING)
       tattr-3.ddl
       tattrreg.ddl
       tattrregR.ddl
+      tbin1.ddl
+      tbin1.ddl
+      tbin2.ddl
+      tbin3.ddl
+      tbin4.ddl
       tbinregR.ddl
       tbigdims.ddl
       tboot1.ddl
@@ -82,6 +88,10 @@ IF (BUILD_TESTING)
       tdset-2.ddl
       tdset-3s.ddl
       tempty.ddl
+      texceedsubstart.ddl
+      texceedsubcount.ddl
+      texceedsubstride.ddl
+      texceedsubblock.ddl
       texternal.ddl
       textlinksrc.ddl
       textlinkfar.ddl
@@ -115,6 +125,7 @@ IF (BUILD_TESTING)
       tnbit.ddl
       tnofilename.ddl
       tnullspace.ddl
+      zerodim.ddl
       tordergr1.ddl
       tordergr2.ddl
       tordergr3.ddl
@@ -148,6 +159,8 @@ IF (BUILD_TESTING)
       tvldtypes5.ddl
       tvlstr.ddl
       tvms.ddl
+      h5dump-help.txt
+      out3.h5import
   )
   SET (HDF5_XML_REFERENCE_FILES
       tall.h5.xml
@@ -215,17 +228,6 @@ IF (BUILD_TESTING)
       tvlstr.h5.xml
   )
   SET (HDF5_REFERENCE_TEST_FILES
-      tbin1.ddl
-      tbin1.ddl
-      tbin2.ddl
-      tbin3.ddl
-      tbin4.ddl
-      tall-6.ddl
-      texceedsubstart.ddl
-      texceedsubcount.ddl
-      texceedsubstride.ddl
-      texceedsubblock.ddl
-      out3.h5import
       filter_fail.h5
       packedbits.h5
       taindices.h5
@@ -250,6 +252,7 @@ IF (BUILD_TESTING)
       tdatareg.h5
       tdset.h5
       tempty.h5
+      tsoftlinks.h5
       textlinkfar.h5
       textlinksrc.h5
       textlinktar.h5
@@ -287,6 +290,7 @@ IF (BUILD_TESTING)
       tnamed_dtype_attr.h5
       tnestedcomp.h5
       tnullspace.h5
+      zerodim.h5
       torderattr.h5
       tordergr.h5
       tsaf.h5
@@ -331,23 +335,23 @@ IF (BUILD_TESTING)
 
   FOREACH (ddl_file ${HDF5_REFERENCE_FILES})
     SET (ddldest "${PROJECT_BINARY_DIR}/${ddl_file}")
-    #MESSAGE (STATUS " Translating ${ddl_file}")
+    #MESSAGE (STATUS " Copying ${ddl_file}")
     ADD_CUSTOM_COMMAND (
         TARGET     h5dump
         POST_BUILD
-        COMMAND    ${XLATE_UTILITY}
-        ARGS       ${HDF5_TOOLS_SRC_DIR}/testfiles/${ddl_file} ${ddldest} -l3
+        COMMAND    ${CMAKE_COMMAND}
+        ARGS       -E copy_if_different ${HDF5_TOOLS_SRC_DIR}/testfiles/${ddl_file} ${ddldest}
     )
   ENDFOREACH (ddl_file ${HDF5_REFERENCE_FILES})
 
   FOREACH (xml_file ${HDF5_XML_REFERENCE_FILES})
     SET (xmldest "${PROJECT_BINARY_DIR}/${xml_file}")
-    #MESSAGE (STATUS " Translating ${xml_file}")
+    #MESSAGE (STATUS " Copying ${xml_file}")
     ADD_CUSTOM_COMMAND (
         TARGET     h5dump
         POST_BUILD
-        COMMAND    ${XLATE_UTILITY}
-        ARGS       ${HDF5_TOOLS_SRC_DIR}/testfiles/${xml_file} ${xmldest} -l3
+        COMMAND    ${CMAKE_COMMAND}
+        ARGS       -E copy_if_different ${HDF5_TOOLS_SRC_DIR}/testfiles/${xml_file} ${xmldest}
     )
   ENDFOREACH (xml_file ${HDF5_XML_REFERENCE_FILES})
 
@@ -396,78 +400,74 @@ IF (BUILD_TESTING)
   ENDIF (WIN32 AND NOT CYGWIN)
   
   # --------------------------------------------------------------------
-  # Special option for Packed Bits
+  # Packed Bits
   # --------------------------------------------------------------------
-  IF (HDF5_USE_H5DUMP_PACKED_BITS)
-    #-- Copy all the HDF5 files from the test directory into the source directory
-    SET (HDF5_REFERENCE_PBITS
-        tnofilename-with-packed-bits.ddl
-        tpbitsArray.ddl
-        tpbitsCompound.ddl
-        tpbitsIncomplete.ddl
-        tpbitsLengthExceeded.ddl
-        tpbitsCharLengthExceeded.ddl
-        tpbitsIntLengthExceeded.ddl
-        tpbitsLongLengthExceeded.ddl
-        tpbitsLengthPositive.ddl
-        tpbitsMax.ddl
-        tpbitsMaxExceeded.ddl
-        tpbitsOffsetExceeded.ddl
-        tpbitsCharOffsetExceeded.ddl
-        tpbitsIntOffsetExceeded.ddl
-        tpbitsLongOffsetExceeded.ddl
-        tpbitsOffsetNegative.ddl
-        tpbitsOverlapped.ddl
-        tpbitsSigned.ddl
-        tpbitsUnsigned.ddl
-        tpbitsSignedInt.ddl
-        tpbitsUnsignedInt.ddl
-        tpbitsSignedLong.ddl
-        tpbitsUnsignedLong.ddl
-        tpbitsSignedLongLong.ddl
-        tpbitsUnsignedLongLong.ddl
-        tpbitsSignedWhole.ddl
-        tpbitsUnsignedWhole.ddl
-        tpbitsSignedIntWhole.ddl
-        tpbitsUnsignedIntWhole.ddl
-        tpbitsSignedLongWhole.ddl
-        tpbitsUnsignedLongWhole.ddl
-        tpbitsSignedLongLongWhole.ddl
-        tpbitsUnsignedLongLongWhole.ddl
-        tpbitsSignedLongLongWhole1.ddl
-        tpbitsUnsignedLongLongWhole1.ddl
-        tpbitsSignedLongLongWhole63.ddl
-        tpbitsUnsignedLongLongWhole63.ddl
-        tpbitsSigned4.ddl
-        tpbitsUnsigned4.ddl
-        tpbitsSignedInt8.ddl
-        tpbitsUnsignedInt8.ddl
-        tpbitsSignedLong16.ddl
-        tpbitsUnsignedLong16.ddl
-        tpbitsSignedLongLong32.ddl
-        tpbitsUnsignedLongLong32.ddl
-        tpbitsSigned2.ddl
-        tpbitsUnsigned2.ddl
-        tpbitsSignedInt4.ddl
-        tpbitsUnsignedInt4.ddl
-        tpbitsSignedLong8.ddl
-        tpbitsUnsignedLong8.ddl
-        tpbitsSignedLongLong16.ddl
-        tpbitsUnsignedLongLong16.ddl
-    )
-
-    FOREACH (ddl_pbits ${HDF5_REFERENCE_PBITS})
-      SET (ddldest "${PROJECT_BINARY_DIR}/${ddl_pbits}")
-      #MESSAGE (STATUS " Translating ${ddl_pbits}")
-      ADD_CUSTOM_COMMAND (
-          TARGET     h5dump
-          POST_BUILD
-          COMMAND    ${XLATE_UTILITY}
-          ARGS       ${HDF5_TOOLS_SRC_DIR}/testfiles/${ddl_pbits} ${ddldest} -l3
-      )
-    ENDFOREACH (ddl_pbits ${HDF5_REFERENCE_PBITS})
+  #-- Copy all the HDF5 files from the test directory into the source directory
+  SET (HDF5_REFERENCE_PBITS
+      tpbitsArray.ddl
+      tpbitsCompound.ddl
+      tpbitsIncomplete.ddl
+      tpbitsLengthExceeded.ddl
+      tpbitsCharLengthExceeded.ddl
+      tpbitsIntLengthExceeded.ddl
+      tpbitsLongLengthExceeded.ddl
+      tpbitsLengthPositive.ddl
+      tpbitsMax.ddl
+      tpbitsMaxExceeded.ddl
+      tpbitsOffsetExceeded.ddl
+      tpbitsCharOffsetExceeded.ddl
+      tpbitsIntOffsetExceeded.ddl
+      tpbitsLongOffsetExceeded.ddl
+      tpbitsOffsetNegative.ddl
+      tpbitsOverlapped.ddl
+      tpbitsSigned.ddl
+      tpbitsUnsigned.ddl
+      tpbitsSignedInt.ddl
+      tpbitsUnsignedInt.ddl
+      tpbitsSignedLong.ddl
+      tpbitsUnsignedLong.ddl
+      tpbitsSignedLongLong.ddl
+      tpbitsUnsignedLongLong.ddl
+      tpbitsSignedWhole.ddl
+      tpbitsUnsignedWhole.ddl
+      tpbitsSignedIntWhole.ddl
+      tpbitsUnsignedIntWhole.ddl
+      tpbitsSignedLongWhole.ddl
+      tpbitsUnsignedLongWhole.ddl
+      tpbitsSignedLongLongWhole.ddl
+      tpbitsUnsignedLongLongWhole.ddl
+      tpbitsSignedLongLongWhole1.ddl
+      tpbitsUnsignedLongLongWhole1.ddl
+      tpbitsSignedLongLongWhole63.ddl
+      tpbitsUnsignedLongLongWhole63.ddl
+      tpbitsSigned4.ddl
+      tpbitsUnsigned4.ddl
+      tpbitsSignedInt8.ddl
+      tpbitsUnsignedInt8.ddl
+      tpbitsSignedLong16.ddl
+      tpbitsUnsignedLong16.ddl
+      tpbitsSignedLongLong32.ddl
+      tpbitsUnsignedLongLong32.ddl
+      tpbitsSigned2.ddl
+      tpbitsUnsigned2.ddl
+      tpbitsSignedInt4.ddl
+      tpbitsUnsignedInt4.ddl
+      tpbitsSignedLong8.ddl
+      tpbitsUnsignedLong8.ddl
+      tpbitsSignedLongLong16.ddl
+      tpbitsUnsignedLongLong16.ddl
+  )
 
-  ENDIF (HDF5_USE_H5DUMP_PACKED_BITS)
+  FOREACH (ddl_pbits ${HDF5_REFERENCE_PBITS})
+    SET (ddldest "${PROJECT_BINARY_DIR}/${ddl_pbits}")
+    #MESSAGE (STATUS " Translating ${ddl_pbits}")
+    ADD_CUSTOM_COMMAND (
+        TARGET     h5dump
+        POST_BUILD
+        COMMAND    ${CMAKE_COMMAND}
+        ARGS       -E copy_if_different ${HDF5_TOOLS_SRC_DIR}/testfiles/${ddl_pbits} ${ddldest}
+    )
+  ENDFOREACH (ddl_pbits ${HDF5_REFERENCE_PBITS})
   
 ##############################################################################
 ##############################################################################
@@ -475,6 +475,35 @@ IF (BUILD_TESTING)
 ##############################################################################
 ##############################################################################
 
+  MACRO (ADD_HELP_TEST testname resultcode)
+    # If using memchecker add tests without using scripts
+    IF (HDF5_ENABLE_USING_MEMCHECKER)
+      ADD_TEST (NAME H5DUMP-${testname} COMMAND $<TARGET_FILE:h5dump> ${ARGN})
+      IF (NOT "${last_test}" STREQUAL "")
+        SET_TESTS_PROPERTIES (H5DUMP-${testname} PROPERTIES DEPENDS ${last_test})
+      ENDIF (NOT "${last_test}" STREQUAL "")
+      SET (last_test "H5DUMP-${testname}")
+    ELSE (HDF5_ENABLE_USING_MEMCHECKER)
+      ADD_TEST (
+          NAME H5DUMP-clear-h5dump-${testname}-objects
+          COMMAND    ${CMAKE_COMMAND}
+              -E remove h5dump-${testname}.out h5dump-${testname}.out.err
+      )
+      ADD_TEST (
+          NAME H5DUMP-h5dump-${testname}
+          COMMAND "${CMAKE_COMMAND}"
+              -D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
+              -D "TEST_ARGS:STRING=${ARGN}"
+              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
+              -D "TEST_OUTPUT=h5dump-${testname}.out"
+              -D "TEST_EXPECT=${resultcode}"
+              -D "TEST_REFERENCE=h5dump-${testname}.txt"
+              -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+      )
+      SET_TESTS_PROPERTIES (H5DUMP-h5dump-${testname} PROPERTIES DEPENDS "H5DUMP-clear-h5dump-${testname}-objects")
+    ENDIF (HDF5_ENABLE_USING_MEMCHECKER)
+  ENDMACRO (ADD_HELP_TEST)
+
   MACRO (ADD_SKIP_H5_TEST skipresultfile skipresultcode testtype)
     IF (${testtype} STREQUAL "SKIP")
       IF (NOT HDF5_ENABLE_USING_MEMCHECKER)
@@ -495,8 +524,17 @@ IF (BUILD_TESTING)
       IF (NOT ${resultcode} STREQUAL "0")
         SET_TESTS_PROPERTIES (H5DUMP-${resultfile} PROPERTIES WILL_FAIL "true")
       ENDIF (NOT ${resultcode} STREQUAL "0")
+      IF (NOT "${last_test}" STREQUAL "")
+        SET_TESTS_PROPERTIES (H5DUMP-${resultfile} PROPERTIES DEPENDS ${last_test})
+      ENDIF (NOT "${last_test}" STREQUAL "")
+      SET (last_test "H5DUMP-${resultfile}")
     ELSE (HDF5_ENABLE_USING_MEMCHECKER)
       ADD_TEST (
+          NAME H5DUMP-clear-${resultfile}-objects
+          COMMAND    ${CMAKE_COMMAND}
+              -E remove ${resultfile}.out ${resultfile}.out.err
+      )
+      ADD_TEST (
           NAME H5DUMP-${resultfile}
           COMMAND "${CMAKE_COMMAND}"
               -D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
@@ -507,17 +545,14 @@ IF (BUILD_TESTING)
               -D "TEST_REFERENCE=${resultfile}.ddl"
               -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
       )
+      SET_TESTS_PROPERTIES (H5DUMP-${resultfile} PROPERTIES DEPENDS "H5DUMP-clear-${resultfile}-objects")
     ENDIF (HDF5_ENABLE_USING_MEMCHECKER)
-    IF (NOT "${last_test}" STREQUAL "")
-      SET_TESTS_PROPERTIES (H5DUMP-${resultfile} PROPERTIES DEPENDS ${last_test})
-    ENDIF (NOT "${last_test}" STREQUAL "")
-    SET (last_test "H5DUMP-${resultfile}")
   ENDMACRO (ADD_H5_TEST file)
 
   MACRO (ADD_H5_EXPORT_TEST resultfile targetfile resultcode)
     ADD_TEST (
         NAME H5DUMP-output-${resultfile}
-        COMMAND $<TARGET_FILE:h5dump> -d /Dataset1 -s 0 -R -y -o ${PROJECT_BINARY_DIR}/${resultfile}.txt ${PROJECT_BINARY_DIR}/${targetfile}
+        COMMAND $<TARGET_FILE:h5dump> ${ARGN} ${PROJECT_BINARY_DIR}/${resultfile}.txt ${PROJECT_BINARY_DIR}/${targetfile}
     )
     IF (NOT "${last_test}" STREQUAL "")
       SET_TESTS_PROPERTIES (H5DUMP-output-${resultfile} PROPERTIES DEPENDS ${last_test})
@@ -539,6 +574,11 @@ IF (BUILD_TESTING)
   MACRO (ADD_H5_MASK_TEST resultfile resultcode)
     IF (NOT HDF5_ENABLE_USING_MEMCHECKER)
       ADD_TEST (
+          NAME H5DUMP-clear-${resultfile}-objects
+          COMMAND    ${CMAKE_COMMAND}
+              -E remove ${resultfile}.out ${resultfile}.out.err
+      )
+      ADD_TEST (
           NAME H5DUMP-${resultfile}
           COMMAND "${CMAKE_COMMAND}"
               -D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
@@ -550,10 +590,7 @@ IF (BUILD_TESTING)
               -D "TEST_MASK_ERROR=true"
               -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
       )
-      IF (NOT "${last_test}" STREQUAL "")
-        SET_TESTS_PROPERTIES (H5DUMP-${resultfile} PROPERTIES DEPENDS ${last_test})
-      ENDIF (NOT "${last_test}" STREQUAL "")
-      SET (last_test "H5DUMP-${resultfile}")
+      SET_TESTS_PROPERTIES (H5DUMP-${resultfile} PROPERTIES DEPENDS "H5DUMP-clear-${resultfile}-objects")
     ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER)
   ENDMACRO (ADD_H5_MASK_TEST file)
 
@@ -576,8 +613,17 @@ IF (BUILD_TESTING)
       IF (NOT ${resultcode} STREQUAL "0")
         SET_TESTS_PROPERTIES (H5DUMP-XML-${resultfile} PROPERTIES WILL_FAIL "true")
       ENDIF (NOT ${resultcode} STREQUAL "0")
+      IF (NOT "${last_test}" STREQUAL "")
+        SET_TESTS_PROPERTIES (H5DUMP-XML-${resultfile} PROPERTIES DEPENDS ${last_test})
+      ENDIF (NOT "${last_test}" STREQUAL "")
+      SET (last_test "H5DUMP-XML-${resultfile}")
     ELSE (HDF5_ENABLE_USING_MEMCHECKER)
       ADD_TEST (
+          NAME H5DUMP-XML-clear-${resultfile}-objects
+          COMMAND    ${CMAKE_COMMAND}
+              -E remove ${resultfile}.out ${resultfile}.out.err
+      )
+      ADD_TEST (
           NAME H5DUMP-XML-${resultfile}
           COMMAND "${CMAKE_COMMAND}"
               -D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
@@ -588,11 +634,8 @@ IF (BUILD_TESTING)
               -D "TEST_REFERENCE=${resultfile}.xml"
               -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
       )
+      SET_TESTS_PROPERTIES (H5DUMP-XML-${resultfile} PROPERTIES DEPENDS "H5DUMP-XML-clear-${resultfile}-objects")
     ENDIF (HDF5_ENABLE_USING_MEMCHECKER)
-    IF (NOT "${last_test}" STREQUAL "")
-      SET_TESTS_PROPERTIES (H5DUMP-XML-${resultfile} PROPERTIES DEPENDS ${last_test})
-    ENDIF (NOT "${last_test}" STREQUAL "")
-    SET (last_test "H5DUMP-XML-${resultfile}")
   ENDMACRO (ADD_XML_H5_TEST file)
 
   # --------------------------------------------------------------------
@@ -605,22 +648,19 @@ IF (BUILD_TESTING)
   SET (USE_FILTER_NBIT H5_HAVE_FILTER_NBIT)
   SET (USE_FILTER_SCALEOFFSET H5_HAVE_FILTER_SCALEOFFSET)
 
-  # --------------------------------------------------------------------
-  # Determine if H5dump packed bits feature is included
-  # --------------------------------------------------------------------
-  SET (USE_PACKED_BITS HDF5_USE_H5DUMP_PACKED_BITS)
-
 ##############################################################################
 ##############################################################################
 ###           T H E   T E S T S                                            ###
 ##############################################################################
 ##############################################################################
 
-  # Remove any output file left over from previous test run
-  ADD_TEST (
+  IF (HDF5_ENABLE_USING_MEMCHECKER)
+    # Remove any output file left over from previous test run
+    ADD_TEST (
       NAME H5DUMP-clearall-objects
       COMMAND    ${CMAKE_COMMAND}
           -E remove 
+          h5dump-help.out
           filter_fail.out
           filter_fail.out.err
           packedbits.out
@@ -785,6 +825,8 @@ IF (BUILD_TESTING)
           tnofilename.out.err
           tnullspace.out
           tnullspace.out.err
+          zerodim.out
+          zerodim.out.err
           tordergr1.out
           tordergr1.out.err
           tordergr2.out
@@ -851,11 +893,14 @@ IF (BUILD_TESTING)
           tvlstr.out.err
           tvms.out
           tvms.out.err
-  )
-  IF (NOT "${last_test}" STREQUAL "")
-    SET_TESTS_PROPERTIES (H5DUMP-clearall-objects PROPERTIES DEPENDS ${last_test})
-  ENDIF (NOT "${last_test}" STREQUAL "")
-  SET (last_test "H5DUMP-clearall-objects")
+    )
+    IF (NOT "${last_test}" STREQUAL "")
+      SET_TESTS_PROPERTIES (H5DUMP-clearall-objects PROPERTIES DEPENDS ${last_test})
+    ENDIF (NOT "${last_test}" STREQUAL "")
+    SET (last_test "H5DUMP-clearall-objects")
+  ENDIF (HDF5_ENABLE_USING_MEMCHECKER)
+
+  ADD_HELP_TEST(help 0 -h)
 
   # test for signed/unsigned datasets
   ADD_H5_TEST (packedbits 0 packedbits.h5)
@@ -969,14 +1014,7 @@ IF (BUILD_TESTING)
   # test printing characters in ASCII instead of decimal
   ADD_H5_TEST (tchar1 0 -r tchar.h5)
 
-  # test failure handling
-  IF (NOT HDF5_USE_H5DUMP_PACKED_BITS)
-    # Missing file name
-    ADD_H5_TEST (tnofilename 1)
-  ENDIF (NOT HDF5_USE_H5DUMP_PACKED_BITS)
-
   # rev. 2004
-
   # tests for super block
   ADD_H5_TEST (tboot1 0 -H -B -d dset tfcontents1.h5)
   ADD_H5_TEST (tboot2 0 -B tfcontents2.h5)
@@ -1097,6 +1135,9 @@ IF (BUILD_TESTING)
   # test for displaying dataset and attribute of null space
   ADD_H5_TEST (tnullspace 0 tnullspace.h5)
 
+  # test for displaying dataset and attribute of space with 0 dimension size
+  ADD_H5_TEST (zerodim 0 zerodim.h5)
+
   # test for long double (some systems do not have long double)
   #ADD_H5_TEST (tldouble 0 tldouble.h5)
 
@@ -1108,6 +1149,13 @@ IF (BUILD_TESTING)
 
   # NATIVE default. the NATIVE test can be validated with h5import/h5diff
   ADD_H5_TEST (tbin1 0 -d integer -o out1.bin -b tbinary.h5)
+  IF (NOT HDF5_ENABLE_USING_MEMCHECKER)
+    IF (NOT "${last_test}" STREQUAL "")
+      SET_TESTS_PROPERTIES (H5DUMP-tbin1 PROPERTIES DEPENDS ${last_test})
+    ENDIF (NOT "${last_test}" STREQUAL "")
+    SET (last_test "H5DUMP-tbin1")
+  ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER)
+  
   ADD_TEST (NAME H5DUMP-clear-out1 COMMAND ${CMAKE_COMMAND} -E remove out1.h5)
   IF (NOT "${last_test}" STREQUAL "")
     SET_TESTS_PROPERTIES (H5DUMP-clear-out1 PROPERTIES DEPENDS ${last_test})
@@ -1119,9 +1167,22 @@ IF (BUILD_TESTING)
   SET (last_test "H5DUMP-h5diff-out1")
 
   ADD_H5_TEST (tbin2 0 -b BE -d float -o out2.bin tbinary.h5)
+  IF (NOT HDF5_ENABLE_USING_MEMCHECKER)
+    IF (NOT "${last_test}" STREQUAL "")
+      SET_TESTS_PROPERTIES (H5DUMP-tbin2 PROPERTIES DEPENDS ${last_test})
+    ENDIF (NOT "${last_test}" STREQUAL "")
+    SET (last_test "H5DUMP-tbin2")
+  ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER)
 
   # the NATIVE test can be validated with h5import/h5diff
   ADD_H5_TEST (tbin3 0 -d integer -o out3.bin -b NATIVE tbinary.h5)
+  IF (NOT HDF5_ENABLE_USING_MEMCHECKER)
+    IF (NOT "${last_test}" STREQUAL "")
+      SET_TESTS_PROPERTIES (H5DUMP-tbin3 PROPERTIES DEPENDS ${last_test})
+    ENDIF (NOT "${last_test}" STREQUAL "")
+    SET (last_test "H5DUMP-tbin3")
+  ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER)
+  
   ADD_TEST (NAME H5DUMP-clear-out3 COMMAND ${CMAKE_COMMAND} -E remove out3.h5)
   IF (NOT "${last_test}" STREQUAL "")
     SET_TESTS_PROPERTIES (H5DUMP-clear-out3 PROPERTIES DEPENDS ${last_test})
@@ -1133,6 +1194,12 @@ IF (BUILD_TESTING)
   SET (last_test "H5DUMP-h5diff-out3")
 
   ADD_H5_TEST (tbin4 0 -d double -b FILE -o out4.bin tbinary.h5)
+  IF (NOT HDF5_ENABLE_USING_MEMCHECKER)
+    IF (NOT "${last_test}" STREQUAL "")
+      SET_TESTS_PROPERTIES (H5DUMP-tbin4 PROPERTIES DEPENDS ${last_test})
+    ENDIF (NOT "${last_test}" STREQUAL "")
+    SET (last_test "H5DUMP-tbin4")
+  ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER)
    
   # Clean up binary output files
   IF (NOT HDF5_NOCLEANUP)
@@ -1192,206 +1259,205 @@ IF (BUILD_TESTING)
   ADD_H5_TEST (tall-6 0 -y -o data -d /g1/g1.1/dset1.1.1 tall.h5)
 
   ####### test for dataset packed bits ######
-  IF (HDF5_USE_H5DUMP_PACKED_BITS)
+  IF (HDF5_ENABLE_USING_MEMCHECKER)
     # Remove any output file left over from previous test run
     ADD_TEST (
-        NAME H5DUMP_PACKED_BITS-clearall-objects
-        COMMAND    ${CMAKE_COMMAND}
-            -E remove 
-            tnofilename-with-packed-bits.out
-            tnofilename-with-packed-bits.out.err
-            tpbitsArray.out
-            tpbitsArray.out.err
-            tpbitsCompound.out
-            tpbitsCompound.out.err
-            tpbitsIncomplete.out
-            tpbitsIncomplete.out.err
-            tpbitsLengthExceeded.out
-            tpbitsLengthExceeded.out.err
-            tpbitsCharLengthExceeded.out
-            tpbitsCharLengthExceeded.out.err
-            tpbitsIntLengthExceeded.out
-            tpbitsIntLengthExceeded.out.err
-            tpbitsLongLengthExceeded.out
-            tpbitsLongLengthExceeded.out.err
-            tpbitsLengthPositive.out
-            tpbitsLengthPositive.out.err
-            tpbitsMax.out
-            tpbitsMax.out.err
-            tpbitsMaxExceeded.out
-            tpbitsMaxExceeded.out.err
-            tpbitsOffsetExceeded.out
-            tpbitsOffsetExceeded.out.err
-            tpbitsCharOffsetExceeded.out
-            tpbitsCharOffsetExceeded.out.err
-            tpbitsIntOffsetExceeded.out
-            tpbitsIntOffsetExceeded.out.err
-            tpbitsLongOffsetExceeded.out
-            tpbitsLongOffsetExceeded.out.err
-            tpbitsOffsetNegative.out
-            tpbitsOffsetNegative.out.err
-            tpbitsOverlapped.out
-            tpbitsOverlapped.out.err
-            tpbitsSigned.out
-            tpbitsSigned.out.err
-            tpbitsUnsigned.out
-            tpbitsUnsigned.out.err
-            tpbitsSignedInt.out
-            tpbitsSignedInt.out.err
-            tpbitsUnsignedInt.out
-            tpbitsUnsignedInt.out.err
-            tpbitsSignedLong.out
-            tpbitsSignedLong.out.err
-            tpbitsUnsignedLong.out
-            tpbitsUnsignedLong.out.err
-            tpbitsSignedLongLong.out
-            tpbitsSignedLongLong.out.err
-            tpbitsUnsignedLongLong.out
-            tpbitsUnsignedLongLong.out.err
-            tpbitsSignedWhole.out
-            tpbitsSignedWhole.out.err
-            tpbitsUnsignedWhole.out
-            tpbitsUnsignedWhole.out.err
-            tpbitsSignedIntWhole.out
-            tpbitsSignedIntWhole.out.err
-            tpbitsUnsignedIntWhole.out
-            tpbitsUnsignedIntWhole.out.err
-            tpbitsSignedLongWhole.out
-            tpbitsSignedLongWhole.out.err
-            tpbitsUnsignedLongWhole.out
-            tpbitsUnsignedLongWhole.out.err
-            tpbitsSignedLongLongWhole.out
-            tpbitsSignedLongLongWhole.out.err
-            tpbitsUnsignedLongLongWhole.out
-            tpbitsUnsignedLongLongWhole.out.err
-            tpbitsSignedLongLongWhole1.out
-            tpbitsSignedLongLongWhole1.out.err
-            tpbitsUnsignedLongLongWhole1.out
-            tpbitsUnsignedLongLongWhole1.out.err
-            tpbitsSignedLongLongWhole63.out
-            tpbitsSignedLongLongWhole63.out.err
-            tpbitsUnsignedLongLongWhole63.out
-            tpbitsUnsignedLongLongWhole63.out.err
-            tpbitsSigned4.out
-            tpbitsSigned4.out.err
-            tpbitsUnsigned4.out
-            tpbitsUnsigned4.out.err
-            tpbitsSignedInt8.out
-            tpbitsSignedInt8.out.err
-            tpbitsUnsignedInt8.out
-            tpbitsUnsignedInt8.out.err
-            tpbitsSignedLong16.out
-            tpbitsSignedLong16.out.err
-            tpbitsUnsignedLong16.out
-            tpbitsUnsignedLong16.out.err
-            tpbitsSignedLongLong32.out
-            tpbitsSignedLongLong32.out.err
-            tpbitsUnsignedLongLong32.out
-            tpbitsUnsignedLongLong32.out.err
-            tpbitsSigned2.out
-            tpbitsSigned2.out.err
-            tpbitsUnsigned2.out
-            tpbitsUnsigned2.out.err
-            tpbitsSignedInt4.out
-            tpbitsSignedInt4.out.err
-            tpbitsUnsignedInt4.out
-            tpbitsUnsignedInt4.out.err
-            tpbitsSignedLong8.out
-            tpbitsSignedLong8.out.err
-            tpbitsUnsignedLong8.out
-            tpbitsUnsignedLong8.out.err
-            tpbitsSignedLongLong16.out
-            tpbitsSignedLongLong16.out.err
-            tpbitsUnsignedLongLong16.out
-            tpbitsUnsignedLongLong16.out.err
+      NAME H5DUMP_PACKED_BITS-clearall-objects
+      COMMAND    ${CMAKE_COMMAND}
+          -E remove 
+          tpbitsArray.out
+          tpbitsArray.out.err
+          tpbitsCompound.out
+          tpbitsCompound.out.err
+          tpbitsIncomplete.out
+          tpbitsIncomplete.out.err
+          tpbitsLengthExceeded.out
+          tpbitsLengthExceeded.out.err
+          tpbitsCharLengthExceeded.out
+          tpbitsCharLengthExceeded.out.err
+          tpbitsIntLengthExceeded.out
+          tpbitsIntLengthExceeded.out.err
+          tpbitsLongLengthExceeded.out
+          tpbitsLongLengthExceeded.out.err
+          tpbitsLengthPositive.out
+          tpbitsLengthPositive.out.err
+          tpbitsMax.out
+          tpbitsMax.out.err
+          tpbitsMaxExceeded.out
+          tpbitsMaxExceeded.out.err
+          tpbitsOffsetExceeded.out
+          tpbitsOffsetExceeded.out.err
+          tpbitsCharOffsetExceeded.out
+          tpbitsCharOffsetExceeded.out.err
+          tpbitsIntOffsetExceeded.out
+          tpbitsIntOffsetExceeded.out.err
+          tpbitsLongOffsetExceeded.out
+          tpbitsLongOffsetExceeded.out.err
+          tpbitsOffsetNegative.out
+          tpbitsOffsetNegative.out.err
+          tpbitsOverlapped.out
+          tpbitsOverlapped.out.err
+          tpbitsSigned.out
+          tpbitsSigned.out.err
+          tpbitsUnsigned.out
+          tpbitsUnsigned.out.err
+          tpbitsSignedInt.out
+          tpbitsSignedInt.out.err
+          tpbitsUnsignedInt.out
+          tpbitsUnsignedInt.out.err
+          tpbitsSignedLong.out
+          tpbitsSignedLong.out.err
+          tpbitsUnsignedLong.out
+          tpbitsUnsignedLong.out.err
+          tpbitsSignedLongLong.out
+          tpbitsSignedLongLong.out.err
+          tpbitsUnsignedLongLong.out
+          tpbitsUnsignedLongLong.out.err
+          tpbitsSignedWhole.out
+          tpbitsSignedWhole.out.err
+          tpbitsUnsignedWhole.out
+          tpbitsUnsignedWhole.out.err
+          tpbitsSignedIntWhole.out
+          tpbitsSignedIntWhole.out.err
+          tpbitsUnsignedIntWhole.out
+          tpbitsUnsignedIntWhole.out.err
+          tpbitsSignedLongWhole.out
+          tpbitsSignedLongWhole.out.err
+          tpbitsUnsignedLongWhole.out
+          tpbitsUnsignedLongWhole.out.err
+          tpbitsSignedLongLongWhole.out
+          tpbitsSignedLongLongWhole.out.err
+          tpbitsUnsignedLongLongWhole.out
+          tpbitsUnsignedLongLongWhole.out.err
+          tpbitsSignedLongLongWhole1.out
+          tpbitsSignedLongLongWhole1.out.err
+          tpbitsUnsignedLongLongWhole1.out
+          tpbitsUnsignedLongLongWhole1.out.err
+          tpbitsSignedLongLongWhole63.out
+          tpbitsSignedLongLongWhole63.out.err
+          tpbitsUnsignedLongLongWhole63.out
+          tpbitsUnsignedLongLongWhole63.out.err
+          tpbitsSigned4.out
+          tpbitsSigned4.out.err
+          tpbitsUnsigned4.out
+          tpbitsUnsigned4.out.err
+          tpbitsSignedInt8.out
+          tpbitsSignedInt8.out.err
+          tpbitsUnsignedInt8.out
+          tpbitsUnsignedInt8.out.err
+          tpbitsSignedLong16.out
+          tpbitsSignedLong16.out.err
+          tpbitsUnsignedLong16.out
+          tpbitsUnsignedLong16.out.err
+          tpbitsSignedLongLong32.out
+          tpbitsSignedLongLong32.out.err
+          tpbitsUnsignedLongLong32.out
+          tpbitsUnsignedLongLong32.out.err
+          tpbitsSigned2.out
+          tpbitsSigned2.out.err
+          tpbitsUnsigned2.out
+          tpbitsUnsigned2.out.err
+          tpbitsSignedInt4.out
+          tpbitsSignedInt4.out.err
+          tpbitsUnsignedInt4.out
+          tpbitsUnsignedInt4.out.err
+          tpbitsSignedLong8.out
+          tpbitsSignedLong8.out.err
+          tpbitsUnsignedLong8.out
+          tpbitsUnsignedLong8.out.err
+          tpbitsSignedLongLong16.out
+          tpbitsSignedLongLong16.out.err
+          tpbitsUnsignedLongLong16.out
+          tpbitsUnsignedLongLong16.out.err
     )
     IF (NOT "${last_test}" STREQUAL "")
       SET_TESTS_PROPERTIES (H5DUMP_PACKED_BITS-clearall-objects PROPERTIES DEPENDS ${last_test})
     ENDIF (NOT "${last_test}" STREQUAL "")
     SET (last_test "H5DUMP_PACKED_BITS-clearall-objects")
+  ENDIF (HDF5_ENABLE_USING_MEMCHECKER)
 
-    # test failure handling
-    # Missing file name
-    ADD_H5_TEST (tnofilename-with-packed-bits 1)
-    # Limits:
-    # Maximum number of packed bits is 8 (for now).
-    # Maximum integer size is 8*sizeof(long long).
-    # Maximun Offset is Maximum size - 1.
-    # Maximum Offset+Length is Maximum size.
-    # Tests:
-    # Normal operation on both signed and unsigned int datasets.
-    # Sanity check
-    # Their rawdata output should be the same.
-    ADD_H5_TEST (tpbitsSignedWhole 0 -d /DS08BITS -M 0,8 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsignedWhole 0 -d /DU08BITS -M 0,8 packedbits.h5)
-    ADD_H5_TEST (tpbitsSignedIntWhole 0 -d /DS16BITS -M 0,16 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsignedIntWhole 0 -d /DU16BITS -M 0,16 packedbits.h5)
-    ADD_H5_TEST (tpbitsSignedLongWhole 0 -d /DS32BITS -M 0,32 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsignedLongWhole 0 -d /DU32BITS -M 0,32 packedbits.h5)
-    ADD_H5_TEST (tpbitsSignedLongLongWhole 0 -d /DS64BITS -M 0,64 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsignedLongLongWhole 0 -d /DU64BITS -M 0,64 packedbits.h5)
-    ADD_H5_TEST (tpbitsSignedLongLongWhole63 0 -d /DS64BITS -M 0,63 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsignedLongLongWhole63 0 -d /DU64BITS -M 0,63 packedbits.h5)
-    ADD_H5_TEST (tpbitsSignedLongLongWhole1 0 -d /DS64BITS -M 1,63 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsignedLongLongWhole1 0 -d /DU64BITS -M 1,63 packedbits.h5)
-    # Half sections
-    ADD_H5_TEST (tpbitsSigned4 0 -d /DS08BITS -M 0,4,4,4 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsigned4 0 -d /DU08BITS -M 0,4,4,4 packedbits.h5)
-    ADD_H5_TEST (tpbitsSignedInt8 0 -d /DS16BITS -M 0,8,8,8 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsignedInt8 0 -d /DU16BITS -M 0,8,8,8 packedbits.h5)
-    ADD_H5_TEST (tpbitsSignedLong16 0 -d /DS32BITS -M 0,16,16,16 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsignedLong16 0 -d /DU32BITS -M 0,16,16,16 packedbits.h5)
-    ADD_H5_TEST (tpbitsSignedLongLong32 0 -d /DS64BITS -M 0,32,32,32 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsignedLongLong32 0 -d /DU64BITS -M 0,32,32,32 packedbits.h5)
-    # Quarter sections
-    ADD_H5_TEST (tpbitsSigned2 0 -d /DS08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsigned2 0 -d /DU08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5)
-    ADD_H5_TEST (tpbitsSignedInt4 0 -d /DS16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsignedInt4 0 -d /DU16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5)
-    ADD_H5_TEST (tpbitsSignedLong8 0 -d /DS32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsignedLong8 0 -d /DU32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5)
-    ADD_H5_TEST (tpbitsSignedLongLong16 0 -d /DS64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsignedLongLong16 0 -d /DU64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5)
-    # Begin and End
-    ADD_H5_TEST (tpbitsSigned 0 -d /DS08BITS -M 0,2,2,6 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsigned 0 -d /DU08BITS -M 0,2,2,6 packedbits.h5)
-    ADD_H5_TEST (tpbitsSignedInt 0 -d /DS16BITS -M 0,2,10,6 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsignedInt 0 -d /DU16BITS -M 0,2,10,6 packedbits.h5)
-    ADD_H5_TEST (tpbitsSignedLong 0 -d /DS32BITS -M 0,2,26,6 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsignedLong 0 -d /DU32BITS -M 0,2,26,6 packedbits.h5)
-    ADD_H5_TEST (tpbitsSignedLongLong 0 -d /DS64BITS -M 0,2,58,6 packedbits.h5)
-    ADD_H5_TEST (tpbitsUnsignedLongLong 0 -d /DU64BITS -M 0,2,58,6 packedbits.h5)
-    # Overlapped packed bits.
-    ADD_H5_TEST (tpbitsOverlapped 0 -d /DS08BITS -M 0,1,1,1,2,1,0,3 packedbits.h5)
-    # Maximum number of packed bits.
-    ADD_H5_TEST (tpbitsMax 0 -d /DS08BITS -M 0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5)
-    # Compound type.
-    ADD_H5_TEST (tpbitsCompound 0 -d /dset1 -M 0,1,1,1 tcompound.h5)
-    # Array type.
-    ADD_H5_TEST (tpbitsArray 0 -d /Dataset1 -M 0,1,1,1 tarray1.h5)
-    # Test Error handling.
-    # Too many packed bits requested. Max is 8 for now.
-    ADD_H5_TEST (tpbitsMaxExceeded 1 -d /DS08BITS -M 0,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5)
-    # Offset too large. Max is 8*sizeof(long long.
-    ADD_H5_TEST (tpbitsOffsetExceeded 1 -d /DS08BITS -M 64,1 packedbits.h5)
-    ADD_H5_TEST (tpbitsCharOffsetExceeded 0 -d /DS08BITS -M 8,1 packedbits.h5)
-    ADD_H5_TEST (tpbitsIntOffsetExceeded 0 -d /DS16BITS -M 16,1 packedbits.h5)
-    ADD_H5_TEST (tpbitsLongOffsetExceeded 0 -d /DS32BITS -M 32,1 packedbits.h5)
-    # Bad offset, must not be negative.
-    ADD_H5_TEST (tpbitsOffsetNegative 1 -d /DS08BITS -M -1,1 packedbits.h5)
-    # Bad length, must not be positive.
-    ADD_H5_TEST (tpbitsLengthPositive 1 -d /DS08BITS -M 4,0 packedbits.h5)
-    # Offset+Length is too large. Max is 8*sizeof(long long).
-    ADD_H5_TEST (tpbitsLengthExceeded 1 -d /DS08BITS -M 37,28 packedbits.h5)
-    ADD_H5_TEST (tpbitsCharLengthExceeded 0 -d /DS08BITS -M 2,7 packedbits.h5)
-    ADD_H5_TEST (tpbitsIntLengthExceeded 0 -d /DS16BITS -M 10,7 packedbits.h5)
-    ADD_H5_TEST (tpbitsLongLengthExceeded 0 -d /DS32BITS -M 26,7 packedbits.h5)
-    # Incomplete pair of packed bits request.
-    ADD_H5_TEST (tpbitsIncomplete 1 -d /DS08BITS -M 0,2,2,1,0,2,2, packedbits.h5)
-  ENDIF (HDF5_USE_H5DUMP_PACKED_BITS)
+  # test failure handling
+  # Missing file name
+  ADD_H5_TEST (tnofilename 1)
+  # Limits:
+  # Maximum number of packed bits is 8 (for now).
+  # Maximum integer size is 8*sizeof(long long).
+  # Maximun Offset is Maximum size - 1.
+  # Maximum Offset+Length is Maximum size.
+  # Tests:
+  # Normal operation on both signed and unsigned int datasets.
+  # Sanity check
+  # Their rawdata output should be the same.
+  ADD_H5_TEST (tpbitsSignedWhole 0 -d /DS08BITS -M 0,8 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsignedWhole 0 -d /DU08BITS -M 0,8 packedbits.h5)
+  ADD_H5_TEST (tpbitsSignedIntWhole 0 -d /DS16BITS -M 0,16 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsignedIntWhole 0 -d /DU16BITS -M 0,16 packedbits.h5)
+  ADD_H5_TEST (tpbitsSignedLongWhole 0 -d /DS32BITS -M 0,32 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsignedLongWhole 0 -d /DU32BITS -M 0,32 packedbits.h5)
+  ADD_H5_TEST (tpbitsSignedLongLongWhole 0 -d /DS64BITS -M 0,64 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsignedLongLongWhole 0 -d /DU64BITS -M 0,64 packedbits.h5)
+  ADD_H5_TEST (tpbitsSignedLongLongWhole63 0 -d /DS64BITS -M 0,63 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsignedLongLongWhole63 0 -d /DU64BITS -M 0,63 packedbits.h5)
+  ADD_H5_TEST (tpbitsSignedLongLongWhole1 0 -d /DS64BITS -M 1,63 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsignedLongLongWhole1 0 -d /DU64BITS -M 1,63 packedbits.h5)
+  # Half sections
+  ADD_H5_TEST (tpbitsSigned4 0 -d /DS08BITS -M 0,4,4,4 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsigned4 0 -d /DU08BITS -M 0,4,4,4 packedbits.h5)
+  ADD_H5_TEST (tpbitsSignedInt8 0 -d /DS16BITS -M 0,8,8,8 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsignedInt8 0 -d /DU16BITS -M 0,8,8,8 packedbits.h5)
+  ADD_H5_TEST (tpbitsSignedLong16 0 -d /DS32BITS -M 0,16,16,16 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsignedLong16 0 -d /DU32BITS -M 0,16,16,16 packedbits.h5)
+  ADD_H5_TEST (tpbitsSignedLongLong32 0 -d /DS64BITS -M 0,32,32,32 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsignedLongLong32 0 -d /DU64BITS -M 0,32,32,32 packedbits.h5)
+  # Quarter sections
+  ADD_H5_TEST (tpbitsSigned2 0 -d /DS08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsigned2 0 -d /DU08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5)
+  ADD_H5_TEST (tpbitsSignedInt4 0 -d /DS16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsignedInt4 0 -d /DU16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5)
+  ADD_H5_TEST (tpbitsSignedLong8 0 -d /DS32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsignedLong8 0 -d /DU32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5)
+  ADD_H5_TEST (tpbitsSignedLongLong16 0 -d /DS64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsignedLongLong16 0 -d /DU64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5)
+  # Begin and End
+  ADD_H5_TEST (tpbitsSigned 0 -d /DS08BITS -M 0,2,2,6 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsigned 0 -d /DU08BITS -M 0,2,2,6 packedbits.h5)
+  ADD_H5_TEST (tpbitsSignedInt 0 -d /DS16BITS -M 0,2,10,6 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsignedInt 0 -d /DU16BITS -M 0,2,10,6 packedbits.h5)
+  ADD_H5_TEST (tpbitsSignedLong 0 -d /DS32BITS -M 0,2,26,6 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsignedLong 0 -d /DU32BITS -M 0,2,26,6 packedbits.h5)
+  ADD_H5_TEST (tpbitsSignedLongLong 0 -d /DS64BITS -M 0,2,58,6 packedbits.h5)
+  ADD_H5_TEST (tpbitsUnsignedLongLong 0 -d /DU64BITS -M 0,2,58,6 packedbits.h5)
+  # Overlapped packed bits.
+  ADD_H5_TEST (tpbitsOverlapped 0 -d /DS08BITS -M 0,1,1,1,2,1,0,3 packedbits.h5)
+  # Maximum number of packed bits.
+  ADD_H5_TEST (tpbitsMax 0 -d /DS08BITS -M 0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5)
+  # Compound type.
+  ADD_H5_TEST (tpbitsCompound 0 -d /dset1 -M 0,1,1,1 tcompound.h5)
+  # Array type.
+  ADD_H5_TEST (tpbitsArray 0 -d /Dataset1 -M 0,1,1,1 tarray1.h5)
+  # Test Error handling.
+  # Too many packed bits requested. Max is 8 for now.
+  ADD_H5_TEST (tpbitsMaxExceeded 1 -d /DS08BITS -M 0,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5)
+  # Offset too large. Max is 8*sizeof(long long.
+  ADD_H5_TEST (tpbitsOffsetExceeded 1 -d /DS08BITS -M 64,1 packedbits.h5)
+  ADD_H5_TEST (tpbitsCharOffsetExceeded 0 -d /DS08BITS -M 8,1 packedbits.h5)
+  ADD_H5_TEST (tpbitsIntOffsetExceeded 0 -d /DS16BITS -M 16,1 packedbits.h5)
+  ADD_H5_TEST (tpbitsLongOffsetExceeded 0 -d /DS32BITS -M 32,1 packedbits.h5)
+  # Bad offset, must not be negative.
+  ADD_H5_TEST (tpbitsOffsetNegative 1 -d /DS08BITS -M -1,1 packedbits.h5)
+  # Bad length, must not be positive.
+  ADD_H5_TEST (tpbitsLengthPositive 1 -d /DS08BITS -M 4,0 packedbits.h5)
+  # Offset+Length is too large. Max is 8*sizeof(long long).
+  ADD_H5_TEST (tpbitsLengthExceeded 1 -d /DS08BITS -M 37,28 packedbits.h5)
+  ADD_H5_TEST (tpbitsCharLengthExceeded 0 -d /DS08BITS -M 2,7 packedbits.h5)
+  ADD_H5_TEST (tpbitsIntLengthExceeded 0 -d /DS16BITS -M 10,7 packedbits.h5)
+  ADD_H5_TEST (tpbitsLongLengthExceeded 0 -d /DS32BITS -M 26,7 packedbits.h5)
+  # Incomplete pair of packed bits request.
+  ADD_H5_TEST (tpbitsIncomplete 1 -d /DS08BITS -M 0,2,2,1,0,2,2, packedbits.h5)
    
-  # Remove any output file left over from previous test run
-  ADD_TEST (
+  IF (HDF5_ENABLE_USING_MEMCHECKER)
+    # Remove any output file left over from previous test run
+    ADD_TEST (
       NAME H5DUMP-XML-clearall-objects
       COMMAND    ${CMAKE_COMMAND}
           -E remove 
@@ -1523,11 +1589,12 @@ IF (BUILD_TESTING)
           tvldtypes5.h5.out.err
           tvlstr.h5.out
           tvlstr.h5.out.err
-  )
-  IF (NOT "${last_test}" STREQUAL "")
-    SET_TESTS_PROPERTIES (H5DUMP-XML-clearall-objects PROPERTIES DEPENDS ${last_test})
-  ENDIF (NOT "${last_test}" STREQUAL "")
-  SET (last_test "H5DUMP-XML-clearall-objects")
+    )
+    IF (NOT "${last_test}" STREQUAL "")
+      SET_TESTS_PROPERTIES (H5DUMP-XML-clearall-objects PROPERTIES DEPENDS ${last_test})
+    ENDIF (NOT "${last_test}" STREQUAL "")
+    SET (last_test "H5DUMP-XML-clearall-objects")
+  ENDIF (HDF5_ENABLE_USING_MEMCHECKER)
 
   ########## test XML
   ADD_XML_H5_TEST (tall.h5 0 tall.h5)
@@ -1582,6 +1649,8 @@ IF (BUILD_TESTING)
   ##Test dataset and attribute of null space.  Commented out:
   ## wait until the XML schema is updated for null space. 
   ##  ADD_XML_H5_TEST (tnullspace.h5 0 tnulspace.h5)
+  ## So is dataspace with 0 dimension size.
+  ##  ADD_XML_H5_TEST (zerodim.h5 0 zerodim.h5)
 
   # other options for xml
 
diff --git a/tools/h5dump/Makefile.in b/tools/h5dump/Makefile.in
index 9ca0fec..7d462bf 100644
--- a/tools/h5dump/Makefile.in
+++ b/tools/h5dump/Makefile.in
@@ -186,6 +186,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -206,10 +207,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -253,7 +256,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/tools/h5dump/h5dump.c b/tools/h5dump/h5dump.c
index 1b140ac..147f6ab 100644
--- a/tools/h5dump/h5dump.c
+++ b/tools/h5dump/h5dump.c
@@ -27,24 +27,24 @@
 
 /* Macros for displaying objects */
 #define begin_obj(obj,name,begin)                               \
-    do {							\
-        if (name)                                               \
-            printf("%s \"%s\" %s\n", (obj), (name), (begin));   \
-        else                                                    \
-            printf("%s %s\n", (obj), (begin));			\
-    } while(0);
+        do {              \
+            if (name)                                               \
+            HDfprintf(stdout, "%s \"%s\" %s\n", (obj), (name), (begin));   \
+            else                                                    \
+            HDfprintf(stdout, "%s %s\n", (obj), (begin));      \
+        } while(0);
 
 #define end_obj(obj,end)                                        \
-    do {							\
-        if(HDstrlen(end)) {                                     \
-            printf("%s", end);                                  \
-            if(HDstrlen(obj))                                   \
-                printf(" ");                                    \
-        }                                                       \
-        if(HDstrlen(obj))                                       \
-            printf("%s", obj);                                  \
-        printf("\n");						\
-    } while(0);
+        do {              \
+            if(HDstrlen(end)) {                                     \
+                HDfprintf(stdout, "%s", end);                                  \
+                if(HDstrlen(obj))                                   \
+                HDfprintf(stdout, " ");                                    \
+            }                                                       \
+            if(HDstrlen(obj))                                       \
+            HDfprintf(stdout, "%s", obj);                                  \
+            HDfprintf(stdout, "\n");            \
+        } while(0);
 
 /* 3 private values: can't be set, but can be read.
    Note: these are defined in H5Zprivate, they are
@@ -72,7 +72,7 @@ static h5dump_table_list_t table_list = {0, 0, NULL};
 static table_t      *group_table = NULL, *dset_table = NULL, *type_table = NULL;
 static hbool_t      hit_elink = FALSE;  /* whether we have traversed an external link */
 static size_t       prefix_len = 1024;
-static char         *prefix;
+static char         *prefix = NULL;
 static const char   *driver = NULL;      /* The driver to open the file with. */
 static const h5dump_header_t *dump_header_format;
 static const char   *fp_format = NULL;
@@ -93,32 +93,28 @@ static int          display_ai        = TRUE;  /*array index */
 static int          display_escape    = FALSE; /*escape non printable characters */
 static int          display_region    = FALSE; /*print region reference data */
 static int          enable_error_stack= FALSE; /* re-enable error stack */
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
 static int          display_packed_bits = FALSE; /*print 1-8 byte numbers as packed bits*/
-#endif
 
 /* sort parameters */
 static H5_index_t   sort_by           = H5_INDEX_NAME; /*sort_by [creation_order | name]  */
 static H5_iter_order_t sort_order     = H5_ITER_INC; /*sort_order [ascending | descending]   */
 
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
-#define PACKED_BITS_MAX         8	/* Maximum number of packed-bits to display */
-#define PACKED_BITS_SIZE_MAX    8*sizeof(long long)	/* Maximum bits size of integer types of packed-bits */
+#define PACKED_BITS_MAX         8  /* Maximum number of packed-bits to display */
+#define PACKED_BITS_SIZE_MAX    8*sizeof(long long)  /* Maximum bits size of integer types of packed-bits */
 /* mask list for packed bits */
 static unsigned long long packed_mask[PACKED_BITS_MAX];  /* packed bits are restricted to 8*sizeof(llong) bytes */
 
 /* packed bits display parameters */
 static int packed_offset[PACKED_BITS_MAX];
 static int packed_length[PACKED_BITS_MAX];
-#endif
 
 /**
- **  Added for XML  **
- **/
+**  Added for XML  **
+**/
 
 /* module-scoped variables for XML option */
-#define DEFAULT_XSD     "http://www.hdfgroup.org/DTDs/HDF5-File.xsd"
-#define DEFAULT_DTD     "http://www.hdfgroup.org/DTDs/HDF5-File.dtd"
+#define DEFAULT_XSD     "http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd"
+#define DEFAULT_DTD     "http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.dtd"
 
 static int              doxml = 0;
 static int              useschema = 1;
@@ -131,9 +127,7 @@ static int              indent;              /*how far in to indent the line
 /* internal functions */
 static hid_t    h5_fileaccess(void);
 static void     dump_oid(hid_t oid);
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
 static void     dump_packed_bits(unsigned int packed_index, hid_t type);
-#endif
 static void     print_enum(hid_t type);
 static int      xml_name_to_XID(const char *, char *, int , int );
 static void     init_prefix(char **prfx, size_t prfx_len);
@@ -145,77 +139,81 @@ static int      dump_extlink(hid_t group, const char *linkname, const char *objn
 
 
 static h5tool_format_t         dataformat = {
-    0,              /*raw */
-
-    "",             /*fmt_raw */
-    "%d",           /*fmt_int */
-    "%u",           /*fmt_uint */
-    "%hhd",           /*fmt_schar */
-    "%u",           /*fmt_uchar */
-    "%d",           /*fmt_short */
-    "%u",           /*fmt_ushort */
-    "%ld",          /*fmt_long */
-    "%lu",          /*fmt_ulong */
-    NULL,           /*fmt_llong */
-    NULL,           /*fmt_ullong */
-    "%g",           /*fmt_double */
-    "%g",           /*fmt_float */
-
-    0,              /*ascii */
-    0,              /*str_locale */
-    0,              /*str_repeat */
-
-    "[ ",           /*arr_pre */
-    ",",            /*arr_sep */
-    " ]",           /*arr_suf */
-    1,              /*arr_linebreak */
-
-    "",             /*cmpd_name */
-    ",\n",          /*cmpd_sep */
-    "{\n",          /*cmpd_pre */
-    "}",            /*cmpd_suf */
-    "\n",           /*cmpd_end */
-
-    ", ",           /*vlen_sep */
-    "(",            /*vlen_pre */
-    ")",            /*vlen_suf */
-    "",             /*vlen_end */
-
-    "%s",           /*elmt_fmt */
-    ",",            /*elmt_suf1 */
-    " ",            /*elmt_suf2 */
-
-    "",             /*idx_n_fmt */
-    "",             /*idx_sep */
-    "",             /*idx_fmt */
-
-    80,             /*line_ncols *//*standard default columns */
-    0,              /*line_per_line */
-    "",             /*line_pre */
-    "%s",           /*line_1st */
-    "%s",           /*line_cont */
-    "",             /*line_suf */
-    "",             /*line_sep */
-    1,              /*line_multi_new */
-    "   ",          /*line_indent */
-
-    1,              /*skip_first */
-
-    1,              /*obj_hidefileno */
-    " "H5_PRINTF_HADDR_FMT, /*obj_format */
-
-    1,              /*dset_hidefileno */
-    "DATASET %s ",  /*dset_format */
-    "%s",           /*dset_blockformat_pre */
-    "%s",           /*dset_ptformat_pre */
-    "%s",           /*dset_ptformat */
-    1,                          /*array indices */
-    1                           /*escape non printable characters */
+        0,              /*raw */
+
+        "",             /*fmt_raw */
+        "%d",           /*fmt_int */
+        "%u",           /*fmt_uint */
+#ifdef H5_VMS
+        "%hd",          /*fmt_schar */
+#else
+        "%hhd",         /*fmt_schar */
+#endif
+        "%u",           /*fmt_uchar */
+        "%d",           /*fmt_short */
+        "%u",           /*fmt_ushort */
+        "%ld",          /*fmt_long */
+        "%lu",          /*fmt_ulong */
+        NULL,           /*fmt_llong */
+        NULL,           /*fmt_ullong */
+        "%g",           /*fmt_double */
+        "%g",           /*fmt_float */
+
+        0,              /*ascii */
+        0,              /*str_locale */
+        0,              /*str_repeat */
+
+        "[ ",           /*arr_pre */
+        ",",            /*arr_sep */
+        " ]",           /*arr_suf */
+        1,              /*arr_linebreak */
+
+        "",             /*cmpd_name */
+        ",\n",          /*cmpd_sep */
+        "{\n",          /*cmpd_pre */
+        "}",            /*cmpd_suf */
+        "\n",           /*cmpd_end */
+
+        ", ",           /*vlen_sep */
+        "(",            /*vlen_pre */
+        ")",            /*vlen_suf */
+        "",             /*vlen_end */
+
+        "%s",           /*elmt_fmt */
+        ",",            /*elmt_suf1 */
+        " ",            /*elmt_suf2 */
+
+        "",             /*idx_n_fmt */
+        "",             /*idx_sep */
+        "",             /*idx_fmt */
+
+        80,             /*line_ncols *//*standard default columns */
+        0,              /*line_per_line */
+        "",             /*line_pre */
+        "%s",           /*line_1st */
+        "%s",           /*line_cont */
+        "",             /*line_suf */
+        "",             /*line_sep */
+        1,              /*line_multi_new */
+        "   ",          /*line_indent */
+
+        1,              /*skip_first */
+
+        1,              /*obj_hidefileno */
+        " "H5_PRINTF_HADDR_FMT, /*obj_format */
+
+        1,              /*dset_hidefileno */
+        "DATASET %s ",  /*dset_format */
+        "%s",           /*dset_blockformat_pre */
+        "%s",           /*dset_ptformat_pre */
+        "%s",           /*dset_ptformat */
+        1,                          /*array indices */
+        1                           /*escape non printable characters */
 };
 
 /**
- **  Added for XML  **
- **/
+**  Added for XML  **
+**/
 /*
  *  Alternative formating for data dumped to XML
  *  In general, the numbers are the same, but separators
@@ -229,161 +227,165 @@ static h5tool_format_t         dataformat = {
  *  This table only affects XML output.
  */
 static h5tool_format_t         xml_dataformat = {
-    0,              /*raw */
-
-    "",             /*fmt_raw */
-    "%d",           /*fmt_int */
-    "%u",           /*fmt_uint */
-    "%hhd",           /*fmt_schar */
-    "%u",           /*fmt_uchar */
-    "%d",           /*fmt_short */
-    "%u",           /*fmt_ushort */
-    "%ld",          /*fmt_long */
-    "%lu",          /*fmt_ulong */
-    NULL,           /*fmt_llong */
-    NULL,           /*fmt_ullong */
-    "%g",           /*fmt_double */
-    "%g",           /*fmt_float */
-
-    0,              /*ascii */
-    0,              /*str_locale */
-    0,              /*str_repeat */
-
-    " ",            /*arr_pre */
-    "",             /*arr_sep */
-    "",             /*arr_suf */
-    1,              /*arr_linebreak */
-
-    "",             /*cmpd_name */
-    " ",            /*cmpd_sep */
-    "",             /*cmpd_pre */
-    "",             /*cmpd_suf */
-    "",             /*cmpd_end */
-
-    " ",            /*vlen_sep */
-    " ",            /*vlen_pre */
-    "",             /*vlen_suf */
-    "",             /*vlen_end */
-
-    "%s",           /*elmt_fmt */
-    "",             /*elmt_suf1 */
-    " ",            /*elmt_suf2 */
-
-    "",             /*idx_n_fmt */
-    "",             /*idx_sep */
-    "",             /*idx_fmt */
-
-    80,             /*line_ncols *//*standard default columns */
-    0,              /*line_per_line */
-    "",             /*line_pre */
-    "%s",           /*line_1st */
-    "%s",           /*line_cont */
-    "",             /*line_suf */
-    "",             /*line_sep */
-    1,              /*line_multi_new */
-    "   ",          /*line_indent */
-
-    1,              /*skip_first */
-
-    1,              /*obj_hidefileno */
-    " "H5_PRINTF_HADDR_FMT, /*obj_format */
-
-    1,              /*dset_hidefileno */
-    "DATASET %s ",  /*dset_format */
-    "%s",           /*dset_blockformat_pre */
-    "%s",           /*dset_ptformat_pre */
-    "%s",           /*dset_ptformat */
-     0,                         /*array indices */
-     0                          /*escape non printable characters */
+        0,              /*raw */
+
+        "",             /*fmt_raw */
+        "%d",           /*fmt_int */
+        "%u",           /*fmt_uint */
+#ifdef H5_VMS
+        "%hd",          /*fmt_schar */
+#else
+        "%hhd",         /*fmt_schar */
+#endif
+        "%u",           /*fmt_uchar */
+        "%d",           /*fmt_short */
+        "%u",           /*fmt_ushort */
+        "%ld",          /*fmt_long */
+        "%lu",          /*fmt_ulong */
+        NULL,           /*fmt_llong */
+        NULL,           /*fmt_ullong */
+        "%g",           /*fmt_double */
+        "%g",           /*fmt_float */
+
+        0,              /*ascii */
+        0,              /*str_locale */
+        0,              /*str_repeat */
+
+        " ",            /*arr_pre */
+        "",             /*arr_sep */
+        "",             /*arr_suf */
+        1,              /*arr_linebreak */
+
+        "",             /*cmpd_name */
+        " ",            /*cmpd_sep */
+        "",             /*cmpd_pre */
+        "",             /*cmpd_suf */
+        "",             /*cmpd_end */
+
+        " ",            /*vlen_sep */
+        " ",            /*vlen_pre */
+        "",             /*vlen_suf */
+        "",             /*vlen_end */
+
+        "%s",           /*elmt_fmt */
+        "",             /*elmt_suf1 */
+        " ",            /*elmt_suf2 */
+
+        "",             /*idx_n_fmt */
+        "",             /*idx_sep */
+        "",             /*idx_fmt */
+
+        80,             /*line_ncols *//*standard default columns */
+        0,              /*line_per_line */
+        "",             /*line_pre */
+        "%s",           /*line_1st */
+        "%s",           /*line_cont */
+        "",             /*line_suf */
+        "",             /*line_sep */
+        1,              /*line_multi_new */
+        "   ",          /*line_indent */
+
+        1,              /*skip_first */
+
+        1,              /*obj_hidefileno */
+        " "H5_PRINTF_HADDR_FMT, /*obj_format */
+
+        1,              /*dset_hidefileno */
+        "DATASET %s ",  /*dset_format */
+        "%s",           /*dset_blockformat_pre */
+        "%s",           /*dset_ptformat_pre */
+        "%s",           /*dset_ptformat */
+        0,                         /*array indices */
+        0                          /*escape non printable characters */
 };
 
 /** XML **/
 
 static const h5dump_header_t standardformat = {
-    "standardformat",       /*name */
-    "HDF5",         /*fileebgin */
-    "",             /*fileend */
-    SUPER_BLOCK,            /*bootblockbegin */
-    "",             /*bootblockend */
-    H5_TOOLS_GROUP,          /*groupbegin */
-    "",             /*groupend */
-    H5_TOOLS_DATASET,            /*datasetbegin */
-    "",             /*datasetend */
-    ATTRIBUTE,          /*attributebegin */
-    "",             /*attributeend */
-    H5_TOOLS_DATATYPE,           /*datatypebegin */
-    "",             /*datatypeend */
-    DATASPACE,          /*dataspacebegin */
-    "",             /*dataspaceend */
-    DATA,           /*databegin */
-    "",             /*dataend */
-    SOFTLINK,           /*softlinkbegin */
-    "",             /*softlinkend */
-    EXTLINK,            /*extlinkbegin */
-    "",             /*extlinkend */
-    UDLINK,         /*udlinkbegin */
-    "",             /*udlinkend */
-    SUBSET,         /*subsettingbegin */
-    "",             /*subsettingend */
-    START,          /*startbegin */
-    "",             /*startend */
-    STRIDE,         /*stridebegin */
-    "",             /*strideend */
-    COUNT,          /*countbegin */
-    "",             /*countend */
-    BLOCK,          /*blockbegin */
-    "",             /*blockend */
-
-    "{",            /*fileblockbegin */
-    "}",            /*fileblockend */
-    "{",            /*bootblockblockbegin */
-    "}",            /*bootblockblockend */
-    "{",            /*groupblockbegin */
-    "}",            /*groupblockend */
-    "{",            /*datasetblockbegin */
-    "}",            /*datasetblockend */
-    "{",            /*attributeblockbegin */
-    "}",            /*attributeblockend */
-    "",             /*datatypeblockbegin */
-    "",             /*datatypeblockend */
-    "",             /*dataspaceblockbegin */
-    "",             /*dataspaceblockend */
-    "{",            /*datablockbegin */
-    "}",            /*datablockend */
-    "{",            /*softlinkblockbegin */
-    "}",            /*softlinkblockend */
-    "{",            /*extlinkblockbegin */
-    "}",            /*extlinkblockend */
-    "{",            /*udlinkblockbegin */
-    "}",            /*udlinkblockend */
-    "{",            /*strblockbegin */
-    "}",            /*strblockend */
-    "{",            /*enumblockbegin */
-    "}",            /*enumblockend */
-    "{",            /*structblockbegin */
-    "}",            /*structblockend */
-    "{",            /*vlenblockbegin */
-    "}",            /*vlenblockend */
-    "{",                        /*subsettingblockbegin */
-    "}",                        /*subsettingblockend */
-    "(",                        /*startblockbegin */
-    ");",                       /*startblockend */
-    "(",                        /*strideblockbegin */
-    ");",                       /*strideblockend */
-    "(",                        /*countblockbegin */
-    ");",                       /*countblockend */
-    "(",                        /*blockblockbegin */
-    ");",                       /*blockblockend */
-
-    "",             /*dataspacedescriptionbegin */
-    "",             /*dataspacedescriptionend */
-    "(",            /*dataspacedimbegin */
-    ")",            /*dataspacedimend */
+        "standardformat",       /*name */
+        "HDF5",         /*fileebgin */
+        "",             /*fileend */
+        SUPER_BLOCK,            /*bootblockbegin */
+        "",             /*bootblockend */
+        H5_TOOLS_GROUP,          /*groupbegin */
+        "",             /*groupend */
+        H5_TOOLS_DATASET,            /*datasetbegin */
+        "",             /*datasetend */
+        ATTRIBUTE,          /*attributebegin */
+        "",             /*attributeend */
+        H5_TOOLS_DATATYPE,           /*datatypebegin */
+        "",             /*datatypeend */
+        DATASPACE,          /*dataspacebegin */
+        "",             /*dataspaceend */
+        DATA,           /*databegin */
+        "",             /*dataend */
+        SOFTLINK,           /*softlinkbegin */
+        "",             /*softlinkend */
+        EXTLINK,            /*extlinkbegin */
+        "",             /*extlinkend */
+        UDLINK,         /*udlinkbegin */
+        "",             /*udlinkend */
+        SUBSET,         /*subsettingbegin */
+        "",             /*subsettingend */
+        START,          /*startbegin */
+        "",             /*startend */
+        STRIDE,         /*stridebegin */
+        "",             /*strideend */
+        COUNT,          /*countbegin */
+        "",             /*countend */
+        BLOCK,          /*blockbegin */
+        "",             /*blockend */
+
+        "{",            /*fileblockbegin */
+        "}",            /*fileblockend */
+        "{",            /*bootblockblockbegin */
+        "}",            /*bootblockblockend */
+        "{",            /*groupblockbegin */
+        "}",            /*groupblockend */
+        "{",            /*datasetblockbegin */
+        "}",            /*datasetblockend */
+        "{",            /*attributeblockbegin */
+        "}",            /*attributeblockend */
+        "",             /*datatypeblockbegin */
+        "",             /*datatypeblockend */
+        "",             /*dataspaceblockbegin */
+        "",             /*dataspaceblockend */
+        "{",            /*datablockbegin */
+        "}",            /*datablockend */
+        "{",            /*softlinkblockbegin */
+        "}",            /*softlinkblockend */
+        "{",            /*extlinkblockbegin */
+        "}",            /*extlinkblockend */
+        "{",            /*udlinkblockbegin */
+        "}",            /*udlinkblockend */
+        "{",            /*strblockbegin */
+        "}",            /*strblockend */
+        "{",            /*enumblockbegin */
+        "}",            /*enumblockend */
+        "{",            /*structblockbegin */
+        "}",            /*structblockend */
+        "{",            /*vlenblockbegin */
+        "}",            /*vlenblockend */
+        "{",                        /*subsettingblockbegin */
+        "}",                        /*subsettingblockend */
+        "(",                        /*startblockbegin */
+        ");",                       /*startblockend */
+        "(",                        /*strideblockbegin */
+        ");",                       /*strideblockend */
+        "(",                        /*countblockbegin */
+        ");",                       /*countblockend */
+        "(",                        /*blockblockbegin */
+        ");",                       /*blockblockend */
+
+        "",             /*dataspacedescriptionbegin */
+        "",             /*dataspacedescriptionend */
+        "(",            /*dataspacedimbegin */
+        ")",            /*dataspacedimend */
 };
 
 /**
- ** Added for XML **
- **/
+** Added for XML **
+**/
 /* internal functions used by XML option */
 static void             xml_print_datatype(hid_t, unsigned);
 static void             xml_print_enum(hid_t);
@@ -406,143 +408,136 @@ struct handler_t {
  */
 /* The following initialization makes use of C language cancatenating */
 /* "xxx" "yyy" into "xxxyyy". */
-static const char *s_opts = "hnpeyBHirVa:c:d:f:g:k:l:t:w:xD:uX:o:b*F:s:S:Aq:z:m:RE"
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
-"M:"
-#endif
-;	/* end of *s_opt initialization */
-
+static const char *s_opts = "hnpeyBHirVa:c:d:f:g:k:l:t:w:xD:uX:o:b*F:s:S:Aq:z:m:REM:";
 static struct long_options l_opts[] = {
-    { "help", no_arg, 'h' },
-    { "hel", no_arg, 'h' },
-    { "contents", no_arg, 'n' },
-    { "properties", no_arg, 'p' },
-    { "boot-block", no_arg, 'B' },
-    { "boot-bloc", no_arg, 'B' },
-    { "boot-blo", no_arg, 'B' },
-    { "boot-bl", no_arg, 'B' },
-    { "boot-b", no_arg, 'B' },
-    { "boot", no_arg, 'B' },
-    { "boo", no_arg, 'B' },
-    { "bo", no_arg, 'B' },
-    { "header", no_arg, 'H' },
-    { "heade", no_arg, 'H' },
-    { "head", no_arg, 'H' },
-    { "hea", no_arg, 'H' },
-    { "object-ids", no_arg, 'i' },
-    { "object-id", no_arg, 'i' },
-    { "object-i", no_arg, 'i' },
-    { "object", no_arg, 'i' },
-    { "objec", no_arg, 'i' },
-    { "obje", no_arg, 'i' },
-    { "obj", no_arg, 'i' },
-    { "ob", no_arg, 'i' },
-    { "version", no_arg, 'V' },
-    { "versio", no_arg, 'V' },
-    { "versi", no_arg, 'V' },
-    { "vers", no_arg, 'V' },
-    { "ver", no_arg, 'V' },
-    { "ve", no_arg, 'V' },
-    { "attribute", require_arg, 'a' },
-    { "attribut", require_arg, 'a' },
-    { "attribu", require_arg, 'a' },
-    { "attrib", require_arg, 'a' },
-    { "attri", require_arg, 'a' },
-    { "attr", require_arg, 'a' },
-    { "att", require_arg, 'a' },
-    { "at", require_arg, 'a' },
-    { "block", require_arg, 'k' },
-    { "bloc", require_arg, 'k' },
-    { "blo", require_arg, 'k' },
-    { "bl", require_arg, 'k' },
-    { "count", require_arg, 'c' },
-    { "coun", require_arg, 'c' },
-    { "cou", require_arg, 'c' },
-    { "co", require_arg, 'c' },
-    { "dataset", require_arg, 'd' },
-    { "datase", require_arg, 'd' },
-    { "datas", require_arg, 'd' },
-    { "datatype", require_arg, 't' },
-    { "datatyp", require_arg, 't' },
-    { "dataty", require_arg, 't' },
-    { "datat", require_arg, 't' },
-    { "filedriver", require_arg, 'f' },
-    { "filedrive", require_arg, 'f' },
-    { "filedriv", require_arg, 'f' },
-    { "filedri", require_arg, 'f' },
-    { "filedr", require_arg, 'f' },
-    { "filed", require_arg, 'f' },
-    { "file", require_arg, 'f' },
-    { "fil", require_arg, 'f' },
-    { "fi", require_arg, 'f' },
-    { "group", require_arg, 'g' },
-    { "grou", require_arg, 'g' },
-    { "gro", require_arg, 'g' },
-    { "gr", require_arg, 'g' },
-    { "output", require_arg, 'o' },
-    { "outpu", require_arg, 'o' },
-    { "outp", require_arg, 'o' },
-    { "out", require_arg, 'o' },
-    { "ou", require_arg, 'o' },
-    { "soft-link", require_arg, 'l' },
-    { "soft-lin", require_arg, 'l' },
-    { "soft-li", require_arg, 'l' },
-    { "soft-l", require_arg, 'l' },
-    { "soft", require_arg, 'l' },
-    { "sof", require_arg, 'l' },
-    { "start", require_arg, 's' },
-    { "star", require_arg, 's' },
-    { "sta", require_arg, 's' },
-    { "stride", require_arg, 'S' },
-    { "strid", require_arg, 'S' },
-    { "string", no_arg, 'r' },
-    { "strin", no_arg, 'r' },
-    { "use-dtd", no_arg, 'u' },
-    { "use-dt", no_arg, 'u' },
-    { "use-d", no_arg, 'u' },
-    { "use-", no_arg, 'u' },
-    { "use", no_arg, 'u' },
-    { "us", no_arg, 'u' },
-    { "u", no_arg, 'u' },
-    { "width", require_arg, 'w' },
-    { "widt", require_arg, 'w' },
-    { "wid", require_arg, 'w' },
-    { "wi", require_arg, 'w' },
-    { "xml-dtd", require_arg, 'D' },
-    { "xml-dt", require_arg, 'D' },
-    { "xml-d", require_arg, 'D' },
-    { "xml-ns", require_arg, 'X' },
-    { "xml-n", require_arg, 'X' },
-    { "xml", no_arg, 'x' },
-    { "xm", no_arg, 'x' },
-    { "onlyattr", no_arg, 'A' },
-    { "escape", no_arg, 'e' },
-    { "noindex", no_arg, 'y' },
-    { "binary", optional_arg, 'b' },
-    { "form", require_arg, 'F' },
-    { "sort_by", require_arg, 'q' },
-    { "sort_order", require_arg, 'z' },
-    { "format", require_arg, 'm' },
-    { "region", no_arg, 'R' },
-    { "enable-error-stack", no_arg, 'E' },
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
-    { "packed-bits", require_arg, 'M' },
-#endif
-    { NULL, 0, '\0' }
+        { "help", no_arg, 'h' },
+        { "hel", no_arg, 'h' },
+        { "contents", no_arg, 'n' },
+        { "properties", no_arg, 'p' },
+        { "boot-block", no_arg, 'B' },
+        { "boot-bloc", no_arg, 'B' },
+        { "boot-blo", no_arg, 'B' },
+        { "boot-bl", no_arg, 'B' },
+        { "boot-b", no_arg, 'B' },
+        { "boot", no_arg, 'B' },
+        { "boo", no_arg, 'B' },
+        { "bo", no_arg, 'B' },
+        { "header", no_arg, 'H' },
+        { "heade", no_arg, 'H' },
+        { "head", no_arg, 'H' },
+        { "hea", no_arg, 'H' },
+        { "object-ids", no_arg, 'i' },
+        { "object-id", no_arg, 'i' },
+        { "object-i", no_arg, 'i' },
+        { "object", no_arg, 'i' },
+        { "objec", no_arg, 'i' },
+        { "obje", no_arg, 'i' },
+        { "obj", no_arg, 'i' },
+        { "ob", no_arg, 'i' },
+        { "version", no_arg, 'V' },
+        { "versio", no_arg, 'V' },
+        { "versi", no_arg, 'V' },
+        { "vers", no_arg, 'V' },
+        { "ver", no_arg, 'V' },
+        { "ve", no_arg, 'V' },
+        { "attribute", require_arg, 'a' },
+        { "attribut", require_arg, 'a' },
+        { "attribu", require_arg, 'a' },
+        { "attrib", require_arg, 'a' },
+        { "attri", require_arg, 'a' },
+        { "attr", require_arg, 'a' },
+        { "att", require_arg, 'a' },
+        { "at", require_arg, 'a' },
+        { "block", require_arg, 'k' },
+        { "bloc", require_arg, 'k' },
+        { "blo", require_arg, 'k' },
+        { "bl", require_arg, 'k' },
+        { "count", require_arg, 'c' },
+        { "coun", require_arg, 'c' },
+        { "cou", require_arg, 'c' },
+        { "co", require_arg, 'c' },
+        { "dataset", require_arg, 'd' },
+        { "datase", require_arg, 'd' },
+        { "datas", require_arg, 'd' },
+        { "datatype", require_arg, 't' },
+        { "datatyp", require_arg, 't' },
+        { "dataty", require_arg, 't' },
+        { "datat", require_arg, 't' },
+        { "filedriver", require_arg, 'f' },
+        { "filedrive", require_arg, 'f' },
+        { "filedriv", require_arg, 'f' },
+        { "filedri", require_arg, 'f' },
+        { "filedr", require_arg, 'f' },
+        { "filed", require_arg, 'f' },
+        { "file", require_arg, 'f' },
+        { "fil", require_arg, 'f' },
+        { "fi", require_arg, 'f' },
+        { "group", require_arg, 'g' },
+        { "grou", require_arg, 'g' },
+        { "gro", require_arg, 'g' },
+        { "gr", require_arg, 'g' },
+        { "output", require_arg, 'o' },
+        { "outpu", require_arg, 'o' },
+        { "outp", require_arg, 'o' },
+        { "out", require_arg, 'o' },
+        { "ou", require_arg, 'o' },
+        { "soft-link", require_arg, 'l' },
+        { "soft-lin", require_arg, 'l' },
+        { "soft-li", require_arg, 'l' },
+        { "soft-l", require_arg, 'l' },
+        { "soft", require_arg, 'l' },
+        { "sof", require_arg, 'l' },
+        { "start", require_arg, 's' },
+        { "star", require_arg, 's' },
+        { "sta", require_arg, 's' },
+        { "stride", require_arg, 'S' },
+        { "strid", require_arg, 'S' },
+        { "string", no_arg, 'r' },
+        { "strin", no_arg, 'r' },
+        { "use-dtd", no_arg, 'u' },
+        { "use-dt", no_arg, 'u' },
+        { "use-d", no_arg, 'u' },
+        { "use-", no_arg, 'u' },
+        { "use", no_arg, 'u' },
+        { "us", no_arg, 'u' },
+        { "u", no_arg, 'u' },
+        { "width", require_arg, 'w' },
+        { "widt", require_arg, 'w' },
+        { "wid", require_arg, 'w' },
+        { "wi", require_arg, 'w' },
+        { "xml-dtd", require_arg, 'D' },
+        { "xml-dt", require_arg, 'D' },
+        { "xml-d", require_arg, 'D' },
+        { "xml-ns", require_arg, 'X' },
+        { "xml-n", require_arg, 'X' },
+        { "xml", no_arg, 'x' },
+        { "xm", no_arg, 'x' },
+        { "onlyattr", no_arg, 'A' },
+        { "escape", no_arg, 'e' },
+        { "noindex", no_arg, 'y' },
+        { "binary", optional_arg, 'b' },
+        { "form", require_arg, 'F' },
+        { "sort_by", require_arg, 'q' },
+        { "sort_order", require_arg, 'z' },
+        { "format", require_arg, 'm' },
+        { "region", no_arg, 'R' },
+        { "enable-error-stack", no_arg, 'E' },
+        { "packed-bits", require_arg, 'M' },
+        { NULL, 0, '\0' }
 };
 
 
 /**
- **  Change for XML  **
- **
- **  The 'dump_xxx' functions have two versions, standard and XML.
- **
- **    They are called indirectly through the 'dump_function_table'.
- **    e.g., dump_group(...) becomes dump_functions->dump_group(...);
- **
- **    The standard functions are unchanged except for the way
- **    they are called
- **/
+**  Change for XML  **
+**
+**  The 'dump_xxx' functions have two versions, standard and XML.
+**
+**    They are called indirectly through the 'dump_function_table'.
+**    e.g., dump_group(...) becomes dump_functions->dump_group(...);
+**
+**    The standard functions are unchanged except for the way
+**    they are called
+**/
 
 /* The dump functions of the dump_function_table */
 
@@ -572,10 +567,10 @@ static herr_t    xml_dump_attr(hid_t, const char *, const H5A_info_t *, void *);
 static void      xml_dump_data(hid_t, int, struct subset_t *, int);
 
 /**
- ** Added for XML **
- **
- **  This is the global dispatch table for the dump functions.
- **/
+** Added for XML **
+**
+**  This is the global dispatch table for the dump functions.
+**/
 /* the table of dump functions */
 typedef struct dump_functions_t {
     void     (*dump_group_function) (hid_t, const char *);
@@ -589,24 +584,24 @@ typedef struct dump_functions_t {
 
 /* Standard DDL output */
 static const dump_functions ddl_function_table = {
-    dump_group,
-    dump_named_datatype,
-    dump_dataset,
-    dump_dataspace,
-    dump_datatype,
-    dump_attr_cb,
-    dump_data
+        dump_group,
+        dump_named_datatype,
+        dump_dataset,
+        dump_dataspace,
+        dump_datatype,
+        dump_attr_cb,
+        dump_data
 };
 
 /* XML output */
 static const dump_functions xml_function_table = {
-    xml_dump_group,
-    xml_dump_named_datatype,
-    xml_dump_dataset,
-    xml_dump_dataspace,
-    xml_dump_datatype,
-    xml_dump_attr,
-    xml_dump_data
+        xml_dump_group,
+        xml_dump_named_datatype,
+        xml_dump_dataset,
+        xml_dump_dataspace,
+        xml_dump_datatype,
+        xml_dump_attr,
+        xml_dump_data
 };
 
 /*
@@ -615,7 +610,7 @@ static const dump_functions xml_function_table = {
  */
 static const dump_functions *dump_function_table;
 
-
+
 /*-------------------------------------------------------------------------
  * Function:    leave
  *
@@ -638,7 +633,7 @@ leave(int ret)
     exit(ret);
 }
 
-
+
 /*-------------------------------------------------------------------------
  * Function:    usage
  *
@@ -683,16 +678,14 @@ usage(const char *prog)
     fprintf(stdout, "     -m T, --format=T     Set the floating point output format\n");
     fprintf(stdout, "     -q Q, --sort_by=Q    Sort groups and attributes by index Q\n");
     fprintf(stdout, "     -z Z, --sort_order=Z Sort groups and attributes by order Z\n");
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
     fprintf(stdout,
-	"     -M L, --packedbits=L Print packed bits as unsigned integers, using mask\n"
-	"                          format L for an integer dataset specified with\n"
-	"                          option -d. L is a list of offset,length values,\n"
-	"                          separated by commas. Offset is the beginning bit in\n"
-	"                          the data value and length is the number of bits of\n"
-	"                          the mask.\n"
-	);
-#endif
+            "     -M L, --packedbits=L Print packed bits as unsigned integers, using mask\n"
+            "                          format L for an integer dataset specified with\n"
+            "                          option -d. L is a list of offset,length values,\n"
+            "                          separated by commas. Offset is the beginning bit in\n"
+            "                          the data value and length is the number of bits of\n"
+            "                          the mask.\n"
+    );
     fprintf(stdout, "     -R, --region         Print dataset pointed by region references\n");
     fprintf(stdout, "     -x, --xml            Output in XML using Schema\n");
     fprintf(stdout, "     -u, --use-dtd        Output in XML using DTD\n");
@@ -739,7 +732,7 @@ usage(const char *prog)
     fprintf(stdout, "\n");
     fprintf(stdout, "  1) Attribute foo of the group /bar_none in file quux.h5\n");
     fprintf(stdout, "\n");
-    fprintf(stdout, "     	h5dump -a /bar_none/foo quux.h5\n");
+    fprintf(stdout, "      h5dump -a /bar_none/foo quux.h5\n");
     fprintf(stdout, "\n");
     fprintf(stdout, "  2) Selecting a subset from dataset /foo in file quux.h5\n");
     fprintf(stdout, "\n");
@@ -749,16 +742,14 @@ usage(const char *prog)
     fprintf(stdout, "        using a little-endian type\n");
     fprintf(stdout, "\n");
     fprintf(stdout, "      h5dump -d /dset -b LE -o out.bin quux.h5\n");
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
     fprintf(stdout, "\n");
     fprintf(stdout, "  4) Display two packed bits (bits 0-1 and bits 4-6) in the dataset /dset\n");
     fprintf(stdout, "\n");
     fprintf(stdout, "      h5dump -d /dset -M 0,1,4,3 quux.h5\n");
-#endif
     fprintf(stdout, "\n");
 }
 
-
+
 /*-------------------------------------------------------------------------
  * Function: table_list_add
  *
@@ -798,7 +789,7 @@ table_list_add(hid_t oid, unsigned long file_no)
         return -1;
     }
     if(init_objs(oid, &info, &table_list.tables[idx].group_table,
-        &table_list.tables[idx].dset_table, &table_list.tables[idx].type_table) < 0) {
+            &table_list.tables[idx].dset_table, &table_list.tables[idx].type_table) < 0) {
         H5Idec_ref(oid);
         table_list.nused--;
         return -1;
@@ -811,7 +802,7 @@ table_list_add(hid_t oid, unsigned long file_no)
     return((ssize_t) idx);
 } /* end table_list_add() */
 
-
+
 /*-------------------------------------------------------------------------
  * Function: table_list_visited
  *
@@ -841,7 +832,7 @@ table_list_visited(unsigned long file_no)
     return(-1);
 } /* end table_list_visited() */
 
-
+
 /*-------------------------------------------------------------------------
  * Function: table_list_free
  *
@@ -927,385 +918,436 @@ print_datatype(hid_t type,unsigned in_group)
             if(!obj->recorded)
                 HDfprintf(stdout,"\"/#%a\"", obj->objno);
             else
-                printf("\"%s\"", obj->objname);
-        } else {
+                HDfprintf(stdout, "\"%s\"", obj->objname);
+        } 
+        else {
             error_msg("unknown committed type.\n");
             h5tools_setstatus(EXIT_FAILURE);
         }
-    } else {
+    } 
+    else {
         switch(H5Tget_class(type)) {
-            case H5T_INTEGER:
-                if(H5Tequal(type, H5T_STD_I8BE) == TRUE) {
-                    printf("H5T_STD_I8BE");
-                } else if(H5Tequal(type, H5T_STD_I8LE) == TRUE) {
-                    printf("H5T_STD_I8LE");
-                } else if(H5Tequal(type, H5T_STD_I16BE) == TRUE) {
-                    printf("H5T_STD_I16BE");
-                } else if(H5Tequal(type, H5T_STD_I16LE) == TRUE) {
-                    printf("H5T_STD_I16LE");
-                } else if(H5Tequal(type, H5T_STD_I32BE) == TRUE) {
-                    printf("H5T_STD_I32BE");
-                } else if(H5Tequal(type, H5T_STD_I32LE) == TRUE) {
-                    printf("H5T_STD_I32LE");
-                } else if(H5Tequal(type, H5T_STD_I64BE) == TRUE) {
-                    printf("H5T_STD_I64BE");
-                } else if(H5Tequal(type, H5T_STD_I64LE) == TRUE) {
-                    printf("H5T_STD_I64LE");
-                } else if(H5Tequal(type, H5T_STD_U8BE) == TRUE) {
-                    printf("H5T_STD_U8BE");
-                } else if(H5Tequal(type, H5T_STD_U8LE) == TRUE) {
-                    printf("H5T_STD_U8LE");
-                } else if(H5Tequal(type, H5T_STD_U16BE) == TRUE) {
-                    printf("H5T_STD_U16BE");
-                } else if(H5Tequal(type, H5T_STD_U16LE) == TRUE) {
-                    printf("H5T_STD_U16LE");
-                } else if(H5Tequal(type, H5T_STD_U32BE) == TRUE) {
-                    printf("H5T_STD_U32BE");
-                } else if(H5Tequal(type, H5T_STD_U32LE) == TRUE) {
-                    printf("H5T_STD_U32LE");
-                } else if(H5Tequal(type, H5T_STD_U64BE) == TRUE) {
-                    printf("H5T_STD_U64BE");
-                } else if(H5Tequal(type, H5T_STD_U64LE) == TRUE) {
-                    printf("H5T_STD_U64LE");
-                } else if(H5Tequal(type, H5T_NATIVE_SCHAR) == TRUE) {
-                    printf("H5T_NATIVE_SCHAR");
-                } else if(H5Tequal(type, H5T_NATIVE_UCHAR) == TRUE) {
-                    printf("H5T_NATIVE_UCHAR");
-                } else if(H5Tequal(type, H5T_NATIVE_SHORT) == TRUE) {
-                    printf("H5T_NATIVE_SHORT");
-                } else if(H5Tequal(type, H5T_NATIVE_USHORT) == TRUE) {
-                    printf("H5T_NATIVE_USHORT");
-                } else if(H5Tequal(type, H5T_NATIVE_INT) == TRUE) {
-                    printf("H5T_NATIVE_INT");
-                } else if(H5Tequal(type, H5T_NATIVE_UINT) == TRUE) {
-                    printf("H5T_NATIVE_UINT");
-                } else if(H5Tequal(type, H5T_NATIVE_LONG) == TRUE) {
-                    printf("H5T_NATIVE_LONG");
-                } else if(H5Tequal(type, H5T_NATIVE_ULONG) == TRUE) {
-                    printf("H5T_NATIVE_ULONG");
-                } else if(H5Tequal(type, H5T_NATIVE_LLONG) == TRUE) {
-                    printf("H5T_NATIVE_LLONG");
-                } else if(H5Tequal(type, H5T_NATIVE_ULLONG) == TRUE) {
-                    printf("H5T_NATIVE_ULLONG");
-                } else {
-
-                 /* byte order */
-                 if(H5Tget_size(type)>1) {
-                  order = H5Tget_order(type);
-                  if (H5T_ORDER_LE == order) {
-                   order_s = " little-endian";
-                  } else if (H5T_ORDER_BE == order) {
-                   order_s = " big-endian";
-                  } else if (H5T_ORDER_VAX == order) {
-                   order_s = " mixed-endian";
-                  } else {
-                   order_s = " unknown-byte-order";
-                  }
-                 } else {
-                  order_s = "";
-                 }
-
-                 /* sign */
-                 if ((sign=H5Tget_sign(type))>=0)
-                 {
-                  if (H5T_SGN_NONE == sign) {
-                   sign_s = " unsigned";
-                  } else if (H5T_SGN_2 == sign) {
-                   sign_s = "";
-                  } else {
-                   sign_s = " unknown-sign";
-                  }
-                 } else {
-                  sign_s = " unknown-sign";
-                 }
-
-                 /* print size, order, and sign  */
-                 printf("%lu-bit%s%s integer",
-                  (unsigned long)(8*H5Tget_size(type)), order_s, sign_s);
-                }
-                break;
+        case H5T_INTEGER:
+            if(H5Tequal(type, H5T_STD_I8BE) == TRUE) {
+                HDfprintf(stdout, "H5T_STD_I8BE");
+            } 
+            else if(H5Tequal(type, H5T_STD_I8LE) == TRUE) {
+                HDfprintf(stdout, "H5T_STD_I8LE");
+            } 
+            else if(H5Tequal(type, H5T_STD_I16BE) == TRUE) {
+                HDfprintf(stdout, "H5T_STD_I16BE");
+            } 
+            else if(H5Tequal(type, H5T_STD_I16LE) == TRUE) {
+                HDfprintf(stdout, "H5T_STD_I16LE");
+            } 
+            else if(H5Tequal(type, H5T_STD_I32BE) == TRUE) {
+                HDfprintf(stdout, "H5T_STD_I32BE");
+            } 
+            else if(H5Tequal(type, H5T_STD_I32LE) == TRUE) {
+                HDfprintf(stdout, "H5T_STD_I32LE");
+            } 
+            else if(H5Tequal(type, H5T_STD_I64BE) == TRUE) {
+                HDfprintf(stdout, "H5T_STD_I64BE");
+            } 
+            else if(H5Tequal(type, H5T_STD_I64LE) == TRUE) {
+                HDfprintf(stdout, "H5T_STD_I64LE");
+            } 
+            else if(H5Tequal(type, H5T_STD_U8BE) == TRUE) {
+                HDfprintf(stdout, "H5T_STD_U8BE");
+            } 
+            else if(H5Tequal(type, H5T_STD_U8LE) == TRUE) {
+                HDfprintf(stdout, "H5T_STD_U8LE");
+            } 
+            else if(H5Tequal(type, H5T_STD_U16BE) == TRUE) {
+                HDfprintf(stdout, "H5T_STD_U16BE");
+            } 
+            else if(H5Tequal(type, H5T_STD_U16LE) == TRUE) {
+                HDfprintf(stdout, "H5T_STD_U16LE");
+            } 
+            else if(H5Tequal(type, H5T_STD_U32BE) == TRUE) {
+                HDfprintf(stdout, "H5T_STD_U32BE");
+            } 
+            else if(H5Tequal(type, H5T_STD_U32LE) == TRUE) {
+                HDfprintf(stdout, "H5T_STD_U32LE");
+            } 
+            else if(H5Tequal(type, H5T_STD_U64BE) == TRUE) {
+                HDfprintf(stdout, "H5T_STD_U64BE");
+            } 
+            else if(H5Tequal(type, H5T_STD_U64LE) == TRUE) {
+                HDfprintf(stdout, "H5T_STD_U64LE");
+            } 
+            else if(H5Tequal(type, H5T_NATIVE_SCHAR) == TRUE) {
+                HDfprintf(stdout, "H5T_NATIVE_SCHAR");
+            } 
+            else if(H5Tequal(type, H5T_NATIVE_UCHAR) == TRUE) {
+                HDfprintf(stdout, "H5T_NATIVE_UCHAR");
+            } 
+            else if(H5Tequal(type, H5T_NATIVE_SHORT) == TRUE) {
+                HDfprintf(stdout, "H5T_NATIVE_SHORT");
+            } 
+            else if(H5Tequal(type, H5T_NATIVE_USHORT) == TRUE) {
+                HDfprintf(stdout, "H5T_NATIVE_USHORT");
+            } 
+            else if(H5Tequal(type, H5T_NATIVE_INT) == TRUE) {
+                HDfprintf(stdout, "H5T_NATIVE_INT");
+            } 
+            else if(H5Tequal(type, H5T_NATIVE_UINT) == TRUE) {
+                HDfprintf(stdout, "H5T_NATIVE_UINT");
+            } 
+            else if(H5Tequal(type, H5T_NATIVE_LONG) == TRUE) {
+                HDfprintf(stdout, "H5T_NATIVE_LONG");
+            } 
+            else if(H5Tequal(type, H5T_NATIVE_ULONG) == TRUE) {
+                HDfprintf(stdout, "H5T_NATIVE_ULONG");
+            } 
+            else if(H5Tequal(type, H5T_NATIVE_LLONG) == TRUE) {
+                HDfprintf(stdout, "H5T_NATIVE_LLONG");
+            } 
+            else if(H5Tequal(type, H5T_NATIVE_ULLONG) == TRUE) {
+                HDfprintf(stdout, "H5T_NATIVE_ULLONG");
+            } 
+            else {
 
-            case H5T_FLOAT:
-                if(H5Tequal(type, H5T_IEEE_F32BE) == TRUE) {
-                    printf("H5T_IEEE_F32BE");
-                } else if(H5Tequal(type, H5T_IEEE_F32LE) == TRUE) {
-                    printf("H5T_IEEE_F32LE");
-                } else if(H5Tequal(type, H5T_IEEE_F64BE) == TRUE) {
-                    printf("H5T_IEEE_F64BE");
-                } else if(H5Tequal(type, H5T_IEEE_F64LE) == TRUE) {
-                    printf("H5T_IEEE_F64LE");
-                } else if(H5Tequal(type, H5T_VAX_F32) == TRUE) {
-                    printf("H5T_VAX_F32");
-                } else if(H5Tequal(type, H5T_VAX_F64) == TRUE) {
-                    printf("H5T_VAX_F64");
-                } else if(H5Tequal(type, H5T_NATIVE_FLOAT) == TRUE) {
-                    printf("H5T_NATIVE_FLOAT");
-                } else if(H5Tequal(type, H5T_NATIVE_DOUBLE) == TRUE) {
-                    printf("H5T_NATIVE_DOUBLE");
+                /* byte order */
+                if(H5Tget_size(type)>1) {
+                    order = H5Tget_order(type);
+                    if (H5T_ORDER_LE == order) {
+                        order_s = " little-endian";
+                    } 
+                    else if (H5T_ORDER_BE == order) {
+                        order_s = " big-endian";
+                    } 
+                    else if (H5T_ORDER_VAX == order) {
+                        order_s = " mixed-endian";
+                    } 
+                    else {
+                        order_s = " unknown-byte-order";
+                    }
+                } 
+                else {
+                    order_s = "";
+                } /* end of if(H5Tget_size(type) > 1) */
+
+                /* sign */
+                if ((sign = H5Tget_sign(type)) >= 0) {
+                    if (H5T_SGN_NONE == sign) {
+                        sign_s = " unsigned";
+                    } 
+                    else if (H5T_SGN_2 == sign) {
+                        sign_s = "";
+                    } 
+                    else {
+                        sign_s = " unknown-sign";
+                    }
+                } 
+                else {
+                    sign_s = " unknown-sign";
+                } /* end of if ((sign = H5Tget_sign(type)) >= 0) */
+
+                /* print size, order, and sign  */
+                HDfprintf(stdout, "%lu-bit%s%s integer", (unsigned long)(8*H5Tget_size(type)), order_s, sign_s);
+            } /* end of if(H5Tequal(...) */
+            break;
+
+        case H5T_FLOAT:
+            if(H5Tequal(type, H5T_IEEE_F32BE) == TRUE) {
+                HDfprintf(stdout, "H5T_IEEE_F32BE");
+            } 
+            else if(H5Tequal(type, H5T_IEEE_F32LE) == TRUE) {
+                HDfprintf(stdout, "H5T_IEEE_F32LE");
+            } 
+            else if(H5Tequal(type, H5T_IEEE_F64BE) == TRUE) {
+                HDfprintf(stdout, "H5T_IEEE_F64BE");
+            } 
+            else if(H5Tequal(type, H5T_IEEE_F64LE) == TRUE) {
+                HDfprintf(stdout, "H5T_IEEE_F64LE");
+            } 
+            else if(H5Tequal(type, H5T_VAX_F32) == TRUE) {
+                HDfprintf(stdout, "H5T_VAX_F32");
+            } 
+            else if(H5Tequal(type, H5T_VAX_F64) == TRUE) {
+                HDfprintf(stdout, "H5T_VAX_F64");
+            } 
+            else if(H5Tequal(type, H5T_NATIVE_FLOAT) == TRUE) {
+                HDfprintf(stdout, "H5T_NATIVE_FLOAT");
+            } 
+            else if(H5Tequal(type, H5T_NATIVE_DOUBLE) == TRUE) {
+                HDfprintf(stdout, "H5T_NATIVE_DOUBLE");
 #if H5_SIZEOF_LONG_DOUBLE !=0
-                } else if(H5Tequal(type, H5T_NATIVE_LDOUBLE) == TRUE) {
-                    printf("H5T_NATIVE_LDOUBLE");
+            } 
+            else if(H5Tequal(type, H5T_NATIVE_LDOUBLE) == TRUE) {
+                HDfprintf(stdout, "H5T_NATIVE_LDOUBLE");
 #endif
-                } else {
-
-                 /* byte order */
-                 if(H5Tget_size(type)>1) {
-                  order = H5Tget_order(type);
-                  if (H5T_ORDER_LE == order) {
-                   order_s = " little-endian";
-                  } else if (H5T_ORDER_BE == order) {
-                   order_s = " big-endian";
-                  } else if (H5T_ORDER_VAX == order) {
-                   order_s = " mixed-endian";
-                  } else {
-                   order_s = " unknown-byte-order";
-                  }
-                 } else {
-                  order_s = "";
-                 }
-
-                 /* print size and byte order */
-                 printf("%lu-bit%s floating-point",
-                  (unsigned long)(8*H5Tget_size(type)), order_s);
+            } 
+            else {
+                /* byte order */
+                if(H5Tget_size(type)>1) {
+                    order = H5Tget_order(type);
+                    if (H5T_ORDER_LE == order) {
+                        order_s = " little-endian";
+                    } 
+                    else if (H5T_ORDER_BE == order) {
+                        order_s = " big-endian";
+                    } 
+                    else if (H5T_ORDER_VAX == order) {
+                        order_s = " mixed-endian";
+                    } 
+                    else {
+                        order_s = " unknown-byte-order";
+                    }
+                } 
+                else {
+                    order_s = "";
+                } /* end of if(H5Tget_size(type) > 1) */
 
-                }
-                break;
+                /* print size and byte order */
+                HDfprintf(stdout, "%lu-bit%s floating-point", (unsigned long)(8*H5Tget_size(type)), order_s);
+            } /* end of if(H5Tequal(...) */
+            break;
 
-            case H5T_TIME:
-                printf("H5T_TIME: not yet implemented");
-                break;
+        case H5T_TIME:
+            HDfprintf(stdout, "H5T_TIME: not yet implemented");
+            break;
 
-            case H5T_STRING:
-                /* Make a copy of type in memory in case when TYPE is on disk, the size
-                 * will be bigger than in memory.  This makes it easier to compare
-                 * types in memory. */
-                tmp_type = H5Tcopy(type);
-                size = H5Tget_size(tmp_type);
-                str_pad = H5Tget_strpad(tmp_type);
-                cset = H5Tget_cset(tmp_type);
-                is_vlstr = H5Tis_variable_str(tmp_type);
-
-                printf("H5T_STRING %s\n", dump_header_format->strblockbegin);
-                indent += COL;
+        case H5T_STRING:
+            /* Make a copy of type in memory in case when TYPE is on disk, the size
+             * will be bigger than in memory.  This makes it easier to compare
+             * types in memory. */
+            tmp_type = H5Tcopy(type);
+            size = H5Tget_size(tmp_type);
+            str_pad = H5Tget_strpad(tmp_type);
+            cset = H5Tget_cset(tmp_type);
+            is_vlstr = H5Tis_variable_str(tmp_type);
+
+            HDfprintf(stdout, "H5T_STRING %s\n", dump_header_format->strblockbegin);
+            indent += COL;
 
-                indentation(indent + COL);
-                if(is_vlstr)
-                    printf("%s H5T_VARIABLE;\n", STRSIZE);
-                else
-                    printf("%s %d;\n", STRSIZE, (int) size);
+            indentation(indent + COL);
+            if(is_vlstr)
+                HDfprintf(stdout, "%s H5T_VARIABLE;\n", STRSIZE);
+            else
+                HDfprintf(stdout, "%s %d;\n", STRSIZE, (int) size);
 
-                indentation(indent + COL);
-                printf("%s ", STRPAD);
-                if (str_pad == H5T_STR_NULLTERM)
-                    printf("H5T_STR_NULLTERM;\n");
-                else if (str_pad == H5T_STR_NULLPAD)
-                    printf("H5T_STR_NULLPAD;\n");
-                else if (str_pad == H5T_STR_SPACEPAD)
-                    printf("H5T_STR_SPACEPAD;\n");
-                else
-                    printf("H5T_STR_ERROR;\n");
+            indentation(indent + COL);
+            HDfprintf(stdout, "%s ", STRPAD);
+            if (str_pad == H5T_STR_NULLTERM)
+                HDfprintf(stdout, "H5T_STR_NULLTERM;\n");
+            else if (str_pad == H5T_STR_NULLPAD)
+                HDfprintf(stdout, "H5T_STR_NULLPAD;\n");
+            else if (str_pad == H5T_STR_SPACEPAD)
+                HDfprintf(stdout, "H5T_STR_SPACEPAD;\n");
+            else
+                HDfprintf(stdout, "H5T_STR_ERROR;\n");
 
-                indentation(indent + COL);
-                printf("%s ", CSET);
+            indentation(indent + COL);
+            HDfprintf(stdout, "%s ", CSET);
 
-                if (cset == H5T_CSET_ASCII)
-                    printf("H5T_CSET_ASCII;\n");
-                else
-                    printf("unknown_cset;\n");
+            if (cset == H5T_CSET_ASCII)
+                HDfprintf(stdout, "H5T_CSET_ASCII;\n");
+            else
+                HDfprintf(stdout, "unknown_cset;\n");
 
-                str_type = H5Tcopy(H5T_C_S1);
-                if(is_vlstr)
-                    H5Tset_size(str_type, H5T_VARIABLE);
-                else
-                    H5Tset_size(str_type, size);
-                H5Tset_cset(str_type, cset);
-                H5Tset_strpad(str_type, str_pad);
+            str_type = H5Tcopy(H5T_C_S1);
+            if(is_vlstr)
+                H5Tset_size(str_type, H5T_VARIABLE);
+            else
+                H5Tset_size(str_type, size);
+            H5Tset_cset(str_type, cset);
+            H5Tset_strpad(str_type, str_pad);
 
-                indentation(indent + COL);
-                printf("%s ", CTYPE);
+            indentation(indent + COL);
+            HDfprintf(stdout, "%s ", CTYPE);
 
-                /* Check C variable-length string first. Are the two types equal? */
-                if (H5Tequal(tmp_type, str_type)) {
-                    printf("H5T_C_S1;\n");
-                    goto done;
-                }
+            /* Check C variable-length string first. Are the two types equal? */
+            if (H5Tequal(tmp_type, str_type)) {
+                HDfprintf(stdout, "H5T_C_S1;\n");
+                goto done;
+            }
 
-                /* Change the endianness and see if they're equal. */
-                order = H5Tget_order(tmp_type);
-                if(order==H5T_ORDER_LE)
-                    H5Tset_order(str_type, H5T_ORDER_LE);
-                else if(order==H5T_ORDER_BE)
-                    H5Tset_order(str_type, H5T_ORDER_BE);
+            /* Change the endianness and see if they're equal. */
+            order = H5Tget_order(tmp_type);
+            if(order==H5T_ORDER_LE)
+                H5Tset_order(str_type, H5T_ORDER_LE);
+            else if(order==H5T_ORDER_BE)
+                H5Tset_order(str_type, H5T_ORDER_BE);
 
-                if (H5Tequal(tmp_type, str_type)) {
-                    printf("H5T_C_S1;\n");
-                    goto done;
-                }
+            if (H5Tequal(tmp_type, str_type)) {
+                HDfprintf(stdout, "H5T_C_S1;\n");
+                goto done;
+            }
 
-                /* If not equal to C variable-length string, check Fortran type. */
-                H5Tclose(str_type);
-                str_type = H5Tcopy(H5T_FORTRAN_S1);
-                H5Tset_cset(str_type, cset);
-                H5Tset_size(str_type, size);
-                H5Tset_strpad(str_type, str_pad);
+            /* If not equal to C variable-length string, check Fortran type. */
+            H5Tclose(str_type);
+            str_type = H5Tcopy(H5T_FORTRAN_S1);
+            H5Tset_cset(str_type, cset);
+            H5Tset_size(str_type, size);
+            H5Tset_strpad(str_type, str_pad);
 
-                /* Are the two types equal? */
-                if (H5Tequal(tmp_type, str_type)) {
-                    printf("H5T_FORTRAN_S1;\n");
-                    goto done;
-                }
+            /* Are the two types equal? */
+            if (H5Tequal(tmp_type, str_type)) {
+                HDfprintf(stdout, "H5T_FORTRAN_S1;\n");
+                goto done;
+            }
 
-                /* Change the endianness and see if they're equal. */
-                order = H5Tget_order(tmp_type);
-                if(order==H5T_ORDER_LE)
-                    H5Tset_order(str_type, H5T_ORDER_LE);
-                else if(order==H5T_ORDER_BE)
-                    H5Tset_order(str_type, H5T_ORDER_BE);
+            /* Change the endianness and see if they're equal. */
+            order = H5Tget_order(tmp_type);
+            if(order==H5T_ORDER_LE)
+                H5Tset_order(str_type, H5T_ORDER_LE);
+            else if(order==H5T_ORDER_BE)
+                H5Tset_order(str_type, H5T_ORDER_BE);
 
-                if (H5Tequal(tmp_type, str_type)) {
-                    printf("H5T_FORTRAN_S1;\n");
-                    goto done;
-                }
+            if (H5Tequal(tmp_type, str_type)) {
+                HDfprintf(stdout, "H5T_FORTRAN_S1;\n");
+                goto done;
+            }
 
-                /* Type doesn't match any of above. */
-                printf("unknown_one_character_type;\n ");
-                h5tools_setstatus(EXIT_FAILURE);
+            /* Type doesn't match any of above. */
+            HDfprintf(stdout, "unknown_one_character_type;\n ");
+            h5tools_setstatus(EXIT_FAILURE);
 
-    done:
-                H5Tclose(str_type);
-                H5Tclose(tmp_type);
+            done:
+            H5Tclose(str_type);
+            H5Tclose(tmp_type);
 
-                indent -= COL;
-                indentation(indent + COL);
-                printf("%s", dump_header_format->strblockend);
-                break;
+            indent -= COL;
+            indentation(indent + COL);
+            HDfprintf(stdout, "%s", dump_header_format->strblockend);
+            break;
 
-            case H5T_BITFIELD:
-                if (H5Tequal(type, H5T_STD_B8BE)==TRUE) {
-                    printf("H5T_STD_B8BE");
-                } else if (H5Tequal(type, H5T_STD_B8LE)==TRUE) {
-                    printf("H5T_STD_B8LE");
-                } else if (H5Tequal(type, H5T_STD_B16BE)==TRUE) {
-                    printf("H5T_STD_B16BE");
-                } else if (H5Tequal(type, H5T_STD_B16LE)==TRUE) {
-                    printf("H5T_STD_B16LE");
-                } else if (H5Tequal(type, H5T_STD_B32BE)==TRUE) {
-                    printf("H5T_STD_B32BE");
-                } else if (H5Tequal(type, H5T_STD_B32LE)==TRUE) {
-                    printf("H5T_STD_B32LE");
-                } else if (H5Tequal(type, H5T_STD_B64BE)==TRUE) {
-                    printf("H5T_STD_B64BE");
-                } else if (H5Tequal(type, H5T_STD_B64LE)==TRUE) {
-                    printf("H5T_STD_B64LE");
-                } else {
-                    printf("undefined bitfield");
-                    h5tools_setstatus(EXIT_FAILURE);
-                }
-                break;
+        case H5T_BITFIELD:
+            if (H5Tequal(type, H5T_STD_B8BE)==TRUE) {
+                HDfprintf(stdout, "H5T_STD_B8BE");
+            } 
+            else if (H5Tequal(type, H5T_STD_B8LE)==TRUE) {
+                HDfprintf(stdout, "H5T_STD_B8LE");
+            } 
+            else if (H5Tequal(type, H5T_STD_B16BE)==TRUE) {
+                HDfprintf(stdout, "H5T_STD_B16BE");
+            } 
+            else if (H5Tequal(type, H5T_STD_B16LE)==TRUE) {
+                HDfprintf(stdout, "H5T_STD_B16LE");
+            } 
+            else if (H5Tequal(type, H5T_STD_B32BE)==TRUE) {
+                HDfprintf(stdout, "H5T_STD_B32BE");
+            } 
+            else if (H5Tequal(type, H5T_STD_B32LE)==TRUE) {
+                HDfprintf(stdout, "H5T_STD_B32LE");
+            } 
+            else if (H5Tequal(type, H5T_STD_B64BE)==TRUE) {
+                HDfprintf(stdout, "H5T_STD_B64BE");
+            } 
+            else if (H5Tequal(type, H5T_STD_B64LE)==TRUE) {
+                HDfprintf(stdout, "H5T_STD_B64LE");
+            } 
+            else {
+                HDfprintf(stdout, "undefined bitfield");
+                h5tools_setstatus(EXIT_FAILURE);
+            } /* end of if(H5Tequal(...) */
+            break;
 
-            case H5T_OPAQUE:
-                printf("\n");
-                indentation(indent + COL);
-                printf("H5T_OPAQUE;\n");
-                indentation(indent + COL);
-                mname = H5Tget_tag(type);
-                printf("OPAQUE_TAG \"%s\";\n", mname);
-                free(mname);
-                indentation(indent);
-                break;
+        case H5T_OPAQUE:
+            HDfprintf(stdout, "\n");
+            indentation(indent + COL);
+            HDfprintf(stdout, "H5T_OPAQUE;\n");
+            indentation(indent + COL);
+            mname = H5Tget_tag(type);
+            HDfprintf(stdout, "OPAQUE_TAG \"%s\";\n", mname);
+            free(mname);
+            indentation(indent);
+            break;
 
-            case H5T_COMPOUND:
-                nmembers = H5Tget_nmembers(type);
-                printf("H5T_COMPOUND %s\n", dump_header_format->structblockbegin);
+        case H5T_COMPOUND:
+            nmembers = H5Tget_nmembers(type);
+            HDfprintf(stdout, "H5T_COMPOUND %s\n", dump_header_format->structblockbegin);
 
-                for (i = 0; i < nmembers; i++) {
-                    mname = H5Tget_member_name(type, i);
-                    mtype = H5Tget_member_type(type, i);
-                    indentation(indent + COL);
+            for (i = 0; i < nmembers; i++) {
+                mname = H5Tget_member_name(type, i);
+                mtype = H5Tget_member_type(type, i);
+                indentation(indent + COL);
 
-                    if (H5Tget_class(mtype) == H5T_COMPOUND)
-                        indent += COL;
+                if (H5Tget_class(mtype) == H5T_COMPOUND)
+                    indent += COL;
 
-                    print_datatype(mtype,0);
+                print_datatype(mtype,0);
 
-                    if (H5Tget_class(mtype) == H5T_COMPOUND)
-                        indent -= COL;
+                if (H5Tget_class(mtype) == H5T_COMPOUND)
+                    indent -= COL;
 
-                    printf(" \"%s\";\n", mname);
-                    free(mname);
-                }
+                HDfprintf(stdout, " \"%s\";\n", mname);
+                free(mname);
+            } /* end of for (i = 0; i < nmembers; i++) */
 
-                indentation(indent);
-                printf("%s", dump_header_format->structblockend);
-                break;
+            indentation(indent);
+            HDfprintf(stdout, "%s", dump_header_format->structblockend);
+            break;
 
-            case H5T_REFERENCE:
-                printf("H5T_REFERENCE");
-                /* The BNF document states that the type of reference should be
-                 * displayed after "H5T_REFERENCE". */
-                if (H5Tequal(type, H5T_STD_REF_DSETREG)==TRUE) {
-                    printf(" { H5T_STD_REF_DSETREG }");
-                }
-                else {
-                    printf(" { H5T_STD_REF_OBJECT }");
-                }
-                break;
+        case H5T_REFERENCE:
+            HDfprintf(stdout, "H5T_REFERENCE");
+            /* The BNF document states that the type of reference should be
+             * displayed after "H5T_REFERENCE". */
+            if (H5Tequal(type, H5T_STD_REF_DSETREG)==TRUE) {
+                HDfprintf(stdout, " { H5T_STD_REF_DSETREG }");
+            }
+            else {
+                HDfprintf(stdout, " { H5T_STD_REF_OBJECT }");
+            }
+            break;
 
-            case H5T_ENUM:
-                printf("H5T_ENUM %s\n", dump_header_format->enumblockbegin);
-                indent += COL;
-                indentation(indent + COL);
-                super = H5Tget_super(type);
-                print_datatype(super,0);
-                printf(";\n");
-                print_enum(type);
-                indent -= COL;
-                indentation(indent + COL);
-                printf("%s", dump_header_format->enumblockend);
-                break;
+        case H5T_ENUM:
+            HDfprintf(stdout, "H5T_ENUM %s\n", dump_header_format->enumblockbegin);
+            indent += COL;
+            indentation(indent + COL);
+            super = H5Tget_super(type);
+            print_datatype(super,0);
+            HDfprintf(stdout, ";\n");
+            print_enum(type);
+            indent -= COL;
+            indentation(indent + COL);
+            HDfprintf(stdout, "%s", dump_header_format->enumblockend);
+            break;
 
-            case H5T_VLEN:
-                printf("H5T_VLEN %s ", dump_header_format->vlenblockbegin);
-                super = H5Tget_super(type);
-                print_datatype(super,0);
-                H5Tclose(super);
+        case H5T_VLEN:
+            HDfprintf(stdout, "H5T_VLEN %s ", dump_header_format->vlenblockbegin);
+            super = H5Tget_super(type);
+            print_datatype(super,0);
+            H5Tclose(super);
 
-                /* Print closing */
-                printf("%s", dump_header_format->vlenblockend);
-                break;
+            /* Print closing */
+            HDfprintf(stdout, "%s", dump_header_format->vlenblockend);
+            break;
 
-            case H5T_ARRAY:
-                /* Get array base type */
-                super = H5Tget_super(type);
+        case H5T_ARRAY:
+            /* Get array base type */
+            super = H5Tget_super(type);
 
-                /* Print lead-in */
-                printf("H5T_ARRAY { ");
+            /* Print lead-in */
+            HDfprintf(stdout, "H5T_ARRAY { ");
 
-                /* Get array information */
-                ndims = H5Tget_array_ndims(type);
-                H5Tget_array_dims2(type, dims);
+            /* Get array information */
+            ndims = H5Tget_array_ndims(type);
+            H5Tget_array_dims2(type, dims);
 
-                /* Print array dimensions */
-                for (i = 0; i < ndims; i++)
-                    printf("[%d]", (int) dims[i]);
+            /* Print array dimensions */
+            for (i = 0; i < ndims; i++)
+                HDfprintf(stdout, "[%d]", (int) dims[i]);
 
-                printf(" ");
+            HDfprintf(stdout, " ");
 
-                /* Print base type */
-                print_datatype(super,0);
+            /* Print base type */
+            print_datatype(super,0);
 
-                /* Close array base type */
-                H5Tclose(super);
+            /* Close array base type */
+            H5Tclose(super);
 
-                /* Print closing */
-                printf(" }");
+            /* Print closing */
+            HDfprintf(stdout, " }");
 
-                break;
+            break;
 
-            default:
-                printf("unknown datatype");
-                h5tools_setstatus(EXIT_FAILURE);
-                break;
+        default:
+            HDfprintf(stdout, "unknown datatype");
+            h5tools_setstatus(EXIT_FAILURE);
+            break;
         }
     } /* end else */
 }
@@ -1331,13 +1373,11 @@ dump_datatype(hid_t type)
     indent += COL;
 
     indentation(indent);
-    printf("%s %s ", dump_header_format->datatypebegin,
-           dump_header_format->datatypeblockbegin);
+    HDfprintf(stdout, "%s %s ", dump_header_format->datatypebegin, dump_header_format->datatypeblockbegin);
 
     print_datatype(type,0);
 
-    end_obj(dump_header_format->datatypeend,
-        dump_header_format->datatypeblockend);
+    end_obj(dump_header_format->datatypeend, dump_header_format->datatypeblockend);
     indent -= COL;
 }
 
@@ -1360,62 +1400,57 @@ dump_dataspace(hid_t space)
 {
     hsize_t   size[H5DUMP_MAX_RANK];
     hsize_t   maxsize[H5DUMP_MAX_RANK];
+    int         i;
+
     int       ndims = H5Sget_simple_extent_dims(space, size, maxsize);
     H5S_class_t space_type = H5Sget_simple_extent_type(space);
-    int       i;
 
     indentation(indent + COL);
-    printf("%s ", dump_header_format->dataspacebegin);
+    HDfprintf(stdout, "%s ", dump_header_format->dataspacebegin);
 
     switch(space_type) {
-        case H5S_SCALAR:
-            /* scalar dataspace */
-            HDfprintf(stdout, "%s %s",
-                    dump_header_format->dataspacedescriptionbegin, S_SCALAR);
-            break;
+    case H5S_SCALAR:
+        /* scalar dataspace */
+        HDfprintf(stdout, "%s %s", dump_header_format->dataspacedescriptionbegin, S_SCALAR);
+        break;
 
-        case H5S_SIMPLE:
-            /* simple dataspace */
-            HDfprintf(stdout, "%s %s { %s %Hu",
-                    dump_header_format->dataspacedescriptionbegin, S_SIMPLE,
-                    dump_header_format->dataspacedimbegin, size[0]);
+    case H5S_SIMPLE:
+        /* simple dataspace */
+        HDfprintf(stdout, "%s %s { %s %Hu",
+                dump_header_format->dataspacedescriptionbegin, S_SIMPLE,
+                dump_header_format->dataspacedimbegin, size[0]);
 
-            for(i = 1; i < ndims; i++)
-                HDfprintf(stdout, ", %Hu", size[i]);
+        for(i = 1; i < ndims; i++)
+            HDfprintf(stdout, ", %Hu", size[i]);
 
-            printf(" %s / ", dump_header_format->dataspacedimend);
+        HDfprintf(stdout, " %s / ", dump_header_format->dataspacedimend);
 
-            if(maxsize[0] == H5S_UNLIMITED)
-                HDfprintf(stdout, "%s %s",
-                        dump_header_format->dataspacedimbegin,
-                        "H5S_UNLIMITED");
-            else
-                HDfprintf(stdout, "%s %Hu",
-                        dump_header_format->dataspacedimbegin, maxsize[0]);
+        if(maxsize[0] == H5S_UNLIMITED)
+            HDfprintf(stdout, "%s %s", dump_header_format->dataspacedimbegin, "H5S_UNLIMITED");
+        else
+            HDfprintf(stdout, "%s %Hu", dump_header_format->dataspacedimbegin, maxsize[0]);
 
-            for(i = 1; i < ndims; i++)
-                if(maxsize[i] == H5S_UNLIMITED)
-                    HDfprintf(stdout, ", %s", "H5S_UNLIMITED");
-                else
-                    HDfprintf(stdout, ", %Hu", maxsize[i]);
+        for(i = 1; i < ndims; i++)
+            if(maxsize[i] == H5S_UNLIMITED)
+                HDfprintf(stdout, ", %s", "H5S_UNLIMITED");
+            else
+                HDfprintf(stdout, ", %Hu", maxsize[i]);
 
-            printf(" %s }", dump_header_format->dataspacedimend);
-            break;
+        HDfprintf(stdout, " %s }", dump_header_format->dataspacedimend);
+        break;
 
-        case H5S_NULL:
-            /* null dataspace */
-            HDfprintf(stdout, "%s %s",
-                    dump_header_format->dataspacedescriptionbegin, S_NULL);
-            break;
+    case H5S_NULL:
+        /* null dataspace */
+        HDfprintf(stdout, "%s %s", dump_header_format->dataspacedescriptionbegin, S_NULL);
+        break;
 
-        case H5S_NO_CLASS:
-        default:
-            printf("%s unknown dataspace %s\n", BEGIN, END);
-            break;
+    case H5S_NO_CLASS:
+    default:
+        HDfprintf(stdout, "%s unknown dataspace %s\n", BEGIN, END);
+        break;
     } /* end switch */
 
-    end_obj(dump_header_format->dataspaceend,
-        dump_header_format->dataspaceblockend);
+    end_obj(dump_header_format->dataspaceend, dump_header_format->dataspaceblockend);
 }
 
 
@@ -1442,18 +1477,17 @@ dump_attr_cb(hid_t oid, const char *attr_name, const H5A_info_t UNUSED *info, vo
     herr_t      ret = SUCCEED;
 
     indentation(indent);
-    begin_obj(dump_header_format->attributebegin, attr_name,
-          dump_header_format->attributeblockbegin);
+    begin_obj(dump_header_format->attributebegin, attr_name, dump_header_format->attributeblockbegin);
 
     if((attr_id = H5Aopen(oid, attr_name, H5P_DEFAULT)) < 0) {
         indentation(indent + COL);
         error_msg("unable to open attribute \"%s\"\n", attr_name);
         indentation(indent);
-        end_obj(dump_header_format->attributeend,
-                dump_header_format->attributeblockend);
+        end_obj(dump_header_format->attributeend, dump_header_format->attributeblockend);
         h5tools_setstatus(EXIT_FAILURE);
         ret = FAIL;
-    } else {
+    } 
+    else {
         hid_t type, space;
 
         type = H5Aget_type(attr_id);
@@ -1524,7 +1558,7 @@ dump_selected_attr(hid_t loc_id, const char *name)
 
     attr_name = name + j + 1;
     begin_obj(dump_header_format->attributebegin, name,
-          dump_header_format->attributeblockbegin);
+            dump_header_format->attributeblockbegin);
 
     /* Open the object with the attribute */
     if((oid = H5Oopen(loc_id, obj_name, H5P_DEFAULT)) < 0) {
@@ -1552,8 +1586,9 @@ dump_selected_attr(hid_t loc_id, const char *name)
         H5Sclose(space);
         H5Aclose(attr_id);
         end_obj(dump_header_format->attributeend,
-        dump_header_format->attributeblockend);
-    } else {
+                dump_header_format->attributeblockend);
+    } 
+    else {
         indentation(COL);
         error_msg("unable to open attribute \"%s\"\n", obj_name);
         end_obj(dump_header_format->attributeend, dump_header_format->attributeblockend);
@@ -1567,12 +1602,12 @@ dump_selected_attr(hid_t loc_id, const char *name)
 
     HDfree(obj_name);
     return SUCCEED;
-    
-error:
+
+    error:
     h5tools_setstatus(EXIT_FAILURE);
     if(obj_name)
         HDfree(obj_name);
-    
+
     H5E_BEGIN_TRY {
         H5Oclose(oid);
         H5Aclose(attr_id);
@@ -1605,8 +1640,8 @@ static herr_t
 dump_all_cb(hid_t group, const char *name, const H5L_info_t *linfo, void UNUSED *op_data)
 {
     hid_t       obj;
-    char       *obj_path = NULL;    /* Full path of object */
     herr_t      ret = SUCCEED;
+    char       *obj_path = NULL;    /* Full path of object */
 
     /* Build the object's path name */
     obj_path = (char *)HDmalloc(HDstrlen(prefix) + HDstrlen(name) + 2);
@@ -1614,7 +1649,7 @@ dump_all_cb(hid_t group, const char *name, const H5L_info_t *linfo, void UNUSED
         ret = FAIL;
         goto done;
     } 
-    
+
     HDstrcpy(obj_path, prefix);
     HDstrcat(obj_path, "/");
     HDstrcat(obj_path, name);
@@ -1648,7 +1683,7 @@ dump_all_cb(hid_t group, const char *name, const H5L_info_t *linfo, void UNUSED
                 add_prefix(&prefix, &prefix_len, name);
 
                 /* Iterate into group */
-                 dump_function_table->dump_group_function(obj, name);
+                dump_function_table->dump_group_function(obj, name);
 
                 /* Restore old prefix name */
                 HDstrcpy(prefix, old_prefix);
@@ -1659,334 +1694,327 @@ dump_all_cb(hid_t group, const char *name, const H5L_info_t *linfo, void UNUSED
             }
             break;
 
-            case H5O_TYPE_DATASET:
-                if((obj = H5Dopen2(group, name, H5P_DEFAULT)) >= 0) {
-                    if(oinfo.rc > 1 || hit_elink) {
-                        obj_t  *found_obj;    /* Found object */
+        case H5O_TYPE_DATASET:
+            if((obj = H5Dopen2(group, name, H5P_DEFAULT)) >= 0) {
+                if(oinfo.rc > 1 || hit_elink) {
+                    obj_t  *found_obj;    /* Found object */
 
-                        found_obj = search_obj(dset_table, oinfo.addr);
+                    found_obj = search_obj(dset_table, oinfo.addr);
 
-                        if(found_obj == NULL) {
-                            indentation(indent);
-                            begin_obj(dump_header_format->datasetbegin, name,
-                                      dump_header_format->datasetblockbegin);
+                    if(found_obj == NULL) {
+                        indentation(indent);
+                        begin_obj(dump_header_format->datasetbegin, name, dump_header_format->datasetblockbegin);
+                        indentation(indent + COL);
+                        error_msg("internal error (file %s:line %d)\n", __FILE__, __LINE__);
+                        indentation(indent);
+                        end_obj(dump_header_format->datasetend, dump_header_format->datasetblockend);
+                        h5tools_setstatus(EXIT_FAILURE);
+                        ret = FAIL;
+                        H5Dclose(obj);
+                        goto done;
+                    } 
+                    else if(found_obj->displayed) {
+                        indentation(indent);
+
+                        if(!doxml) {
+                            begin_obj(dump_header_format->datasetbegin, name, dump_header_format->datasetblockbegin);
                             indentation(indent + COL);
-                            error_msg("internal error (file %s:line %d)\n",
-                                      __FILE__, __LINE__);
+                            HDfprintf(stdout, "%s \"%s\"\n", HARDLINK, found_obj->objname);
                             indentation(indent);
-                            end_obj(dump_header_format->datasetend,
-                                    dump_header_format->datasetblockend);
-                            h5tools_setstatus(EXIT_FAILURE);
-                            ret = FAIL;
-                            H5Dclose(obj);
-                            goto done;
+                            end_obj(dump_header_format->datasetend, dump_header_format->datasetblockend);
                         } 
-                        else if(found_obj->displayed) {
+                        else {
+                            /* the XML version */
+                            char *t_obj_path = xml_escape_the_name(obj_path);
+                            char *t_prefix = xml_escape_the_name(HDstrcmp(prefix,"") ? prefix : "/");
+                            char *t_name = xml_escape_the_name(name);
+                            char *t_objname = xml_escape_the_name(found_obj->objname);
+                            char dsetxid[100];
+                            char parentxid[100];
+                            char pointerxid[100];
+
+                            /* Create OBJ-XIDs for the parent and object */
+                            xml_name_to_XID(obj_path, dsetxid, sizeof(dsetxid), 1);
+                            xml_name_to_XID(prefix, parentxid, sizeof(parentxid), 1);
+
+                            HDfprintf(stdout, "<%sDataset Name=\"%s\" OBJ-XID=\"%s-%d\" "
+                                    "H5Path=\"%s\" Parents=\"%s\" "
+                                    "H5ParentPaths=\"%s\">\n",
+                                    xmlnsprefix,
+                                    t_name,                     /* Dataset Name */
+                                    dsetxid, get_next_xid(),    /* OBJ-XID */
+                                    t_obj_path,                 /* H5Path */
+                                    parentxid,                  /* Parents */
+                                    t_prefix);                  /* H5ParentPaths */
+
+                            indentation(indent + COL);
+                            xml_name_to_XID(found_obj->objname, pointerxid, sizeof(pointerxid), 1);
+                            HDfprintf(stdout, "<%sDatasetPtr OBJ-XID=\"%s\" H5Path=\"%s\"/>\n",
+                                    xmlnsprefix,
+                                    pointerxid,t_objname);
                             indentation(indent);
+                            HDfprintf(stdout, "</%sDataset>\n", xmlnsprefix);
 
-                            if(!doxml) {
-                                begin_obj(dump_header_format->datasetbegin, name,
-                                          dump_header_format->datasetblockbegin);
-                                indentation(indent + COL);
-                                printf("%s \"%s\"\n", HARDLINK, found_obj->objname);
-                                indentation(indent);
-                                end_obj(dump_header_format->datasetend,
-                                        dump_header_format->datasetblockend);
-                            } 
-                            else {
-                                /* the XML version */
-                                char *t_obj_path = xml_escape_the_name(obj_path);
-                                char *t_prefix = xml_escape_the_name(HDstrcmp(prefix,"") ? prefix : "/");
-                                char *t_name = xml_escape_the_name(name);
-                                char *t_objname = xml_escape_the_name(found_obj->objname);
-                                char dsetxid[100];
-                                char parentxid[100];
-                                char pointerxid[100];
-
-                                /* Create OBJ-XIDs for the parent and object */
-                                xml_name_to_XID(obj_path, dsetxid, sizeof(dsetxid), 1);
-                                xml_name_to_XID(prefix, parentxid, sizeof(parentxid), 1);
-
-                                printf("<%sDataset Name=\"%s\" OBJ-XID=\"%s-%d\" "
-                                       "H5Path=\"%s\" Parents=\"%s\" "
-                                       "H5ParentPaths=\"%s\">\n",
-                                        xmlnsprefix,
-                                        t_name,                     /* Dataset Name */
-                                        dsetxid, get_next_xid(),    /* OBJ-XID */
-                                        t_obj_path,                 /* H5Path */
-                                        parentxid,                  /* Parents */
-                                        t_prefix);                  /* H5ParentPaths */
-
-                                indentation(indent + COL);
-                                xml_name_to_XID(found_obj->objname, pointerxid, sizeof(pointerxid), 1);
-                                printf("<%sDatasetPtr OBJ-XID=\"%s\" H5Path=\"%s\"/>\n",
-                                        xmlnsprefix,
-                                        pointerxid,t_objname);
-                                indentation(indent);
-                                printf("</%sDataset>\n", xmlnsprefix);
-
-                                HDfree(t_name);
-                                HDfree(t_obj_path);
-                                HDfree(t_prefix);
-                                HDfree(t_objname);
-                            }
-
-                            H5Dclose(obj);
-                            goto done;
-                        } 
-                        else {
-                            found_obj->displayed = TRUE;
+                            HDfree(t_name);
+                            HDfree(t_obj_path);
+                            HDfree(t_prefix);
+                            HDfree(t_objname);
                         }
-                    } /* end if */
 
-                    dump_function_table->dump_dataset_function(obj, name, NULL);
-                    H5Dclose(obj);
-                } 
-                else {
-                    error_msg("unable to dump dataset \"%s\"\n", name);
-                    h5tools_setstatus(EXIT_FAILURE);
-                    ret = FAIL;
-                }
-                break;
+                        H5Dclose(obj);
+                        goto done;
+                    } 
+                    else {
+                        found_obj->displayed = TRUE;
+                    }
+                } /* end if */
 
-            case H5O_TYPE_NAMED_DATATYPE:
-                if((obj = H5Topen2(group, name, H5P_DEFAULT)) < 0) {
-                    error_msg("unable to dump datatype \"%s\"\n", name);
-                    h5tools_setstatus(EXIT_FAILURE);
-                    ret = FAIL;
-                } 
-                else {
-                    dump_function_table->dump_named_datatype_function(obj, name);
-                    H5Tclose(obj);
-                }
-                break;
+                dump_function_table->dump_dataset_function(obj, name, NULL);
+                H5Dclose(obj);
+            } 
+            else {
+                error_msg("unable to dump dataset \"%s\"\n", name);
+                h5tools_setstatus(EXIT_FAILURE);
+                ret = FAIL;
+            }
+            break;
 
-            default:
-                error_msg("unknown object \"%s\"\n", name);
+        case H5O_TYPE_NAMED_DATATYPE:
+            if((obj = H5Topen2(group, name, H5P_DEFAULT)) < 0) {
+                error_msg("unable to dump datatype \"%s\"\n", name);
                 h5tools_setstatus(EXIT_FAILURE);
                 ret = FAIL;
+            } 
+            else {
+                dump_function_table->dump_named_datatype_function(obj, name);
+                H5Tclose(obj);
+            }
+            break;
+
+        default:
+            error_msg("unknown object \"%s\"\n", name);
+            h5tools_setstatus(EXIT_FAILURE);
+            ret = FAIL;
         }
     } /* end if */
     else {
         char       *targbuf;
 
         switch(linfo->type) {
-            case H5L_TYPE_SOFT:
-                indentation(indent);
-                targbuf = (char *)HDmalloc(linfo->u.val_size);
-                HDassert(targbuf);
+        case H5L_TYPE_SOFT:
+            indentation(indent);
+            targbuf = (char *)HDmalloc(linfo->u.val_size);
+            HDassert(targbuf);
 
-                if(!doxml) {
-                    begin_obj(dump_header_format->softlinkbegin, name,
-                              dump_header_format->softlinkblockbegin);
-                    indentation(indent + COL);
-                }
+            if(!doxml) {
+                begin_obj(dump_header_format->softlinkbegin, name, dump_header_format->softlinkblockbegin);
+                indentation(indent + COL);
+            }
 
-                if(H5Lget_val(group, name, targbuf, linfo->u.val_size, H5P_DEFAULT) < 0) {
-                    error_msg("unable to get link value\n");
-                    h5tools_setstatus(EXIT_FAILURE);
-                    ret = FAIL;
+            if(H5Lget_val(group, name, targbuf, linfo->u.val_size, H5P_DEFAULT) < 0) {
+                error_msg("unable to get link value\n");
+                h5tools_setstatus(EXIT_FAILURE);
+                ret = FAIL;
+            } 
+            else {
+                /* print the value of a soft link */
+                if (!doxml) {
+                    /* Standard DDL: no modification */
+                    HDfprintf(stdout, "LINKTARGET \"%s\"\n", targbuf);
                 } 
                 else {
-                    /* print the value of a soft link */
-                    if (!doxml) {
-                        /* Standard DDL: no modification */
-                        printf("LINKTARGET \"%s\"\n", targbuf);
-                    } 
-                    else {
-                        /* XML */
-                        char linkxid[100];
-                        char parentxid[100];
-                        char targetxid[100];
-                        char *t_prefix = xml_escape_the_name(HDstrcmp(prefix,"") ? prefix : "/");
-                        char *t_name = xml_escape_the_name(name);
-                        char *t_targbuf = xml_escape_the_name(targbuf);
-                        char *t_obj_path = xml_escape_the_name(obj_path);
-                        char *t_link_path;
-                        int res;
-
-                        t_link_path = (char *)HDmalloc(HDstrlen(prefix) + linfo->u.val_size + 1);
-                        if(targbuf[0] == '/')
-                            HDstrcpy(t_link_path, targbuf);
-                        else {
-                            HDstrcpy(t_link_path, prefix);
-                            HDstrcat(HDstrcat(t_link_path, "/"), targbuf);
-                        } /* end else */
+                    /* XML */
+                    char linkxid[100];
+                    char parentxid[100];
+                    char targetxid[100];
+                    char *t_prefix = xml_escape_the_name(HDstrcmp(prefix,"") ? prefix : "/");
+                    char *t_name = xml_escape_the_name(name);
+                    char *t_targbuf = xml_escape_the_name(targbuf);
+                    char *t_obj_path = xml_escape_the_name(obj_path);
+                    char *t_link_path;
+                    int res;
 
-                        /* Create OBJ-XIDs for the parent and object */
-                        xml_name_to_XID(t_obj_path, linkxid, sizeof(linkxid), 1);
-                        xml_name_to_XID(prefix, parentxid, sizeof(parentxid), 1);
+                    t_link_path = (char *)HDmalloc(HDstrlen(prefix) + linfo->u.val_size + 1);
+                    if(targbuf[0] == '/')
+                        HDstrcpy(t_link_path, targbuf);
+                    else {
+                        HDstrcpy(t_link_path, prefix);
+                        HDstrcat(HDstrcat(t_link_path, "/"), targbuf);
+                    } /* end else */
 
-                        /* Try to create an OBJ-XID for the object pointed to */
-                        res = xml_name_to_XID(t_link_path, targetxid, sizeof(targetxid), 0);
-                        if (res == 0) {
-                            /* target obj found */
-                            printf("<%sSoftLink LinkName=\"%s\" "
-                                   "OBJ-XID=\"%s\" "
-                                   "H5SourcePath=\"%s\" "
-                                   "TargetPath=\"%s\" TargetObj=\"%s\" "
-                                   "Parents=\"%s\" H5ParentPaths=\"%s\" />\n",
-                                    xmlnsprefix,
-                                    t_name,         /* LinkName */
-                                    linkxid,        /* OBJ-XID */
-                                    t_obj_path,     /* H5SourcePath */
-                                    t_targbuf,      /* TargetPath */
-                                    targetxid,      /* TargetObj */
-                                    parentxid,      /* Parents */
-                                    t_prefix);      /* H5ParentPaths */
-                        } 
-                        else {
-                            /* dangling link -- omit from xml attributes */
-                            printf("<%sSoftLink LinkName=\"%s\" "
-                                   "OBJ-XID=\"%s\" "
-                                   "H5SourcePath=\"%s\" "
-                                   "TargetPath=\"%s\"  "
-                                   "Parents=\"%s\" H5ParentPaths=\"%s\" />\n",
-                                    xmlnsprefix,
-                                    t_name,         /* LinkName */
-                                    linkxid,        /* OBJ-XID */
-                                    t_obj_path,     /* H5SourcePath */
-                                    t_targbuf,      /* TargetPath */
-                                    parentxid,      /* Parents */
-                                    t_prefix);      /* H5ParentPaths */
-                        }
+                    /* Create OBJ-XIDs for the parent and object */
+                    xml_name_to_XID(t_obj_path, linkxid, sizeof(linkxid), 1);
+                    xml_name_to_XID(prefix, parentxid, sizeof(parentxid), 1);
 
-                        HDfree(t_prefix);
-                        HDfree(t_name);
-                        HDfree(t_targbuf);
-                        HDfree(t_obj_path);
-                        HDfree(t_link_path);
+                    /* Try to create an OBJ-XID for the object pointed to */
+                    res = xml_name_to_XID(t_link_path, targetxid, sizeof(targetxid), 0);
+                    if (res == 0) {
+                        /* target obj found */
+                        HDfprintf(stdout, "<%sSoftLink LinkName=\"%s\" "
+                                "OBJ-XID=\"%s\" "
+                                "H5SourcePath=\"%s\" "
+                                "TargetPath=\"%s\" TargetObj=\"%s\" "
+                                "Parents=\"%s\" H5ParentPaths=\"%s\" />\n",
+                                xmlnsprefix,
+                                t_name,         /* LinkName */
+                                linkxid,        /* OBJ-XID */
+                                t_obj_path,     /* H5SourcePath */
+                                t_targbuf,      /* TargetPath */
+                                targetxid,      /* TargetObj */
+                                parentxid,      /* Parents */
+                                t_prefix);      /* H5ParentPaths */
+                    } 
+                    else {
+                        /* dangling link -- omit from xml attributes */
+                        HDfprintf(stdout, "<%sSoftLink LinkName=\"%s\" "
+                                "OBJ-XID=\"%s\" "
+                                "H5SourcePath=\"%s\" "
+                                "TargetPath=\"%s\"  "
+                                "Parents=\"%s\" H5ParentPaths=\"%s\" />\n",
+                                xmlnsprefix,
+                                t_name,         /* LinkName */
+                                linkxid,        /* OBJ-XID */
+                                t_obj_path,     /* H5SourcePath */
+                                t_targbuf,      /* TargetPath */
+                                parentxid,      /* Parents */
+                                t_prefix);      /* H5ParentPaths */
                     }
-                }
 
-                if (!doxml) {
-                    indentation(indent);
-                    end_obj(dump_header_format->softlinkend,
-                            dump_header_format->softlinkblockend);
+                    HDfree(t_prefix);
+                    HDfree(t_name);
+                    HDfree(t_targbuf);
+                    HDfree(t_obj_path);
+                    HDfree(t_link_path);
                 }
+            }
 
-                HDfree(targbuf);
-                break;
+            if (!doxml) {
+                indentation(indent);
+                end_obj(dump_header_format->softlinkend, dump_header_format->softlinkblockend);
+            }
 
-            case H5L_TYPE_EXTERNAL:
-                targbuf = (char *)HDmalloc(linfo->u.val_size);
-                HDassert(targbuf);
+            HDfree(targbuf);
+            break;
 
-                indentation(indent);
-                if(!doxml)
-                    begin_obj(dump_header_format->extlinkbegin, name, dump_header_format->extlinkblockbegin);
+        case H5L_TYPE_EXTERNAL:
+            targbuf = (char *)HDmalloc(linfo->u.val_size);
+            HDassert(targbuf);
+
+            indentation(indent);
+            if(!doxml)
+                begin_obj(dump_header_format->extlinkbegin, name, dump_header_format->extlinkblockbegin);
 
-                if(H5Lget_val(group, name, targbuf, linfo->u.val_size, H5P_DEFAULT) < 0) {
-                    error_msg("unable to get external link value\n");
+            if(H5Lget_val(group, name, targbuf, linfo->u.val_size, H5P_DEFAULT) < 0) {
+                error_msg("unable to get external link value\n");
+                h5tools_setstatus(EXIT_FAILURE);
+                ret = FAIL;
+            } /* end if */
+            else {
+                const char *filename;
+                const char *targname;
+
+                if(H5Lunpack_elink_val(targbuf, linfo->u.val_size, NULL, &filename, &targname) < 0) {
+                    error_msg("unable to unpack external link value\n");
                     h5tools_setstatus(EXIT_FAILURE);
                     ret = FAIL;
                 } /* end if */
                 else {
-                    const char *filename;
-                    const char *targname;
-
-                    if(H5Lunpack_elink_val(targbuf, linfo->u.val_size, NULL, &filename, &targname) < 0) {
-                        error_msg("unable to unpack external link value\n");
-                        h5tools_setstatus(EXIT_FAILURE);
-                        ret = FAIL;
-                    } /* end if */
-                    else {
-                        if(!doxml) {
-                            indentation(indent + COL);
-                            printf("TARGETFILE \"%s\"\n", filename);
-                            indentation(indent + COL);
-                            printf("TARGETPATH \"%s\"\n", targname);
+                    if(!doxml) {
+                        indentation(indent + COL);
+                        HDfprintf(stdout, "TARGETFILE \"%s\"\n", filename);
+                        indentation(indent + COL);
+                        HDfprintf(stdout, "TARGETPATH \"%s\"\n", targname);
 
-                            /* dump the external link */
-                            dump_extlink(group, name, targname);
+                        /* dump the external link */
+                        dump_extlink(group, name, targname);
 
 
-                        } /* end if */
-                        /* XML */
-                        else {
-                            char linkxid[100];
-                            char parentxid[100];
-                            char *t_name = xml_escape_the_name(name);
-                            char *t_prefix = xml_escape_the_name(HDstrcmp(prefix,"") ? prefix : "/");
-                            char *t_obj_path = xml_escape_the_name(obj_path);
-                            char *t_filename = xml_escape_the_name(filename);
-                            char *t_targname = xml_escape_the_name(targname);
+                    } /* end if */
+                    /* XML */
+                    else {
+                        char linkxid[100];
+                        char parentxid[100];
+                        char *t_name = xml_escape_the_name(name);
+                        char *t_prefix = xml_escape_the_name(HDstrcmp(prefix,"") ? prefix : "/");
+                        char *t_obj_path = xml_escape_the_name(obj_path);
+                        char *t_filename = xml_escape_the_name(filename);
+                        char *t_targname = xml_escape_the_name(targname);
 
-                            /* Create OBJ-XIDs for the parent and object */
-                            xml_name_to_XID(t_obj_path, linkxid, sizeof(linkxid), 1);
-                            xml_name_to_XID(prefix, parentxid, sizeof(parentxid), 1);
+                        /* Create OBJ-XIDs for the parent and object */
+                        xml_name_to_XID(t_obj_path, linkxid, sizeof(linkxid), 1);
+                        xml_name_to_XID(prefix, parentxid, sizeof(parentxid), 1);
 
-                            printf("<%sExternalLink LinkName=\"%s\" "
-                                      "OBJ-XID=\"%s\" "
-                                      "H5SourcePath=\"%s\" "
-                                      "TargetFilename=\"%s\"  "
-                                      "TargetPath=\"%s\"  "
-                                      "Parents=\"%s\" H5ParentPaths=\"%s\" />\n",
-                                        xmlnsprefix,
-                                        t_name,         /* LinkName */
-                                        linkxid,        /* OBJ-XID */
-                                        t_obj_path,     /* H5SourcePath */
-                                        filename,       /* TargetFilename */
-                                        targname,       /* TargetPath*/
-                                        parentxid,      /* Parents */
-                                        t_prefix);      /* H5ParentPaths */
-                            HDfree(t_prefix);
-                            HDfree(t_name);
-                            HDfree(t_filename);
-                            HDfree(t_targname);
-                            HDfree(t_obj_path);
-                        } /* end else */
+                        HDfprintf(stdout, "<%sExternalLink LinkName=\"%s\" "
+                                "OBJ-XID=\"%s\" "
+                                "H5SourcePath=\"%s\" "
+                                "TargetFilename=\"%s\"  "
+                                "TargetPath=\"%s\"  "
+                                "Parents=\"%s\" H5ParentPaths=\"%s\" />\n",
+                                xmlnsprefix,
+                                t_name,         /* LinkName */
+                                linkxid,        /* OBJ-XID */
+                                t_obj_path,     /* H5SourcePath */
+                                filename,       /* TargetFilename */
+                                targname,       /* TargetPath*/
+                                parentxid,      /* Parents */
+                                t_prefix);      /* H5ParentPaths */
+                        HDfree(t_prefix);
+                        HDfree(t_name);
+                        HDfree(t_filename);
+                        HDfree(t_targname);
+                        HDfree(t_obj_path);
                     } /* end else */
                 } /* end else */
-                if(!doxml) {
-                    indentation(indent);
-                    end_obj(dump_header_format->extlinkend, dump_header_format->extlinkblockend);
-                } /* end if */
-                HDfree(targbuf);
-                break;
-
-            default:
+            } /* end else */
+            if(!doxml) {
                 indentation(indent);
-                if(!doxml) {
-                    begin_obj(dump_header_format->udlinkbegin, name, dump_header_format->udlinkblockbegin);
-                    indentation(indent + COL);
-                    printf("LINKCLASS %d\n", linfo->type);
-                    indentation(indent);
-                    end_obj(dump_header_format->udlinkend, dump_header_format->udlinkblockend);
-                } /* end if */
-                /* XML */
-                else {
-                    char linkxid[100];
-                    char parentxid[100];
-                    char *t_name = xml_escape_the_name(name);
-                    char *t_prefix = xml_escape_the_name(HDstrcmp(prefix,"") ? prefix : "/");
-                    char *t_obj_path = xml_escape_the_name(obj_path);
-
-                    /* Create OBJ-XIDs for the parent and object */
-                    xml_name_to_XID(t_obj_path, linkxid, sizeof(linkxid), 1);
-                    xml_name_to_XID(prefix, parentxid, sizeof(parentxid), 1);
+                end_obj(dump_header_format->extlinkend, dump_header_format->extlinkblockend);
+            } /* end if */
+            HDfree(targbuf);
+            break;
 
-                    printf("<%sUserDefined LinkName=\"%s\" "
-                            "OBJ-XID=\"%s\" "
-                            "H5SourcePath=\"%s\" "
-                            "LinkClass=\"%d\"  "
-                            "Parents=\"%s\" H5ParentPaths=\"%s\" />\n",
-                                xmlnsprefix,
-                                t_name,             /* LinkName */
-                                linkxid,            /* OBJ-XID */
-                                t_obj_path,         /* H5SourcePath */
-                                linfo->type,        /* LinkClass */
-                                parentxid,          /* Parents */
-                                t_prefix);          /* H5ParentPaths */
-                    HDfree(t_prefix);
-                    HDfree(t_name);
-                    HDfree(t_obj_path);
-                } /* end else */
-                break;
+        default:
+            indentation(indent);
+            if(!doxml) {
+                begin_obj(dump_header_format->udlinkbegin, name, dump_header_format->udlinkblockbegin);
+                indentation(indent + COL);
+                HDfprintf(stdout, "LINKCLASS %d\n", linfo->type);
+                indentation(indent);
+                end_obj(dump_header_format->udlinkend, dump_header_format->udlinkblockend);
+            } /* end if */
+            /* XML */
+            else {
+                char linkxid[100];
+                char parentxid[100];
+                char *t_name = xml_escape_the_name(name);
+                char *t_prefix = xml_escape_the_name(HDstrcmp(prefix,"") ? prefix : "/");
+                char *t_obj_path = xml_escape_the_name(obj_path);
+
+                /* Create OBJ-XIDs for the parent and object */
+                xml_name_to_XID(t_obj_path, linkxid, sizeof(linkxid), 1);
+                xml_name_to_XID(prefix, parentxid, sizeof(parentxid), 1);
+
+                HDfprintf(stdout, "<%sUserDefined LinkName=\"%s\" "
+                        "OBJ-XID=\"%s\" "
+                        "H5SourcePath=\"%s\" "
+                        "LinkClass=\"%d\"  "
+                        "Parents=\"%s\" H5ParentPaths=\"%s\" />\n",
+                        xmlnsprefix,
+                        t_name,             /* LinkName */
+                        linkxid,            /* OBJ-XID */
+                        t_obj_path,         /* H5SourcePath */
+                        linfo->type,        /* LinkClass */
+                        parentxid,          /* Parents */
+                        t_prefix);          /* H5ParentPaths */
+                HDfree(t_prefix);
+                HDfree(t_name);
+                HDfree(t_obj_path);
+            } /* end else */
+            break;
         } /* end switch */
     } /* end else */
 
-done:
+    done:
     if(obj_path)
         HDfree(obj_path);
     return ret;
@@ -2017,15 +2045,13 @@ dump_named_datatype(hid_t tid, const char *name)
     hid_t     tcpl_id;  /* datatype creation property list ID */
 
 
-    if ((tcpl_id = H5Tget_create_plist(tid)) < 0)
-    {
+    if ((tcpl_id = H5Tget_create_plist(tid)) < 0) {
         error_msg("error in getting creation property list ID\n");
         h5tools_setstatus(EXIT_FAILURE);
     }
 
     /* query the creation properties for attributes */
-    if (H5Pget_attr_creation_order(tcpl_id, &attr_crt_order_flags) < 0)
-    {
+    if (H5Pget_attr_creation_order(tcpl_id, &attr_crt_order_flags) < 0) {
         error_msg("error in getting creation properties\n");
         h5tools_setstatus(EXIT_FAILURE);
     }
@@ -2037,7 +2063,7 @@ dump_named_datatype(hid_t tid, const char *name)
 
 
     indentation(indent);
-    printf("%s \"%s\" %s", dump_header_format->datatypebegin, name,
+    HDfprintf(stdout, "%s \"%s\" %s", dump_header_format->datatypebegin, name,
             dump_header_format->datatypeblockbegin);
 
     H5Oget_info(tid, &oinfo);
@@ -2051,13 +2077,12 @@ dump_named_datatype(hid_t tid, const char *name)
         found_obj = search_obj(type_table, oinfo.addr);
 
         if (found_obj == NULL) {
-            error_msg("internal error (file %s:line %d)\n",
-                __FILE__, __LINE__);
+            error_msg("internal error (file %s:line %d)\n", __FILE__, __LINE__);
             h5tools_setstatus(EXIT_FAILURE);
             goto done;
         }
         else if (found_obj->displayed) {
-            printf("%s \"%s\"\n", HARDLINK, found_obj->objname);
+            HDfprintf(stdout, "%s \"%s\"\n", HARDLINK, found_obj->objname);
             goto done;
         }
         else
@@ -2066,7 +2091,7 @@ dump_named_datatype(hid_t tid, const char *name)
 
     print_datatype(tid, 1);
     if(H5Tget_class(tid) != H5T_COMPOUND)
-        printf(";\n");
+        HDfprintf(stdout, ";\n");
 
     /* print attributes */
     indent += COL;
@@ -2089,9 +2114,8 @@ dump_named_datatype(hid_t tid, const char *name)
 
     indent -= COL;
 
-done:
-    end_obj(dump_header_format->datatypeend,
-            dump_header_format->datatypeblockend);
+    done:
+    end_obj(dump_header_format->datatypeend, dump_header_format->datatypeblockend);
 }
 
 /*-------------------------------------------------------------------------
@@ -2116,29 +2140,27 @@ static void
 dump_group(hid_t gid, const char *name)
 {
     H5O_info_t  oinfo;
-    hid_t       dset, type;
-    char        type_name[1024], *tmp;
+    hid_t       dset;
+    hid_t       type;
+    hid_t       gcpl_id;
     unsigned    crt_order_flags;
     unsigned    attr_crt_order_flags;
-    hid_t       gcpl_id;
-
+    char        type_name[1024];
+    char       *tmp = NULL;
 
-    if ((gcpl_id = H5Gget_create_plist(gid)) < 0)
-    {
+    if ((gcpl_id = H5Gget_create_plist(gid)) < 0) {
         error_msg("error in getting group creation property list ID\n");
         h5tools_setstatus(EXIT_FAILURE);
     }
 
     /* query the group creation properties for attributes */
-    if (H5Pget_attr_creation_order(gcpl_id, &attr_crt_order_flags) < 0)
-    {
+    if (H5Pget_attr_creation_order(gcpl_id, &attr_crt_order_flags) < 0) {
         error_msg("error in getting group creation properties\n");
         h5tools_setstatus(EXIT_FAILURE);
     }
 
     /* query the group creation properties */
-    if(H5Pget_link_creation_order(gcpl_id, &crt_order_flags) < 0)
-    {
+    if(H5Pget_link_creation_order(gcpl_id, &crt_order_flags) < 0) {
         error_msg("error in getting group creation properties\n");
         h5tools_setstatus(EXIT_FAILURE);
     }
@@ -2192,7 +2214,7 @@ dump_group(hid_t gid, const char *name)
         }
         else if (found_obj->displayed) {
             indentation(indent);
-            printf("%s \"%s\"\n", HARDLINK, found_obj->objname);
+            HDfprintf(stdout, "%s \"%s\"\n", HARDLINK, found_obj->objname);
         }
         else {
             found_obj->displayed = TRUE;
@@ -2223,10 +2245,7 @@ dump_group(hid_t gid, const char *name)
         }
     }
 
-
-    else
-    {
-
+    else {
         /* attribute iteration: if there is a request to do H5_INDEX_CRT_ORDER and tracking order is set
            in the group for attributes, then, sort by creation order, otherwise by name */
 
@@ -2243,7 +2262,7 @@ dump_group(hid_t gid, const char *name)
             } /* end if */
         } /* end else */
 
-         /* if there is a request to do H5_INDEX_CRT_ORDER and tracking order is set
+        /* if there is a request to do H5_INDEX_CRT_ORDER and tracking order is set
             in the group, then, sort by creation order, otherwise by name */
 
         if((sort_by == H5_INDEX_CRT_ORDER) && (crt_order_flags & H5P_CRT_ORDER_TRACKED))
@@ -2283,22 +2302,19 @@ dump_dataset(hid_t did, const char *name, struct subset_t *sset)
     unsigned    attr_crt_order_flags;
     hid_t       dcpl_id;  /* dataset creation property list ID */
 
-    if ((dcpl_id = H5Dget_create_plist(did)) < 0)
-    {
+    if ((dcpl_id = H5Dget_create_plist(did)) < 0) {
         error_msg("error in getting creation property list ID\n");
         h5tools_setstatus(EXIT_FAILURE);
     }
 
     /* query the creation properties for attributes */
-    if (H5Pget_attr_creation_order(dcpl_id, &attr_crt_order_flags) < 0)
-    {
+    if (H5Pget_attr_creation_order(dcpl_id, &attr_crt_order_flags) < 0) {
         error_msg("error in getting creation properties\n");
         h5tools_setstatus(EXIT_FAILURE);
     }
 
     indentation(indent);
-    begin_obj(dump_header_format->datasetbegin, name,
-            dump_header_format->datasetblockbegin);
+    begin_obj(dump_header_format->datasetbegin, name, dump_header_format->datasetblockbegin);
 
     type = H5Dget_type(did);
     space = H5Dget_space(did);
@@ -2314,9 +2330,8 @@ dump_dataset(hid_t did, const char *name, struct subset_t *sset)
         dump_dcpl(dcpl_id, type, did);
 
     if(display_data) {
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
-        int	data_loop = 1;
-        int	i;
+        int  data_loop = 1;
+        int  i;
         if(display_packed_bits)
             data_loop = packed_bits_num;
         for(i=0;i<data_loop;i++) {
@@ -2325,40 +2340,35 @@ dump_dataset(hid_t did, const char *name, struct subset_t *sset)
                 packed_data_mask = packed_mask[i];
                 packed_data_offset = packed_offset[i];
             }
-#endif
-                switch(H5Tget_class(type)) {
-                case H5T_TIME:
-                    indentation(indent + COL);
-                    printf("DATA{ not yet implemented.}\n");
-                    break;
+            switch(H5Tget_class(type)) {
+            case H5T_TIME:
+                indentation(indent + COL);
+                HDfprintf(stdout, "DATA{ not yet implemented.}\n");
+                break;
 
-                case H5T_INTEGER:
-                case H5T_FLOAT:
-                case H5T_STRING:
-                case H5T_BITFIELD:
-                case H5T_OPAQUE:
-                case H5T_COMPOUND:
-                case H5T_REFERENCE:
-                case H5T_ENUM:
-                case H5T_VLEN:
-                case H5T_ARRAY:
-                    dump_data(did, DATASET_DATA, sset, display_ai);
-                    break;
+            case H5T_INTEGER:
+            case H5T_FLOAT:
+            case H5T_STRING:
+            case H5T_BITFIELD:
+            case H5T_OPAQUE:
+            case H5T_COMPOUND:
+            case H5T_REFERENCE:
+            case H5T_ENUM:
+            case H5T_VLEN:
+            case H5T_ARRAY:
+                dump_data(did, DATASET_DATA, sset, display_ai);
+                break;
 
-                default:
-                    break;
-                } /* end switch */
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
+            default:
+                break;
+            } /* end switch */
         } /* for(i=0;i<data_loop;i++) */
-#endif
     }
 
     indent += COL;
 
-    if ( !bin_output )
-    {
-
-       /* attribute iteration: if there is a request to do H5_INDEX_CRT_ORDER and tracking order is set
+    if (!bin_output) {
+        /* attribute iteration: if there is a request to do H5_INDEX_CRT_ORDER and tracking order is set
         in the group for attributes, then, sort by creation order, otherwise by name */
 
         if( (sort_by == H5_INDEX_CRT_ORDER) && (attr_crt_order_flags & H5P_CRT_ORDER_TRACKED)) {
@@ -2409,8 +2419,7 @@ dump_dims(hsize_t *s, int dims)
     for (i = 0; i < dims; i++) {
         printf(HSIZE_T_FORMAT, s[i]);
 
-        if (i + 1 != dims)
-            printf(", ");
+        if (i + 1 != dims) HDfprintf(stdout, ", ");
     }
 }
 
@@ -2432,47 +2441,38 @@ static void
 dump_subsetting_header(struct subset_t *sset, int dims)
 {
     indentation(indent);
-    printf("%s %s\n", dump_header_format->subsettingbegin,
-           dump_header_format->subsettingblockbegin);
+    HDfprintf(stdout, "%s %s\n", dump_header_format->subsettingbegin, dump_header_format->subsettingblockbegin);
 
     indent += COL;
     indentation(indent);
-    printf("%s %s ", dump_header_format->startbegin,
-           dump_header_format->startblockbegin);
+    HDfprintf(stdout, "%s %s ", dump_header_format->startbegin, dump_header_format->startblockbegin);
     dump_dims(sset->start.data, dims);
-    printf("%s %s\n", dump_header_format->startend,
-           dump_header_format->startblockend);
+    HDfprintf(stdout, "%s %s\n", dump_header_format->startend, dump_header_format->startblockend);
 
     indentation(indent);
-    printf("%s %s ", dump_header_format->stridebegin,
-           dump_header_format->strideblockbegin);
+    HDfprintf(stdout, "%s %s ", dump_header_format->stridebegin, dump_header_format->strideblockbegin);
     dump_dims(sset->stride.data, dims);
-    printf("%s %s\n", dump_header_format->strideend,
-           dump_header_format->strideblockend);
+    HDfprintf(stdout, "%s %s\n", dump_header_format->strideend, dump_header_format->strideblockend);
 
     indentation(indent);
-    printf("%s %s ", dump_header_format->countbegin,
-           dump_header_format->countblockbegin);
+    HDfprintf(stdout, "%s %s ", dump_header_format->countbegin, dump_header_format->countblockbegin);
 
     if(sset->count.data)
         dump_dims(sset->count.data, dims);
     else
-        printf("DEFAULT");
+        HDfprintf(stdout, "DEFAULT");
 
-    printf("%s %s\n", dump_header_format->countend,
-           dump_header_format->countblockend);
+    HDfprintf(stdout, "%s %s\n", dump_header_format->countend, dump_header_format->countblockend);
 
     indentation(indent);
-    printf("%s %s ", dump_header_format->blockbegin,
-           dump_header_format->blockblockbegin);
+    HDfprintf(stdout, "%s %s ", dump_header_format->blockbegin, dump_header_format->blockblockbegin);
 
     if(sset->block.data)
         dump_dims(sset->block.data, dims);
     else
-        printf("DEFAULT");
+        HDfprintf(stdout, "DEFAULT");
 
-    printf("%s %s\n", dump_header_format->blockend,
-           dump_header_format->blockblockend);
+    HDfprintf(stdout, "%s %s\n", dump_header_format->blockend, dump_header_format->blockblockend);
 }
 
 /*-------------------------------------------------------------------------
@@ -2493,18 +2493,22 @@ dump_subsetting_header(struct subset_t *sset, int dims)
 static void
 dump_data(hid_t obj_id, int obj_data, struct subset_t *sset, int display_index)
 {
-    h5tool_format_t   *outputformat = &dataformat;
-    int         status = -1;
-    void       *buf;
-    hid_t       space, type, p_type;
     H5S_class_t space_type;
-    int         ndims, i;
-    hsize_t     size[64], nelmts = 1, alloc_size;
+    int         ndims;
+    int         i;
+    hid_t       space;
+    hid_t       type;
+    hid_t       p_type;
+    hsize_t     size[64];
+    hsize_t     alloc_size;
+    hsize_t     nelmts = 1;
     int         depth;
     int         stdindent = COL;    /* should be 3 */
+    int         status = -1;
+    void       *buf = NULL;
+    h5tool_format_t   *outputformat = &dataformat;
 
-    if (fp_format)
-    {
+    if (fp_format) {
         outputformat->fmt_double = fp_format;
         outputformat->fmt_float = fp_format;
     }
@@ -2575,16 +2579,15 @@ dump_data(hid_t obj_id, int obj_data, struct subset_t *sset, int display_index)
     }
 
     indentation(indent);
-    begin_obj(dump_header_format->databegin, (const char *)NULL,
-          dump_header_format->datablockbegin);
+    begin_obj(dump_header_format->databegin, (const char *)NULL, dump_header_format->datablockbegin);
 
     /* Print all the values. */
     if(obj_data == DATASET_DATA) {
+        h5tool_format_t     string_dataformat;
+        char                string_prefix[64];
         hid_t       f_type = H5Dget_type(obj_id);
-        char        string_prefix[64];
-        h5tool_format_t    string_dataformat;
 
-        if(display_char && H5Tget_size(f_type) == 1 && H5Tget_class(f_type) == H5T_INTEGER) {
+        if((display_char && H5Tget_size(f_type) == 1) && (H5Tget_class(f_type) == H5T_INTEGER)) {
             /*
              * Print 1-byte integer data as an ASCII character string
              * instead of integers if the `-r' or `--string' command-line
@@ -2636,7 +2639,9 @@ dump_data(hid_t obj_id, int obj_data, struct subset_t *sset, int display_index)
             ndims = H5Sget_simple_extent_dims(space, size, NULL);
 
             /* Check if we have VL data in the dataset's datatype */
-            if (h5tools_detect_vlen(p_type) == TRUE)
+            if (h5tools_detect_vlen_str(p_type) == TRUE)
+                vl_data = TRUE;
+            if (H5Tdetect_class(p_type, H5T_VLEN) == TRUE)
                 vl_data = TRUE;
 
             for (i = 0; i < ndims; i++)
@@ -2645,45 +2650,49 @@ dump_data(hid_t obj_id, int obj_data, struct subset_t *sset, int display_index)
             alloc_size = nelmts * MAX(H5Tget_size(type), H5Tget_size(p_type));
             assert(alloc_size == (hsize_t)((size_t)alloc_size)); /*check for overflow*/
 
-            buf = malloc((size_t)alloc_size);
-            assert(buf);
+            if(alloc_size) {
+                buf = malloc((size_t)alloc_size);
+                assert(buf);
+
+                if (H5Aread(obj_id, p_type, buf) >= 0)
+                    if (display_char && H5Tget_size(type) == 1 && H5Tget_class(type) == H5T_INTEGER) {
+                        /*
+                         * Print 1-byte integer data as an ASCII character string
+                         * instead of integers if the `-r' or `--string' command-line
+                         * option was given.
+                         *
+                         * We don't want to modify the global dataformat, so make a
+                         * copy of it instead.
+                         */
+                        string_dataformat = *outputformat;
+                        string_dataformat.idx_fmt = " ";
+                        string_dataformat.line_multi_new = 1;
+                        string_dataformat.line_1st = "        %s\"";
+                        string_dataformat.line_pre = "        %s";
+                        string_dataformat.line_cont = "        %s";
+                        string_dataformat.str_repeat = 8;
+                        string_dataformat.ascii = TRUE;
+                        string_dataformat.elmt_suf1 = "";
+                        string_dataformat.elmt_suf2 = "";
+                        string_dataformat.line_indent = "";
+                        strcpy(string_prefix, string_dataformat.line_pre);
+                        strcat(string_prefix, "\"");
+                        string_dataformat.line_pre = string_prefix;
+                        string_dataformat.line_suf = "\"";
+                        outputformat = &string_dataformat;
+                    }
 
-            if (H5Aread(obj_id, p_type, buf) >= 0)
-                if (display_char && H5Tget_size(type) == 1 && H5Tget_class(type) == H5T_INTEGER) {
-                    /*
-                     * Print 1-byte integer data as an ASCII character string
-                     * instead of integers if the `-r' or `--string' command-line
-                     * option was given.
-                     *
-                     * We don't want to modify the global dataformat, so make a
-                     * copy of it instead.
-                     */
-                    string_dataformat = *outputformat;
-                    string_dataformat.idx_fmt = " ";
-                    string_dataformat.line_multi_new = 1;
-                    string_dataformat.line_1st = "        %s\"";
-                    string_dataformat.line_pre = "        %s";
-                    string_dataformat.line_cont = "        %s";
-                    string_dataformat.str_repeat = 8;
-                    string_dataformat.ascii = TRUE;
-                    string_dataformat.elmt_suf1 = "";
-                    string_dataformat.elmt_suf2 = "";
-                    string_dataformat.line_indent = "";
-                    strcpy(string_prefix, string_dataformat.line_pre);
-                    strcat(string_prefix, "\"");
-                    string_dataformat.line_pre = string_prefix;
-                    string_dataformat.line_suf = "\"";
-                    outputformat = &string_dataformat;
-                }
+                status = h5tools_dump_mem(stdout, outputformat, obj_id, p_type, space, buf, depth);
 
-            status = h5tools_dump_mem(stdout, outputformat, obj_id, p_type,
-                                    space, buf, depth);
+                /* Reclaim any VL memory, if necessary */
+                if (vl_data)
+                    H5Dvlen_reclaim(p_type, space, H5P_DEFAULT, buf);
 
-            /* Reclaim any VL memory, if necessary */
-            if (vl_data)
-                H5Dvlen_reclaim(p_type, space, H5P_DEFAULT, buf);
+                free(buf);
+            } 
+            else
+                status = SUCCEED;
 
-            free(buf);
             H5Tclose(p_type);
             H5Tclose(type);
         }
@@ -2702,8 +2711,7 @@ dump_data(hid_t obj_id, int obj_data, struct subset_t *sset, int display_index)
 
     if (sset && obj_data == DATASET_DATA) {
         indentation(indent);
-        end_obj(dump_header_format->subsettingend,
-                dump_header_format->subsettingblockend);
+        end_obj(dump_header_format->subsettingend, dump_header_format->subsettingblockend);
         indent -= COL;
     }
 }
@@ -2725,10 +2733,9 @@ static void
 dump_oid(hid_t oid)
 {
     indentation(indent + COL);
-    printf("%s %s %d %s\n", OBJID, BEGIN, oid, END);
+    HDfprintf(stdout, "%s %s %d %s\n", OBJID, BEGIN, oid, END);
 }
 
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
 /*-------------------------------------------------------------------------
  * Function:    dump_packed_bits
  *
@@ -2783,9 +2790,8 @@ dump_packed_bits(unsigned int packed_index, hid_t type)
                 packed_offset[packed_index]+packed_length[packed_index], packed_bits_size);
         packed_mask[packed_index] = 0;
     };
-    printf("%s %s=%d %s=%d\n", PACKED_BITS, PACKED_OFFSET, packed_offset[packed_index], PACKED_LENGTH, packed_length[packed_index]);
+    HDfprintf(stdout, "%s %s=%d %s=%d\n", PACKED_BITS, PACKED_OFFSET, packed_offset[packed_index], PACKED_LENGTH, packed_length[packed_index]);
 }
-#endif
 
 /*-------------------------------------------------------------------------
  * Function:    dump_comment
@@ -2804,8 +2810,8 @@ static void
 dump_comment(hid_t obj_id)
 {
     size_t buf_size = 0;
-    char* comment = NULL;
     ssize_t cmt_bufsize = -1;
+    char* comment = NULL;
 
     cmt_bufsize = H5Oget_comment(obj_id, comment, buf_size);
 
@@ -2818,7 +2824,7 @@ dump_comment(hid_t obj_id)
             if(cmt_bufsize > 0) {
                 comment[cmt_bufsize] = '\0'; /* necessary because null char is not returned */
                 indentation(indent);
-                printf("COMMENT \"%s\"\n", comment);
+                HDfprintf(stdout, "COMMENT \"%s\"\n", comment);
             } /* end if */
             HDfree(comment);
         }
@@ -2826,7 +2832,7 @@ dump_comment(hid_t obj_id)
 
 } /* end dump_comment() */
 
-
+
 /*-------------------------------------------------------------------------
  * Function:    dump_fill_value
  *
@@ -2845,10 +2851,10 @@ static void dump_fill_value(hid_t dcpl,hid_t type_id, hid_t obj_id)
 {
     h5tools_context_t   ctx;            /*print context     */
     size_t            size;
+    hid_t             n_type;
+    hsize_t           nelmts = 1;
     void              *buf=NULL;
-    hsize_t           nelmts=1;
     h5tool_format_t          *outputformat = &dataformat;
-    hid_t             n_type;
 
     memset(&ctx, 0, sizeof(ctx));
     ctx.indent_level=2;
@@ -2913,48 +2919,45 @@ dump_dcpl(hid_t dcpl_id,hid_t type_id, hid_t obj_id)
     HDstrcpy(f_name,"\0");
 
     /*-------------------------------------------------------------------------
-    * STORAGE_LAYOUT
-    *-------------------------------------------------------------------------
-    */
+     * STORAGE_LAYOUT
+     *-------------------------------------------------------------------------
+     */
     indentation(indent + COL);
-    printf("%s %s\n", STORAGE_LAYOUT, BEGIN);
+    HDfprintf(stdout, "%s %s\n", STORAGE_LAYOUT, BEGIN);
 
     if (H5D_CHUNKED == H5Pget_layout(dcpl_id)) {
         /*start indent */
         indent += COL;
         indentation(indent + COL);
-        printf("%s ", CHUNKED);
+        HDfprintf(stdout, "%s ", CHUNKED);
 
         rank = H5Pget_chunk(dcpl_id,NELMTS(chsize),chsize);
         HDfprintf(stdout,"%s %Hu", dump_header_format->dataspacedimbegin, chsize[0]);
         for ( i=1; i<rank; i++)
             HDfprintf(stdout, ", %Hu", chsize[i]);
-        printf(" %s\n", dump_header_format->dataspacedimend);
+        HDfprintf(stdout, " %s\n", dump_header_format->dataspacedimend);
         indentation(indent + COL);
 
 
-       /* if there are filters, print a compression ratio */
-        if ( nfilters )
-        {
+        /* if there are filters, print a compression ratio */
+        if (nfilters) {
+            hsize_t     dims[H5S_MAX_RANK];
+            hsize_t     nelmts = 1;
+            double      ratio = 0;
+            int         ok = 0;
 
+            hid_t       tid = H5Dget_type(obj_id);
             hid_t sid = H5Dget_space( obj_id );
-            hid_t tid = H5Dget_type( obj_id );
             size_t datum_size = H5Tget_size( tid );
-            hsize_t dims[H5S_MAX_RANK];
             int ndims = H5Sget_simple_extent_dims( sid, dims, NULL);
-            hsize_t nelmts = 1;
-            double ratio = 0;
-            int ok = 0;
 
             /* only print the compression ratio for these filters */
-            for ( i = 0; i < nfilters; i++)
-            {
+            for (i = 0; i < nfilters; i++) {
                 cd_nelmts = NELMTS(cd_values);
                 filtn = H5Pget_filter2(dcpl_id, (unsigned)i, &filt_flags, &cd_nelmts,
-                    cd_values, sizeof(f_name), f_name, NULL);
+                        cd_values, sizeof(f_name), f_name, NULL);
 
-                switch (filtn)
-                {
+                switch (filtn) {
                 case H5Z_FILTER_DEFLATE:
                 case H5Z_FILTER_SZIP:
                 case H5Z_FILTER_NBIT:
@@ -2964,12 +2967,10 @@ dump_dcpl(hid_t dcpl_id,hid_t type_id, hid_t obj_id)
                 }
             }
 
-            if (ndims && ok )
-            {
+            if (ndims && ok) {
                 hsize_t uncomp_size;
 
-                for (i = 0; i < ndims; i++)
-                {
+                for (i = 0; i < ndims; i++) {
                     nelmts *= dims[i];
                 }
                 uncomp_size = nelmts * datum_size;
@@ -2990,21 +2991,20 @@ dump_dcpl(hid_t dcpl_id,hid_t type_id, hid_t obj_id)
             H5Tclose(tid);
 
         }
-        else
-        {
+        else {
             HDfprintf(stdout, "SIZE %Hu\n ", storage_size);
         }
 
         /*end indent */
         indent -= COL;
         indentation(indent + COL);
-        printf("%s\n",END);
+        HDfprintf(stdout, "%s\n",END);
     }
     else if (H5D_COMPACT == H5Pget_layout(dcpl_id)) {
         /*start indent */
         indent += COL;
         indentation(indent + COL);
-        printf("%s\n", COMPACT);
+        HDfprintf(stdout, "%s\n", COMPACT);
 
         indentation(indent + COL);
         HDfprintf(stdout, "SIZE %Hu\n", storage_size);
@@ -3012,7 +3012,7 @@ dump_dcpl(hid_t dcpl_id,hid_t type_id, hid_t obj_id)
         /*end indent */
         indent -= COL;
         indentation(indent + COL);
-        printf("%s\n",END);
+        HDfprintf(stdout, "%s\n",END);
     }
     else if (H5D_CONTIGUOUS == H5Pget_layout(dcpl_id)) {
         int              next;
@@ -3020,17 +3020,17 @@ dump_dcpl(hid_t dcpl_id,hid_t type_id, hid_t obj_id)
         next = H5Pget_external_count(dcpl_id);
 
         /*-------------------------------------------------------------------------
-        * EXTERNAL_FILE
-        *-------------------------------------------------------------------------
-        */
+         * EXTERNAL_FILE
+         *-------------------------------------------------------------------------
+         */
         if (next) {
             /*start indent */
             indent += COL;
             indentation(indent + COL);
-            printf("%s\n", CONTIGUOUS);
+            HDfprintf(stdout, "%s\n", CONTIGUOUS);
 
             indentation(indent + COL);
-            printf("%s %s\n", EXTERNAL, BEGIN);
+            HDfprintf(stdout, "%s %s\n", EXTERNAL, BEGIN);
 
             /*start indent */
             indent += COL;
@@ -3042,18 +3042,18 @@ dump_dcpl(hid_t dcpl_id,hid_t type_id, hid_t obj_id)
             /*end indent */
             indent -= COL;
             indentation(indent + COL);
-            printf("%s\n",END);
+            HDfprintf(stdout, "%s\n",END);
 
             /*end indent */
             indent -= COL;
             indentation(indent + COL);
-            printf("%s\n",END);
+            HDfprintf(stdout, "%s\n",END);
         }
         else {
             /*start indent */
             indent += COL;
             indentation(indent + COL);
-            printf("%s\n", CONTIGUOUS);
+            HDfprintf(stdout, "%s\n", CONTIGUOUS);
 
             indentation(indent + COL);
             HDfprintf(stdout,"SIZE %Hu\n", storage_size);
@@ -3063,187 +3063,187 @@ dump_dcpl(hid_t dcpl_id,hid_t type_id, hid_t obj_id)
             /*end indent */
             indent -= COL;
             indentation(indent + COL);
-            printf("%s\n",END);
+            HDfprintf(stdout, "%s\n",END);
         }
     }
-   /*-------------------------------------------------------------------------
-    * FILTERS
-    *-------------------------------------------------------------------------
-    */
+    /*-------------------------------------------------------------------------
+     * FILTERS
+     *-------------------------------------------------------------------------
+     */
 
 
     indentation(indent + COL);
-    printf("%s %s\n", FILTERS, BEGIN);
+    HDfprintf(stdout, "%s %s\n", FILTERS, BEGIN);
     indent += COL;
 
     if (nfilters) {
         for (i=0; i<nfilters; i++) {
             cd_nelmts = NELMTS(cd_values);
             filtn = H5Pget_filter2(dcpl_id, (unsigned)i, &filt_flags, &cd_nelmts,
-                cd_values, sizeof(f_name), f_name, NULL);
+                    cd_values, sizeof(f_name), f_name, NULL);
 
             switch (filtn) {
-                case H5Z_FILTER_DEFLATE:
-                    indentation(indent + COL);
-                    printf("%s %s %s %d %s\n", DEFLATE, BEGIN, DEFLATE_LEVEL, cd_values[0], END);
-                    break;
-                case H5Z_FILTER_SHUFFLE:
-                    indentation(indent + COL);
-                    printf("%s\n", SHUFFLE);
-                    break;
-                case H5Z_FILTER_FLETCHER32:
-                    indentation(indent + COL);
-                    printf("%s\n", FLETCHER32);
-                    break;
-                case H5Z_FILTER_SZIP:
-                    {
-                        szip_options_mask=cd_values[0];;
-                        szip_pixels_per_block=cd_values[1];
+            case H5Z_FILTER_DEFLATE:
+                indentation(indent + COL);
+                HDfprintf(stdout, "%s %s %s %d %s\n", DEFLATE, BEGIN, DEFLATE_LEVEL, cd_values[0], END);
+                break;
+            case H5Z_FILTER_SHUFFLE:
+                indentation(indent + COL);
+                HDfprintf(stdout, "%s\n", SHUFFLE);
+                break;
+            case H5Z_FILTER_FLETCHER32:
+                indentation(indent + COL);
+                HDfprintf(stdout, "%s\n", FLETCHER32);
+                break;
+            case H5Z_FILTER_SZIP:
+            {
+                szip_options_mask=cd_values[0];;
+                szip_pixels_per_block=cd_values[1];
 
-                        indentation(indent + COL);
-                        printf("%s %s\n",SZIP, BEGIN);
+                indentation(indent + COL);
+                HDfprintf(stdout, "%s %s\n",SZIP, BEGIN);
 
-                        /*start indent */
-                        indent += COL;
-                        indentation(indent + COL);
-                        printf("PIXELS_PER_BLOCK %d\n", szip_pixels_per_block);
+                /*start indent */
+                indent += COL;
+                indentation(indent + COL);
+                HDfprintf(stdout, "PIXELS_PER_BLOCK %d\n", szip_pixels_per_block);
 
-                        indentation(indent + COL);
-                        if (szip_options_mask & H5_SZIP_CHIP_OPTION_MASK)
-                            printf("MODE %s\n", "HARDWARE");
-                        else if (szip_options_mask & H5_SZIP_ALLOW_K13_OPTION_MASK)
-                            printf("MODE %s\n", "K13");
+                indentation(indent + COL);
+                if (szip_options_mask & H5_SZIP_CHIP_OPTION_MASK)
+                    HDfprintf(stdout, "MODE %s\n", "HARDWARE");
+                else if (szip_options_mask & H5_SZIP_ALLOW_K13_OPTION_MASK)
+                    HDfprintf(stdout, "MODE %s\n", "K13");
 
-                        indentation(indent + COL);
-                        if (szip_options_mask & H5_SZIP_EC_OPTION_MASK)
-                            printf("CODING %s\n", "ENTROPY");
-                        else if (szip_options_mask & H5_SZIP_NN_OPTION_MASK)
-                            printf("CODING %s\n", "NEAREST NEIGHBOUR");
+                indentation(indent + COL);
+                if (szip_options_mask & H5_SZIP_EC_OPTION_MASK)
+                    HDfprintf(stdout, "CODING %s\n", "ENTROPY");
+                else if (szip_options_mask & H5_SZIP_NN_OPTION_MASK)
+                    HDfprintf(stdout, "CODING %s\n", "NEAREST NEIGHBOUR");
 
-                        indentation(indent + COL);
-                        if (szip_options_mask & H5_SZIP_LSB_OPTION_MASK)
-                            printf("BYTE_ORDER %s\n", "LSB");
-                        else if (szip_options_mask & H5_SZIP_MSB_OPTION_MASK)
-                            printf("BYTE_ORDER %s\n", "MSB");
+                indentation(indent + COL);
+                if (szip_options_mask & H5_SZIP_LSB_OPTION_MASK)
+                    HDfprintf(stdout, "BYTE_ORDER %s\n", "LSB");
+                else if (szip_options_mask & H5_SZIP_MSB_OPTION_MASK)
+                    HDfprintf(stdout, "BYTE_ORDER %s\n", "MSB");
 
-                        indentation(indent + COL);
-                        if (szip_options_mask & H5_SZIP_RAW_OPTION_MASK)
-                            printf("HEADER %s\n", "RAW");
+                indentation(indent + COL);
+                if (szip_options_mask & H5_SZIP_RAW_OPTION_MASK)
+                    HDfprintf(stdout, "HEADER %s\n", "RAW");
 
-                        /*end indent */
-                        indent -= COL;
-                        indentation(indent + COL);
-                        printf("%s\n",END);
-                    }
-                    break;
-                case H5Z_FILTER_NBIT:
-                    indentation(indent + COL);
-                    printf("%s\n", NBIT);
-                    break;
-                case H5Z_FILTER_SCALEOFFSET:
-                    indentation(indent + COL);
-                    printf("%s %s %s %d %s\n", SCALEOFFSET, BEGIN, SCALEOFFSET_MINBIT, cd_values[0], END);
-                    break;
-                default:
+                /*end indent */
+                indent -= COL;
+                indentation(indent + COL);
+                HDfprintf(stdout, "%s\n",END);
+            }
+            break;
+            case H5Z_FILTER_NBIT:
+                indentation(indent + COL);
+                HDfprintf(stdout, "%s\n", NBIT);
+                break;
+            case H5Z_FILTER_SCALEOFFSET:
+                indentation(indent + COL);
+                HDfprintf(stdout, "%s %s %s %d %s\n", SCALEOFFSET, BEGIN, SCALEOFFSET_MINBIT, cd_values[0], END);
+                break;
+            default:
+                indentation(indent + COL);
+                if (H5Zfilter_avail(filtn))
+                    HDfprintf(stdout, "%s %s\n", "USER_REGISTERED_FILTER", BEGIN);
+                else
+                    HDfprintf(stdout, "%s %s\n", "UNKNOWN_FILTER", BEGIN);
+                /*start indent */
+                indent += COL;
+                indentation(indent + COL);
+                HDfprintf(stdout, "FILTER_ID %d\n", filtn);
+                if (f_name[0]!='\0') {
                     indentation(indent + COL);
-                    if (H5Zfilter_avail(filtn))
-                        printf("%s %s\n", "USER_REGISTERED_FILTER", BEGIN);
-                    else
-                        printf("%s %s\n", "UNKNOWN_FILTER", BEGIN);
-                    /*start indent */
-                    indent += COL;
+                    HDfprintf(stdout, "COMMENT %s\n", f_name);
+                }
+                if (cd_nelmts) {
                     indentation(indent + COL);
-                    printf("FILTER_ID %d\n", filtn);
-                    if (f_name[0]!='\0') {
-                        indentation(indent + COL);
-                        printf("COMMENT %s\n", f_name);
-                    }
-                    if (cd_nelmts) {
-                        indentation(indent + COL);
-                        printf("%s %s ","PARAMS", BEGIN);
-                        for (j=0; j<cd_nelmts; j++)
-                            printf("%d ", cd_values[j]);
-                        printf("%s\n", END);
-                    }
-                    break;
+                    HDfprintf(stdout, "%s %s ","PARAMS", BEGIN);
+                    for (j=0; j<cd_nelmts; j++)
+                        HDfprintf(stdout, "%d ", cd_values[j]);
+                    HDfprintf(stdout, "%s\n", END);
+                }
+                break;
             }/*switch*/
         } /*i*/
     }/*nfilters*/
     else {
         indentation(indent + COL);
-        printf("NONE\n");
+        HDfprintf(stdout, "NONE\n");
     }
     indent -= COL;
     indentation(indent + COL);
-    printf("%s\n",END);
+    HDfprintf(stdout, "%s\n",END);
 
     /*-------------------------------------------------------------------------
-    * FILLVALUE
-    *-------------------------------------------------------------------------
-    */
+     * FILLVALUE
+     *-------------------------------------------------------------------------
+     */
     indentation(indent + COL);
-    printf("%s %s\n", FILLVALUE, BEGIN);
+    HDfprintf(stdout, "%s %s\n", FILLVALUE, BEGIN);
     /*start indent */
     indent += COL;
     indentation(indent + COL);
-    printf("FILL_TIME ");
+    HDfprintf(stdout, "FILL_TIME ");
     H5Pget_fill_time(dcpl_id, &ft);
     switch ( ft ) {
-        case H5D_FILL_TIME_ALLOC:
-            printf("%s", "H5D_FILL_TIME_ALLOC\n");
-            break;
-        case H5D_FILL_TIME_NEVER:
-            printf("%s", "H5D_FILL_TIME_NEVER\n");
-            break;
-        case H5D_FILL_TIME_IFSET:
-            printf("%s", "H5D_FILL_TIME_IFSET\n");
-            break;
-        default:
-            assert(0);
-            break;
+    case H5D_FILL_TIME_ALLOC:
+        HDfprintf(stdout, "%s", "H5D_FILL_TIME_ALLOC\n");
+        break;
+    case H5D_FILL_TIME_NEVER:
+        HDfprintf(stdout, "%s", "H5D_FILL_TIME_NEVER\n");
+        break;
+    case H5D_FILL_TIME_IFSET:
+        HDfprintf(stdout, "%s", "H5D_FILL_TIME_IFSET\n");
+        break;
+    default:
+        assert(0);
+        break;
     }
     indentation(indent + COL);
-    printf("%s ", "VALUE ");
+    HDfprintf(stdout, "%s ", "VALUE ");
     H5Pfill_value_defined(dcpl_id, &fvstatus);
     if (fvstatus == H5D_FILL_VALUE_UNDEFINED)
-        printf("%s\n", "H5D_FILL_VALUE_UNDEFINED");
+        HDfprintf(stdout, "%s\n", "H5D_FILL_VALUE_UNDEFINED");
     else
         dump_fill_value(dcpl_id,type_id,obj_id);
     /* end indent */
     indent -= COL;
     indentation(indent + COL);
-    printf("\n");
+    HDfprintf(stdout, "\n");
     indentation(indent + COL);
-    printf("%s\n",END);
+    HDfprintf(stdout, "%s\n",END);
 
     /*-------------------------------------------------------------------------
-    * ALLOCATION_TIME
-    *-------------------------------------------------------------------------
-    */
+     * ALLOCATION_TIME
+     *-------------------------------------------------------------------------
+     */
     indentation(indent + COL);
-    printf("ALLOCATION_TIME %s\n",BEGIN);
+    HDfprintf(stdout, "ALLOCATION_TIME %s\n",BEGIN);
     /*start indent */
     indent += COL;
     indentation(indent + COL);
     H5Pget_alloc_time(dcpl_id, &at);
     switch (at) {
-        case H5D_ALLOC_TIME_EARLY:
-            printf("%s", "H5D_ALLOC_TIME_EARLY\n");
-            break;
-        case H5D_ALLOC_TIME_INCR:
-            printf("%s", "H5D_ALLOC_TIME_INCR\n");
-            break;
-        case H5D_ALLOC_TIME_LATE:
-            printf("%s", "H5D_ALLOC_TIME_LATE\n");
-            break;
-        default:
-            assert(0);
-            break;
+    case H5D_ALLOC_TIME_EARLY:
+        HDfprintf(stdout, "%s", "H5D_ALLOC_TIME_EARLY\n");
+        break;
+    case H5D_ALLOC_TIME_INCR:
+        HDfprintf(stdout, "%s", "H5D_ALLOC_TIME_INCR\n");
+        break;
+    case H5D_ALLOC_TIME_LATE:
+        HDfprintf(stdout, "%s", "H5D_ALLOC_TIME_LATE\n");
+        break;
+    default:
+        assert(0);
+        break;
     }
     /* end indent */
     indent -= COL;
     indentation(indent + COL);
-    printf("%s\n",END);
+    HDfprintf(stdout, "%s\n",END);
 }
 
 /*-------------------------------------------------------------------------
@@ -3288,27 +3288,27 @@ dump_fcpl(hid_t fid)
     fdriver=H5Pget_driver(fapl);
     H5Pclose(fapl);
 
-   /*-------------------------------------------------------------------------
-    * SUPER_BLOCK
-    *-------------------------------------------------------------------------
-    */
-    printf("%s %s\n",SUPER_BLOCK, BEGIN);
+    /*-------------------------------------------------------------------------
+     * SUPER_BLOCK
+     *-------------------------------------------------------------------------
+     */
+    HDfprintf(stdout, "%s %s\n",SUPER_BLOCK, BEGIN);
     indentation(indent + COL);
-    printf("%s %u\n","SUPERBLOCK_VERSION", super);
+    HDfprintf(stdout, "%s %u\n","SUPERBLOCK_VERSION", super);
     indentation(indent + COL);
-    printf("%s %u\n","FREELIST_VERSION", freelist);
+    HDfprintf(stdout, "%s %u\n","FREELIST_VERSION", freelist);
     indentation(indent + COL);
-    printf("%s %u\n","SYMBOLTABLE_VERSION", stab);
+    HDfprintf(stdout, "%s %u\n","SYMBOLTABLE_VERSION", stab);
     indentation(indent + COL);
-    printf("%s %u\n","OBJECTHEADER_VERSION", shhdr);
+    HDfprintf(stdout, "%s %u\n","OBJECTHEADER_VERSION", shhdr);
     indentation(indent + COL);
     HDfprintf(stdout,"%s %Hd\n","OFFSET_SIZE", (long long)off_size);
     indentation(indent + COL);
     HDfprintf(stdout,"%s %Hd\n","LENGTH_SIZE", (long long)len_size);
     indentation(indent + COL);
-    printf("%s %u\n","BTREE_RANK", sym_ik);
+    HDfprintf(stdout, "%s %u\n","BTREE_RANK", sym_ik);
     indentation(indent + COL);
-    printf("%s %d\n","BTREE_LEAF", sym_lk);
+    HDfprintf(stdout, "%s %d\n","BTREE_LEAF", sym_lk);
 
     if (H5FD_CORE==fdriver)
         HDstrcpy(dname,"H5FD_CORE");
@@ -3338,19 +3338,19 @@ dump_fcpl(hid_t fid)
     /* Take out this because the driver used can be different from the
      * standard output. */
     /*indentation(indent + COL);
-    printf("%s %s\n","FILE_DRIVER", dname);*/
+    HDfprintf(stdout, "%s %s\n","FILE_DRIVER", dname);*/
     indentation(indent + COL);
-    printf("%s %u\n","ISTORE_K", istore_ik);
-    printf("%s\n",END);
+    HDfprintf(stdout, "%s %u\n","ISTORE_K", istore_ik);
+    HDfprintf(stdout, "%s\n",END);
 
     /*-------------------------------------------------------------------------
-    * USER_BLOCK
-    *-------------------------------------------------------------------------
-    */
-    printf("USER_BLOCK %s\n",BEGIN);
+     * USER_BLOCK
+     *-------------------------------------------------------------------------
+     */
+    HDfprintf(stdout, "USER_BLOCK %s\n",BEGIN);
     indentation(indent + COL);
     HDfprintf(stdout,"%s %Hu\n","USERBLOCK_SIZE", userblock);
-    printf("%s\n",END);
+    HDfprintf(stdout, "%s\n",END);
 }
 
 /*-------------------------------------------------------------------------
@@ -3370,7 +3370,7 @@ dump_fcpl(hid_t fid)
 static void dump_fcontents(hid_t fid)
 {
 
-    printf("%s %s\n",FILE_CONTENTS, BEGIN);
+    HDfprintf(stdout, "%s %s\n",FILE_CONTENTS, BEGIN);
 
     /* special case of unamed types in root group */
     if (unamedtype) {
@@ -3378,14 +3378,14 @@ static void dump_fcontents(hid_t fid)
 
         for (u = 0; u < type_table->nobjs; u++) {
             if (!type_table->objs[u].recorded)
-                printf(" %-10s /#"H5_PRINTF_HADDR_FMT"\n", "datatype", type_table->objs[u].objno);
+                HDfprintf(stdout, " %-10s /#"H5_PRINTF_HADDR_FMT"\n", "datatype", type_table->objs[u].objno);
         }
     }
 
     /* print objects in the files */
     h5trav_print(fid);
 
-    printf(" %s\n",END);
+    HDfprintf(stdout, " %s\n",END);
 }
 
 
@@ -3408,33 +3408,31 @@ static void dump_fcontents(hid_t fid)
 static int
 set_output_file(const char *fname, int is_bin)
 {
- FILE    *f;    /* temporary holding place for the stream pointer
-* so that rawdatastream is changed only when succeeded */
-
- if (rawdatastream && rawdatastream != stdout) {
-  if (fclose(rawdatastream))
-   perror("closing rawdatastream");
-  else
-   rawdatastream = NULL;
- }
-
- /* binary output */
- if (is_bin)
- {
-  if ((f = fopen(fname, "wb")) != NULL) {
-   rawdatastream = f;
-   return 0;
-  }
- }
- else
- {
-  if ((f = fopen(fname, "w")) != NULL) {
-   rawdatastream = f;
-   return 0;
-  }
- }
-
- return -1;
+    FILE    *f;    /* temporary holding place for the stream pointer
+     * so that rawdatastream is changed only when succeeded */
+
+    if (rawdatastream && rawdatastream != stdout) {
+        if (fclose(rawdatastream))
+            perror("closing rawdatastream");
+        else
+            rawdatastream = NULL;
+    }
+
+    /* binary output */
+    if (is_bin) {
+        if ((f = fopen(fname, "wb")) != NULL) {
+            rawdatastream = f;
+            return 0;
+        }
+    }
+    else {
+        if ((f = fopen(fname, "w")) != NULL) {
+            rawdatastream = f;
+            return 0;
+        }
+    }
+
+    return -1;
 }
 
 
@@ -3457,21 +3455,20 @@ set_output_file(const char *fname, int is_bin)
 static int
 set_binary_form(const char *form)
 {
- int bform=-1;
-
- if (strcmp(form,"NATIVE")==0 ||
-     strcmp(form,"MEMORY")==0)
- {/* native form */
-  bform = 0;
- }
- else if (strcmp(form,"FILE")==0) /* file type form */
-  bform = 1;
- else if (strcmp(form,"LE")==0) /* convert to little endian */
-  bform = 2;
- else if (strcmp(form,"BE")==0) /* convert to big endian */
-  bform = 3;
-
- return bform;
+    int bform=-1;
+
+    if (strcmp(form,"NATIVE") == 0 || strcmp(form,"MEMORY") == 0) {
+        /* native form */
+        bform = 0;
+    }
+    else if (strcmp(form,"FILE")==0) /* file type form */
+        bform = 1;
+    else if (strcmp(form,"LE")==0) /* convert to little endian */
+        bform = 2;
+    else if (strcmp(form,"BE")==0) /* convert to big endian */
+        bform = 3;
+
+    return bform;
 }
 
 /*-------------------------------------------------------------------------
@@ -3493,14 +3490,14 @@ set_binary_form(const char *form)
 static H5_index_t
 set_sort_by(const char *form)
 {
- H5_index_t idx_type = H5_INDEX_UNKNOWN;
+    H5_index_t idx_type = H5_INDEX_UNKNOWN;
 
- if (strcmp(form,"name")==0) /* H5_INDEX_NAME */
-  idx_type = H5_INDEX_NAME;
- else if (strcmp(form,"creation_order")==0) /* H5_INDEX_CRT_ORDER */
-  idx_type = H5_INDEX_CRT_ORDER;
+    if (strcmp(form,"name")==0) /* H5_INDEX_NAME */
+        idx_type = H5_INDEX_NAME;
+    else if (strcmp(form,"creation_order")==0) /* H5_INDEX_CRT_ORDER */
+        idx_type = H5_INDEX_CRT_ORDER;
 
- return idx_type;
+    return idx_type;
 }
 
 
@@ -3524,14 +3521,14 @@ set_sort_by(const char *form)
 static H5_iter_order_t
 set_sort_order(const char *form)
 {
- H5_iter_order_t iter_order = H5_ITER_UNKNOWN;
+    H5_iter_order_t iter_order = H5_ITER_UNKNOWN;
 
- if (strcmp(form,"ascending")==0) /* H5_ITER_INC */
-  iter_order = H5_ITER_INC;
- else if (strcmp(form,"descending")==0) /* H5_ITER_DEC */
-  iter_order = H5_ITER_DEC;
+    if (strcmp(form,"ascending")==0) /* H5_ITER_INC */
+        iter_order = H5_ITER_INC;
+    else if (strcmp(form,"descending")==0) /* H5_ITER_DEC */
+        iter_order = H5_ITER_DEC;
 
- return iter_order;
+    return iter_order;
 }
 
 
@@ -3582,7 +3579,9 @@ parse_hsize_list(const char *h_list, subset_d *d)
 {
     hsize_t        *p_list;
     const char     *ptr;
-    unsigned int    size_count = 0, i = 0, last_digit = 0;
+    unsigned int    size_count = 0;
+    unsigned int    i = 0;
+    unsigned int    last_digit = 0;
 
     if (!h_list || !*h_list || *h_list == ';')
         return;
@@ -3595,7 +3594,8 @@ parse_hsize_list(const char *h_list, subset_d *d)
                 size_count++;
 
             last_digit = 1;
-        } else {
+        } 
+        else {
             last_digit = 0;
         }
 
@@ -3617,7 +3617,7 @@ parse_hsize_list(const char *h_list, subset_d *d)
         }
     d->data = p_list;
     d->len = size_count;
-    
+
     return;
 }
 
@@ -3656,24 +3656,21 @@ parse_subset_params(char *dset)
             while (*brace && *brace != ';')
                 brace++;
 
-            if (*brace)
-                brace++;
+            if (*brace) brace++;
 
             parse_hsize_list(brace, &s->stride);
 
             while (*brace && *brace != ';')
                 brace++;
 
-            if (*brace)
-                brace++;
+            if (*brace) brace++;
 
             parse_hsize_list(brace, &s->count);
 
             while (*brace && *brace != ';')
                 brace++;
 
-            if (*brace)
-                brace++;
+            if (*brace) brace++;
 
             parse_hsize_list(brace, &s->block);
         }
@@ -3682,7 +3679,6 @@ parse_subset_params(char *dset)
     return s;
 }
 
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
 /*-------------------------------------------------------------------------
  * Function:    parse_mask_list
  *
@@ -3700,102 +3696,99 @@ parse_subset_params(char *dset)
 static int
 parse_mask_list(const char *h_list)
 {
-    const char     *ptr;
-    int             offset_value, length_value;
+    int                offset_value;
+    int                length_value;
     unsigned long long temp_mask;
+    const char        *ptr = NULL;
 
     /* sanity check */
     HDassert(h_list);
 
     HDmemset(packed_mask,0,sizeof(packed_mask));
-    
+
     packed_bits_num = 0;
     /* scan in pair of offset,length separated by commas. */
     ptr = h_list;
     while (*ptr) {
-	/* scan for an offset which is an unsigned int */
-	if (!HDisdigit(*ptr)){
-	    error_msg("Bad mask list(%s)\n", h_list);
-	    return FAIL;
-	}
-	offset_value = HDatoi(ptr);
-	if (offset_value < 0 || offset_value >= PACKED_BITS_SIZE_MAX){
-	    error_msg("Packed Bit offset value(%d) must be between 0 and %d\n",
-		offset_value, PACKED_BITS_SIZE_MAX - 1);
-	    return FAIL;
-	}
-
-	/* skip to end of integer */
-	while (HDisdigit(*++ptr))
-	    ;
-	/* Look for the common separator */
-	if (*ptr++ != ',') {
-	    error_msg("Bad mask list(%s), missing expected comma separator.\n", h_list);
-	    return FAIL;
-	}
-
-	/* scan for a length which is a positive int */
-	if (!HDisdigit(*ptr)){
-	    error_msg("Bad mask list(%s)\n", h_list);
-	    return FAIL;
-	}
-	length_value = HDatoi(ptr);
-	if (length_value <= 0){
-	    error_msg("Packed Bit length value(%d) must be positive.\n",
-		length_value);
-	    return FAIL;
-	};
-	if ((offset_value + length_value) > PACKED_BITS_SIZE_MAX){
-	    error_msg("Packed Bit offset+length value(%d) too large. Max is %d\n",
-		offset_value+length_value, PACKED_BITS_SIZE_MAX);
-	    return FAIL;
-	};
-
-	/* skip to end of int */
-	while (HDisdigit(*++ptr))
-	    ;
-
-	/* store the offset,length pair */
-	if (packed_bits_num >= PACKED_BITS_MAX){
-	    /* too many requests */
-	    error_msg("Too many masks requested (max. %d). Mask list(%s)\n",
-		PACKED_BITS_MAX, h_list);
-	    return FAIL;
-	}
-	packed_offset[packed_bits_num] = offset_value;
-	packed_length[packed_bits_num] = length_value;
-	/* create the bit mask by left shift 1's by length, then negate it. */
-	/* After packed_mask is calculated, packed_length is not needed but  */
-	/* keep it for debug purpose. */
-	temp_mask = ~0L;
-	if(length_value<8*sizeof(unsigned long long)) {
-	    temp_mask = temp_mask << length_value;
-	    packed_mask[packed_bits_num] = ~temp_mask;
-    }
-	else
-        packed_mask[packed_bits_num] = temp_mask;
-	packed_bits_num++;
-
-	/* skip a possible comma separator */
-	if (*ptr == ','){
-	    if (!(*++ptr)){
-		/* unexpected end of string */
-		error_msg("Bad mask list(%s), unexpected end of string.\n", h_list);
-		return FAIL;
-	    }
-	}
+        /* scan for an offset which is an unsigned int */
+        if (!HDisdigit(*ptr)){
+            error_msg("Bad mask list(%s)\n", h_list);
+            return FAIL;
+        }
+        offset_value = HDatoi(ptr);
+        if (offset_value < 0 || offset_value >= PACKED_BITS_SIZE_MAX){
+            error_msg("Packed Bit offset value(%d) must be between 0 and %d\n",
+                    offset_value, PACKED_BITS_SIZE_MAX - 1);
+            return FAIL;
+        }
+
+        /* skip to end of integer */
+        while (HDisdigit(*++ptr))
+            ;
+        /* Look for the common separator */
+        if (*ptr++ != ',') {
+            error_msg("Bad mask list(%s), missing expected comma separator.\n", h_list);
+            return FAIL;
+        }
+
+        /* scan for a length which is a positive int */
+        if (!HDisdigit(*ptr)){
+            error_msg("Bad mask list(%s)\n", h_list);
+            return FAIL;
+        }
+        length_value = HDatoi(ptr);
+        if (length_value <= 0){
+            error_msg("Packed Bit length value(%d) must be positive.\n", length_value);
+            return FAIL;
+        }
+        if ((offset_value + length_value) > PACKED_BITS_SIZE_MAX){
+            error_msg("Packed Bit offset+length value(%d) too large. Max is %d\n",
+                    offset_value+length_value, PACKED_BITS_SIZE_MAX);
+            return FAIL;
+        }
+
+        /* skip to end of int */
+        while (HDisdigit(*++ptr))
+            ;
+
+        /* store the offset,length pair */
+        if (packed_bits_num >= PACKED_BITS_MAX){
+            /* too many requests */
+            error_msg("Too many masks requested (max. %d). Mask list(%s)\n", PACKED_BITS_MAX, h_list);
+            return FAIL;
+        }
+        packed_offset[packed_bits_num] = offset_value;
+        packed_length[packed_bits_num] = length_value;
+        /* create the bit mask by left shift 1's by length, then negate it. */
+        /* After packed_mask is calculated, packed_length is not needed but  */
+        /* keep it for debug purpose. */
+        temp_mask = ~0L;
+        if(length_value<8*sizeof(unsigned long long)) {
+            temp_mask = temp_mask << length_value;
+            packed_mask[packed_bits_num] = ~temp_mask;
+        }
+        else
+            packed_mask[packed_bits_num] = temp_mask;
+        packed_bits_num++;
+
+        /* skip a possible comma separator */
+        if (*ptr == ','){
+            if (!(*++ptr)){
+                /* unexpected end of string */
+                error_msg("Bad mask list(%s), unexpected end of string.\n", h_list);
+                return FAIL;
+            }
+        }
     }
     HDassert(packed_bits_num <= PACKED_BITS_MAX);
     if (packed_bits_num == 0){
-	/* got no masks! */
+        /* got no masks! */
         error_msg("Bad mask list(%s)\n", h_list);
         return FAIL;
     }
     return SUCCEED;
 }
 
-#endif
-
 /*-------------------------------------------------------------------------
  * Function:    handle_datasets
  *
@@ -3825,16 +3818,12 @@ handle_datasets(hid_t fid, const char *dset, void *data, int pe, const char *dis
     struct subset_t *sset = (struct subset_t *)data;
     const char      *real_name = display_name ? display_name : dset;
 
-    if((dsetid = H5Dopen2(fid, dset, H5P_DEFAULT)) < 0)
-    {
-        if (pe)
-        {
-            begin_obj(dump_header_format->datasetbegin, real_name,
-                dump_header_format->datasetblockbegin);
+    if((dsetid = H5Dopen2(fid, dset, H5P_DEFAULT)) < 0) {
+        if (pe) {
+            begin_obj(dump_header_format->datasetbegin, real_name, dump_header_format->datasetblockbegin);
             indentation(COL);
             error_msg("unable to open dataset \"%s\"\n", real_name);
-            end_obj(dump_header_format->datasetend,
-                dump_header_format->datasetblockend);
+            end_obj(dump_header_format->datasetend, dump_header_format->datasetblockend);
             h5tools_setstatus(EXIT_FAILURE);
         }
         return;
@@ -3907,7 +3896,7 @@ handle_datasets(hid_t fid, const char *dset, void *data, int pe, const char *dis
             h5tools_setstatus(EXIT_FAILURE);
             return;
         }
-        
+
         /*-------------------------------------------------------------------------
          * check for block overlap
          *-------------------------------------------------------------------------
@@ -3933,14 +3922,13 @@ handle_datasets(hid_t fid, const char *dset, void *data, int pe, const char *dis
         if(found_obj) {
             if (found_obj->displayed) {
                 indentation(indent);
-                begin_obj(dump_header_format->datasetbegin, real_name,
-                          dump_header_format->datasetblockbegin);
+                begin_obj(dump_header_format->datasetbegin, real_name, dump_header_format->datasetblockbegin);
                 indentation(indent + COL);
-                printf("%s \"%s\"\n", HARDLINK, found_obj->objname);
+                HDfprintf(stdout, "%s \"%s\"\n", HARDLINK, found_obj->objname);
                 indentation(indent);
-                end_obj(dump_header_format->datasetend,
-                        dump_header_format->datasetblockend);
-            } else {
+                end_obj(dump_header_format->datasetend, dump_header_format->datasetblockend);
+            } 
+            else {
                 found_obj->displayed = TRUE;
                 dump_dataset(dsetid, real_name, sset);
             }
@@ -3981,11 +3969,8 @@ handle_groups(hid_t fid, const char *group, void UNUSED * data, int pe, const ch
     hid_t       gid;
     const char  *real_name = display_name ? display_name : group;
 
-
-    if((gid = H5Gopen2(fid, group, H5P_DEFAULT)) < 0)
-    {
-        if ( pe )
-        {
+    if((gid = H5Gopen2(fid, group, H5P_DEFAULT)) < 0) {
+        if (pe) {
             begin_obj(dump_header_format->groupbegin, real_name, dump_header_format->groupblockbegin);
             indentation(COL);
             error_msg("unable to open group \"%s\"\n", real_name);
@@ -3993,12 +3978,10 @@ handle_groups(hid_t fid, const char *group, void UNUSED * data, int pe, const ch
             h5tools_setstatus(EXIT_FAILURE);
         }
     }
-    else
-    {
+    else {
         size_t new_len = HDstrlen(group) + 1;
 
-        if(prefix_len <= new_len)
-        {
+        if(prefix_len <= new_len) {
             prefix_len = new_len;
             prefix = (char *)HDrealloc(prefix, prefix_len);
         } /* end if */
@@ -4034,68 +4017,63 @@ handle_links(hid_t fid, const char *links, void UNUSED * data, int UNUSED pe, co
     if(H5Lget_info(fid, links, &linfo, H5P_DEFAULT) < 0) {
         error_msg("unable to get link info from \"%s\"\n", links);
         h5tools_setstatus(EXIT_FAILURE);
-    } else if(linfo.type == H5L_TYPE_HARD) {
+    } 
+    else if(linfo.type == H5L_TYPE_HARD) {
         error_msg("\"%s\" is a hard link\n", links);
         h5tools_setstatus(EXIT_FAILURE);
-    } else {
+    } 
+    else {
         char *buf = (char *)HDmalloc(linfo.u.val_size);
 
         switch(linfo.type) {
-            case H5L_TYPE_SOFT:    /* Soft link */
-                begin_obj(dump_header_format->softlinkbegin, links,
-                        dump_header_format->softlinkblockbegin);
-                indentation(COL);
-                if(H5Lget_val(fid, links, buf, linfo.u.val_size, H5P_DEFAULT) >= 0)
-                    printf("LINKTARGET \"%s\"\n", buf);
-                else {
-                    error_msg("h5dump error: unable to get link value for \"%s\"\n",
-                              links);
-                    h5tools_setstatus(EXIT_FAILURE);
-                }
-                end_obj(dump_header_format->softlinkend,
-                        dump_header_format->softlinkblockend);
-                break;
+        case H5L_TYPE_SOFT:    /* Soft link */
+            begin_obj(dump_header_format->softlinkbegin, links, dump_header_format->softlinkblockbegin);
+            indentation(COL);
+            if(H5Lget_val(fid, links, buf, linfo.u.val_size, H5P_DEFAULT) >= 0)
+                HDfprintf(stdout, "LINKTARGET \"%s\"\n", buf);
+            else {
+                error_msg("h5dump error: unable to get link value for \"%s\"\n", links);
+                h5tools_setstatus(EXIT_FAILURE);
+            }
+            end_obj(dump_header_format->softlinkend, dump_header_format->softlinkblockend);
+            break;
 
-            case H5L_TYPE_EXTERNAL:
-                begin_obj(dump_header_format->udlinkbegin, links,
-                        dump_header_format->udlinkblockbegin);
-                indentation(COL);
-                begin_obj(dump_header_format->extlinkbegin, links,
-                        dump_header_format->extlinkblockbegin);
-                if(H5Lget_val(fid, links, buf, linfo.u.val_size, H5P_DEFAULT) >= 0) {
-                    const char *elink_file;
-                    const char *elink_path;
-
-                    if(H5Lunpack_elink_val(buf, linfo.u.val_size, NULL, &elink_file, &elink_path)>=0) {
-                        indentation(COL);
-                        printf("LINKCLASS %d\n", linfo.type);
-                        indentation(COL);
-                        printf("TARGETFILE \"%s\"\n", elink_file);
-                        indentation(COL);
-                        printf("TARGETPATH \"%s\"\n", elink_path);
-                    } else {
-                        error_msg("h5dump error: unable to unpack external link value for \"%s\"\n", links);
-                        h5tools_setstatus(EXIT_FAILURE);
-                    }
-                } else {
-                    error_msg("h5dump error: unable to get external link value for \"%s\"\n", links);
+        case H5L_TYPE_EXTERNAL:
+            begin_obj(dump_header_format->udlinkbegin, links, dump_header_format->udlinkblockbegin);
+            indentation(COL);
+            begin_obj(dump_header_format->extlinkbegin, links, dump_header_format->extlinkblockbegin);
+            if(H5Lget_val(fid, links, buf, linfo.u.val_size, H5P_DEFAULT) >= 0) {
+                const char *elink_file;
+                const char *elink_path;
+
+                if(H5Lunpack_elink_val(buf, linfo.u.val_size, NULL, &elink_file, &elink_path)>=0) {
+                    indentation(COL);
+                    HDfprintf(stdout, "LINKCLASS %d\n", linfo.type);
+                    indentation(COL);
+                    HDfprintf(stdout, "TARGETFILE \"%s\"\n", elink_file);
+                    indentation(COL);
+                    HDfprintf(stdout, "TARGETPATH \"%s\"\n", elink_path);
+                } 
+                else {
+                    error_msg("h5dump error: unable to unpack external link value for \"%s\"\n", links);
                     h5tools_setstatus(EXIT_FAILURE);
                 }
-                end_obj(dump_header_format->extlinkend,
-                        dump_header_format->extlinkblockend);
-                break;
+            } 
+            else {
+                error_msg("h5dump error: unable to get external link value for \"%s\"\n", links);
+                h5tools_setstatus(EXIT_FAILURE);
+            }
+            end_obj(dump_header_format->extlinkend, dump_header_format->extlinkblockend);
+            break;
 
-            default:
-                begin_obj(dump_header_format->udlinkbegin, links,
-                          dump_header_format->udlinkblockbegin);
-                indentation(COL);
-                begin_obj(dump_header_format->udlinkbegin, links,
-                          dump_header_format->udlinkblockbegin);
-                indentation(COL);
-                printf("LINKCLASS %d\n", linfo.type);
-                end_obj(dump_header_format->udlinkend,
-                          dump_header_format->udlinkblockend);
-                break;
+        default:
+            begin_obj(dump_header_format->udlinkbegin, links, dump_header_format->udlinkblockbegin);
+            indentation(COL);
+            begin_obj(dump_header_format->udlinkbegin, links, dump_header_format->udlinkblockbegin);
+            indentation(COL);
+            HDfprintf(stdout, "LINKCLASS %d\n", linfo.type);
+            end_obj(dump_header_format->udlinkend, dump_header_format->udlinkblockend);
+            break;
         } /* end switch */
         HDfree(buf);
     } /* end else */
@@ -4126,17 +4104,14 @@ handle_datatypes(hid_t fid, const char *type, void UNUSED * data, int pe, const
     hid_t       type_id;
     const char  *real_name = display_name ? display_name : type;
 
-    if((type_id = H5Topen2(fid, type, H5P_DEFAULT)) < 0)
-    {
+    if((type_id = H5Topen2(fid, type, H5P_DEFAULT)) < 0) {
         /* check if type is unamed datatype */
         unsigned idx = 0;
 
-        while(idx < type_table->nobjs )
-        {
+        while(idx < type_table->nobjs ) {
             char name[128];
 
-            if(!type_table->objs[idx].recorded)
-            {
+            if(!type_table->objs[idx].recorded) {
                 /* unamed datatype */
                 sprintf(name, "/#"H5_PRINTF_HADDR_FMT, type_table->objs[idx].objno);
 
@@ -4147,22 +4122,17 @@ handle_datatypes(hid_t fid, const char *type, void UNUSED * data, int pe, const
             idx++;
         } /* end while */
 
-        if(idx == type_table->nobjs)
-        {
-            if ( pe )
-            {
+        if(idx == type_table->nobjs) {
+            if (pe) {
                 /* unknown type */
-                begin_obj(dump_header_format->datatypebegin, real_name,
-                    dump_header_format->datatypeblockbegin);
+                begin_obj(dump_header_format->datatypebegin, real_name, dump_header_format->datatypeblockbegin);
                 indentation(COL);
                 error_msg("unable to open datatype \"%s\"\n", real_name);
-                end_obj(dump_header_format->datatypeend,
-                    dump_header_format->datatypeblockend);
+                end_obj(dump_header_format->datatypeend, dump_header_format->datatypeblockend);
                 h5tools_setstatus(EXIT_FAILURE);
             }
         }
-        else
-        {
+        else {
             hid_t dsetid = H5Dopen2(fid, type_table->objs[idx].objname, H5P_DEFAULT);
             type_id = H5Dget_type(dsetid);
             dump_named_datatype(type_id, real_name);
@@ -4170,8 +4140,7 @@ handle_datatypes(hid_t fid, const char *type, void UNUSED * data, int pe, const
             H5Dclose(dsetid);
         }
     }
-    else
-    {
+    else {
         dump_named_datatype(type_id, real_name);
 
         if(H5Tclose(type_id) < 0)
@@ -4179,7 +4148,55 @@ handle_datatypes(hid_t fid, const char *type, void UNUSED * data, int pe, const
     }
 }
 
-
+
+/*-------------------------------------------------------------------------
+ * Function:    free_handler
+ *
+ * Purpose:     Convenience function to free the handler_t structures. Needs a
+ *              length variable (LEN) to know how many in the array it needs
+ *              to free
+ *
+ * Return:      Nothing
+ *
+ * Programmer:  Bill Wendling
+ *              Tuesday, 20. February 2001
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+free_handler(struct handler_t *hand, int len)
+{
+    register int i;
+
+    if(hand) {
+        for (i = 0; i < len; i++) {
+            if(hand[i].obj) {
+                free(hand[i].obj);
+                hand[i].obj=NULL;
+            }
+
+            if (hand[i].subset_info) {
+                if(hand[i].subset_info->start.data)
+                    free(hand[i].subset_info->start.data);
+                if(hand[i].subset_info->stride.data)
+                    free(hand[i].subset_info->stride.data);
+                if(hand[i].subset_info->count.data)
+                    free(hand[i].subset_info->count.data);
+                if(hand[i].subset_info->block.data)
+                    free(hand[i].subset_info->block.data);
+
+                free(hand[i].subset_info);
+                hand[i].subset_info=NULL;
+            }
+        }
+
+        free(hand);
+    }
+}
+
+
 /*-------------------------------------------------------------------------
  * Function:    parse_command_line
  *
@@ -4202,21 +4219,26 @@ handle_datatypes(hid_t fid, const char *type, void UNUSED * data, int pe, const
 static struct handler_t *
 parse_command_line(int argc, const char *argv[])
 {
-    struct handler_t   *hand, *last_dset = NULL;
-    int                 i, opt, last_was_dset = FALSE;
+    struct handler_t    *hand = NULL;
+    struct handler_t    *last_dset = NULL;
+    int                 i;
+    int                 opt;
+    int                 last_was_dset = FALSE;
 
-     /* no arguments */
+    /* no arguments */
     if (argc == 1) {
         usage(h5tools_getprogname());
-        leave(EXIT_FAILURE);
+        goto error;
     }
 
     /* this will be plenty big enough to hold the info */
-    hand = (struct handler_t *)calloc((size_t)argc, sizeof(struct handler_t));
+    if((hand = (struct handler_t *)calloc((size_t)argc, sizeof(struct handler_t)))==NULL) {
+        goto error;
+    }
 
     /* parse command line options */
     while ((opt = get_option(argc, argv, s_opts, l_opts)) != EOF) {
-parse_start:
+        parse_start:
         switch ((char)opt) {
         case 'R':
             display_region = TRUE;
@@ -4258,7 +4280,10 @@ parse_start:
             break;
         case 'V':
             print_version(h5tools_getprogname());
-            leave(EXIT_SUCCESS);
+            free_handler(hand, argc);
+            hand = NULL;
+            h5tools_setstatus(EXIT_SUCCESS);
+            goto done;
             break;
         case 'w':
             nCols = HDatoi(opt_arg);
@@ -4334,13 +4359,13 @@ parse_start:
             if ( bin_output ) {
                 if (set_output_file(opt_arg, 1) < 0) {
                     usage(h5tools_getprogname());
-                    leave(EXIT_FAILURE);
+                    goto error;
                 }
             }
             else {
                 if (set_output_file(opt_arg, 0) < 0) {
                     usage(h5tools_getprogname());
-                    leave(EXIT_FAILURE);
+                    goto error;
                 }
             }
 
@@ -4354,7 +4379,7 @@ parse_start:
                 if ( ( bin_form = set_binary_form(opt_arg)) < 0) {
                     /* failed to set binary form */
                     usage(h5tools_getprogname());
-                    leave(EXIT_FAILURE);
+                    goto error;
                 }
             }
             bin_output = TRUE;
@@ -4362,7 +4387,7 @@ parse_start:
                 if (set_output_file(outfname, 1) < 0)  {
                     /* failed to set output file */
                     usage(h5tools_getprogname());
-                    leave(EXIT_FAILURE);
+                    goto error;
                 }
 
                 last_was_dset = FALSE;
@@ -4373,7 +4398,7 @@ parse_start:
             if ( ( sort_by = set_sort_by(opt_arg)) < 0) {
                 /* failed to set "sort by" form */
                 usage(h5tools_getprogname());
-                leave(EXIT_FAILURE);
+                goto error;
             }
             break;
 
@@ -4381,26 +4406,23 @@ parse_start:
             if ( ( sort_order = set_sort_order(opt_arg)) < 0) {
                 /* failed to set "sort order" form */
                 usage(h5tools_getprogname());
-                leave(EXIT_FAILURE);
+                goto error;
             }
             break;
 
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
         case 'M':
             if (!last_was_dset) {
-                error_msg("option `-%c' can only be used after --dataset option\n",
-                          opt);
-                leave(EXIT_FAILURE);
+                error_msg("option `-%c' can only be used after --dataset option\n", opt);
+                goto error;
             }
             if (parse_mask_list(opt_arg) != SUCCEED){
-		usage(h5tools_getprogname());
-                leave(EXIT_FAILURE);
+                usage(h5tools_getprogname());
+                goto error;
             }
             display_packed_bits = TRUE;
             break;
-#endif
 
-        /** begin XML parameters **/
+            /** begin XML parameters **/
         case 'x':
             /* select XML output */
             doxml = TRUE;
@@ -4426,25 +4448,23 @@ parse_start:
             fp_format = opt_arg;
             break;
 
-
-
-
         case 'X':
             /* specify XML namespace (default="hdf5:"), or none */
             /* To Do: check format of this value?  */
-        if (!useschema) {
+            if (!useschema) {
                 usage(h5tools_getprogname());
-                leave(EXIT_FAILURE);
-        }
-        if (strcmp(opt_arg,":") == 0) {
+                goto error;
+            }
+            if (strcmp(opt_arg,":") == 0) {
                 xmlnsprefix = "";
-        } else {
+            } 
+            else {
                 xmlnsprefix = opt_arg;
-        }
+            }
             break;
-        /** end XML parameters **/
+            /** end XML parameters **/
 
-        /** begin subsetting parameters **/
+            /** begin subsetting parameters **/
         case 's':
         case 'S':
         case 'c':
@@ -4452,9 +4472,8 @@ parse_start:
             struct subset_t *s;
 
             if (!last_was_dset) {
-                error_msg("option `-%c' can only be used after --dataset option\n",
-                          opt);
-                leave(EXIT_FAILURE);
+                error_msg("option `-%c' can only be used after --dataset option\n", opt);
+                goto error;
             }
 
             if (last_dset->subset_info) {
@@ -4463,7 +4482,8 @@ parse_start:
                  * the two.
                  */
                 s = last_dset->subset_info;
-            } else {
+            } 
+            else {
                 last_dset->subset_info = s = (struct subset_t *)calloc(1, sizeof(struct subset_t));
             }
 
@@ -4480,15 +4500,40 @@ parse_start:
              */
             do {
                 switch ((char)opt) {
-                case 's': if(s->start.data) free(s->start.data); parse_hsize_list(opt_arg, &s->start); break;
-                case 'S': if(s->stride.data) free(s->stride.data); parse_hsize_list(opt_arg, &s->stride); break;
-                case 'c': if(s->count.data) free(s->count.data); parse_hsize_list(opt_arg, &s->count); break;
-                case 'k': if(s->block.data) free(s->block.data); parse_hsize_list(opt_arg, &s->block); break;
-                default: goto end_collect;
+                case 's':
+                    if (s->start.data) {
+                        free(s->start.data);
+                        s->start.data = NULL;
+                    }
+                    parse_hsize_list(opt_arg, &s->start);
+                    break;
+                case 'S':
+                    if (s->stride.data) {
+                        free(s->stride.data);
+                        s->stride.data = NULL;
+                    }
+                    parse_hsize_list(opt_arg, &s->stride);
+                    break;
+                case 'c':
+                    if (s->count.data) {
+                        free(s->count.data);
+                        s->count.data = NULL;
+                    }
+                    parse_hsize_list(opt_arg, &s->count);
+                    break;
+                case 'k':
+                    if (s->block.data) {
+                        free(s->block.data);
+                        s->block.data = NULL;
+                    }
+                    parse_hsize_list(opt_arg, &s->block);
+                    break;
+                default:
+                    goto end_collect;
                 }
             } while ((opt = get_option(argc, argv, s_opts, l_opts)) != EOF);
 
-end_collect:
+            end_collect:
             last_was_dset = FALSE;
 
             if (opt != EOF)
@@ -4503,59 +4548,35 @@ end_collect:
             break;
         case 'h':
             usage(h5tools_getprogname());
-            leave(EXIT_SUCCESS);
+            free_handler(hand, argc);
+            hand = NULL;
+            h5tools_setstatus(EXIT_SUCCESS);
+            goto done;
         case '?':
         default:
             usage(h5tools_getprogname());
-            leave(EXIT_FAILURE);
+            goto error;
         }
     }
 
-parse_end:
+    parse_end:
     /* check for file name to be processed */
     if (argc <= opt_ind) {
         error_msg("missing file name\n");
         usage(h5tools_getprogname());
-        leave(EXIT_FAILURE);
+        goto error;
     }
+    done:
     return hand;
-}
-
-
-/*-------------------------------------------------------------------------
- * Function:    free_handler
- *
- * Purpose:     Convenience function to free the handler_t structures. Needs a
- *              length variable (LEN) to know how many in the array it needs
- *              to free
- *
- * Return:      Nothing
- *
- * Programmer:  Bill Wendling
- *              Tuesday, 20. February 2001
- *
- * Modifications:
- *
- *-------------------------------------------------------------------------
- */
-static void
-free_handler(struct handler_t *hand, int len)
-{
-    register int i;
 
-    for (i = 0; i < len; i++) {
-        free(hand[i].obj);
-
-        if (hand[i].subset_info) {
-            free(hand[i].subset_info->start.data);
-            free(hand[i].subset_info->stride.data);
-            free(hand[i].subset_info->count.data);
-            free(hand[i].subset_info->block.data);
-            free(hand[i].subset_info);
-        }
+    error:
+    if (hand) {
+        free_handler(hand, argc);
+        hand = NULL;
     }
+    h5tools_setstatus(EXIT_FAILURE);
 
-    free(hand);
+    return hand;
 }
 
 /*-------------------------------------------------------------------------
@@ -4600,14 +4621,15 @@ free_handler(struct handler_t *hand, int len)
 int
 main(int argc, const char *argv[])
 {
-    hid_t               fid, gid;
-    char               *fname = NULL;
-    void               *edata;
+    hid_t               fid = -1;
+    hid_t               gid = -1;
     H5E_auto2_t         func;
     H5O_info_t          oi;
     struct handler_t   *hand;
     int                 i;
     unsigned            u;
+    void               *edata;
+    char               *fname = NULL;
 
     h5tools_setprogname(PROGRAMNAME);
     h5tools_setstatus(EXIT_SUCCESS);
@@ -4620,11 +4642,14 @@ main(int argc, const char *argv[])
 
     /* Initialize h5tools lib */
     h5tools_init();
-    hand = parse_command_line(argc, argv);
+    if((hand = parse_command_line(argc, argv))==NULL) {
+        goto done;
+    }
 
     if (bin_output && outfname == NULL) {
         error_msg("binary output requires a file name, use -o <filename>\n");
-        leave(EXIT_FAILURE);
+        h5tools_setstatus(EXIT_FAILURE);
+        goto done;
     }
 
     if (enable_error_stack)
@@ -4635,35 +4660,41 @@ main(int argc, const char *argv[])
         if (!display_all) {
             error_msg("option \"%s\" not available for XML\n",
                     "to display selected objects");
-            leave(EXIT_FAILURE);
-        } else if (display_bb) {
-            error_msg("option \"%s\" not available for XML\n",
-                    "--boot-block");
-            leave(EXIT_FAILURE);
-        } else if (display_oid == 1) {
-            error_msg("option \"%s\" not available for XML\n",
-                    "--object-ids");
-            leave(EXIT_FAILURE);
-        } else if (display_char == TRUE) {
-            error_msg("option \"%s\" not available for XML\n",
-                    "--string");
-            leave(EXIT_FAILURE);
-        } else if (usingdasho) {
-            error_msg("option \"%s\" not available for XML\n",
-                    "--output");
-            leave(EXIT_FAILURE);
+            h5tools_setstatus(EXIT_FAILURE);
+            goto done;
+        }
+        else if (display_bb) {
+            error_msg("option \"%s\" not available for XML\n", "--boot-block");
+            h5tools_setstatus(EXIT_FAILURE);
+            goto done;
         }
-    } else {
+        else if (display_oid == 1) {
+            error_msg("option \"%s\" not available for XML\n", "--object-ids");
+            h5tools_setstatus(EXIT_FAILURE);
+            goto done;
+        }
+        else if (display_char == TRUE) {
+            error_msg("option \"%s\" not available for XML\n", "--string");
+            h5tools_setstatus(EXIT_FAILURE);
+            goto done;
+        }
+        else if (usingdasho) {
+            error_msg("option \"%s\" not available for XML\n", "--output");
+            h5tools_setstatus(EXIT_FAILURE);
+            goto done;
+        }
+    }
+    else {
         if (xml_dtd_uri) {
-            warn_msg("option \"%s\" only applies with XML: %s\n",
-                     "--xml-dtd", xml_dtd_uri);
+            warn_msg("option \"%s\" only applies with XML: %s\n", "--xml-dtd", xml_dtd_uri);
         }
     }
 
     if (argc <= opt_ind) {
         error_msg("missing file name\n");
         usage(h5tools_getprogname());
-        leave(EXIT_FAILURE);
+        h5tools_setstatus(EXIT_FAILURE);
+        goto done;
     }
     fname = HDstrdup(argv[opt_ind]);
 
@@ -4671,7 +4702,8 @@ main(int argc, const char *argv[])
 
     if (fid < 0) {
         error_msg("unable to open file \"%s\"\n", fname);
-        leave(EXIT_FAILURE);
+        h5tools_setstatus(EXIT_FAILURE);
+        goto done;
     }
 
     /* allocate and initialize internal data structure */
@@ -4690,14 +4722,17 @@ main(int argc, const char *argv[])
         if (xml_dtd_uri == NULL) {
             if (useschema) {
                 xml_dtd_uri = DEFAULT_XSD;
-            } else {
+            } 
+            else {
                 xml_dtd_uri = DEFAULT_DTD;
                 xmlnsprefix = "";
             }
-        } else {
+        } 
+        else {
             if (useschema && strcmp(xmlnsprefix,"")) {
                 error_msg("Cannot set Schema URL for a qualified namespace--use -X or -U option with -D \n");
-                leave(EXIT_FAILURE);
+                h5tools_setstatus(EXIT_FAILURE);
+                goto done;
             }
         }
     }
@@ -4729,18 +4764,19 @@ main(int argc, const char *argv[])
 
     /* start to dump - display file header information */
     if (!doxml) {
-        begin_obj(dump_header_format->filebegin, fname,
-              dump_header_format->fileblockbegin);
-    } else {
-        printf("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
+        begin_obj(dump_header_format->filebegin, fname, dump_header_format->fileblockbegin);
+    } 
+    else {
+        HDfprintf(stdout, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
 
         /* alternative first element, depending on schema or DTD. */
         if (useschema) {
             if (strcmp(xmlnsprefix,"") == 0) {
-                printf("<HDF5-File xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"%s\">\n",
-                   xml_dtd_uri);
-            } else {
-/*  TO DO: make -url option work in this case (may need new option) */
+                HDfprintf(stdout, "<HDF5-File xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:noNamespaceSchemaLocation=\"%s\">\n",
+                        xml_dtd_uri);
+            } 
+            else {
+                /*  TO DO: make -url option work in this case (may need new option) */
                 char * ns;
                 char *indx;
 
@@ -4748,16 +4784,16 @@ main(int argc, const char *argv[])
                 indx = strrchr(ns,(int)':');
                 if (indx) *indx = '\0';
 
-                printf("<%sHDF5-File xmlns:%s=\"http://hdfgroup.org/DTDs/HDF5-File\" "
-                    "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
-                    "xsi:schemaLocation=\"http://hdfgroup.org/DTDs/HDF5-File "
-                    "http://www.hdfgroup.org/DTDs/HDF5-File.xsd\">\n",xmlnsprefix,ns);
+                HDfprintf(stdout, "<%sHDF5-File xmlns:%s=\"http://hdfgroup.org/HDF5/XML/schema/HDF5-File\" "
+                        "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
+                        "xsi:schemaLocation=\"http://hdfgroup.org/HDF5/XML/schema/HDF5-File "
+                        "http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd\">\n",xmlnsprefix,ns);
                 HDfree(ns);
             }
-        } else {
-                printf("<!DOCTYPE HDF5-File PUBLIC \"HDF5-File.dtd\" \"%s\">\n",
-                       xml_dtd_uri);
-                printf("<HDF5-File>\n");
+        } 
+        else {
+            HDfprintf(stdout, "<!DOCTYPE HDF5-File PUBLIC \"HDF5-File.dtd\" \"%s\">\n", xml_dtd_uri);
+            HDfprintf(stdout, "<HDF5-File>\n");
         }
     }
 
@@ -4772,30 +4808,26 @@ main(int argc, const char *argv[])
             dump_fcpl(fid);
     }
 
-    if(display_all)
-    {
+    if (display_all) {
         if((gid = H5Gopen2(fid, "/", H5P_DEFAULT)) < 0)
         {
             error_msg("unable to open root group\n");
             h5tools_setstatus(EXIT_FAILURE);
         }
-        else
-        {
+        else {
 
             dump_function_table->dump_group_function(gid, "/" );
 
         }
 
-        if(H5Gclose(gid) < 0)
-        {
+        if (H5Gclose(gid) < 0) {
             error_msg("unable to close root group\n");
             h5tools_setstatus(EXIT_FAILURE);
         }
 
 
     }
-    else
-    {
+    else {
         /* Note: this option is not supported for XML */
         if(doxml) {
             error_msg("internal error (file %s:line %d)\n", __FILE__, __LINE__);
@@ -4810,20 +4842,25 @@ main(int argc, const char *argv[])
 
     if (!doxml) {
         end_obj(dump_header_format->fileend, dump_header_format->fileblockend);
-    } else {
-        printf("</%sHDF5-File>\n", xmlnsprefix);
+    } 
+    else {
+        HDfprintf(stdout, "</%sHDF5-File>\n", xmlnsprefix);
     }
 
-done:
+    done:
     /* Free tables for objects */
     table_list_free();
 
+    if(hand) 
+        free_handler(hand, argc);
+
+    if(fid >=0)
     if (H5Fclose(fid) < 0)
         h5tools_setstatus(EXIT_FAILURE);
 
-    free_handler(hand, argc);
-
+    if(prefix)
     HDfree(prefix);
+    if(fname)
     HDfree(fname);
 
     /* To Do:  clean up XML table */
@@ -4886,8 +4923,8 @@ print_enum(hid_t type)
     value = (unsigned char *)calloc(nmembs, MAX(H5Tget_size(type), dst_size));
 
     for (i = 0; i < nmembs; i++) {
-    name[i] = H5Tget_member_name(type, i);
-    H5Tget_member_value(type, i, value + i * H5Tget_size(type));
+        name[i] = H5Tget_member_name(type, i);
+        H5Tget_member_value(type, i, value + i * H5Tget_size(type));
     }
 
     /* Convert values to native datatype */
@@ -4901,44 +4938,44 @@ print_enum(hid_t type)
 
     /* Print members */
     for (i = 0; i < nmembs; i++) {
-    indentation(indent + COL);
-    nchars = printf("\"%s\"", name[i]);
-    printf("%*s   ", MAX(0, 16 - nchars), "");
+        indentation(indent + COL);
+        nchars = HDfprintf(stdout, "\"%s\"", name[i]);
+        HDfprintf(stdout, "%*s   ", MAX(0, 16 - nchars), "");
 
-    if (native < 0) {
+        if (native < 0) {
             size_t j;
 
-        printf("0x");
+            HDfprintf(stdout, "0x");
 
-        for (j = 0; j < dst_size; j++)
-        printf("%02x", value[i * dst_size + j]);
-    } else if (H5T_SGN_NONE == H5Tget_sign(native)) {
-        /*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size"
-         *strangely, unless use another pointer "copy".*/
-        copy = value+i*dst_size;
-        HDfprintf(stdout,"%" H5_PRINTF_LL_WIDTH "u", *((unsigned long long *)
-                          ((void *)copy)));
-    } else {
-        /*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size"
-         *strangely, unless use another pointer "copy".*/
-        copy = value+i*dst_size;
-        HDfprintf(stdout,"%" H5_PRINTF_LL_WIDTH "d",
-           *((long long *) ((void *)copy)));
-    }
+            for (j = 0; j < dst_size; j++)
+                HDfprintf(stdout, "%02x", value[i * dst_size + j]);
+        }
+        else if (H5T_SGN_NONE == H5Tget_sign(native)) {
+            /*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size"
+             *strangely, unless use another pointer "copy".*/
+            copy = value+i*dst_size;
+            HDfprintf(stdout, "%" H5_PRINTF_LL_WIDTH "u", *((unsigned long long *) ((void *) copy)));
+        }
+        else {
+            /*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size"
+             *strangely, unless use another pointer "copy".*/
+            copy = value+i*dst_size;
+            HDfprintf(stdout, "%" H5_PRINTF_LL_WIDTH "d", *((long long *) ((void *) copy)));
+        }
 
-    printf(";\n");
+        HDfprintf(stdout, ";\n");
     }
 
     /* Release resources */
     for (i = 0; i < nmembs; i++)
-    free(name[i]);
+        free(name[i]);
 
     free(name);
     free(value);
     H5Tclose(super);
 
     if (0 == nmembs)
-    printf("\n%*s <empty>", indent + 4, "");
+        HDfprintf(stdout, "\n%*s <empty>", indent + 4, "");
 }
 
 
@@ -4966,16 +5003,19 @@ xml_name_to_XID(const char *str , char *outstr, int outlen, int gen)
                     objno = ref_path_table_gen_fake(str);
                     sprintf(outstr, "xid_"H5_PRINTF_HADDR_FMT, objno);
                     return 0;
-                } else {
+                } 
+                else {
                     return 1;
                 }
             }
-        } else {
+        } 
+        else {
             if (gen) {
                 objno = ref_path_table_gen_fake(str);
                 sprintf(outstr, "xid_"H5_PRINTF_HADDR_FMT, objno);
                 return 0;
-            } else {
+            } 
+            else {
                 return 1;
             }
         }
@@ -5017,30 +5057,34 @@ xml_escape_the_name(const char *str)
     char                   *rcp;
 
     if (!str)
-    return NULL;
+        return NULL;
 
     cp = str;
     len = strlen(str);
     extra = 0;
 
     for (i = 0; i < len; i++) {
-    if (*cp == '\"') {
-        extra += (strlen(quote) - 1);
-    } else if (*cp == '\'') {
-        extra += (strlen(apos) - 1);
-    } else if (*cp == '<') {
-        extra += (strlen(lt) - 1);
-    } else if (*cp == '>') {
-        extra += (strlen(gt) - 1);
-    } else if (*cp == '&') {
-        extra += (strlen(amp) - 1);
-    }
+        if (*cp == '\"') {
+            extra += (strlen(quote) - 1);
+        } 
+        else if (*cp == '\'') {
+            extra += (strlen(apos) - 1);
+        } 
+        else if (*cp == '<') {
+            extra += (strlen(lt) - 1);
+        } 
+        else if (*cp == '>') {
+            extra += (strlen(gt) - 1);
+        } 
+        else if (*cp == '&') {
+            extra += (strlen(amp) - 1);
+        }
 
-    cp++;
+        cp++;
     }
 
     if (extra == 0)
-    return HDstrdup(str);
+        return HDstrdup(str);
 
     cp = str;
     rcp = ncp = (char *)HDmalloc(len + extra + 1);
@@ -5053,23 +5097,28 @@ xml_escape_the_name(const char *str)
             strncpy(ncp, apos, strlen(apos));
             ncp += strlen(apos);
             cp++;
-        } else if (*cp == '<') {
+        } 
+        else if (*cp == '<') {
             strncpy(ncp, lt, strlen(lt));
             ncp += strlen(lt);
             cp++;
-        } else if (*cp == '>') {
+        } 
+        else if (*cp == '>') {
             strncpy(ncp, gt, strlen(gt));
             ncp += strlen(gt);
             cp++;
-        } else if (*cp == '\"') {
+        } 
+        else if (*cp == '\"') {
             strncpy(ncp, quote, strlen(quote));
             ncp += strlen(quote);
             cp++;
-        } else if (*cp == '&') {
+        } 
+        else if (*cp == '&') {
             strncpy(ncp, amp, strlen(amp));
             ncp += strlen(amp);
             cp++;
-        } else {
+        } 
+        else {
             *ncp++ = *cp++;
         }
     }
@@ -5103,66 +5152,77 @@ xml_escape_the_string(const char *str, int slen)
     char                   *rcp;
 
     if (!str)
-    return NULL;
+        return NULL;
 
     cp = str;
 
     if (slen < 0)
-    len = strlen(str);
+        len = strlen(str);
     else
-    len = slen;
+        len = slen;
 
     extra = 0;
 
     for (i = 0; i < len; i++) {
-    if (*cp == '\\') {
-        extra++;
-    } else if (*cp == '\"') {
-        extra++;
-    } else if (*cp == '\'') {
-        extra += (strlen(apos) - 1);
-    } else if (*cp == '<') {
-        extra += (strlen(lt) - 1);
-    } else if (*cp == '>') {
-        extra += (strlen(gt) - 1);
-    } else if (*cp == '&') {
-        extra += (strlen(amp) - 1);
-    }
-    cp++;
+        if (*cp == '\\') {
+            extra++;
+        }
+        else if (*cp == '\"') {
+            extra++;
+        }
+        else if (*cp == '\'') {
+            extra += (strlen(apos) - 1);
+        }
+        else if (*cp == '<') {
+            extra += (strlen(lt) - 1);
+        }
+        else if (*cp == '>') {
+            extra += (strlen(gt) - 1);
+        }
+        else if (*cp == '&') {
+            extra += (strlen(amp) - 1);
+        }
+        cp++;
     }
 
     cp = str;
     rcp = ncp = (char *)calloc((len + extra + 1), sizeof(char));
 
     if (ncp == NULL)
-    return NULL;        /* ?? */
+        return NULL;        /* ?? */
 
     for (i = 0; i < len; i++) {
-    if (*cp == '\\') {
-        *ncp++ = '\\';
-        *ncp++ = *cp++;
-    } else if (*cp == '\"') {
-        *ncp++ = '\\';
-        *ncp++ = *cp++;
-    } else if (*cp == '\'') {
-        strncpy(ncp, apos, strlen(apos));
-        ncp += strlen(apos);
-        cp++;
-    } else if (*cp == '<') {
-        strncpy(ncp, lt, strlen(lt));
-        ncp += strlen(lt);
-        cp++;
-    } else if (*cp == '>') {
-        strncpy(ncp, gt, strlen(gt));
-        ncp += strlen(gt);
-        cp++;
-    } else if (*cp == '&') {
-        strncpy(ncp, amp, strlen(amp));
-        ncp += strlen(amp);
-        cp++;
-    } else {
-        *ncp++ = *cp++;
-    }
+        if (*cp == '\\') {
+            *ncp++ = '\\';
+            *ncp++ = *cp++;
+        }
+        else if (*cp == '\"') {
+            *ncp++ = '\\';
+            *ncp++ = *cp++;
+        }
+        else if (*cp == '\'') {
+            strncpy(ncp, apos, strlen(apos));
+            ncp += strlen(apos);
+            cp++;
+        }
+        else if (*cp == '<') {
+            strncpy(ncp, lt, strlen(lt));
+            ncp += strlen(lt);
+            cp++;
+        }
+        else if (*cp == '>') {
+            strncpy(ncp, gt, strlen(gt));
+            ncp += strlen(gt);
+            cp++;
+        }
+        else if (*cp == '&') {
+            strncpy(ncp, amp, strlen(amp));
+            ncp += strlen(amp);
+            cp++;
+        }
+        else {
+            *ncp++ = *cp++;
+        }
     }
 
     *ncp = '\0';
@@ -5170,9 +5230,9 @@ xml_escape_the_string(const char *str, int slen)
 }
 
 /**
- **  XML print functions--these replace some functions in the
- **  h5tools.c suite.
- **/
+**  XML print functions--these replace some functions in the
+**  h5tools.c suite.
+**/
 
 /*-------------------------------------------------------------------------
  * Function:    xml_print_datatype
@@ -5230,63 +5290,66 @@ xml_print_datatype(hid_t type, unsigned in_group)
             if (!found_obj->recorded) {
                 /* 'anonymous' NDT.  Use it's object num.
                    as it's name.  */
-                printf("<%sNamedDataTypePtr OBJ-XID=\"/%s\"/>\n",
+                HDfprintf(stdout, "<%sNamedDataTypePtr OBJ-XID=\"/%s\"/>\n",
                         xmlnsprefix, dtxid);
-            } else {
+            } 
+            else {
                 /* point to the NDT by name */
                 char *t_objname = xml_escape_the_name(found_obj->objname);
 
-                printf("<%sNamedDataTypePtr OBJ-XID=\"%s\" H5Path=\"%s\"/>\n",
+                HDfprintf(stdout, "<%sNamedDataTypePtr OBJ-XID=\"%s\" H5Path=\"%s\"/>\n",
                         xmlnsprefix, dtxid, t_objname);
                 free(t_objname);
             }
             free(dtxid);
-        } else {
-            printf("<!-- h5dump error: unknown committed type. -->\n");
+        } 
+        else {
+            HDfprintf(stdout, "<!-- h5dump error: unknown committed type. -->\n");
             h5tools_setstatus(EXIT_FAILURE);
         }
-    } else {
+    } 
+    else {
 
         switch (H5Tget_class(type)) {
-            case H5T_INTEGER:
-                indentation(indent);
-                printf("<%sAtomicType>\n",xmlnsprefix);
-                indent += COL;
-                /* <hdf5:IntegerType ByteOrder="bo" Sign="torf" Size="bytes"/> */
-                ord = H5Tget_order(type);
-                sgn = H5Tget_sign(type);
-                indentation(indent);
-                printf("<%sIntegerType ByteOrder=\"",xmlnsprefix);
-                switch (ord) {
-                    case H5T_ORDER_LE:
-                        printf("LE");
-                        break;
-                    case H5T_ORDER_BE:
-                        printf("BE");
-                        break;
-                    case H5T_ORDER_VAX:
-                    default:
-                        printf("ERROR_UNKNOWN");
-                }
-                printf("\" Sign=\"");
-                switch (sgn) {
-                    case H5T_SGN_NONE:
-                        printf("false");
-                        break;
-                    case H5T_SGN_2:
-                        printf("true");
-                        break;
-                    default:
-                        printf("ERROR_UNKNOWN");
-                }
-                printf("\" Size=\"");
-                sz = H5Tget_size(type);
-                printf("%lu", (unsigned long)sz);
-                printf("\" />\n");
-                indent -= COL;
-                indentation(indent);
-                printf("</%sAtomicType>\n",xmlnsprefix);
+        case H5T_INTEGER:
+            indentation(indent);
+            HDfprintf(stdout, "<%sAtomicType>\n",xmlnsprefix);
+            indent += COL;
+            /* <hdf5:IntegerType ByteOrder="bo" Sign="torf" Size="bytes"/> */
+            ord = H5Tget_order(type);
+            sgn = H5Tget_sign(type);
+            indentation(indent);
+            HDfprintf(stdout, "<%sIntegerType ByteOrder=\"",xmlnsprefix);
+            switch (ord) {
+            case H5T_ORDER_LE:
+                HDfprintf(stdout, "LE");
+                break;
+            case H5T_ORDER_BE:
+                HDfprintf(stdout, "BE");
+                break;
+            case H5T_ORDER_VAX:
+            default:
+                HDfprintf(stdout, "ERROR_UNKNOWN");
+            }
+            HDfprintf(stdout, "\" Sign=\"");
+            switch (sgn) {
+            case H5T_SGN_NONE:
+                HDfprintf(stdout, "false");
                 break;
+            case H5T_SGN_2:
+                HDfprintf(stdout, "true");
+                break;
+            default:
+                HDfprintf(stdout, "ERROR_UNKNOWN");
+            }
+            HDfprintf(stdout, "\" Size=\"");
+            sz = H5Tget_size(type);
+            HDfprintf(stdout, "%lu", (unsigned long)sz);
+            HDfprintf(stdout, "\" />\n");
+            indent -= COL;
+            indentation(indent);
+            HDfprintf(stdout, "</%sAtomicType>\n",xmlnsprefix);
+            break;
 
             case H5T_FLOAT:
                 /* <hdf5:FloatType ByteOrder="bo" Size="bytes"
@@ -5295,262 +5358,261 @@ xml_print_datatype(hid_t type, unsigned in_group)
                    MantissaBits="mb" MantissaLocation="ml" /> */
                 ord = H5Tget_order(type);
                 indentation(indent);
-                printf("<%sAtomicType>\n",xmlnsprefix);
+                HDfprintf(stdout, "<%sAtomicType>\n",xmlnsprefix);
                 indent += COL;
                 indentation(indent);
-                printf("<%sFloatType ByteOrder=\"",xmlnsprefix);
+                HDfprintf(stdout, "<%sFloatType ByteOrder=\"",xmlnsprefix);
                 switch (ord) {
-                    case H5T_ORDER_LE:
-                        printf("LE");
-                        break;
-                    case H5T_ORDER_BE:
-                        printf("BE");
-                        break;
-                    case H5T_ORDER_VAX:
-                        printf("VAX");
-                        break;
-                    default:
-                        printf("ERROR_UNKNOWN");
+                case H5T_ORDER_LE:
+                    HDfprintf(stdout, "LE");
+                    break;
+                case H5T_ORDER_BE:
+                    HDfprintf(stdout, "BE");
+                    break;
+                case H5T_ORDER_VAX:
+                    HDfprintf(stdout, "VAX");
+                    break;
+                default:
+                    HDfprintf(stdout, "ERROR_UNKNOWN");
                 }
-                printf("\" Size=\"");
+                HDfprintf(stdout, "\" Size=\"");
                 sz = H5Tget_size(type);
-                printf("%lu", (unsigned long)sz);
+                HDfprintf(stdout, "%lu", (unsigned long)sz);
                 H5Tget_fields(type, &spos, &epos, &esize, &mpos, &msize);
-                printf("\" SignBitLocation=\"%lu\" ", (unsigned long)spos);
-                printf("ExponentBits=\"%lu\" ExponentLocation=\"%lu\" ", (unsigned long)esize, (unsigned long)epos);
-                printf("MantissaBits=\"%lu\" MantissaLocation=\"%lu\" />\n",
-                       (unsigned long)msize, (unsigned long)mpos);
+                HDfprintf(stdout, "\" SignBitLocation=\"%lu\" ", (unsigned long)spos);
+                HDfprintf(stdout, "ExponentBits=\"%lu\" ExponentLocation=\"%lu\" ", (unsigned long)esize, (unsigned long)epos);
+                HDfprintf(stdout, "MantissaBits=\"%lu\" MantissaLocation=\"%lu\" />\n", (unsigned long)msize, (unsigned long)mpos);
                 indent -= COL;
                 indentation(indent);
-                printf("</%sAtomicType>\n",xmlnsprefix);
+                HDfprintf(stdout, "</%sAtomicType>\n",xmlnsprefix);
                 break;
 
-            case H5T_TIME:
-                indentation(indent);
-                printf("<%sAtomicType>\n",xmlnsprefix);
-                indent += COL;
-                indentation(indent);
-                printf("<%sTimeType />\n",xmlnsprefix);
-                printf("<!-- H5T_TIME: not yet implemented -->");
-                indent -= COL;
-                indentation(indent);
-                printf("</%sAtomicType>\n",xmlnsprefix);
-                break;
+                case H5T_TIME:
+                    indentation(indent);
+                    HDfprintf(stdout, "<%sAtomicType>\n",xmlnsprefix);
+                    indent += COL;
+                    indentation(indent);
+                    HDfprintf(stdout, "<%sTimeType />\n",xmlnsprefix);
+                    HDfprintf(stdout, "<!-- H5T_TIME: not yet implemented -->");
+                    indent -= COL;
+                    indentation(indent);
+                    HDfprintf(stdout, "</%sAtomicType>\n",xmlnsprefix);
+                    break;
 
-            case H5T_STRING:
-                /* <hdf5:StringType Cset="cs" StrSize="chars" StrPad="pad" /> */
-                size = H5Tget_size(type);
-                str_pad = H5Tget_strpad(type);
-                cset = H5Tget_cset(type);
-                is_vlstr = H5Tis_variable_str(type);
+                case H5T_STRING:
+                    /* <hdf5:StringType Cset="cs" StrSize="chars" StrPad="pad" /> */
+                    size = H5Tget_size(type);
+                    str_pad = H5Tget_strpad(type);
+                    cset = H5Tget_cset(type);
+                    is_vlstr = H5Tis_variable_str(type);
 
-                indentation(indent);
-                printf("<%sAtomicType>\n",xmlnsprefix);
-                indent += COL;
-                indentation(indent);
-                printf("<%sStringType Cset=\"",xmlnsprefix);
-                if (cset == H5T_CSET_ASCII) {
-                    printf("H5T_CSET_ASCII\" ");
-                } else {
-                    printf("unknown_cset\" ");
-                }
-                if(is_vlstr)
-                    printf("StrSize=\"H5T_VARIABLE\" StrPad=\"");
-                else
-                    printf("StrSize=\"%d\" StrPad=\"", (int) size);
-                if (str_pad == H5T_STR_NULLTERM) {
-                    printf("H5T_STR_NULLTERM\"/>\n");
-                } else if (str_pad == H5T_STR_NULLPAD) {
-                    printf("H5T_STR_NULLPAD\"/>\n");
-                } else if (str_pad == H5T_STR_SPACEPAD) {
-                    printf("H5T_STR_SPACEPAD\"/>\n");
-                } else {
-                    printf("H5T_STR_ERROR\"/>\n");
-                }
-                indent -= COL;
-                indentation(indent);
-                printf("</%sAtomicType>\n",xmlnsprefix);
-                break;
+                    indentation(indent);
+                    HDfprintf(stdout, "<%sAtomicType>\n",xmlnsprefix);
+                    indent += COL;
+                    indentation(indent);
+                    HDfprintf(stdout, "<%sStringType Cset=\"",xmlnsprefix);
+                    if (cset == H5T_CSET_ASCII) {
+                        HDfprintf(stdout, "H5T_CSET_ASCII\" ");
+                    } 
+                    else {
+                        HDfprintf(stdout, "unknown_cset\" ");
+                    }
+                    if(is_vlstr)
+                        HDfprintf(stdout, "StrSize=\"H5T_VARIABLE\" StrPad=\"");
+                    else
+                        HDfprintf(stdout, "StrSize=\"%d\" StrPad=\"", (int) size);
+                    if (str_pad == H5T_STR_NULLTERM) {
+                        HDfprintf(stdout, "H5T_STR_NULLTERM\"/>\n");
+                    } 
+                    else if (str_pad == H5T_STR_NULLPAD) {
+                        HDfprintf(stdout, "H5T_STR_NULLPAD\"/>\n");
+                    } 
+                    else if (str_pad == H5T_STR_SPACEPAD) {
+                        HDfprintf(stdout, "H5T_STR_SPACEPAD\"/>\n");
+                    } 
+                    else {
+                        HDfprintf(stdout, "H5T_STR_ERROR\"/>\n");
+                    }
+                    indent -= COL;
+                    indentation(indent);
+                    HDfprintf(stdout, "</%sAtomicType>\n",xmlnsprefix);
+                    break;
 
-            case H5T_BITFIELD:
-                /* <hdf5:BitfieldType ByteOrder="bo" Size="bytes"/> */
-                ord = H5Tget_order(type);
-                indentation(indent);
-                printf("<%sAtomicType>\n",xmlnsprefix);
-                indent += COL;
-                indentation(indent);
-                printf("<%sBitfieldType ByteOrder=\"",xmlnsprefix);
-                switch (ord) {
+                case H5T_BITFIELD:
+                    /* <hdf5:BitfieldType ByteOrder="bo" Size="bytes"/> */
+                    ord = H5Tget_order(type);
+                    indentation(indent);
+                    HDfprintf(stdout, "<%sAtomicType>\n",xmlnsprefix);
+                    indent += COL;
+                    indentation(indent);
+                    HDfprintf(stdout, "<%sBitfieldType ByteOrder=\"",xmlnsprefix);
+                    switch (ord) {
                     case H5T_ORDER_LE:
-                        printf("LE");
+                        HDfprintf(stdout, "LE");
                         break;
                     case H5T_ORDER_BE:
-                        printf("BE");
+                        HDfprintf(stdout, "BE");
                         break;
                     case H5T_ORDER_VAX:
                     default:
-                        printf("ERROR_UNKNOWN");
-                }
-                size = H5Tget_size(type);
-                printf("\" Size=\"%lu\"/>\n", (unsigned long)size);
-                indent -= COL;
-                indentation(indent);
-                printf("</%sAtomicType>\n",xmlnsprefix);
-                break;
+                        HDfprintf(stdout, "ERROR_UNKNOWN");
+                    }
+                    size = H5Tget_size(type);
+                    HDfprintf(stdout, "\" Size=\"%lu\"/>\n", (unsigned long)size);
+                    indent -= COL;
+                    indentation(indent);
+                    HDfprintf(stdout, "</%sAtomicType>\n",xmlnsprefix);
+                    break;
 
-            case H5T_OPAQUE:
-                /* <hdf5:OpaqueType Tag="tag" Size="bytes" /> */
-                indentation(indent);
-                printf("<%sAtomicType>\n",xmlnsprefix);
-                indent += COL;
-                indentation(indent);
-                mname = H5Tget_tag(type);
-                printf("<%sOpaqueType Tag=\"%s\" ",xmlnsprefix, mname);
-                free(mname);
-                size = H5Tget_size(type);
-                printf("Size=\"%lu\"/>\n", (unsigned long)size);
-                indent -= COL;
-                indentation(indent);
-                printf("</%sAtomicType>\n",xmlnsprefix);
-                break;
+                    case H5T_OPAQUE:
+                        /* <hdf5:OpaqueType Tag="tag" Size="bytes" /> */
+                        indentation(indent);
+                        HDfprintf(stdout, "<%sAtomicType>\n",xmlnsprefix);
+                        indent += COL;
+                        indentation(indent);
+                        mname = H5Tget_tag(type);
+                        HDfprintf(stdout, "<%sOpaqueType Tag=\"%s\" ",xmlnsprefix, mname);
+                        free(mname);
+                        size = H5Tget_size(type);
+                        HDfprintf(stdout, "Size=\"%lu\"/>\n", (unsigned long)size);
+                        indent -= COL;
+                        indentation(indent);
+                        HDfprintf(stdout, "</%sAtomicType>\n",xmlnsprefix);
+                        break;
 
-            case H5T_COMPOUND:
-                /* recursively describe the components of a compound datatype */
+                    case H5T_COMPOUND:
+                        /* recursively describe the components of a compound datatype */
 
-                /* type of a dataset */
-                nmembers = H5Tget_nmembers(type);
+                        /* type of a dataset */
+                        nmembers = H5Tget_nmembers(type);
 
-                indentation(indent);
-                printf("<%sCompoundType>\n",xmlnsprefix);
+                        indentation(indent);
+                        HDfprintf(stdout, "<%sCompoundType>\n",xmlnsprefix);
 
-                /* List each member Field of the type */
-                /*   <hdf5:Field FieldName="name" > */
-                /*   <hdf5:DataType > */
-                indent += COL;
-                for (i = 0; i < nmembers; i++) {
-                    char *t_fname;
+                        /* List each member Field of the type */
+                        /*   <hdf5:Field FieldName="name" > */
+                        /*   <hdf5:DataType > */
+                        indent += COL;
+                        for (i = 0; i < nmembers; i++) {
+                            char *t_fname;
 
-                    mname = H5Tget_member_name(type, i);
-                    mtype = H5Tget_member_type(type, i);
-                    indentation(indent);
-                    t_fname = xml_escape_the_name(mname);
-                    printf("<%sField FieldName=\"%s\">\n",xmlnsprefix, t_fname);
+                            mname = H5Tget_member_name(type, i);
+                            mtype = H5Tget_member_type(type, i);
+                            indentation(indent);
+                            t_fname = xml_escape_the_name(mname);
+                            HDfprintf(stdout, "<%sField FieldName=\"%s\">\n",xmlnsprefix, t_fname);
 
-                    free(mname);
-                    free(t_fname);
-                    indent += COL;
-                    indentation(indent);
-                    printf("<%sDataType>\n",xmlnsprefix);
-                    indent += COL;
-                    xml_print_datatype(mtype,0);
-                    indent -= COL;
-                    indentation(indent);
-                    printf("</%sDataType>\n",xmlnsprefix);
-                    indent -= COL;
+                            free(mname);
+                            free(t_fname);
+                            indent += COL;
+                            indentation(indent);
+                            HDfprintf(stdout, "<%sDataType>\n",xmlnsprefix);
+                            indent += COL;
+                            xml_print_datatype(mtype,0);
+                            indent -= COL;
+                            indentation(indent);
+                            HDfprintf(stdout, "</%sDataType>\n",xmlnsprefix);
+                            indent -= COL;
 
-                    indentation(indent);
-                    printf("</%sField>\n",xmlnsprefix);
-                }
-                indent -= COL;
-                indentation(indent);
-                printf("</%sCompoundType>\n",xmlnsprefix);
-                break;
+                            indentation(indent);
+                            HDfprintf(stdout, "</%sField>\n",xmlnsprefix);
+                        }
+                        indent -= COL;
+                        indentation(indent);
+                        HDfprintf(stdout, "</%sCompoundType>\n",xmlnsprefix);
+                        break;
 
-            case H5T_REFERENCE:
-                indentation(indent);
-                printf("<%sAtomicType>\n",xmlnsprefix);
-                indent += COL;
-                indentation(indent);
-                /*  Only Object references supported at this time */
-                printf("<%sReferenceType>\n",xmlnsprefix);
-                indentation(indent + COL);
-                printf("<%sObjectReferenceType />\n",xmlnsprefix);
-                indentation(indent);
-                printf("</%sReferenceType>\n",xmlnsprefix);
-                indent -= COL;
-                indentation(indent);
-                printf("</%sAtomicType>\n",xmlnsprefix);
-                break;
+                    case H5T_REFERENCE:
+                        indentation(indent);
+                        HDfprintf(stdout, "<%sAtomicType>\n",xmlnsprefix);
+                        indent += COL;
+                        indentation(indent);
+                        /*  Only Object references supported at this time */
+                        HDfprintf(stdout, "<%sReferenceType>\n",xmlnsprefix);
+                        indentation(indent + COL);
+                        HDfprintf(stdout, "<%sObjectReferenceType />\n",xmlnsprefix);
+                        indentation(indent);
+                        HDfprintf(stdout, "</%sReferenceType>\n",xmlnsprefix);
+                        indent -= COL;
+                        indentation(indent);
+                        HDfprintf(stdout, "</%sAtomicType>\n",xmlnsprefix);
+                        break;
 
-            case H5T_ENUM:
-                /*  <hdf5:EnumType Nelems="ne" >
-                   list Name, values of enum
-                 */
-                nmembs = H5Tget_nmembers(type);
-                indentation(indent);
-                printf("<%sAtomicType>\n",xmlnsprefix);
-                indent += COL;
-                indentation(indent);
-                printf("<%sEnumType Nelems=\"%d\">\n",xmlnsprefix, nmembs);
-                xml_print_enum(type);
-                indentation(indent);
-                printf("</%sEnumType>\n",xmlnsprefix);
-                indent -= COL;
-                indentation(indent);
-                printf("</%sAtomicType>\n",xmlnsprefix);
-                break;
+                    case H5T_ENUM:
+                        /*  <hdf5:EnumType Nelems="ne" > list Name, values of enum */
+                        nmembs = H5Tget_nmembers(type);
+                        indentation(indent);
+                        HDfprintf(stdout, "<%sAtomicType>\n",xmlnsprefix);
+                        indent += COL;
+                        indentation(indent);
+                        HDfprintf(stdout, "<%sEnumType Nelems=\"%d\">\n",xmlnsprefix, nmembs);
+                        xml_print_enum(type);
+                        indentation(indent);
+                        HDfprintf(stdout, "</%sEnumType>\n",xmlnsprefix);
+                        indent -= COL;
+                        indentation(indent);
+                        HDfprintf(stdout, "</%sAtomicType>\n",xmlnsprefix);
+                        break;
 
-            case H5T_VLEN:
-                indentation(indent);
-                printf("<%sVLType>\n",xmlnsprefix);
-                super = H5Tget_super(type);
-                indent += COL;
-                indentation(indent);
-                printf("<%sDataType>\n",xmlnsprefix);
-                indent += COL;
-                xml_print_datatype(super,0);
-                indent -= COL;
-                indentation(indent);
-                printf("</%sDataType>\n",xmlnsprefix);
-                indent -= COL;
-                indentation(indent);
-                printf("</%sVLType>\n",xmlnsprefix);
-                H5Tclose(super);
+                    case H5T_VLEN:
+                        indentation(indent);
+                        HDfprintf(stdout, "<%sVLType>\n",xmlnsprefix);
+                        super = H5Tget_super(type);
+                        indent += COL;
+                        indentation(indent);
+                        HDfprintf(stdout, "<%sDataType>\n",xmlnsprefix);
+                        indent += COL;
+                        xml_print_datatype(super,0);
+                        indent -= COL;
+                        indentation(indent);
+                        HDfprintf(stdout, "</%sDataType>\n",xmlnsprefix);
+                        indent -= COL;
+                        indentation(indent);
+                        HDfprintf(stdout, "</%sVLType>\n",xmlnsprefix);
+                        H5Tclose(super);
 
-                break;
+                        break;
 
-            case H5T_ARRAY:
-                /* Get array base type */
-                super = H5Tget_super(type);
+                    case H5T_ARRAY:
+                        /* Get array base type */
+                        super = H5Tget_super(type);
 
-                /* Print lead-in */
-                indentation(indent);
-                printf("<%sArrayType Ndims=\"",xmlnsprefix);
-                ndims = H5Tget_array_ndims(type);
-                printf("%u\">\n", ndims);
+                        /* Print lead-in */
+                        indentation(indent);
+                        HDfprintf(stdout, "<%sArrayType Ndims=\"",xmlnsprefix);
+                        ndims = H5Tget_array_ndims(type);
+                        HDfprintf(stdout, "%u\">\n", ndims);
 
-                /* Get array information */
-                H5Tget_array_dims2(type, dims);
+                        /* Get array information */
+                        H5Tget_array_dims2(type, dims);
 
-                /* list of dimensions */
-                indent += COL;
-                for (i = 0; i < ndims; i++) {
-                    indentation(indent);
-                    printf("<%sArrayDimension DimSize=\"%u\"/>\n",
-                           xmlnsprefix,
-                           (int) dims[i]);
-                }
-                indent -= COL;
+                        /* list of dimensions */
+                        indent += COL;
+                        for (i = 0; i < ndims; i++) {
+                            indentation(indent);
+                            HDfprintf(stdout, "<%sArrayDimension DimSize=\"%u\"/>\n", xmlnsprefix, (int) dims[i]);
+                        }
+                        indent -= COL;
 
-                indent += COL;
-                indentation(indent);
-                printf("<%sDataType>\n",xmlnsprefix);
-                indent += COL;
-                xml_print_datatype(super,0);
-                indent -= COL;
-                indentation(indent);
-                printf("</%sDataType>\n",xmlnsprefix);
-                indent -= COL;
-                indentation(indent);
-                printf("</%sArrayType>\n",xmlnsprefix);
-                /* Close array base type */
-                H5Tclose(super);
-                break;
+                        indent += COL;
+                        indentation(indent);
+                        HDfprintf(stdout, "<%sDataType>\n",xmlnsprefix);
+                        indent += COL;
+                        xml_print_datatype(super,0);
+                        indent -= COL;
+                        indentation(indent);
+                        HDfprintf(stdout, "</%sDataType>\n",xmlnsprefix);
+                        indent -= COL;
+                        indentation(indent);
+                        HDfprintf(stdout, "</%sArrayType>\n",xmlnsprefix);
+                        /* Close array base type */
+                        H5Tclose(super);
+                        break;
 
-            default:
-                printf("<!-- unknown datatype -->");
-                h5tools_setstatus(EXIT_FAILURE);
-                break;
+                    default:
+                        HDfprintf(stdout, "<!-- unknown datatype -->");
+                        h5tools_setstatus(EXIT_FAILURE);
+                        break;
         }
     } /* end else */
 }
@@ -5595,29 +5657,31 @@ xml_dump_datatype(hid_t type)
                    practice:
                    use it's object ref as its name
                  */
-                printf("<%sNamedDataTypePtr OBJ-XID=\"%s\"/>\n",
+                HDfprintf(stdout, "<%sNamedDataTypePtr OBJ-XID=\"%s\"/>\n",
                         xmlnsprefix, dtxid);
-            } else {
+            } 
+            else {
                 /* pointer to a named datatype already in XML */
                 char *t_objname = xml_escape_the_name(found_obj->objname);
 
-                printf("<%sNamedDataTypePtr OBJ-XID=\"%s\" H5Path=\"%s\" />\n",
+                HDfprintf(stdout, "<%sNamedDataTypePtr OBJ-XID=\"%s\" H5Path=\"%s\" />\n",
                         xmlnsprefix, dtxid, t_objname);
                 free(t_objname);
             }
             free(dtxid);
-        } else {
-            printf("<!-- h5dump error: unknown committed type. -->\n");
+        } 
+        else {
+            HDfprintf(stdout, "<!-- h5dump error: unknown committed type. -->\n");
         }
         indent -= COL;
     }
     else {
-        printf("<%sDataType>\n", xmlnsprefix);
+        HDfprintf(stdout, "<%sDataType>\n", xmlnsprefix);
         indent += COL;
         xml_print_datatype(type, 0);
         indent -= COL;
         indentation(indent);
-        printf("</%sDataType>\n", xmlnsprefix);
+        HDfprintf(stdout, "</%sDataType>\n", xmlnsprefix);
         indent -= COL;
     }
 }
@@ -5640,62 +5704,61 @@ xml_dump_dataspace(hid_t space)
 {
     hsize_t                 size[H5DUMP_MAX_RANK];
     hsize_t                 maxsize[H5DUMP_MAX_RANK];
-    int                     ndims =
-    H5Sget_simple_extent_dims(space, size, maxsize);
+    int             i;
+
+    int             ndims = H5Sget_simple_extent_dims(space, size, maxsize);
     H5S_class_t             space_type = H5Sget_simple_extent_type(space);
-    int                     i;
 
     indentation(indent + COL);
-    printf("<%sDataspace>\n", xmlnsprefix);
+    HDfprintf(stdout, "<%sDataspace>\n", xmlnsprefix);
     indentation(indent + COL + COL);
 
     switch (space_type) {
-        case H5S_SCALAR:
-            /* scalar dataspace (just a tag, no XML attrs. defined */
-            printf("<%sScalarDataspace />\n",xmlnsprefix);
-            break;
+    case H5S_SCALAR:
+        /* scalar dataspace (just a tag, no XML attrs. defined */
+        HDfprintf(stdout, "<%sScalarDataspace />\n",xmlnsprefix);
+        break;
 
-        case H5S_SIMPLE:
-            /* simple dataspace */
-            /* <hdf5:SimpleDataspace Ndims="nd"> */
-            printf("<%sSimpleDataspace Ndims=\"%d\">\n",xmlnsprefix, ndims);
-
-            /* print the <hdf5:Dimension> elements */
-            for (i = 0; i < ndims; i++) {
-                indentation(indent + COL + COL + COL);
-                if (maxsize[i] == H5S_UNLIMITED) {
-                    HDfprintf(stdout,
-                          "<%sDimension  DimSize=\"%Hu\" MaxDimSize=\"UNLIMITED\"/>\n",
-                          xmlnsprefix,size[i]);
-                } else if (maxsize[i] == (hsize_t) 0) {
-                    HDfprintf(stdout,
-                          "<%sDimension  DimSize=\"%Hu\" MaxDimSize=\"%Hu\"/>\n",
-                          xmlnsprefix,size[i], size[i]);
-                } else {
-                    HDfprintf(stdout,
-                          "<%sDimension  DimSize=\"%Hu\" MaxDimSize=\"%Hu\"/>\n",
-                          xmlnsprefix, size[i], maxsize[i]);
-                }
+    case H5S_SIMPLE:
+        /* simple dataspace */
+        /* <hdf5:SimpleDataspace Ndims="nd"> */
+        HDfprintf(stdout, "<%sSimpleDataspace Ndims=\"%d\">\n",xmlnsprefix, ndims);
+
+        /* print the <hdf5:Dimension> elements */
+        for (i = 0; i < ndims; i++) {
+            indentation(indent + COL + COL + COL);
+            if (maxsize[i] == H5S_UNLIMITED) {
+                HDfprintf(stdout, "<%sDimension  DimSize=\"%Hu\" MaxDimSize=\"UNLIMITED\"/>\n",
+                        xmlnsprefix,size[i]);
+            } 
+            else if (maxsize[i] == (hsize_t) 0) {
+                HDfprintf(stdout, "<%sDimension  DimSize=\"%Hu\" MaxDimSize=\"%Hu\"/>\n",
+                        xmlnsprefix,size[i], size[i]);
+            } 
+            else {
+                HDfprintf(stdout, "<%sDimension  DimSize=\"%Hu\" MaxDimSize=\"%Hu\"/>\n",
+                        xmlnsprefix, size[i], maxsize[i]);
             }
-            indentation(indent + COL + COL);
-            printf("</%sSimpleDataspace>\n", xmlnsprefix );
-            break;
+        }
+        indentation(indent + COL + COL);
+        HDfprintf(stdout, "</%sSimpleDataspace>\n", xmlnsprefix );
+        break;
 
 #ifdef TMP
         /* Commented out: wait until the schema is updated first */
-        case H5S_NULL:
-            /* null dataspace (just a tag, no XML attrs. defined */
-            printf("<%sNullDataspace />\n",xmlnsprefix);
-            break;
+    case H5S_NULL:
+        /* null dataspace (just a tag, no XML attrs. defined */
+        HDfprintf(stdout, "<%sNullDataspace />\n",xmlnsprefix);
+        break;
 #endif /* TMP */
 
-        case H5S_NO_CLASS:
-        default:
-            printf("<!-- unknown dataspace -->\n");
+    case H5S_NO_CLASS:
+    default:
+        HDfprintf(stdout, "<!-- unknown dataspace -->\n");
     }
 
     indentation(indent + COL);
-    printf("</%sDataspace>\n", xmlnsprefix);
+    HDfprintf(stdout, "</%sDataspace>\n", xmlnsprefix);
 }
 
 /*-------------------------------------------------------------------------
@@ -5716,17 +5779,20 @@ xml_dump_dataspace(hid_t space)
 static void
 xml_dump_data(hid_t obj_id, int obj_data, struct subset_t UNUSED * sset, int UNUSED pindex)
 {
-    h5tool_format_t               *outputformat = &xml_dataformat;
+    hid_t               space;
+    hid_t               type;
+    hid_t               p_type;
+    hsize_t             size[64];
+    hsize_t             nelmts = 1;
+    int                 ndims;
+    int                 i;
+    int                 depth;
     int                     status = -1;
-    void                   *buf;
-    hid_t                   space, type, p_type;
-    int                     ndims, i;
-    hsize_t                 size[64], nelmts = 1;
-    int                     depth;
     int                     stdindent = COL;    /* should be 3 */
+    h5tool_format_t    *outputformat = &xml_dataformat;
+    void               *buf = NULL;
 
-    if (fp_format)
-    {
+    if (fp_format) {
         outputformat->fmt_double = fp_format;
         outputformat->fmt_float = fp_format;
     }
@@ -5749,19 +5815,22 @@ xml_dump_data(hid_t obj_id, int obj_data, struct subset_t UNUSED * sset, int UNU
 
     /* Print all the values. */
     indentation(indent);
-    printf("<%sData>\n", xmlnsprefix);
+    HDfprintf(stdout, "<%sData>\n", xmlnsprefix);
     indentation(indent + COL);
-    printf("<%sDataFromFile>\n",xmlnsprefix);
+    HDfprintf(stdout, "<%sDataFromFile>\n",xmlnsprefix);
     if (obj_data == DATASET_DATA) {
         type = H5Dget_type(obj_id);
         if (H5Tget_class(type) == H5T_REFERENCE) {
             status = xml_print_refs(obj_id, DATASET_DATA);
-        } else if (H5Tget_class(type) == H5T_STRING) {
+        } 
+        else if (H5Tget_class(type) == H5T_STRING) {
             status = xml_print_strs(obj_id, DATASET_DATA);
-        } else {
+        } 
+        else {
             status = h5tools_dump_dset(stdout, outputformat, obj_id, -1, NULL, depth);
         }
-    } else {
+    } 
+    else {
         /* Attribute data */
         type = H5Aget_type(obj_id);
 
@@ -5773,16 +5842,20 @@ xml_dump_data(hid_t obj_id, int obj_data, struct subset_t UNUSED * sset, int UNU
              */
             status = xml_print_refs(obj_id, ATTRIBUTE_DATA);
             H5Tclose(type);
-        } else if (H5Tget_class(type) == H5T_STRING) {
+        } 
+        else if (H5Tget_class(type) == H5T_STRING) {
             status = xml_print_strs(obj_id, ATTRIBUTE_DATA);
-        } else {  /* all other data */
+        } 
+        else {  /* all other data */
             /* VL data special information */
             unsigned int vl_data = 0; /* contains VL datatypes */
-            
+
             p_type = h5tools_get_native_type(type);
 
             /* Check if we have VL data in the dataset's datatype */
-            if (h5tools_detect_vlen(p_type) == TRUE)
+            if (h5tools_detect_vlen_str(p_type) == TRUE)
+                vl_data = TRUE;
+            if (H5Tdetect_class(p_type, H5T_VLEN) == TRUE)
                 vl_data = TRUE;
 
             H5Tclose(type);
@@ -5798,8 +5871,7 @@ xml_dump_data(hid_t obj_id, int obj_data, struct subset_t UNUSED * sset, int UNU
             assert(buf);
 
             if (H5Aread(obj_id, p_type, buf) >= 0)
-                status = h5tools_dump_mem(stdout, outputformat, obj_id,
-                                              p_type, space, buf, depth);
+                status = h5tools_dump_mem(stdout, outputformat, obj_id, p_type, space, buf, depth);
 
             /* Reclaim any VL memory, if necessary */
             if (vl_data)
@@ -5814,14 +5886,14 @@ xml_dump_data(hid_t obj_id, int obj_data, struct subset_t UNUSED * sset, int UNU
 
     if (status == FAIL) {
         indentation(indent + COL);
-        printf("Unable to print data.\n");
+        HDfprintf(stdout, "Unable to print data.\n");
         status = 1;
     }
 
     indentation(indent + COL);
-    printf("</%sDataFromFile>\n",xmlnsprefix);
+    HDfprintf(stdout, "</%sDataFromFile>\n",xmlnsprefix);
     indentation(indent);
-    printf("</%sData>\n", xmlnsprefix);
+    HDfprintf(stdout, "</%sData>\n", xmlnsprefix);
     indent -= COL;
 }
 
@@ -5840,14 +5912,16 @@ xml_dump_data(hid_t obj_id, int obj_data, struct subset_t UNUSED * sset, int UNU
  */
 static herr_t
 xml_dump_attr(hid_t attr, const char *attr_name, const H5A_info_t UNUSED *info,
-    void UNUSED * op_data)
+        void UNUSED * op_data)
 {
-    hid_t   attr_id, type, space;
+    hid_t       attr_id;
+    hid_t       type;
+    hid_t       space;
     H5S_class_t space_type;
     char   *t_aname = xml_escape_the_name(attr_name);
 
     indentation(indent);
-    printf("<%sAttribute Name=\"%s\">\n",xmlnsprefix, t_aname);
+    HDfprintf(stdout, "<%sAttribute Name=\"%s\">\n",xmlnsprefix, t_aname);
     free(t_aname);
 
     if ((attr_id = H5Aopen(attr, attr_name, H5P_DEFAULT)) >= 0) {
@@ -5860,93 +5934,96 @@ xml_dump_attr(hid_t attr, const char *attr_name, const H5A_info_t UNUSED *info,
 
         if (display_attr_data && space_type!=H5S_NULL) {
             switch (H5Tget_class(type)) {
-                case H5T_INTEGER:
-                case H5T_FLOAT:
-                case H5T_STRING:
-                case H5T_BITFIELD:
-                case H5T_OPAQUE:
-                case H5T_ENUM:
-                case H5T_ARRAY:
-                    dump_function_table->dump_data_function(attr_id, ATTRIBUTE_DATA, NULL, 0);
-                    break;
-
-                case H5T_TIME:
-                    indent += COL;
-                    indentation(indent);
-                    printf("<%sData>\n",xmlnsprefix);
-                    indentation(indent);
-                    printf("<!-- Time data not yet implemented. -->\n");
-                    indentation(indent);
-                    printf("<%sNoData/>\n",xmlnsprefix);
-                    indentation(indent);
-                    printf("<hdf5:Data>\n");
-                    printf("</%sData>\n",xmlnsprefix);
-                    indent -= COL;
-                    break;
+            case H5T_INTEGER:
+            case H5T_FLOAT:
+            case H5T_STRING:
+            case H5T_BITFIELD:
+            case H5T_OPAQUE:
+            case H5T_ENUM:
+            case H5T_ARRAY:
+                dump_function_table->dump_data_function(attr_id, ATTRIBUTE_DATA, NULL, 0);
+                break;
 
-                case H5T_COMPOUND:
-                    indentation(indent);
-                    printf("<!-- Note: format of compound data not specified -->\n");
-                    dump_function_table->dump_data_function(attr_id, ATTRIBUTE_DATA, NULL, 0);
-                    break;
+            case H5T_TIME:
+                indent += COL;
+                indentation(indent);
+                HDfprintf(stdout, "<%sData>\n",xmlnsprefix);
+                indentation(indent);
+                HDfprintf(stdout, "<!-- Time data not yet implemented. -->\n");
+                indentation(indent);
+                HDfprintf(stdout, "<%sNoData/>\n",xmlnsprefix);
+                indentation(indent);
+                HDfprintf(stdout, "<hdf5:Data>\n");
+                HDfprintf(stdout, "</%sData>\n",xmlnsprefix);
+                indent -= COL;
+                break;
 
-                case H5T_REFERENCE:
-                    indentation(indent);
-                    printf("<%sData>\n",xmlnsprefix);
-                    indentation(indent);
-                    if (!H5Tequal(type, H5T_STD_REF_OBJ)) {
-                       printf("<!-- Note: Region references not supported -->\n");
-                       indentation(indent);
-                       printf("<%sNoData />\n",xmlnsprefix);
-                    } else {
-                        printf("<%sDataFromFile>\n",xmlnsprefix);
-                        xml_print_refs(attr_id, ATTRIBUTE_DATA);
-                        indentation(indent);
-                        printf("</%sDataFromFile>\n",xmlnsprefix);
-                    }
-                    indentation(indent);
-                    printf("</%sData>\n",xmlnsprefix);
-                    break;
+            case H5T_COMPOUND:
+                indentation(indent);
+                HDfprintf(stdout, "<!-- Note: format of compound data not specified -->\n");
+                dump_function_table->dump_data_function(attr_id, ATTRIBUTE_DATA, NULL, 0);
+                break;
 
-                case H5T_VLEN:
-                    printf("<!-- Note: format of VL data not specified -->\n");
-                    dump_function_table->dump_data_function(attr_id, ATTRIBUTE_DATA, NULL, 0);
-                    break;
-                    default:
-                    indentation(indent);
-                    printf("<%sData>\n",xmlnsprefix);
-                    indentation(indent);
-                    printf("<!-- Unknown datatype: %d -->\n", H5Tget_class(type));
+            case H5T_REFERENCE:
+                indentation(indent);
+                HDfprintf(stdout, "<%sData>\n",xmlnsprefix);
+                indentation(indent);
+                if (!H5Tequal(type, H5T_STD_REF_OBJ)) {
+                    HDfprintf(stdout, "<!-- Note: Region references not supported -->\n");
                     indentation(indent);
-                    printf("<%sNoData/>\n",xmlnsprefix);
+                    HDfprintf(stdout, "<%sNoData />\n",xmlnsprefix);
+                }
+                else {
+                    HDfprintf(stdout, "<%sDataFromFile>\n",xmlnsprefix);
+                    xml_print_refs(attr_id, ATTRIBUTE_DATA);
                     indentation(indent);
-                    printf("</%sData>\n",xmlnsprefix);
-                    break;
+                    HDfprintf(stdout, "</%sDataFromFile>\n",xmlnsprefix);
+                }
+                indentation(indent);
+                HDfprintf(stdout, "</%sData>\n",xmlnsprefix);
+                break;
+
+            case H5T_VLEN:
+                HDfprintf(stdout, "<!-- Note: format of VL data not specified -->\n");
+                dump_function_table->dump_data_function(attr_id, ATTRIBUTE_DATA, NULL, 0);
+                break;
+            default:
+                indentation(indent);
+                HDfprintf(stdout, "<%sData>\n",xmlnsprefix);
+                indentation(indent);
+                HDfprintf(stdout, "<!-- Unknown datatype: %d -->\n", H5Tget_class(type));
+                indentation(indent);
+                HDfprintf(stdout, "<%sNoData/>\n",xmlnsprefix);
+                indentation(indent);
+                HDfprintf(stdout, "</%sData>\n",xmlnsprefix);
+                break;
             }
-        } else {
+        }
+        else {
             /* The case of an attribute never yet written ??
-                 * Or dataspace is H5S_NULL. */
+             * Or dataspace is H5S_NULL. */
             indentation(indent + COL);
-            printf("<%sData>\n",xmlnsprefix);
+            HDfprintf(stdout, "<%sData>\n",xmlnsprefix);
             indentation(indent + COL + COL);
-            printf("<%sNoData/>\n",xmlnsprefix);
+            HDfprintf(stdout, "<%sNoData/>\n",xmlnsprefix);
             indentation(indent + COL);
-            printf("</%sData>\n",xmlnsprefix);
+            HDfprintf(stdout, "</%sData>\n",xmlnsprefix);
         }
 
         H5Tclose(type);
         H5Sclose(space);
         H5Aclose(attr_id);
         indentation(indent);
-        printf("</%sAttribute>\n", xmlnsprefix );
+        HDfprintf(stdout, "</%sAttribute>\n", xmlnsprefix );
         return SUCCEED;
 
-    } else {
+    }
+    else {
         /* ?? failed */
         indentation(indent + COL);
-        printf("<!-- h5dump error: unable to open attribute. -->\n");
+        HDfprintf(stdout, "<!-- h5dump error: unable to open attribute. -->\n");
         indentation(indent);
-        printf("</%sAttribute>\n", xmlnsprefix );
+        HDfprintf(stdout, "</%sAttribute>\n", xmlnsprefix );
         h5tools_setstatus(EXIT_FAILURE);
         return FAIL;
     }
@@ -5998,19 +6075,20 @@ xml_dump_named_datatype(hid_t type, const char *name)
            in the event we want to do something else in
            the future.
          */
-        printf("<%sNamedDataType Name=\"%s\" OBJ-XID=\"%s\" "
-        "Parents=\"%s\" H5ParentPaths=\"%s\">\n",
-        xmlnsprefix,
-        name, dtxid,
-        parentxid, HDstrcmp(prefix,"") ? t_prefix : "/");
-    } else {
+        HDfprintf(stdout, "<%sNamedDataType Name=\"%s\" OBJ-XID=\"%s\" "
+                "Parents=\"%s\" H5ParentPaths=\"%s\">\n",
+                xmlnsprefix,
+                name, dtxid,
+                parentxid, HDstrcmp(prefix,"") ? t_prefix : "/");
+    } 
+    else {
         H5O_info_t  oinfo;          /* Object info */
 
-        printf("<%sNamedDataType Name=\"%s\" OBJ-XID=\"%s\" "
-        "H5Path=\"%s\" Parents=\"%s\" H5ParentPaths=\"%s\">\n",
-        xmlnsprefix,
-        t_name, dtxid,
-        t_tmp, parentxid, (HDstrcmp(prefix, "") ? t_prefix : "/"));
+        HDfprintf(stdout, "<%sNamedDataType Name=\"%s\" OBJ-XID=\"%s\" "
+                "H5Path=\"%s\" Parents=\"%s\" H5ParentPaths=\"%s\">\n",
+                xmlnsprefix,
+                t_name, dtxid,
+                t_tmp, parentxid, (HDstrcmp(prefix, "") ? t_prefix : "/"));
 
         /* Check uniqueness of named datatype */
         H5Oget_info(type, &oinfo);
@@ -6022,11 +6100,11 @@ xml_dump_named_datatype(hid_t type, const char *name)
 
             if (found_obj == NULL) {
                 indentation(indent);
-                    error_msg("internal error (file %s:line %d)\n",
-                              __FILE__, __LINE__);
+                error_msg("internal error (file %s:line %d)\n", __FILE__, __LINE__);
                 h5tools_setstatus(EXIT_FAILURE);
                 goto done;
-            } else if(found_obj->displayed) {
+            } 
+            else if(found_obj->displayed) {
                 /* We have already printed this named datatype, print it as a
                  * NamedDatatypePtr
                  */
@@ -6035,33 +6113,33 @@ xml_dump_named_datatype(hid_t type, const char *name)
 
                 indentation(indent + COL);
                 xml_name_to_XID(found_obj->objname, pointerxid, sizeof(pointerxid), 1);
-                printf("<%sNamedDatatypePtr OBJ-XID=\"%s\" H5Path=\"%s\"/>\n",
-                        xmlnsprefix, pointerxid, t_objname);
+                HDfprintf(stdout, "<%sNamedDatatypePtr OBJ-XID=\"%s\" H5Path=\"%s\"/>\n", xmlnsprefix, pointerxid, t_objname);
                 indentation(indent);
-                printf("</%sNamedDataType>\n", xmlnsprefix);
+                HDfprintf(stdout, "</%sNamedDataType>\n", xmlnsprefix);
                 HDfree(t_objname);
                 goto done;
-            } else
+            } 
+            else
                 found_obj->displayed = TRUE;
         }
     }
 
     indent += COL;
     indentation(indent);
-    printf("<%sDataType>\n",xmlnsprefix);
+    HDfprintf(stdout, "<%sDataType>\n",xmlnsprefix);
 
     indent += COL;
     xml_print_datatype(type,1);
 
     indent -= COL;
     indentation(indent);
-    printf("</%sDataType>\n",xmlnsprefix);
+    HDfprintf(stdout, "</%sDataType>\n",xmlnsprefix);
 
     indent -= COL;
     indentation(indent);
-    printf("</%sNamedDataType>\n",xmlnsprefix);
+    HDfprintf(stdout, "</%sNamedDataType>\n",xmlnsprefix);
 
-done:
+    done:
     HDfree(dtxid);
     HDfree(parentxid);
     HDfree(t_tmp);
@@ -6089,34 +6167,32 @@ static void
 xml_dump_group(hid_t gid, const char *name)
 {
     H5O_info_t              oinfo;
-    char                   *cp;
+    hid_t                   gcpl_id;
     hid_t                   dset, type;
-    char                    type_name[1024], *tmp = NULL;
-    char                   *par = NULL;
-    int                     isRoot = 0;
-    char                   *t_objname;
-    char                   *par_name;
     unsigned                crt_order_flags;
     unsigned                attr_crt_order_flags;
-    hid_t                   gcpl_id;
+    int                     isRoot = 0;
+    char                    type_name[1024];
+    char                   *t_objname = NULL;
+    char                   *par_name = NULL;
+    char                   *cp = NULL;
+    char                   *tmp = NULL;
+    char                   *par = NULL;
 
 
-    if ((gcpl_id = H5Gget_create_plist(gid)) < 0)
-    {
+    if ((gcpl_id = H5Gget_create_plist(gid)) < 0) {
         error_msg("error in getting group creation property list ID\n");
         h5tools_setstatus(EXIT_FAILURE);
     }
 
     /* query the group creation properties for attributes */
-    if (H5Pget_attr_creation_order(gcpl_id, &attr_crt_order_flags) < 0)
-    {
+    if (H5Pget_attr_creation_order(gcpl_id, &attr_crt_order_flags) < 0) {
         error_msg("error in getting group creation properties\n");
         h5tools_setstatus(EXIT_FAILURE);
     }
 
     /* query the group creation properties */
-    if(H5Pget_link_creation_order(gcpl_id, &crt_order_flags) < 0)
-    {
+    if (H5Pget_link_creation_order(gcpl_id, &crt_order_flags) < 0) {
         error_msg("error in getting group creation properties\n");
         h5tools_setstatus(EXIT_FAILURE);
     }
@@ -6129,7 +6205,8 @@ xml_dump_group(hid_t gid, const char *name)
     if(HDstrcmp(name, "/") == 0) {
         isRoot = 1;
         tmp = HDstrdup("/");
-    } else {
+    }
+    else {
         tmp = (char *)HDmalloc(HDstrlen(prefix) + HDstrlen(name) + 2);
         HDstrcpy(tmp, prefix);
         par = HDstrdup(tmp);
@@ -6148,17 +6225,17 @@ xml_dump_group(hid_t gid, const char *name)
     H5Oget_info(gid, &oinfo);
 
     if(oinfo.rc > 1) {
-        obj_t  *found_obj;    /* Found object */
+        obj_t *found_obj;    /* Found object */
 
         /* Group with more than one link to it... */
         found_obj = search_obj(group_table, oinfo.addr);
 
         if (found_obj == NULL) {
             indentation(indent);
-                error_msg("internal error (file %s:line %d)\n",
-                          __FILE__, __LINE__);
+            error_msg("internal error (file %s:line %d)\n", __FILE__, __LINE__);
             h5tools_setstatus(EXIT_FAILURE);
-        } else {
+        }
+        else {
             char *t_name = xml_escape_the_name(name);
             char *grpxid = (char *)malloc(100);
             char *parentxid = (char *)malloc(100);
@@ -6170,14 +6247,15 @@ xml_dump_group(hid_t gid, const char *name)
                 if(isRoot) {
                     /* probably can't happen! */
                     xml_name_to_XID("/", grpxid, 100, 1);
-                    printf("<%sRootGroup OBJ-XID=\"%s\" H5Path=\"%s\">\n",
+                    HDfprintf(stdout, "<%sRootGroup OBJ-XID=\"%s\" H5Path=\"%s\">\n",
                             xmlnsprefix, grpxid, "/");
-                } else {
+                }
+                else {
                     t_objname = xml_escape_the_name(found_obj->objname);
                     par_name = xml_escape_the_name(par);
                     xml_name_to_XID(tmp, grpxid, 100, 1);
                     xml_name_to_XID(par, parentxid, 100, 1);
-                    printf("<%sGroup Name=\"%s\" OBJ-XID=\"%s-%d\" H5Path=\"%s\" "
+                    HDfprintf(stdout, "<%sGroup Name=\"%s\" OBJ-XID=\"%s-%d\" H5Path=\"%s\" "
                             "Parents=\"%s\" H5ParentPaths=\"%s\">\n",
                             xmlnsprefix,t_name, grpxid, get_next_xid(),
                             t_objname, parentxid, par_name);
@@ -6189,28 +6267,30 @@ xml_dump_group(hid_t gid, const char *name)
                     par_name = xml_escape_the_name(par);
                     xml_name_to_XID(found_obj->objname, ptrstr, 100, 1);
                     xml_name_to_XID(par, parentxid, 100, 1);
-                    printf("<%sGroupPtr OBJ-XID=\"%s\" H5Path=\"%s\" "
-                                "Parents=\"%s\" H5ParentPaths=\"%s\" />\n",
-                                xmlnsprefix,
-                                ptrstr, t_objname, parentxid, par_name);
+                    HDfprintf(stdout, "<%sGroupPtr OBJ-XID=\"%s\" H5Path=\"%s\" "
+                            "Parents=\"%s\" H5ParentPaths=\"%s\" />\n",
+                            xmlnsprefix,
+                            ptrstr, t_objname, parentxid, par_name);
                     free(t_objname);
                     free(par_name);
                 }
                 free(ptrstr);
-            } else {
+            }
+            else {
 
                 /* first time this group has been seen -- describe it  */
                 if(isRoot) {
                     xml_name_to_XID("/", grpxid, 100, 1);
-                    printf("<%sRootGroup OBJ-XID=\"%s\" H5Path=\"%s\">\n",
+                    HDfprintf(stdout, "<%sRootGroup OBJ-XID=\"%s\" H5Path=\"%s\">\n",
                             xmlnsprefix, grpxid, "/");
-                } else {
+                }
+                else {
                     char *t_tmp = xml_escape_the_name(tmp);
 
                     par_name = xml_escape_the_name(par);
                     xml_name_to_XID(tmp, grpxid, 100, 1);
                     xml_name_to_XID(par, parentxid, 100, 1);
-                    printf("<%sGroup Name=\"%s\" OBJ-XID=\"%s\" H5Path=\"%s\" "
+                    HDfprintf(stdout, "<%sGroup Name=\"%s\" OBJ-XID=\"%s\" H5Path=\"%s\" "
                             "Parents=\"%s\" H5ParentPaths=\"%s\" >\n",
                             xmlnsprefix,t_name, grpxid, t_tmp, parentxid, par_name);
                     free(t_tmp);
@@ -6251,7 +6331,7 @@ xml_dump_group(hid_t gid, const char *name)
 
                 /* iterate through all the links */
 
-                if( (sort_by == H5_INDEX_CRT_ORDER) && (crt_order_flags & H5P_CRT_ORDER_TRACKED))
+                if((sort_by == H5_INDEX_CRT_ORDER) && (crt_order_flags & H5P_CRT_ORDER_TRACKED))
                     H5Literate(gid, sort_by, sort_order, NULL, dump_all_cb, NULL);
                 else
                     H5Literate(gid, H5_INDEX_NAME, sort_order, NULL, dump_all_cb, NULL);
@@ -6262,7 +6342,8 @@ xml_dump_group(hid_t gid, const char *name)
             free(grpxid);
             free(parentxid);
         }
-    } else {
+    }
+    else {
 
         /* only link -- must be first time! */
         char *t_name = xml_escape_the_name(name);
@@ -6271,18 +6352,17 @@ xml_dump_group(hid_t gid, const char *name)
 
         if(isRoot) {
             xml_name_to_XID("/", grpxid, 100, 1);
-            printf("<%sRootGroup OBJ-XID=\"%s\" H5Path=\"%s\">\n",
-                xmlnsprefix, grpxid, "/");
-        } else {
+            HDfprintf(stdout, "<%sRootGroup OBJ-XID=\"%s\" H5Path=\"%s\">\n", xmlnsprefix, grpxid, "/");
+        }
+        else {
             char *t_tmp = xml_escape_the_name(tmp);
 
             par_name = xml_escape_the_name(par);
             xml_name_to_XID(tmp, grpxid, 100, 1);
             xml_name_to_XID(par, parentxid, 100, 1);
-            printf("<%sGroup Name=\"%s\" OBJ-XID=\"%s\" H5Path=\"%s\" "
+            HDfprintf(stdout, "<%sGroup Name=\"%s\" OBJ-XID=\"%s\" H5Path=\"%s\" "
                     "Parents=\"%s\" H5ParentPaths=\"%s\" >\n",
-                    xmlnsprefix, t_name, grpxid, t_tmp,
-                    parentxid, par_name);
+                    xmlnsprefix, t_name, grpxid, t_tmp, parentxid, par_name);
             free(t_tmp);
             free(par_name);
         }
@@ -6333,10 +6413,13 @@ xml_dump_group(hid_t gid, const char *name)
     indent -= COL;
     indentation(indent);
     if(isRoot)
-        printf("</%sRootGroup>\n", xmlnsprefix);
+        HDfprintf(stdout, "</%sRootGroup>\n", xmlnsprefix);
     else
-        printf("</%sGroup>\n" , xmlnsprefix);
-    free(tmp);
+        HDfprintf(stdout, "</%sGroup>\n", xmlnsprefix);
+    if(par)
+        free(par);
+    if(tmp)
+        free(tmp);
 }
 
 /*-------------------------------------------------------------------------
@@ -6356,12 +6439,13 @@ static int
 xml_print_refs(hid_t did, int source)
 {
     herr_t e;
-    hid_t type, space;
-    char *buf = NULL;
-    hobj_ref_t *refbuf = NULL;
+    hid_t       type;
+    hid_t       space;
     hssize_t ssiz;
     hsize_t i;
     size_t tsiz;
+    hobj_ref_t *refbuf = NULL;
+    char       *buf = NULL;
 
     if (source == DATASET_DATA) {
         type = H5Dget_type(did);
@@ -6419,18 +6503,16 @@ xml_print_refs(hid_t did, int source)
     refbuf = (hobj_ref_t *) buf;
 
     for (i = 0; i < ssiz; i++) {
-        const char *path;
-
-        path = lookup_ref_path(*refbuf);
+        const char *path = lookup_ref_path(*refbuf);
         indentation(indent + COL);
 
         if (!path) {
-            printf("\"%s\"\n", "NULL");
+            HDfprintf(stdout, "\"%s\"\n", "NULL");
         }
         else {
             char *t_path = xml_escape_the_string(path, -1);
 
-            printf("\"%s\"\n", t_path);
+            HDfprintf(stdout, "\"%s\"\n", t_path);
             free(t_path);
         }
 
@@ -6441,8 +6523,8 @@ xml_print_refs(hid_t did, int source)
     H5Tclose(type);
     H5Sclose(space);
     return SUCCEED;
-    
-error:
+
+    error:
     if(buf)
         free(buf);
 
@@ -6470,15 +6552,16 @@ static int
 xml_print_strs(hid_t did, int source)
 {
     herr_t e;
-    hid_t type, space;
-    void *buf = NULL;
-    char *bp;
-    char *onestring = NULL;
+    hid_t       type;
+    hid_t       space;
     hssize_t ssiz;
+    htri_t      is_vlstr = FALSE;
     size_t tsiz;
+    size_t      i;
     size_t str_size = 0;
-    size_t i;
-    htri_t is_vlstr;
+    char       *bp = NULL;
+    char       *onestring = NULL;
+    void       *buf = NULL;
 
     if (source == DATASET_DATA) {
         type = H5Dget_type(did);
@@ -6495,7 +6578,7 @@ xml_print_strs(hid_t did, int source)
         goto error;
     }
     /* Check if we have VL data in the dataset's datatype */
-    is_vlstr = (TRUE == H5Tis_variable_str(type));
+    is_vlstr = H5Tis_variable_str(type);
 
     if (source == DATASET_DATA) {
         space = H5Dget_space(did);
@@ -6547,12 +6630,12 @@ xml_print_strs(hid_t did, int source)
         indentation(indent + COL);
 
         if (!onestring) {
-            printf("NULL\n");
+            HDfprintf(stdout, "NULL\n");
         }
         else {
             char *t_onestring = xml_escape_the_string(onestring, (int) str_size);
             if (t_onestring) {
-                printf("\"%s\"\n", t_onestring);
+                HDfprintf(stdout, "\"%s\"\n", t_onestring);
                 free(t_onestring);
             }
         }
@@ -6572,8 +6655,8 @@ xml_print_strs(hid_t did, int source)
     H5Tclose(type);
     H5Sclose(space);
     return SUCCEED;
-    
-error:
+
+    error:
     if(buf)
         free(buf);
 
@@ -6613,62 +6696,69 @@ check_filters(hid_t dcpl)
     if (nfilt <= 0)
         return;
     for (i = 0; i < nfilt; i++) {
-        filter = H5Pget_filter2(dcpl, (unsigned)i, &flags,
-                   (size_t *) &cd_nelmts,
-                   cd_values, 120, namebuf, NULL);
+        filter = H5Pget_filter2(dcpl, (unsigned) i, &flags, (size_t *) &cd_nelmts, cd_values, 120, namebuf, NULL);
         if (filter == H5Z_FILTER_DEFLATE) {
             indentation(indent + COL);
-            printf("<%sDeflate Level=\"",xmlnsprefix);
+            HDfprintf(stdout, "<%sDeflate Level=\"",xmlnsprefix);
             if (cd_nelmts < 1) {
                 /* not sure what this means? */
-                printf("6");
-            } else {
-                printf("%d",cd_values[0]);
+                HDfprintf(stdout, "6");
+            }
+            else {
+                HDfprintf(stdout, "%d",cd_values[0]);
             }
-            printf("\"/>\n");
-        } else if (filter == H5Z_FILTER_FLETCHER32) {
+            HDfprintf(stdout, "\"/>\n");
+        }
+        else if (filter == H5Z_FILTER_FLETCHER32) {
             indentation(indent + COL);
-            printf("<%sFletcher32 />",xmlnsprefix);
-        } else if (filter == H5Z_FILTER_SHUFFLE) {
+            HDfprintf(stdout, "<%sFletcher32 />",xmlnsprefix);
+        }
+        else if (filter == H5Z_FILTER_SHUFFLE) {
             indentation(indent + COL);
-            printf("<%sShuffle />",xmlnsprefix);
-        } else if (filter == H5Z_FILTER_SZIP) {
+            HDfprintf(stdout, "<%sShuffle />",xmlnsprefix);
+        }
+        else if (filter == H5Z_FILTER_SZIP) {
 
             indentation(indent + COL);
-            printf("<%sSZIP ",xmlnsprefix);
+            HDfprintf(stdout, "<%sSZIP ",xmlnsprefix);
             if (cd_nelmts < 2) {
                 /* no pixels ? */
-                printf("Pixels_per_block=\"-1\" ");
-            } else {
-                printf("Pixels_per_block=\"%d\" ",cd_values[1]);
+                HDfprintf(stdout, "Pixels_per_block=\"-1\" ");
+            }
+            else {
+                HDfprintf(stdout, "Pixels_per_block=\"%d\" ",cd_values[1]);
             }
             /* analyse the options mask */
             if (cd_values[0] & H5_SZIP_CHIP_OPTION_MASK) {
-                printf("Mode =\"Hardware\" ");
-            } else if (cd_values[0] & H5_SZIP_ALLOW_K13_OPTION_MASK) {
-                printf("Mode =\"K13\" ");
+                HDfprintf(stdout, "Mode =\"Hardware\" ");
             }
-            printf("Coding=\"");
+            else if (cd_values[0] & H5_SZIP_ALLOW_K13_OPTION_MASK) {
+                HDfprintf(stdout, "Mode =\"K13\" ");
+            }
+            HDfprintf(stdout, "Coding=\"");
             if (cd_values[0] & H5_SZIP_EC_OPTION_MASK) {
-                printf("Entropy");
-            } else if (cd_values[0] & H5_SZIP_NN_OPTION_MASK) {
-                printf("NN");
+                HDfprintf(stdout, "Entropy");
+            }
+            else if (cd_values[0] & H5_SZIP_NN_OPTION_MASK) {
+                HDfprintf(stdout, "NN");
             }
-            printf("\" ");
+            HDfprintf(stdout, "\" ");
 
-            printf("ByteOrder=\"");
+            HDfprintf(stdout, "ByteOrder=\"");
             if (cd_values[0] & H5_SZIP_LSB_OPTION_MASK) {
-                printf("LSB");
-            } else if (cd_values[0] & H5_SZIP_MSB_OPTION_MASK) {
-                printf("MSB");
+                HDfprintf(stdout, "LSB");
             }
-            printf("\" ");
+            else if (cd_values[0] & H5_SZIP_MSB_OPTION_MASK) {
+                HDfprintf(stdout, "MSB");
+            }
+            HDfprintf(stdout, "\" ");
 
             if (cd_values[0] & H5_SZIP_RAW_OPTION_MASK) {
-                printf("Header=\"Raw\"");
+                HDfprintf(stdout, "Header=\"Raw\"");
             }
-            printf("/>\n");
-        } else {
+            HDfprintf(stdout, "/>\n");
+        }
+        else {
             /* unknown option */
         }
     }
@@ -6685,7 +6775,7 @@ xml_dump_fill_value(hid_t dcpl, hid_t type)
 
     indent += COL;
     indentation(indent);
-    printf("<%sData>\n",xmlnsprefix);
+    HDfprintf(stdout, "<%sData>\n",xmlnsprefix);
     indent += COL;
 
     space = H5Tget_size(type);
@@ -6694,107 +6784,108 @@ xml_dump_fill_value(hid_t dcpl, hid_t type)
     H5Pget_fill_value(dcpl, type, buf);
 
     if (H5Tget_class(type) == H5T_REFERENCE) {
-        const char * path;
-
-        path = lookup_ref_path(*(hobj_ref_t *)buf);
+        const char * path = lookup_ref_path(*(hobj_ref_t *) buf);
 
         indentation(indent);
-        printf("<%sDataFromFile>\n",xmlnsprefix);
+        HDfprintf(stdout, "<%sDataFromFile>\n",xmlnsprefix);
         if (!path) {
-            printf("\"%s\"\n", "NULL");
-        } else {
+            HDfprintf(stdout, "\"%s\"\n", "NULL");
+        }
+        else {
             char *t_path = xml_escape_the_string(path, -1);
 
-            printf("\"%s\"\n", t_path);
+            HDfprintf(stdout, "\"%s\"\n", t_path);
             free(t_path);
         }
         indentation(indent);
-        printf("</%sDataFromFile>\n",xmlnsprefix);
-    } else if (H5Tget_class(type) == H5T_STRING) {
-            /* ????? */
-            indentation(indent);
-            printf("<!-- String fill values not yet implemented. -->\n");
-            indentation(indent);
-            printf("<%sNoData />\n",xmlnsprefix);
-    } else {
+        HDfprintf(stdout, "</%sDataFromFile>\n",xmlnsprefix);
+    }
+    else if (H5Tget_class(type) == H5T_STRING) {
+        /* ????? */
+        indentation(indent);
+        HDfprintf(stdout, "<!-- String fill values not yet implemented. -->\n");
+        indentation(indent);
+        HDfprintf(stdout, "<%sNoData />\n",xmlnsprefix);
+    }
+    else {
         /* all other data */
         switch (H5Tget_class(type)) {
-            case H5T_INTEGER:
-                indentation(indent);
-                printf("<%sDataFromFile>\n",xmlnsprefix);
-                indentation(indent);
-                printf("\"%d\"\n",*(int *)buf);
-                indentation(indent);
-                printf("</%sDataFromFile>\n",xmlnsprefix);
-                break;
-            case H5T_FLOAT:
-                indentation(indent);
-                printf("<%sDataFromFile>\n",xmlnsprefix);
-                indentation(indent);
-                printf("\"%f\"\n",*(float *)buf);
-                indentation(indent);
-                printf("</%sDataFromFile>\n",xmlnsprefix);
-                break;
-            case H5T_BITFIELD:
-            case H5T_OPAQUE:
-                indentation(indent);
-                printf("<%sDataFromFile>\n",xmlnsprefix);
-                sz = H5Tget_size(type);
-                indentation(indent);
-                printf("\"");
-                for (i = 0; i < sz; i++) {
-                    printf("%x ",*(unsigned int *)buf);
-                    buf = (char *)buf + sizeof(unsigned int);
-                }
-                printf("\"\n");
-                indentation(indent);
-                printf("</%sDataFromFile>\n",xmlnsprefix);
-                break;
-            case H5T_ENUM:
-                indentation(indent);
-                printf("<%sDataFromFile>\n",xmlnsprefix);
-                name = H5Tget_member_name(type, *(unsigned *)buf);
-                indentation(indent);
-                printf("\"%s\"\n",name);
-                indentation(indent);
-                printf("</%sDataFromFile>\n",xmlnsprefix);
-                break;
-            case H5T_ARRAY:
-                indentation(indent);
-                printf("<!-- Array fill values not yet implemented. -->\n");
-                indentation(indent);
-                printf("<%sNoData />\n",xmlnsprefix);
-                break;
-            case H5T_TIME:
-                indentation(indent);
-                printf("<!-- Time fill not yet implemented. -->\n");
-                indentation(indent);
-                printf("<%sNoData />\n",xmlnsprefix);
-                break;
-            case H5T_COMPOUND:
-                indentation(indent);
-                printf("<!-- Compound fill not yet implemented. -->\n");
-                indentation(indent);
-                printf("<%sNoData />\n",xmlnsprefix);
-                break;
-            case H5T_VLEN:
-                indentation(indent);
-                printf("<!-- VL fill not yet implemented. -->\n");
-                indentation(indent);
-                printf("<%sNoData />\n",xmlnsprefix);
-                break;
-            default:
-                indentation(indent);
-                printf("<!-- Unknown fill datatype: %d -->\n", H5Tget_class(type));
-                indentation(indent);
-                printf("<%sNoData/>\n",xmlnsprefix);
-                break;
+        case H5T_INTEGER:
+            indentation(indent);
+            HDfprintf(stdout, "<%sDataFromFile>\n",xmlnsprefix);
+            indentation(indent);
+            HDfprintf(stdout, "\"%d\"\n",*(int *)buf);
+            indentation(indent);
+            HDfprintf(stdout, "</%sDataFromFile>\n",xmlnsprefix);
+            break;
+        case H5T_FLOAT:
+            indentation(indent);
+            HDfprintf(stdout, "<%sDataFromFile>\n",xmlnsprefix);
+            indentation(indent);
+            HDfprintf(stdout, "\"%f\"\n",*(float *)buf);
+            indentation(indent);
+            HDfprintf(stdout, "</%sDataFromFile>\n",xmlnsprefix);
+            break;
+        case H5T_BITFIELD:
+        case H5T_OPAQUE:
+            indentation(indent);
+            HDfprintf(stdout, "<%sDataFromFile>\n",xmlnsprefix);
+            sz = H5Tget_size(type);
+            indentation(indent);
+            HDfprintf(stdout, "\"");
+            for (i = 0; i < sz; i++) {
+                HDfprintf(stdout, "%x ",*(unsigned int *)buf);
+                buf = (char *)buf + sizeof(unsigned int);
+            }
+            HDfprintf(stdout, "\"\n");
+            indentation(indent);
+            HDfprintf(stdout, "</%sDataFromFile>\n",xmlnsprefix);
+            break;
+        case H5T_ENUM:
+            indentation(indent);
+            HDfprintf(stdout, "<%sDataFromFile>\n",xmlnsprefix);
+            name = H5Tget_member_name(type, *(unsigned *)buf);
+            indentation(indent);
+            HDfprintf(stdout, "\"%s\"\n",name);
+            indentation(indent);
+            HDfprintf(stdout, "</%sDataFromFile>\n",xmlnsprefix);
+            break;
+        case H5T_ARRAY:
+            indentation(indent);
+            HDfprintf(stdout, "<!-- Array fill values not yet implemented. -->\n");
+            indentation(indent);
+            HDfprintf(stdout, "<%sNoData />\n",xmlnsprefix);
+            break;
+        case H5T_TIME:
+            indentation(indent);
+            HDfprintf(stdout, "<!-- Time fill not yet implemented. -->\n");
+            indentation(indent);
+            HDfprintf(stdout, "<%sNoData />\n",xmlnsprefix);
+            break;
+        case H5T_COMPOUND:
+            indentation(indent);
+            HDfprintf(stdout, "<!-- Compound fill not yet implemented. -->\n");
+            indentation(indent);
+            HDfprintf(stdout, "<%sNoData />\n",xmlnsprefix);
+            break;
+        case H5T_VLEN:
+            indentation(indent);
+            HDfprintf(stdout, "<!-- VL fill not yet implemented. -->\n");
+            indentation(indent);
+            HDfprintf(stdout, "<%sNoData />\n",xmlnsprefix);
+            break;
+        default:
+            indentation(indent);
+            HDfprintf(stdout, "<!-- Unknown fill datatype: %d -->\n", H5Tget_class(type));
+            indentation(indent);
+            HDfprintf(stdout, "<%sNoData/>\n",xmlnsprefix);
+            break;
         }
     }
     free(buf);
     indent -= COL;
     indentation(indent);
-    printf("</%sData>\n",xmlnsprefix);
+    HDfprintf(stdout, "</%sData>\n",xmlnsprefix);
     indent -= COL;
 }
 
@@ -6816,7 +6907,8 @@ xml_dump_fill_value(hid_t dcpl, hid_t type)
 static void
 xml_dump_dataset(hid_t did, const char *name, struct subset_t UNUSED * sset)
 {
-    hid_t                   type, space;
+    hid_t               type;
+    hid_t               space;
     hid_t                   dcpl;
     H5D_fill_value_t        fvstatus;
     int                     maxdims;
@@ -6827,7 +6919,9 @@ xml_dump_dataset(hid_t did, const char *name, struct subset_t UNUSED * sset)
     H5D_fill_time_t        ft;
     hsize_t                 tempi;
     char                   *tmp;
-    char                   *t_name, *t_tmp, *t_prefix;
+    char               *t_name;
+    char               *t_tmp;
+    char               *t_prefix;
     unsigned                attr_crt_order_flags;
     char *rstr = (char *)HDmalloc(100);
     char *pstr = (char *)HDmalloc(100);
@@ -6844,8 +6938,9 @@ xml_dump_dataset(hid_t did, const char *name, struct subset_t UNUSED * sset)
 
     xml_name_to_XID(tmp, rstr, 100, 1);
     xml_name_to_XID(prefix, pstr, 100, 1);
-    printf("<%sDataset Name=\"%s\" OBJ-XID=\"%s\" H5Path= \"%s\" Parents=\"%s\" H5ParentPaths=\"%s\">\n",xmlnsprefix,
-       t_name, rstr, t_tmp, pstr, strcmp(prefix, "") ? t_prefix : "/");
+    HDfprintf(stdout, "<%sDataset Name=\"%s\" OBJ-XID=\"%s\" H5Path= \"%s\" Parents=\"%s\" H5ParentPaths=\"%s\">\n",
+            xmlnsprefix, t_name, rstr, t_tmp, pstr,
+            strcmp(prefix, "") ? t_prefix : "/");
 
     HDfree(t_name);
     HDfree(t_tmp);
@@ -6858,7 +6953,7 @@ xml_dump_dataset(hid_t did, const char *name, struct subset_t UNUSED * sset)
     type = H5Dget_type(did);
     space = H5Dget_space(did);
 
-     /* query the creation properties for attributes */
+    /* query the creation properties for attributes */
     H5Pget_attr_creation_order(dcpl, &attr_crt_order_flags);
 
     /* Print information about storage layout */
@@ -6867,60 +6962,61 @@ xml_dump_dataset(hid_t did, const char *name, struct subset_t UNUSED * sset)
         chsize = (hsize_t *)malloc(maxdims * sizeof(hsize_t));
         indent += COL;
         indentation(indent);
-        printf("<%sStorageLayout>\n",xmlnsprefix);
+        HDfprintf(stdout, "<%sStorageLayout>\n",xmlnsprefix);
         indent += COL;
         indentation(indent);
-        printf("<%sChunkedLayout ",xmlnsprefix);
+        HDfprintf(stdout, "<%sChunkedLayout ",xmlnsprefix);
         ndims = H5Pget_chunk(dcpl, maxdims, chsize);
-        printf("Ndims=\"%d\">\n", ndims);
+        HDfprintf(stdout, "Ndims=\"%d\">\n", ndims);
 
         indent += COL;
 
         for (i = 0; i < ndims; i++) {
             indentation(indent);
-            HDfprintf(stdout, "<%sChunkDimension DimSize=\"%Hu\" />\n",
-                   xmlnsprefix, chsize[i]);
+            HDfprintf(stdout, "<%sChunkDimension DimSize=\"%Hu\" />\n", xmlnsprefix, chsize[i]);
         }
 
         indentation(indent);
-        printf("<%sRequiredFilter>\n",xmlnsprefix);
+        HDfprintf(stdout, "<%sRequiredFilter>\n",xmlnsprefix);
         indent += COL;
         check_filters(dcpl);
         indent -= COL;
         indentation(indent);
-        printf("</%sRequiredFilter>\n",xmlnsprefix);
+        HDfprintf(stdout, "</%sRequiredFilter>\n",xmlnsprefix);
 
         indent -= COL;
 
         indentation(indent);
-        printf("</%sChunkedLayout>\n",xmlnsprefix);
+        HDfprintf(stdout, "</%sChunkedLayout>\n",xmlnsprefix);
         indent -= COL;
         indentation(indent);
-        printf("</%sStorageLayout>\n",xmlnsprefix);
+        HDfprintf(stdout, "</%sStorageLayout>\n",xmlnsprefix);
         indent -= COL;
         free(chsize);
-    } else if (H5D_CONTIGUOUS == H5Pget_layout(dcpl)) {
+    }
+    else if (H5D_CONTIGUOUS == H5Pget_layout(dcpl)) {
         indent += COL;
         indentation(indent);
-        printf("<%sStorageLayout>\n",xmlnsprefix);
+        HDfprintf(stdout, "<%sStorageLayout>\n",xmlnsprefix);
         indent += COL;
         indentation(indent);
-        printf("<%sContiguousLayout/>\n",xmlnsprefix);
+        HDfprintf(stdout, "<%sContiguousLayout/>\n",xmlnsprefix);
         indent -= COL;
         indentation(indent);
-        printf("</%sStorageLayout>\n",xmlnsprefix);
+        HDfprintf(stdout, "</%sStorageLayout>\n",xmlnsprefix);
         indent -= COL;
         indentation(indent);
-    } else if (H5D_COMPACT == H5Pget_layout(dcpl)) {
+    }
+    else if (H5D_COMPACT == H5Pget_layout(dcpl)) {
         indent += COL;
         indentation(indent);
-        printf("<%sStorageLayout>\n",xmlnsprefix);
+        HDfprintf(stdout, "<%sStorageLayout>\n",xmlnsprefix);
         indent += COL;
         indentation(indent);
-        printf("<%sCompactLayout/>\n",xmlnsprefix);
+        HDfprintf(stdout, "<%sCompactLayout/>\n",xmlnsprefix);
         indent -= COL;
         indentation(indent);
-        printf("</%sStorageLayout>\n",xmlnsprefix);
+        HDfprintf(stdout, "</%sStorageLayout>\n",xmlnsprefix);
         indent -= COL;
         indentation(indent);
     }
@@ -6930,64 +7026,65 @@ xml_dump_dataset(hid_t did, const char *name, struct subset_t UNUSED * sset)
 
     indent += COL;
     indentation(indent);
-    printf("<%sFillValueInfo ",xmlnsprefix);
+    HDfprintf(stdout, "<%sFillValueInfo ",xmlnsprefix);
     H5Pget_fill_time(dcpl, &ft);
-    printf("FillTime=\"");
+    HDfprintf(stdout, "FillTime=\"");
     switch ( ft ) {
-        case H5D_FILL_TIME_ALLOC:
-            printf("FillOnAlloc");
-            break;
-        case H5D_FILL_TIME_NEVER:
-            printf("FillNever");
-            break;
-        case H5D_FILL_TIME_IFSET:
-            printf("FillIfSet");
-            break;
-        default:
-            printf("?");
-            break;
+    case H5D_FILL_TIME_ALLOC:
+        HDfprintf(stdout, "FillOnAlloc");
+        break;
+    case H5D_FILL_TIME_NEVER:
+        HDfprintf(stdout, "FillNever");
+        break;
+    case H5D_FILL_TIME_IFSET:
+        HDfprintf(stdout, "FillIfSet");
+        break;
+    default:
+        HDfprintf(stdout, "?");
+        break;
     }
-    printf("\" ");
+    HDfprintf(stdout, "\" ");
     H5Pget_alloc_time(dcpl, &at);
-    printf("AllocationTime=\"");
+    HDfprintf(stdout, "AllocationTime=\"");
     switch ( at ) {
-        case H5D_ALLOC_TIME_EARLY:
-            printf("Early");
-            break;
-        case H5D_ALLOC_TIME_INCR:
-            printf("Incremental");
-            break;
-        case H5D_ALLOC_TIME_LATE:
-            printf("Late");
-            break;
-        case H5D_ALLOC_TIME_DEFAULT:
-        default:
-            printf("?");
-            break;
+    case H5D_ALLOC_TIME_EARLY:
+        HDfprintf(stdout, "Early");
+        break;
+    case H5D_ALLOC_TIME_INCR:
+        HDfprintf(stdout, "Incremental");
+        break;
+    case H5D_ALLOC_TIME_LATE:
+        HDfprintf(stdout, "Late");
+        break;
+    case H5D_ALLOC_TIME_DEFAULT:
+    default:
+        HDfprintf(stdout, "?");
+        break;
     }
-    printf("\"");
-    printf(">\n");
+    HDfprintf(stdout, "\"");
+    HDfprintf(stdout, ">\n");
 
     indent += COL;
     indentation(indent);
-    printf("<%sFillValue>\n",xmlnsprefix);
+    HDfprintf(stdout, "<%sFillValue>\n",xmlnsprefix);
     indent += COL;
     H5Pfill_value_defined(dcpl, &fvstatus);
     if (fvstatus == H5D_FILL_VALUE_UNDEFINED ||
             (fvstatus==H5D_FILL_VALUE_DEFAULT && ft==H5D_FILL_TIME_IFSET)) {
         indentation(indent + COL);
-        printf("<%sNoFill/>\n",xmlnsprefix);
-    } else {
+        HDfprintf(stdout, "<%sNoFill/>\n",xmlnsprefix);
+    }
+    else {
         xml_dump_fill_value(dcpl,type);
     }
 
     indent -= COL;
     indentation(indent);
-    printf("</%sFillValue>\n",xmlnsprefix);
+    HDfprintf(stdout, "</%sFillValue>\n",xmlnsprefix);
 
     indent -= COL;
     indentation(indent);
-    printf("</%sFillValueInfo>\n",xmlnsprefix);
+    HDfprintf(stdout, "</%sFillValueInfo>\n",xmlnsprefix);
     indent -= COL;
 
     dump_function_table->dump_dataspace_function(space);
@@ -7013,83 +7110,85 @@ xml_dump_dataset(hid_t did, const char *name, struct subset_t UNUSED * sset)
 
     if (display_data && (tempi > 0)) {
         switch (H5Tget_class(type)) {
-            case H5T_INTEGER:
-            case H5T_FLOAT:
-            case H5T_STRING:
-            case H5T_BITFIELD:
-            case H5T_OPAQUE:
-            case H5T_ENUM:
-            case H5T_ARRAY:
-                dump_function_table->dump_data_function(did, DATASET_DATA, NULL, 0);
-                break;
+        case H5T_INTEGER:
+        case H5T_FLOAT:
+        case H5T_STRING:
+        case H5T_BITFIELD:
+        case H5T_OPAQUE:
+        case H5T_ENUM:
+        case H5T_ARRAY:
+            dump_function_table->dump_data_function(did, DATASET_DATA, NULL, 0);
+            break;
 
-            case H5T_TIME:
-                indent += COL;
-                indentation(indent);
-                printf("<%sData>\n",xmlnsprefix);
-                indentation(indent);
-                printf("<!-- Time data not yet implemented. -->\n");
-                indentation(indent);
-                printf("<%sNoData />\n",xmlnsprefix);
-                indentation(indent);
-                printf("<%sData>\n",xmlnsprefix);
-                indent -= COL;
-                break;
+        case H5T_TIME:
+            indent += COL;
+            indentation(indent);
+            HDfprintf(stdout, "<%sData>\n",xmlnsprefix);
+            indentation(indent);
+            HDfprintf(stdout, "<!-- Time data not yet implemented. -->\n");
+            indentation(indent);
+            HDfprintf(stdout, "<%sNoData />\n",xmlnsprefix);
+            indentation(indent);
+            HDfprintf(stdout, "<%sData>\n",xmlnsprefix);
+            indent -= COL;
+            break;
 
-            case H5T_COMPOUND:
-                indentation(indent);
-                printf("<!-- Note: format of compound data not specified -->\n");
-                dump_function_table->dump_data_function(did, DATASET_DATA, NULL, 0);
-                break;
+        case H5T_COMPOUND:
+            indentation(indent);
+            HDfprintf(stdout, "<!-- Note: format of compound data not specified -->\n");
+            dump_function_table->dump_data_function(did, DATASET_DATA, NULL, 0);
+            break;
 
-            case H5T_REFERENCE:
-                indentation(indent);
-                printf("<%sData>\n",xmlnsprefix);
+        case H5T_REFERENCE:
+            indentation(indent);
+            HDfprintf(stdout, "<%sData>\n",xmlnsprefix);
+            indentation(indent);
+            if (!H5Tequal(type, H5T_STD_REF_OBJ)) {
+                HDfprintf(stdout, "<!-- Note: Region references not supported -->\n");
                 indentation(indent);
-                if (!H5Tequal(type, H5T_STD_REF_OBJ)) {
-                    printf("<!-- Note: Region references not supported -->\n");
-                    indentation(indent);
-                    printf("<%sNoData />\n",xmlnsprefix);
-                } else {
-                    printf("<%sDataFromFile>\n",xmlnsprefix);
-                    xml_print_refs(did, DATASET_DATA);
-                    indentation(indent);
-                    printf("</%sDataFromFile>\n",xmlnsprefix);
-                }
+                HDfprintf(stdout, "<%sNoData />\n",xmlnsprefix);
+            }
+            else {
+                HDfprintf(stdout, "<%sDataFromFile>\n",xmlnsprefix);
+                xml_print_refs(did, DATASET_DATA);
                 indentation(indent);
-                printf("</%sData>\n",xmlnsprefix);
-                break;
+                HDfprintf(stdout, "</%sDataFromFile>\n",xmlnsprefix);
+            }
+            indentation(indent);
+            HDfprintf(stdout, "</%sData>\n",xmlnsprefix);
+            break;
 
-            case H5T_VLEN:
-                printf("<!-- Note: format of VL data not specified -->\n");
-                dump_function_table->dump_data_function(did, DATASET_DATA, NULL, 0);
-                break;
-            default:
-                indentation(indent);
-                printf("<%sData>\n",xmlnsprefix);
-                indentation(indent);
-                printf("<!-- Unknown datatype: %d -->\n", H5Tget_class(type));
-                indentation(indent);
-                printf("<%sNoData/>\n",xmlnsprefix);
-                indentation(indent);
-                printf("</%sData>\n",xmlnsprefix);
-                break;
+        case H5T_VLEN:
+            HDfprintf(stdout, "<!-- Note: format of VL data not specified -->\n");
+            dump_function_table->dump_data_function(did, DATASET_DATA, NULL, 0);
+            break;
+        default:
+            indentation(indent);
+            HDfprintf(stdout, "<%sData>\n",xmlnsprefix);
+            indentation(indent);
+            HDfprintf(stdout, "<!-- Unknown datatype: %d -->\n", H5Tget_class(type));
+            indentation(indent);
+            HDfprintf(stdout, "<%sNoData/>\n",xmlnsprefix);
+            indentation(indent);
+            HDfprintf(stdout, "</%sData>\n",xmlnsprefix);
+            break;
         }
-    } else {
+    }
+    else {
         /* no data written */
         indentation(indent + COL);
-        printf("<%sData>\n",xmlnsprefix);
+        HDfprintf(stdout, "<%sData>\n",xmlnsprefix);
         indentation(indent + COL + COL);
-        printf("<%sNoData/>\n",xmlnsprefix);
+        HDfprintf(stdout, "<%sNoData/>\n",xmlnsprefix);
         indentation(indent + COL);
-        printf("</%sData>\n",xmlnsprefix);
+        HDfprintf(stdout, "</%sData>\n",xmlnsprefix);
     }
 
     H5Tclose(type);
     H5Sclose(space);
     H5Pclose(dcpl);
     indentation(indent);
-    printf("</%sDataset>\n", xmlnsprefix);
+    HDfprintf(stdout, "</%sDataset>\n", xmlnsprefix);
 }
 
 /*-------------------------------------------------------------------------
@@ -7122,10 +7221,10 @@ xml_print_enum(hid_t type)
     super = H5Tget_super(type);
 
     indentation(indent);
-    printf("<%sDataType>\n",xmlnsprefix);
+    HDfprintf(stdout, "<%sDataType>\n",xmlnsprefix);
     xml_print_datatype(super,0);
     indentation(indent);
-    printf("</%sDataType>\n",xmlnsprefix);
+    HDfprintf(stdout, "</%sDataType>\n",xmlnsprefix);
 
     /*
      * Determine what datatype to use for the native values.  To simplify
@@ -7139,10 +7238,12 @@ xml_print_enum(hid_t type)
 
         if (H5T_SGN_NONE == H5Tget_sign(type)) {
             native = H5T_NATIVE_ULLONG;
-        } else {
+        } 
+        else {
             native = H5T_NATIVE_LLONG;
         }
-    } else {
+    } 
+    else {
         dst_size = H5Tget_size(type);
     }
 
@@ -7168,30 +7269,32 @@ xml_print_enum(hid_t type)
         char *t_name = xml_escape_the_name(name[i]);
 
         indentation(indent);
-        printf("<%sEnumElement>\n",xmlnsprefix);
+        HDfprintf(stdout, "<%sEnumElement>\n",xmlnsprefix);
         indentation(indent + COL);
-        printf("%s\n", t_name);
+        HDfprintf(stdout, "%s\n", t_name);
         free(t_name);
         indentation(indent);
-        printf("</%sEnumElement>\n",xmlnsprefix);
+        HDfprintf(stdout, "</%sEnumElement>\n",xmlnsprefix);
         indentation(indent);
-        printf("<%sEnumValue>\n",xmlnsprefix);
+        HDfprintf(stdout, "<%sEnumValue>\n",xmlnsprefix);
         indentation(indent + COL);
         if (native < 0) {
-            printf("0x");
+            HDfprintf(stdout, "0x");
 
             for (j = 0; j < dst_size; j++)
-                printf("%02x", value[i * dst_size + j]);
-        } else if (H5T_SGN_NONE == H5Tget_sign(native)) {
+                HDfprintf(stdout, "%02x", value[i * dst_size + j]);
+        } 
+        else if (H5T_SGN_NONE == H5Tget_sign(native)) {
             HDfprintf(stdout,"%" H5_PRINTF_LL_WIDTH "u", *((unsigned long long *)
-                              ((void *) (value + i * dst_size))));
-        } else {
+                    ((void *) (value + i * dst_size))));
+        } 
+        else {
             HDfprintf(stdout,"%" H5_PRINTF_LL_WIDTH "d",
-               *((long long *) ((void *) (value + i * dst_size))));
+                    *((long long *) ((void *) (value + i * dst_size))));
         }
-        printf("\n");
+        HDfprintf(stdout, "\n");
         indentation(indent);
-        printf("</%sEnumValue>\n",xmlnsprefix);
+        HDfprintf(stdout, "</%sEnumValue>\n",xmlnsprefix);
 
     }
     indent -= COL;
@@ -7249,26 +7352,28 @@ h5_fileaccess(void)
     if (!HDstrcmp(name, "sec2")) {
         /* Unix read() and write() system calls */
         if (H5Pset_fapl_sec2(fapl)<0) return -1;
-    } else if (!HDstrcmp(name, "stdio")) {
+    } 
+    else if (!HDstrcmp(name, "stdio")) {
         /* Standard C fread() and fwrite() system calls */
         if (H5Pset_fapl_stdio(fapl)<0) return -1;
-    } else if (!HDstrcmp(name, "core")) {
+    } 
+    else if (!HDstrcmp(name, "core")) {
         /* In-core temporary file with 1MB increment */
         if (H5Pset_fapl_core(fapl, 1024*1024, FALSE)<0) return -1;
-    } else if (!HDstrcmp(name, "split")) {
+    } 
+    else if (!HDstrcmp(name, "split")) {
         /* Split meta data and raw data each using default driver */
-        if (H5Pset_fapl_split(fapl,
-                  "-m.h5", H5P_DEFAULT,
-                  "-r.h5", H5P_DEFAULT)<0)
-        return -1;
-    } else if (!HDstrcmp(name, "multi")) {
+        if (H5Pset_fapl_split(fapl, "-m.h5", H5P_DEFAULT, "-r.h5", H5P_DEFAULT)<0)
+            return -1;
+    } 
+    else if (!HDstrcmp(name, "multi")) {
         /* Multi-file driver, general case of the split driver */
         H5FD_mem_t memb_map[H5FD_MEM_NTYPES];
         hid_t memb_fapl[H5FD_MEM_NTYPES];
         const char *memb_name[H5FD_MEM_NTYPES];
         char sv[H5FD_MEM_NTYPES][1024];
         haddr_t memb_addr[H5FD_MEM_NTYPES];
-            H5FD_mem_t  mt;
+        H5FD_mem_t  mt;
 
         HDmemset(memb_map, 0, sizeof memb_map);
         HDmemset(memb_fapl, 0, sizeof memb_fapl);
@@ -7278,24 +7383,25 @@ h5_fileaccess(void)
         assert(HDstrlen(multi_letters)==H5FD_MEM_NTYPES);
         for (mt=H5FD_MEM_DEFAULT; mt<H5FD_MEM_NTYPES; H5_INC_ENUM(H5FD_mem_t,mt)) {
             memb_fapl[mt] = H5P_DEFAULT;
-                memb_map[mt] = mt;
+            memb_map[mt] = mt;
             sprintf(sv[mt], "%%s-%c.h5", multi_letters[mt]);
             memb_name[mt] = sv[mt];
             memb_addr[mt] = MAX(mt-1,0)*(HADDR_MAX/10);
         }
 
-        if (H5Pset_fapl_multi(fapl, memb_map, memb_fapl, memb_name,
-                      memb_addr, FALSE) < 0)
+        if (H5Pset_fapl_multi(fapl, memb_map, memb_fapl, memb_name, memb_addr, FALSE) < 0)
             return -1;
-    } else if (!HDstrcmp(name, "family")) {
+    } 
+    else if (!HDstrcmp(name, "family")) {
         hsize_t fam_size = 100*1024*1024; /*100 MB*/
 
         /* Family of files, each 1MB and using the default driver */
         if ((val=HDstrtok(NULL, " \t\n\r")))
             fam_size = (hsize_t)(HDstrtod(val, NULL) * 1024*1024);
         if (H5Pset_fapl_family(fapl, fam_size, H5P_DEFAULT)<0)
-                return -1;
-    } else if (!HDstrcmp(name, "log")) {
+            return -1;
+    } 
+    else if (!HDstrcmp(name, "log")) {
         long log_flags = H5FD_LOG_LOC_IO;
 
         /* Log file access */
@@ -7304,11 +7410,13 @@ h5_fileaccess(void)
 
         if (H5Pset_fapl_log(fapl, NULL, (unsigned)log_flags, 0) < 0)
             return -1;
-    } else if (!HDstrcmp(name, "direct")) {
+    } 
+    else if (!HDstrcmp(name, "direct")) {
         /* Substitute Direct I/O driver with sec2 driver temporarily because
          * some output has sec2 driver as the standard. */
         if (H5Pset_fapl_sec2(fapl)<0) return -1;
-    } else {
+    } 
+    else {
         /* Unknown driver */
         return -1;
     }
@@ -7316,7 +7424,7 @@ h5_fileaccess(void)
     return fapl;
 }
 
-
+
 /*-------------------------------------------------------------------------
  * Function:    init_prefix
  *
@@ -7335,7 +7443,7 @@ init_prefix(char **prfx, size_t prfx_len)
     *prfx = (char *)HDcalloc(prfx_len, 1);
 }
 
-
+
 /*-------------------------------------------------------------------------
  * Function:    add_prefix
  *
@@ -7427,17 +7535,17 @@ static int dump_extlink(hid_t group, const char *linkname, const char *objname)
 
         /* Recurse into the external file */
         switch (oi.type) {
-            case H5O_TYPE_GROUP:
-                handle_groups(group, linkname, NULL, 0, objname);
-                break;
-            case H5O_TYPE_DATASET:
-                handle_datasets(group, linkname, NULL, 0, objname);
-                break;
-            case H5O_TYPE_NAMED_DATATYPE:
-                handle_datatypes(group, linkname, NULL, 0, objname);
-                break;
-            default:
-                h5tools_setstatus(EXIT_FAILURE);
+        case H5O_TYPE_GROUP:
+            handle_groups(group, linkname, NULL, 0, objname);
+            break;
+        case H5O_TYPE_DATASET:
+            handle_datasets(group, linkname, NULL, 0, objname);
+            break;
+        case H5O_TYPE_NAMED_DATATYPE:
+            handle_datatypes(group, linkname, NULL, 0, objname);
+            break;
+        default:
+            h5tools_setstatus(EXIT_FAILURE);
         }
 
         indent -= 2*COL;
@@ -7457,7 +7565,7 @@ static int dump_extlink(hid_t group, const char *linkname, const char *objname)
 
     return SUCCEED;
 
-fail:
+    fail:
 
     return FAIL;
 
diff --git a/tools/h5dump/h5dump.h b/tools/h5dump/h5dump.h
index 3e34538..be77002 100644
--- a/tools/h5dump/h5dump.h
+++ b/tools/h5dump/h5dump.h
@@ -69,11 +69,9 @@
 #define EXTERNAL_FILE   "EXTERNAL_FILE"
 #define FILLVALUE       "FILLVALUE"
 #define FILE_CONTENTS   "FILE_CONTENTS"
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
 #define PACKED_BITS     "PACKED_BITS"
 #define PACKED_OFFSET   "OFFSET"
 #define PACKED_LENGTH   "LENGTH"
-#endif
 
 #define BEGIN           "{"
 #define END             "}"
diff --git a/tools/h5dump/h5dumpgentest.c b/tools/h5dump/h5dumpgentest.c
index 848006e..ab67db8 100644
--- a/tools/h5dump/h5dumpgentest.c
+++ b/tools/h5dump/h5dumpgentest.c
@@ -96,6 +96,7 @@
 #define FILE64  "tarray8.h5"
 #define FILE65  "tattrreg.h5"
 #define FILE66  "packedbits.h5"
+#define FILE67  "zerodim.h5"
 
 
 
@@ -177,6 +178,11 @@ const H5L_class_t UD_link_class[1] = {{
 #define CDIM2 DIM2/2
 #define RANK  2
 
+/* Dataspace of 0 dimension size */
+#define SPACE3_RANK 2
+#define SPACE3_DIM1 0
+#define SPACE3_DIM2 0
+
 /* Element selection information */
 #define POINT1_NPOINTS 10
 
@@ -5094,7 +5100,41 @@ static void gent_null_space(void)
     H5Fclose(fid);
 }
 
+/*-------------------------------------------------------------------------
+ * Function: gent_zero_dim_size
+ *
+ * Purpose: generates dataset and attribute with dataspace of 0 dimension size
+ *-------------------------------------------------------------------------
+ */
+static void gent_zero_dim_size(void)
+{
+    hid_t fid, root, dataset, space, attr;
+    hsize_t	dims1[] = {SPACE3_DIM1, SPACE3_DIM2};
+    int dset_buf = 10;
+    int point = 4;
+
+    fid = H5Fcreate(FILE67, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
+    root = H5Gopen2(fid, "/", H5P_DEFAULT);
+
+    /* dataspace of 0 dimension size */
+    space = H5Screate_simple(SPACE3_RANK, dims1, NULL);
+
+    /* dataset */
+    dataset = H5Dcreate2(fid, "dset of 0 dimension size", H5T_STD_I32BE, space, H5P_DEFAULT, 
+                         H5P_DEFAULT, H5P_DEFAULT);
+    /* nothing should be written */
+    H5Dwrite(dataset, H5T_NATIVE_INT, H5S_ALL, H5S_ALL, H5P_DEFAULT, &dset_buf);
 
+    /* attribute */
+    attr = H5Acreate2(root, "attr of 0 dimension size", H5T_NATIVE_UINT, space, H5P_DEFAULT, H5P_DEFAULT);
+    H5Awrite(attr, H5T_NATIVE_INT, &point); /* Nothing can be written */
+
+    H5Dclose(dataset);
+    H5Aclose(attr);
+    H5Gclose(root);
+    H5Sclose(space);
+    H5Fclose(fid);
+}
 
 /*-------------------------------------------------------------------------
  * Function: make_dset
@@ -6847,6 +6887,11 @@ gent_extlinks(void)
  H5Lcreate_external(FILE62, "type", source_fid, "ext_link3", H5P_DEFAULT, H5P_DEFAULT);
  H5Lcreate_external(FILE62, "group/elink_t2", source_fid, "ext_link4", H5P_DEFAULT, H5P_DEFAULT);
  H5Lcreate_external(FILE62, "empty_group", source_fid, "ext_link5", H5P_DEFAULT, H5P_DEFAULT);
+/* external link to soft link which linked to a dataset */
+ H5Lcreate_external(FILE4_1, "/soft_dset1", source_fid, "ext2soft_link1", H5P_DEFAULT, H5P_DEFAULT);
+
+/* external link to dangle soft link  */
+ H5Lcreate_external(FILE4_1, "/soft_dangle", source_fid, "ext2softdangle_link1", H5P_DEFAULT, H5P_DEFAULT);
 
 /*-------------------------------------------------------------------------
  * create external link in the "far" file pointing to the source file
@@ -7109,6 +7154,7 @@ int main(void)
     gent_compound_complex();
     gent_named_dtype_attr();
     gent_null_space();
+    gent_zero_dim_size();
 
     gent_filters();
     gent_fvalues();
diff --git a/tools/h5dump/testh5dump.sh.in b/tools/h5dump/testh5dump.sh.in
index 581d19a..3761005 100644
--- a/tools/h5dump/testh5dump.sh.in
+++ b/tools/h5dump/testh5dump.sh.in
@@ -23,16 +23,12 @@ USE_FILTER_FLETCHER32="@USE_FILTER_FLETCHER32@"
 USE_FILTER_NBIT="@USE_FILTER_NBIT@"
 USE_FILTER_SCALEOFFSET="@USE_FILTER_SCALEOFFSET@"
 
-# Determine if H5dump packed bits feature is included
-Have_Packed_Bits="@PACKED_BITS@"
-
 TESTNAME=h5dump
 EXIT_SUCCESS=0
 EXIT_FAILURE=1
 
 DUMPER=h5dump                     # The tool name
 DUMPER_BIN=`pwd`/$DUMPER          # The path of the tool binary
-TESTDIR=`pwd`/../testfiles
 
 H5DIFF=../h5diff/h5diff           # The h5diff tool name 
 H5DIFF_BIN=`pwd`/$H5DIFF          # The path of the h5diff  tool binary
@@ -43,6 +39,7 @@ H5IMPORT_BIN=`pwd`/$H5IMPORT      # The path of the h5import  tool binary
 
 CMP='cmp -s'
 DIFF='diff -c'
+CP='cp'
 
 nerrors=0
 verbose=yes
@@ -51,9 +48,409 @@ verbose=yes
 if test -z "$srcdir"; then
    srcdir=.
 fi
-
+# source dirs
+SRC_TOOLS="$srcdir/../"
+SRC_TOOLS_TESTFILES="$SRC_TOOLS/testfiles"
+# testfiles source dirs for tools
+SRC_H5LS_TESTFILES="$SRC_TOOLS_TESTFILES"
+SRC_H5DUMP_TESTFILES="$SRC_TOOLS_TESTFILES"
+SRC_H5DIFF_TESTFILES="$SRC_TOOLS/h5diff/testfiles"
+SRC_H5COPY_TESTFILES="$SRC_TOOLS/h5copy/testfiles"
+SRC_H5REPACK_TESTFILES="$SRC_TOOLS/h5repack/testfiles"
+SRC_H5JAM_TESTFILES="$SRC_TOOLS/h5jam/testfiles"
+SRC_H5STAT_TESTFILES="$SRC_TOOLS/h5stat/testfiles"
+SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/h5import/testfiles"
+
+TESTDIR=./testfiles
 test -d $TESTDIR || mkdir $TESTDIR
 
+######################################################################
+# test files
+# --------------------------------------------------------------------
+# All the test files copy from source directory to test directory
+# NOTE: Keep this framework to add/remove test files.
+#       Any test files from other tools can be used in this framework.
+#       This list are also used for checking exist.
+#       Comment '#' without space can be used.
+# --------------------------------------------------------------------
+LIST_HDF5_TEST_FILES="
+$SRC_H5DUMP_TESTFILES/filter_fail.h5
+$SRC_H5DUMP_TESTFILES/packedbits.h5
+$SRC_H5DUMP_TESTFILES/taindices.h5
+$SRC_H5DUMP_TESTFILES/tall.h5
+$SRC_H5DUMP_TESTFILES/tarray1.h5
+$SRC_H5DUMP_TESTFILES/tarray1_big.h5
+$SRC_H5DUMP_TESTFILES/tarray2.h5
+$SRC_H5DUMP_TESTFILES/tarray3.h5
+$SRC_H5DUMP_TESTFILES/tarray4.h5
+$SRC_H5DUMP_TESTFILES/tarray5.h5
+$SRC_H5DUMP_TESTFILES/tarray6.h5
+$SRC_H5DUMP_TESTFILES/tarray7.h5
+$SRC_H5DUMP_TESTFILES/tarray8.h5
+$SRC_H5DUMP_TESTFILES/tattr.h5
+$SRC_H5DUMP_TESTFILES/tattr2.h5
+$SRC_H5DUMP_TESTFILES/tattrreg.h5
+$SRC_H5DUMP_TESTFILES/tbigdims.h5
+$SRC_H5DUMP_TESTFILES/tbinary.h5
+$SRC_H5DUMP_TESTFILES/tchar.h5
+$SRC_H5DUMP_TESTFILES/tcompound.h5
+$SRC_H5DUMP_TESTFILES/tcompound_complex.h5
+$SRC_H5DUMP_TESTFILES/tdatareg.h5
+$SRC_H5DUMP_TESTFILES/tdset.h5
+$SRC_H5DUMP_TESTFILES/tempty.h5
+$SRC_H5DUMP_TESTFILES/tsoftlinks.h5
+$SRC_H5DUMP_TESTFILES/textlinkfar.h5
+$SRC_H5DUMP_TESTFILES/textlinksrc.h5
+$SRC_H5DUMP_TESTFILES/textlinktar.h5
+$SRC_H5DUMP_TESTFILES/textlink.h5
+$SRC_H5DUMP_TESTFILES/tfamily00000.h5
+$SRC_H5DUMP_TESTFILES/tfamily00001.h5
+$SRC_H5DUMP_TESTFILES/tfamily00002.h5
+$SRC_H5DUMP_TESTFILES/tfamily00003.h5
+$SRC_H5DUMP_TESTFILES/tfamily00004.h5
+$SRC_H5DUMP_TESTFILES/tfamily00005.h5
+$SRC_H5DUMP_TESTFILES/tfamily00006.h5
+$SRC_H5DUMP_TESTFILES/tfamily00007.h5
+$SRC_H5DUMP_TESTFILES/tfamily00008.h5
+$SRC_H5DUMP_TESTFILES/tfamily00009.h5
+$SRC_H5DUMP_TESTFILES/tfamily00010.h5
+$SRC_H5DUMP_TESTFILES/tfcontents1.h5
+$SRC_H5DUMP_TESTFILES/tfcontents2.h5
+$SRC_H5DUMP_TESTFILES/tfilters.h5
+$SRC_H5DUMP_TESTFILES/tfpformat.h5
+$SRC_H5DUMP_TESTFILES/tfvalues.h5
+$SRC_H5DUMP_TESTFILES/tgroup.h5
+$SRC_H5DUMP_TESTFILES/tgrp_comments.h5
+$SRC_H5DUMP_TESTFILES/thlink.h5
+$SRC_H5DUMP_TESTFILES/thyperslab.h5
+$SRC_H5DUMP_TESTFILES/tlarge_objname.h5
+#$SRC_H5DUMP_TESTFILES/tldouble.h5
+$SRC_H5DUMP_TESTFILES/tlonglinks.h5
+$SRC_H5DUMP_TESTFILES/tloop.h5
+$SRC_H5DUMP_TESTFILES/tmulti-b.h5
+$SRC_H5DUMP_TESTFILES/tmulti-g.h5
+$SRC_H5DUMP_TESTFILES/tmulti-l.h5
+$SRC_H5DUMP_TESTFILES/tmulti-o.h5
+$SRC_H5DUMP_TESTFILES/tmulti-r.h5
+$SRC_H5DUMP_TESTFILES/tmulti-s.h5
+$SRC_H5DUMP_TESTFILES/tnamed_dtype_attr.h5
+$SRC_H5DUMP_TESTFILES/tnestedcomp.h5
+$SRC_H5DUMP_TESTFILES/tnullspace.h5
+$SRC_H5DUMP_TESTFILES/zerodim.h5
+$SRC_H5DUMP_TESTFILES/torderattr.h5
+$SRC_H5DUMP_TESTFILES/tordergr.h5
+$SRC_H5DUMP_TESTFILES/tsaf.h5
+$SRC_H5DUMP_TESTFILES/tslink.h5
+$SRC_H5DUMP_TESTFILES/tsplit_file-m.h5
+$SRC_H5DUMP_TESTFILES/tsplit_file-r.h5
+$SRC_H5DUMP_TESTFILES/tstr.h5
+$SRC_H5DUMP_TESTFILES/tstr2.h5
+$SRC_H5DUMP_TESTFILES/tstr3.h5
+$SRC_H5DUMP_TESTFILES/tudlink.h5
+$SRC_H5DUMP_TESTFILES/tvldtypes1.h5
+$SRC_H5DUMP_TESTFILES/tvldtypes2.h5
+$SRC_H5DUMP_TESTFILES/tvldtypes3.h5
+$SRC_H5DUMP_TESTFILES/tvldtypes4.h5
+$SRC_H5DUMP_TESTFILES/tvldtypes5.h5
+$SRC_H5DUMP_TESTFILES/tvlstr.h5
+$SRC_H5DUMP_TESTFILES/tvms.h5
+"
+
+LIST_OTHER_TEST_FILES="
+$SRC_H5DUMP_TESTFILES/filter_fail.ddl
+$SRC_H5DUMP_TESTFILES/packedbits.ddl
+$SRC_H5DUMP_TESTFILES/tall-1.ddl
+$SRC_H5DUMP_TESTFILES/tall-2.ddl
+$SRC_H5DUMP_TESTFILES/tall-2A.ddl
+$SRC_H5DUMP_TESTFILES/tall-2B.ddl
+$SRC_H5DUMP_TESTFILES/tall-3.ddl
+$SRC_H5DUMP_TESTFILES/tall-4s.ddl
+$SRC_H5DUMP_TESTFILES/tall-5s.ddl
+$SRC_H5DUMP_TESTFILES/tall-6.ddl
+$SRC_H5DUMP_TESTFILES/tallfilters.ddl
+$SRC_H5DUMP_TESTFILES/tarray1.ddl
+$SRC_H5DUMP_TESTFILES/tarray1_big.ddl
+$SRC_H5DUMP_TESTFILES/tarray2.ddl
+$SRC_H5DUMP_TESTFILES/tarray3.ddl
+$SRC_H5DUMP_TESTFILES/tarray4.ddl
+$SRC_H5DUMP_TESTFILES/tarray5.ddl
+$SRC_H5DUMP_TESTFILES/tarray6.ddl
+$SRC_H5DUMP_TESTFILES/tarray7.ddl
+$SRC_H5DUMP_TESTFILES/tarray8.ddl
+$SRC_H5DUMP_TESTFILES/tattr-1.ddl
+$SRC_H5DUMP_TESTFILES/tattr-2.ddl
+$SRC_H5DUMP_TESTFILES/tattr-3.ddl
+$SRC_H5DUMP_TESTFILES/tattrreg.ddl
+$SRC_H5DUMP_TESTFILES/tattrregR.ddl
+$SRC_H5DUMP_TESTFILES/tbin1.ddl
+$SRC_H5DUMP_TESTFILES/tbin1.ddl
+$SRC_H5DUMP_TESTFILES/tbin2.ddl
+$SRC_H5DUMP_TESTFILES/tbin3.ddl
+$SRC_H5DUMP_TESTFILES/tbin4.ddl
+$SRC_H5DUMP_TESTFILES/tbinregR.ddl
+$SRC_H5DUMP_TESTFILES/tbigdims.ddl
+$SRC_H5DUMP_TESTFILES/tboot1.ddl
+$SRC_H5DUMP_TESTFILES/tboot2.ddl
+$SRC_H5DUMP_TESTFILES/tchar1.ddl
+$SRC_H5DUMP_TESTFILES/tchunked.ddl
+$SRC_H5DUMP_TESTFILES/tcomp-1.ddl
+$SRC_H5DUMP_TESTFILES/tcomp-2.ddl
+$SRC_H5DUMP_TESTFILES/tcomp-3.ddl
+$SRC_H5DUMP_TESTFILES/tcomp-4.ddl
+$SRC_H5DUMP_TESTFILES/tcompact.ddl
+$SRC_H5DUMP_TESTFILES/tcontents.ddl
+$SRC_H5DUMP_TESTFILES/tcontiguos.ddl
+$SRC_H5DUMP_TESTFILES/tdatareg.ddl
+$SRC_H5DUMP_TESTFILES/tdataregR.ddl
+$SRC_H5DUMP_TESTFILES/tdeflate.ddl
+$SRC_H5DUMP_TESTFILES/tdset-1.ddl
+$SRC_H5DUMP_TESTFILES/tdset-2.ddl
+$SRC_H5DUMP_TESTFILES/tdset-3s.ddl
+$SRC_H5DUMP_TESTFILES/tempty.ddl
+$SRC_H5DUMP_TESTFILES/texceedsubstart.ddl
+$SRC_H5DUMP_TESTFILES/texceedsubcount.ddl
+$SRC_H5DUMP_TESTFILES/texceedsubstride.ddl
+$SRC_H5DUMP_TESTFILES/texceedsubblock.ddl
+$SRC_H5DUMP_TESTFILES/texternal.ddl
+$SRC_H5DUMP_TESTFILES/textlinksrc.ddl
+$SRC_H5DUMP_TESTFILES/textlinkfar.ddl
+$SRC_H5DUMP_TESTFILES/textlink.ddl
+$SRC_H5DUMP_TESTFILES/tfamily.ddl
+$SRC_H5DUMP_TESTFILES/tfill.ddl
+$SRC_H5DUMP_TESTFILES/tfletcher32.ddl
+$SRC_H5DUMP_TESTFILES/tfpformat.ddl
+$SRC_H5DUMP_TESTFILES/tgroup-1.ddl
+$SRC_H5DUMP_TESTFILES/tgroup-2.ddl
+$SRC_H5DUMP_TESTFILES/tgrp_comments.ddl
+$SRC_H5DUMP_TESTFILES/thlink-1.ddl
+$SRC_H5DUMP_TESTFILES/thlink-2.ddl
+$SRC_H5DUMP_TESTFILES/thlink-3.ddl
+$SRC_H5DUMP_TESTFILES/thlink-4.ddl
+$SRC_H5DUMP_TESTFILES/thlink-5.ddl
+$SRC_H5DUMP_TESTFILES/thyperslab.ddl
+$SRC_H5DUMP_TESTFILES/tindicesno.ddl
+$SRC_H5DUMP_TESTFILES/tindicessub1.ddl
+$SRC_H5DUMP_TESTFILES/tindicessub2.ddl
+$SRC_H5DUMP_TESTFILES/tindicessub3.ddl
+$SRC_H5DUMP_TESTFILES/tindicessub4.ddl
+$SRC_H5DUMP_TESTFILES/tindicesyes.ddl
+$SRC_H5DUMP_TESTFILES/tlarge_objname.ddl
+#$SRC_H5DUMP_TESTFILES/tldouble.ddl 
+$SRC_H5DUMP_TESTFILES/tlonglinks.ddl
+$SRC_H5DUMP_TESTFILES/tloop-1.ddl
+$SRC_H5DUMP_TESTFILES/tmulti.ddl
+$SRC_H5DUMP_TESTFILES/tnamed_dtype_attr.ddl
+$SRC_H5DUMP_TESTFILES/tnestcomp-1.ddl
+$SRC_H5DUMP_TESTFILES/tnbit.ddl
+$SRC_H5DUMP_TESTFILES/tnofilename.ddl
+$SRC_H5DUMP_TESTFILES/tnullspace.ddl
+$SRC_H5DUMP_TESTFILES/zerodim.ddl
+$SRC_H5DUMP_TESTFILES/tordergr1.ddl
+$SRC_H5DUMP_TESTFILES/tordergr2.ddl
+$SRC_H5DUMP_TESTFILES/tordergr3.ddl
+$SRC_H5DUMP_TESTFILES/tordergr4.ddl
+$SRC_H5DUMP_TESTFILES/tordergr5.ddl
+$SRC_H5DUMP_TESTFILES/torderattr1.ddl
+$SRC_H5DUMP_TESTFILES/torderattr2.ddl
+$SRC_H5DUMP_TESTFILES/torderattr3.ddl
+$SRC_H5DUMP_TESTFILES/torderattr4.ddl
+$SRC_H5DUMP_TESTFILES/tperror.ddl
+$SRC_H5DUMP_TESTFILES/treference.ddl
+$SRC_H5DUMP_TESTFILES/tsaf.ddl
+$SRC_H5DUMP_TESTFILES/tscaleoffset.ddl
+$SRC_H5DUMP_TESTFILES/tshuffle.ddl
+$SRC_H5DUMP_TESTFILES/tslink-1.ddl
+$SRC_H5DUMP_TESTFILES/tslink-2.ddl
+$SRC_H5DUMP_TESTFILES/tsplit_file.ddl
+$SRC_H5DUMP_TESTFILES/tstr-1.ddl
+$SRC_H5DUMP_TESTFILES/tstr-2.ddl
+$SRC_H5DUMP_TESTFILES/tstring.ddl
+$SRC_H5DUMP_TESTFILES/tstring2.ddl
+$SRC_H5DUMP_TESTFILES/tstringe.ddl
+$SRC_H5DUMP_TESTFILES/tszip.ddl
+$SRC_H5DUMP_TESTFILES/tudlink-1.ddl
+$SRC_H5DUMP_TESTFILES/tudlink-2.ddl
+$SRC_H5DUMP_TESTFILES/tuserfilter.ddl
+$SRC_H5DUMP_TESTFILES/tvldtypes1.ddl
+$SRC_H5DUMP_TESTFILES/tvldtypes2.ddl
+$SRC_H5DUMP_TESTFILES/tvldtypes3.ddl
+$SRC_H5DUMP_TESTFILES/tvldtypes4.ddl
+$SRC_H5DUMP_TESTFILES/tvldtypes5.ddl
+$SRC_H5DUMP_TESTFILES/tvlstr.ddl
+$SRC_H5DUMP_TESTFILES/tvms.ddl
+$SRC_H5DUMP_TESTFILES/h5dump-help.txt
+$SRC_H5DUMP_TESTFILES/out3.h5import
+$SRC_H5DUMP_TESTFILES/tpbitsArray.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsCompound.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsIncomplete.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsLengthExceeded.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsCharLengthExceeded.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsIntLengthExceeded.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsLongLengthExceeded.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsLengthPositive.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsMax.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsMaxExceeded.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsOffsetExceeded.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsCharOffsetExceeded.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsIntOffsetExceeded.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsLongOffsetExceeded.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsOffsetNegative.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsOverlapped.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSigned.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsigned.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSignedInt.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsignedInt.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSignedLong.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsignedLong.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSignedLongLong.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsignedLongLong.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSignedWhole.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsignedWhole.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSignedIntWhole.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsignedIntWhole.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSignedLongWhole.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsignedLongWhole.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSignedLongLongWhole.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsignedLongLongWhole.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSignedLongLongWhole1.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsignedLongLongWhole1.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSignedLongLongWhole63.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsignedLongLongWhole63.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSigned4.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsigned4.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSignedInt8.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsignedInt8.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSignedLong16.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsignedLong16.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSignedLongLong32.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsignedLongLong32.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSigned2.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsigned2.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSignedInt4.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsignedInt4.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSignedLong8.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsignedLong8.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsSignedLongLong16.ddl
+$SRC_H5DUMP_TESTFILES/tpbitsUnsignedLongLong16.ddl
+$SRC_H5DUMP_TESTFILES/tbinregR.exp
+"
+
+LIST_HDF5_TEST_FILES_XML="
+$SRC_H5DUMP_TESTFILES/tbitfields.h5
+$SRC_H5DUMP_TESTFILES/tcompound2.h5
+$SRC_H5DUMP_TESTFILES/tdset2.h5
+$SRC_H5DUMP_TESTFILES/tenum.h5
+$SRC_H5DUMP_TESTFILES/textlink.h5
+$SRC_H5DUMP_TESTFILES/tloop2.h5
+$SRC_H5DUMP_TESTFILES/tmany.h5
+$SRC_H5DUMP_TESTFILES/tname-amp.h5
+$SRC_H5DUMP_TESTFILES/tname-apos.h5
+$SRC_H5DUMP_TESTFILES/tname-gt.h5
+$SRC_H5DUMP_TESTFILES/tname-lt.h5
+$SRC_H5DUMP_TESTFILES/tname-quot.h5
+$SRC_H5DUMP_TESTFILES/tname-sp.h5
+$SRC_H5DUMP_TESTFILES/tnodata.h5
+$SRC_H5DUMP_TESTFILES/tobjref.h5
+$SRC_H5DUMP_TESTFILES/topaque.h5
+$SRC_H5DUMP_TESTFILES/tref.h5
+$SRC_H5DUMP_TESTFILES/tref-escapes.h5
+$SRC_H5DUMP_TESTFILES/tref-escapes-at.h5
+$SRC_H5DUMP_TESTFILES/tstring.h5
+$SRC_H5DUMP_TESTFILES/tstring-at.h5
+"
+
+LIST_OTHER_TEST_FILES_XML="
+$SRC_H5DUMP_TESTFILES/tall.h5.xml
+$SRC_H5DUMP_TESTFILES/tall-2A.h5.xml
+$SRC_H5DUMP_TESTFILES/tarray1.h5.xml
+$SRC_H5DUMP_TESTFILES/tarray2.h5.xml
+$SRC_H5DUMP_TESTFILES/tarray3.h5.xml
+$SRC_H5DUMP_TESTFILES/tarray6.h5.xml
+$SRC_H5DUMP_TESTFILES/tarray7.h5.xml
+$SRC_H5DUMP_TESTFILES/tattr.h5.xml
+$SRC_H5DUMP_TESTFILES/tbitfields.h5.xml
+$SRC_H5DUMP_TESTFILES/tcompound_complex.h5.xml
+$SRC_H5DUMP_TESTFILES/tcompound.h5.xml
+$SRC_H5DUMP_TESTFILES/tcompound2.h5.xml
+$SRC_H5DUMP_TESTFILES/tdatareg.h5.xml
+$SRC_H5DUMP_TESTFILES/tdset.h5.xml
+$SRC_H5DUMP_TESTFILES/tdset2.h5.xml
+$SRC_H5DUMP_TESTFILES/tempty.h5.xml
+$SRC_H5DUMP_TESTFILES/tempty-dtd.h5.xml
+$SRC_H5DUMP_TESTFILES/tempty-dtd-2.h5.xml
+$SRC_H5DUMP_TESTFILES/tempty-dtd-uri.h5.xml
+$SRC_H5DUMP_TESTFILES/tempty-nons.h5.xml
+$SRC_H5DUMP_TESTFILES/tempty-nons-2.h5.xml
+$SRC_H5DUMP_TESTFILES/tempty-nons-uri.h5.xml
+$SRC_H5DUMP_TESTFILES/tempty-ns.h5.xml
+$SRC_H5DUMP_TESTFILES/tempty-ns-2.h5.xml
+$SRC_H5DUMP_TESTFILES/tenum.h5.xml
+$SRC_H5DUMP_TESTFILES/textlink.h5.xml
+$SRC_H5DUMP_TESTFILES/tfpformat.h5.xml
+$SRC_H5DUMP_TESTFILES/tgroup.h5.xml
+$SRC_H5DUMP_TESTFILES/thlink.h5.xml
+$SRC_H5DUMP_TESTFILES/tloop.h5.xml
+$SRC_H5DUMP_TESTFILES/tloop2.h5.xml
+$SRC_H5DUMP_TESTFILES/tmany.h5.xml
+$SRC_H5DUMP_TESTFILES/tname-amp.h5.xml
+$SRC_H5DUMP_TESTFILES/tname-apos.h5.xml
+$SRC_H5DUMP_TESTFILES/tnamed_dtype_attr.h5.xml
+$SRC_H5DUMP_TESTFILES/tname-gt.h5.xml
+$SRC_H5DUMP_TESTFILES/tname-lt.h5.xml
+$SRC_H5DUMP_TESTFILES/tname-quot.h5.xml
+$SRC_H5DUMP_TESTFILES/tname-sp.h5.xml
+$SRC_H5DUMP_TESTFILES/tnestedcomp.h5.xml
+$SRC_H5DUMP_TESTFILES/tnodata.h5.xml
+$SRC_H5DUMP_TESTFILES/tobjref.h5.xml
+$SRC_H5DUMP_TESTFILES/topaque.h5.xml
+$SRC_H5DUMP_TESTFILES/torderattr1.h5.xml
+$SRC_H5DUMP_TESTFILES/torderattr2.h5.xml
+$SRC_H5DUMP_TESTFILES/torderattr3.h5.xml
+$SRC_H5DUMP_TESTFILES/torderattr4.h5.xml
+$SRC_H5DUMP_TESTFILES/tref.h5.xml
+$SRC_H5DUMP_TESTFILES/tref-escapes.h5.xml
+$SRC_H5DUMP_TESTFILES/tref-escapes-at.h5.xml
+$SRC_H5DUMP_TESTFILES/tsaf.h5.xml
+$SRC_H5DUMP_TESTFILES/tslink.h5.xml
+$SRC_H5DUMP_TESTFILES/tstr.h5.xml
+$SRC_H5DUMP_TESTFILES/tstr2.h5.xml
+$SRC_H5DUMP_TESTFILES/tstring.h5.xml
+$SRC_H5DUMP_TESTFILES/tstring-at.h5.xml
+$SRC_H5DUMP_TESTFILES/tudlink.h5.xml
+$SRC_H5DUMP_TESTFILES/tvldtypes1.h5.xml
+$SRC_H5DUMP_TESTFILES/tvldtypes2.h5.xml
+$SRC_H5DUMP_TESTFILES/tvldtypes3.h5.xml
+$SRC_H5DUMP_TESTFILES/tvldtypes4.h5.xml
+$SRC_H5DUMP_TESTFILES/tvldtypes5.h5.xml
+$SRC_H5DUMP_TESTFILES/tvlstr.h5.xml
+"
+
+#
+# copy test files and expected output files from source dirs to test dir
+#
+COPY_TESTFILES="$LIST_HDF5_TEST_FILES $LIST_OTHER_TEST_FILES $LIST_HDF5_TEST_FILES_XML $LIST_OTHER_TEST_FILES_XML"
+
+COPY_TESTFILES_TO_TESTDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_TESTFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            if [ -a $tstfile ]; then
+                $CP -f $tstfile $TESTDIR
+            else
+                echo "Error: FAILED to copy $tstfile"
+                echo "       $tstfile doesn't exist!"
+                exit $EXIT_FAILURE
+            fi
+        fi
+    done
+}
+
+
 # Print a line-line message left justified in a field of 70 characters
 # beginning with the word "Testing".
 #
@@ -62,6 +459,9 @@ TESTING() {
    echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
 }
 
+# Source in the output filter function definitions.
+. $srcdir/../../bin/output_filter.sh
+
 # Run a test and print PASS or *FAIL*.  If a test fails then increment
 # the `nerrors' global variable and (if $verbose is set) display the
 # difference between the actual output and the expected output. The
@@ -71,62 +471,28 @@ TESTING() {
 # non-zero value.
 #
 TOOLTEST() {
-    expect="$srcdir/../testfiles/$1"
-    actual="../testfiles/`basename $1 .ddl`.out"
-    actual_err="../testfiles/`basename $1 .ddl`.err"
+    expect="$TESTDIR/$1"
+    actual="$TESTDIR/`basename $1 .ddl`.out"
+    actual_err="$TESTDIR/`basename $1 .ddl`.err"
+    actual_sav=${actual}-sav
+    actual_err_sav=${actual_err}-sav
     shift
 
     # Run test.
     TESTING $DUMPER $@
     (
-      echo "#############################"
-      echo "Expected output for '$DUMPER $@'" 
-      echo "#############################"
-	  cd $srcdir/../testfiles
-  	  $RUNSERIAL $DUMPER_BIN $@
+    cd $TESTDIR
+      $RUNSERIAL $DUMPER_BIN $@
     ) >$actual 2>$actual_err
-    cat $actual_err >> $actual
-
-	if [ ! -f $expect ]; then
-    # Create the expect file if it doesn't yet exist.
-     echo " CREATED"
-     cp $actual $expect
-    elif $CMP $expect $actual; then
-     echo " PASSED"
-    else
-     echo "*FAILED*"
-     echo "    Expected result (*.ddl) differs from actual result (*.out)"
-	 nerrors="`expr $nerrors + 1`"
-	 test yes = "$verbose" && $DIFF $expect $actual |sed 's/^/    /'
-    fi
-
-    # Clean up output file
-    if test -z "$HDF5_NOCLEANUP"; then
-	 rm -f $actual $actual_err
-    fi
-
-}
-
-
-# same as TOOLTEST but does not print the header Expected output
-# used for the binary tests that expect a full path in -o
-TOOLTEST1() {
-
-    expect="$srcdir/../testfiles/$1"
-    actual="../testfiles/`basename $1 .ddl`.out"
-    actual_err="../testfiles/`basename $1 .ddl`.err"
-    shift
 
-    # Run test.
-    TESTING $DUMPER $@
-    (
-      
-	  cd $srcdir/../testfiles
-  	  $RUNSERIAL $DUMPER_BIN $@
-    ) >$actual 2>$actual_err
+    # save actual and actual_err in case they are needed later.
+    cp $actual $actual_sav
+    STDOUT_FILTER $actual
+    cp $actual_err $actual_err_sav
+    STDERR_FILTER $actual_err
     cat $actual_err >> $actual
 
-	if [ ! -f $expect ]; then
+  if [ ! -f $expect ]; then
     # Create the expect file if it doesn't yet exist.
      echo " CREATED"
      cp $actual $expect
@@ -135,34 +501,34 @@ TOOLTEST1() {
     else
      echo "*FAILED*"
      echo "    Expected result (*.ddl) differs from actual result (*.out)"
-	 nerrors="`expr $nerrors + 1`"
-	 test yes = "$verbose" && $DIFF $expect $actual |sed 's/^/    /'
+   nerrors="`expr $nerrors + 1`"
+   test yes = "$verbose" && $DIFF $expect $actual |sed 's/^/    /'
     fi
 
     # Clean up output file
     if test -z "$HDF5_NOCLEANUP"; then
-	 rm -f $actual $actual_err
+   rm -f $actual $actual_err $actual_sav $actual_err_sav $actual_ext
     fi
 
 }
 
+
 # same as TOOLTEST1 but compares generated file to expected output
 #                   and compares the generated data file to the expected data file
 # used for the binary tests that expect a full path in -o without -b
 TOOLTEST2() {
 
-    expectdata="$srcdir/../testfiles/$1"
-    expect="$srcdir/../testfiles/`basename $1 .exp`.ddl"
-    actualdata="../testfiles/`basename $1 .exp`.txt"
-    actual="../testfiles/`basename $1 .exp`.out"
-    actual_err="../testfiles/`basename $1 .exp`.err"
+    expectdata="$TESTDIR/$1"
+    expect="$TESTDIR/`basename $1 .exp`.ddl"
+    actualdata="$TESTDIR/`basename $1 .exp`.txt"
+    actual="$TESTDIR/`basename $1 .exp`.out"
+    actual_err="$TESTDIR/`basename $1 .exp`.err"
     shift
 
     # Run test.
     TESTING $DUMPER $@
     (
-      
-      cd $srcdir/../testfiles
+      cd $TESTDIR
       $RUNSERIAL $DUMPER_BIN $@
     ) >$actual 2>$actual_err
     cat $actual_err >> $actual
@@ -202,22 +568,27 @@ TOOLTEST2() {
 # Extract file name, line number, version and thread IDs because they may be different
 TOOLTEST3() {
 
-    expect="$srcdir/../testfiles/$1"
-    actual="../testfiles/`basename $1 .ddl`.out"
-    actual_err="../testfiles/`basename $1 .ddl`.err"
-    actual_ext="../testfiles/`basename $1 .ddl`.ext"
+    expect="$TESTDIR/$1"
+    actual="$TESTDIR/`basename $1 .ddl`.out"
+    actual_err="$TESTDIR/`basename $1 .ddl`.err"
+    actual_ext="$TESTDIR/`basename $1 .ddl`.ext"
+    actual_sav=${actual}-sav
+    actual_err_sav=${actual_err}-sav
     shift
 
     # Run test.
     TESTING $DUMPER $@
     (
-      echo "#############################"
-      echo "Expected output for '$DUMPER $@'" 
-      echo "#############################"
-      cd $srcdir/../testfiles
+      cd $TESTDIR
       $RUNSERIAL $DUMPER_BIN $@
     ) >$actual 2>$actual_err
 
+    # save actual and actual_err in case they are needed later.
+    cp $actual $actual_sav
+    STDOUT_FILTER $actual
+    cp $actual_err $actual_err_sav
+    STDERR_FILTER $actual_err
+
     # Extract file name, line number, version and thread IDs because they may be different
     sed -e 's/thread [0-9]*/thread (IDs)/' -e 's/: .*\.c /: (file name) /' \
         -e 's/line [0-9]*/line (number)/' \
@@ -243,15 +614,15 @@ TOOLTEST3() {
 
     # Clean up output file
     if test -z "$HDF5_NOCLEANUP"; then
-     rm -f $actual $actual_err
+   rm -f $actual $actual_err $actual_sav $actual_err_sav
     fi
 
 }
 
 # Print a "SKIP" message
 SKIP() {
-	 TESTING $DUMPER $@
-	  echo  " -SKIP-"
+   TESTING $DUMPER $@
+    echo  " -SKIP-"
 }
   
 # Print a line-line message left justified in a field of 70 characters
@@ -268,8 +639,8 @@ DIFFTEST()
 {
     PRINT_H5DIFF  $@
     (
-	cd $srcdir/../testfiles
-	$RUNSERIAL $H5DIFF_BIN "$@" -q
+  cd $TESTDIR
+  $RUNSERIAL $H5DIFF_BIN "$@" -q
     )
     RET=$?
     if [ $RET != 0 ] ; then
@@ -294,15 +665,15 @@ PRINT_H5IMPORT() {
 IMPORTTEST() 
 {
     # remove the output hdf5 file if it exists
-    hdf5_file="$srcdir/../testfiles/$5"
+    hdf5_file="$TESTDIR/$5"
     if [ -f $hdf5_file ]; then
      rm -f $hdf5_file
     fi
 
     PRINT_H5IMPORT  $@
     (
-	cd $srcdir/../testfiles
-	$RUNSERIAL $H5IMPORT_BIN "$@" 
+  cd $TESTDIR
+  $RUNSERIAL $H5IMPORT_BIN "$@" 
     )
     RET=$?
     if [ $RET != 0 ] ; then
@@ -317,9 +688,11 @@ IMPORTTEST()
 
 ##############################################################################
 ##############################################################################
-###			  T H E   T E S T S                                            ###
+###        T H E   T E S T S                                            ###
 ##############################################################################
 ##############################################################################
+# prepare for test
+COPY_TESTFILES_TO_TESTDIR
 
 # test for signed/unsigned datasets
 TOOLTEST packedbits.ddl packedbits.h5
@@ -436,11 +809,7 @@ TOOLTEST tchar1.ddl -r tchar.h5
 
 # test failure handling
 # Missing file name
-if test "$Have_Packed_Bits" = "yes"; then
-    TOOLTEST tnofilename-with-packed-bits.ddl
-else
-    TOOLTEST tnofilename.ddl
-fi
+TOOLTEST tnofilename.ddl
 
 # rev. 2004
 
@@ -494,10 +863,10 @@ TOOLTEST tindicessub3.ddl -d 3d -s 0,1,2 -S 1,3,3 -c 2,2,2  -k 1,2,2  taindices.
 TOOLTEST tindicessub4.ddl -d 4d -s 0,0,1,2  -c 2,2,3,2 -S 1,1,3,3 -k 1,1,2,2  taindices.h5
 
 #Exceed the dimensions for subsetting
-TOOLTEST1 texceedsubstart.ddl -d 1d -s 1,3 taindices.h5
-TOOLTEST1 texceedsubcount.ddl -d 1d -c 1,3 taindices.h5
-TOOLTEST1 texceedsubstride.ddl -d 1d -S 1,3 taindices.h5
-TOOLTEST1 texceedsubblock.ddl -d 1d -k 1,3 taindices.h5
+TOOLTEST texceedsubstart.ddl -d 1d -s 1,3 taindices.h5
+TOOLTEST texceedsubcount.ddl -d 1d -c 1,3 taindices.h5
+TOOLTEST texceedsubstride.ddl -d 1d -S 1,3 taindices.h5
+TOOLTEST texceedsubblock.ddl -d 1d -k 1,3 taindices.h5
 
 
 # tests for filters
@@ -568,6 +937,9 @@ TOOLTEST thyperslab.ddl thyperslab.h5
 # test for displaying dataset and attribute of null space
 TOOLTEST tnullspace.ddl tnullspace.h5
 
+# test for displaying dataset and attribute of space with 0 dimension size
+TOOLTEST zerodim.ddl zerodim.h5
+
 # test for long double (some systems do not have long double)
 #TOOLTEST tldouble.ddl tldouble.h5
 
@@ -575,27 +947,27 @@ TOOLTEST tnullspace.ddl tnullspace.h5
 TOOLTEST tvms.ddl tvms.h5
 
 # test for binary output
-TOOLTEST1   tbin1.ddl -d integer -o $TESTDIR/out1.bin -b LE    tbinary.h5
+TOOLTEST   tbin1.ddl -d integer -o out1.bin -b LE    tbinary.h5
 
 # NATIVE default. the NATIVE test can be validated with h5import/h5diff
-TOOLTEST1   tbin1.ddl -d integer -o $TESTDIR/out1.bin  -b      tbinary.h5
-IMPORTTEST $TESTDIR/out1.bin -c out3.h5import -o $TESTDIR/out1.h5
-DIFFTEST   tbinary.h5 $TESTDIR/out1.h5 /integer /integer
+TOOLTEST   tbin1.ddl -d integer -o out1.bin  -b      tbinary.h5
+IMPORTTEST out1.bin -c out3.h5import -o out1.h5
+DIFFTEST   tbinary.h5 out1.h5 /integer /integer
 
-TOOLTEST1   tbin2.ddl -b BE -d float  -o $TESTDIR/out2.bin      tbinary.h5
+TOOLTEST   tbin2.ddl -b BE -d float  -o out2.bin      tbinary.h5
 
 # the NATIVE test can be validated with h5import/h5diff
-TOOLTEST1   tbin3.ddl -d integer -o $TESTDIR/out3.bin -b NATIVE tbinary.h5
-IMPORTTEST $TESTDIR/out3.bin -c out3.h5import -o $TESTDIR/out3.h5
-DIFFTEST   tbinary.h5 $TESTDIR/out3.h5 /integer /integer
+TOOLTEST   tbin3.ddl -d integer -o out3.bin -b NATIVE tbinary.h5
+IMPORTTEST out3.bin -c out3.h5import -o out3.h5
+DIFFTEST   tbinary.h5 out3.h5 /integer /integer
 
-TOOLTEST1   tbin4.ddl -d double  -b FILE -o $TESTDIR/out4.bin    tbinary.h5
+TOOLTEST   tbin4.ddl -d double  -b FILE -o out4.bin    tbinary.h5
    
 # Clean up binary output files
 if test -z "$HDF5_NOCLEANUP"; then
- rm -f $TESTDIR/out[1-4].bin
- rm -f $TESTDIR/out1.h5
- rm -f $TESTDIR/out3.h5
+ rm -f out[1-4].bin
+ rm -f out1.h5
+ rm -f out3.h5
 fi
 
 # test for dataset region references 
@@ -604,11 +976,11 @@ TOOLTEST tdataregR.ddl -R tdatareg.h5
 TOOLTEST tattrreg.ddl tattrreg.h5
 TOOLTEST tattrregR.ddl -R tattrreg.h5
 
-TOOLTEST2   tbinregR.exp -d /Dataset1 -s 0 -R -y -o $TESTDIR/tbinregR.txt    tdatareg.h5
+TOOLTEST2   tbinregR.exp -d /Dataset1 -s 0 -R -y -o tbinregR.txt    tdatareg.h5
 
 # Clean up text output files
 if test -z "$HDF5_NOCLEANUP"; then
- rm -f $TESTDIR/tbinregR.txt
+ rm -f tbinregR.txt
 fi
 
 # tests for group creation order
@@ -639,15 +1011,9 @@ TOOLTEST textlink.ddl textlink.h5
 TOOLTEST3 filter_fail.ddl --enable-error-stack filter_fail.h5
 
 # test for -o -y for dataset with attributes
-TOOLTEST1 tall-6.ddl -y -o $TESTDIR/data -d /g1/g1.1/dset1.1.1 tall.h5
+TOOLTEST tall-6.ddl -y -o data -d /g1/g1.1/dset1.1.1 tall.h5
 
 # test for dataset packed bits 
-# Set up xCMD to test or skip.
-if test "$Have_Packed_Bits" = "yes"; then
-    xCMD=TOOLTEST
-else
-    xCMD=SKIP
-fi
 # Limits:
 # Maximum number of packed bits is 8 (for now).
 # Maximum integer size is 64 (for now).
@@ -657,72 +1023,72 @@ fi
 # Normal operation on both signed and unsigned int datasets.
 # Sanity check
 # Their rawdata output should be the same.
-$xCMD tpbitsSignedWhole.ddl -d /DS08BITS -M 0,8 packedbits.h5
-$xCMD tpbitsUnsignedWhole.ddl -d /DU08BITS -M 0,8 packedbits.h5
-$xCMD tpbitsSignedIntWhole.ddl -d /DS16BITS -M 0,16 packedbits.h5
-$xCMD tpbitsUnsignedIntWhole.ddl -d /DU16BITS -M 0,16 packedbits.h5
-$xCMD tpbitsSignedLongWhole.ddl -d /DS32BITS -M 0,32 packedbits.h5
-$xCMD tpbitsUnsignedLongWhole.ddl -d /DU32BITS -M 0,32 packedbits.h5
-$xCMD tpbitsSignedLongLongWhole.ddl -d /DS64BITS -M 0,64 packedbits.h5
-$xCMD tpbitsUnsignedLongLongWhole.ddl -d /DU64BITS -M 0,64 packedbits.h5
-$xCMD tpbitsSignedLongLongWhole63.ddl -d /DS64BITS -M 0,63 packedbits.h5
-$xCMD tpbitsUnsignedLongLongWhole63.ddl -d /DU64BITS -M 0,63 packedbits.h5
-$xCMD tpbitsSignedLongLongWhole1.ddl -d /DS64BITS -M 1,63 packedbits.h5
-$xCMD tpbitsUnsignedLongLongWhole1.ddl -d /DU64BITS -M 1,63 packedbits.h5
+TOOLTEST tpbitsSignedWhole.ddl -d /DS08BITS -M 0,8 packedbits.h5
+TOOLTEST tpbitsUnsignedWhole.ddl -d /DU08BITS -M 0,8 packedbits.h5
+TOOLTEST tpbitsSignedIntWhole.ddl -d /DS16BITS -M 0,16 packedbits.h5
+TOOLTEST tpbitsUnsignedIntWhole.ddl -d /DU16BITS -M 0,16 packedbits.h5
+TOOLTEST tpbitsSignedLongWhole.ddl -d /DS32BITS -M 0,32 packedbits.h5
+TOOLTEST tpbitsUnsignedLongWhole.ddl -d /DU32BITS -M 0,32 packedbits.h5
+TOOLTEST tpbitsSignedLongLongWhole.ddl -d /DS64BITS -M 0,64 packedbits.h5
+TOOLTEST tpbitsUnsignedLongLongWhole.ddl -d /DU64BITS -M 0,64 packedbits.h5
+TOOLTEST tpbitsSignedLongLongWhole63.ddl -d /DS64BITS -M 0,63 packedbits.h5
+TOOLTEST tpbitsUnsignedLongLongWhole63.ddl -d /DU64BITS -M 0,63 packedbits.h5
+TOOLTEST tpbitsSignedLongLongWhole1.ddl -d /DS64BITS -M 1,63 packedbits.h5
+TOOLTEST tpbitsUnsignedLongLongWhole1.ddl -d /DU64BITS -M 1,63 packedbits.h5
 # Half sections
-$xCMD tpbitsSigned4.ddl -d /DS08BITS -M 0,4,4,4 packedbits.h5
-$xCMD tpbitsUnsigned4.ddl -d /DU08BITS -M 0,4,4,4 packedbits.h5
-$xCMD tpbitsSignedInt8.ddl -d /DS16BITS -M 0,8,8,8 packedbits.h5
-$xCMD tpbitsUnsignedInt8.ddl -d /DU16BITS -M 0,8,8,8 packedbits.h5
-$xCMD tpbitsSignedLong16.ddl -d /DS32BITS -M 0,16,16,16 packedbits.h5
-$xCMD tpbitsUnsignedLong16.ddl -d /DU32BITS -M 0,16,16,16 packedbits.h5
-$xCMD tpbitsSignedLongLong32.ddl -d /DS64BITS -M 0,32,32,32 packedbits.h5
-$xCMD tpbitsUnsignedLongLong32.ddl -d /DU64BITS -M 0,32,32,32 packedbits.h5
+TOOLTEST tpbitsSigned4.ddl -d /DS08BITS -M 0,4,4,4 packedbits.h5
+TOOLTEST tpbitsUnsigned4.ddl -d /DU08BITS -M 0,4,4,4 packedbits.h5
+TOOLTEST tpbitsSignedInt8.ddl -d /DS16BITS -M 0,8,8,8 packedbits.h5
+TOOLTEST tpbitsUnsignedInt8.ddl -d /DU16BITS -M 0,8,8,8 packedbits.h5
+TOOLTEST tpbitsSignedLong16.ddl -d /DS32BITS -M 0,16,16,16 packedbits.h5
+TOOLTEST tpbitsUnsignedLong16.ddl -d /DU32BITS -M 0,16,16,16 packedbits.h5
+TOOLTEST tpbitsSignedLongLong32.ddl -d /DS64BITS -M 0,32,32,32 packedbits.h5
+TOOLTEST tpbitsUnsignedLongLong32.ddl -d /DU64BITS -M 0,32,32,32 packedbits.h5
 # Quarter sections
-$xCMD tpbitsSigned2.ddl -d /DS08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5
-$xCMD tpbitsUnsigned2.ddl -d /DU08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5
-$xCMD tpbitsSignedInt4.ddl -d /DS16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5
-$xCMD tpbitsUnsignedInt4.ddl -d /DU16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5
-$xCMD tpbitsSignedLong8.ddl -d /DS32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5
-$xCMD tpbitsUnsignedLong8.ddl -d /DU32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5
-$xCMD tpbitsSignedLongLong16.ddl -d /DS64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5
-$xCMD tpbitsUnsignedLongLong16.ddl -d /DU64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5
+TOOLTEST tpbitsSigned2.ddl -d /DS08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5
+TOOLTEST tpbitsUnsigned2.ddl -d /DU08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5
+TOOLTEST tpbitsSignedInt4.ddl -d /DS16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5
+TOOLTEST tpbitsUnsignedInt4.ddl -d /DU16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5
+TOOLTEST tpbitsSignedLong8.ddl -d /DS32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5
+TOOLTEST tpbitsUnsignedLong8.ddl -d /DU32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5
+TOOLTEST tpbitsSignedLongLong16.ddl -d /DS64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5
+TOOLTEST tpbitsUnsignedLongLong16.ddl -d /DU64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5
 # Begin and End
-$xCMD tpbitsSigned.ddl -d /DS08BITS -M 0,2,2,6 packedbits.h5
-$xCMD tpbitsUnsigned.ddl -d /DU08BITS -M 0,2,2,6 packedbits.h5
-$xCMD tpbitsSignedInt.ddl -d /DS16BITS -M 0,2,10,6 packedbits.h5
-$xCMD tpbitsUnsignedInt.ddl -d /DU16BITS -M 0,2,10,6 packedbits.h5
-$xCMD tpbitsSignedLong.ddl -d /DS32BITS -M 0,2,26,6 packedbits.h5
-$xCMD tpbitsUnsignedLong.ddl -d /DU32BITS -M 0,2,26,6 packedbits.h5
-$xCMD tpbitsSignedLongLong.ddl -d /DS64BITS -M 0,2,58,6 packedbits.h5
-$xCMD tpbitsUnsignedLongLong.ddl -d /DU64BITS -M 0,2,58,6 packedbits.h5
+TOOLTEST tpbitsSigned.ddl -d /DS08BITS -M 0,2,2,6 packedbits.h5
+TOOLTEST tpbitsUnsigned.ddl -d /DU08BITS -M 0,2,2,6 packedbits.h5
+TOOLTEST tpbitsSignedInt.ddl -d /DS16BITS -M 0,2,10,6 packedbits.h5
+TOOLTEST tpbitsUnsignedInt.ddl -d /DU16BITS -M 0,2,10,6 packedbits.h5
+TOOLTEST tpbitsSignedLong.ddl -d /DS32BITS -M 0,2,26,6 packedbits.h5
+TOOLTEST tpbitsUnsignedLong.ddl -d /DU32BITS -M 0,2,26,6 packedbits.h5
+TOOLTEST tpbitsSignedLongLong.ddl -d /DS64BITS -M 0,2,58,6 packedbits.h5
+TOOLTEST tpbitsUnsignedLongLong.ddl -d /DU64BITS -M 0,2,58,6 packedbits.h5
 # Overlapped packed bits.
-$xCMD tpbitsOverlapped.ddl -d /DS08BITS -M 0,1,1,1,2,1,0,3 packedbits.h5
+TOOLTEST tpbitsOverlapped.ddl -d /DS08BITS -M 0,1,1,1,2,1,0,3 packedbits.h5
 # Maximum number of packed bits.
-$xCMD tpbitsMax.ddl -d /DS08BITS -M 0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5
+TOOLTEST tpbitsMax.ddl -d /DS08BITS -M 0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5
 # Compound type.
-$xCMD tpbitsCompound.ddl -d /dset1 -M 0,1,1,1 tcompound.h5
+TOOLTEST tpbitsCompound.ddl -d /dset1 -M 0,1,1,1 tcompound.h5
 # Array type.
-$xCMD tpbitsArray.ddl -d /Dataset1 -M 0,1,1,1 tarray1.h5
+TOOLTEST tpbitsArray.ddl -d /Dataset1 -M 0,1,1,1 tarray1.h5
 # Test Error handling.
 # Too many packed bits requested. Max is 8 for now.
-$xCMD tpbitsMaxExceeded.ddl -d /DS08BITS -M 0,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5
+TOOLTEST tpbitsMaxExceeded.ddl -d /DS08BITS -M 0,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5
 # Offset too large. Max is 7 (8-1) for now.
-$xCMD tpbitsOffsetExceeded.ddl -d /DS08BITS -M 64,1 packedbits.h5
-$xCMD tpbitsCharOffsetExceeded.ddl -d /DS08BITS -M 8,1 packedbits.h5
-$xCMD tpbitsIntOffsetExceeded.ddl -d /DS16BITS -M 16,1 packedbits.h5
-$xCMD tpbitsLongOffsetExceeded.ddl -d /DS32BITS -M 32,1 packedbits.h5
+TOOLTEST tpbitsOffsetExceeded.ddl -d /DS08BITS -M 64,1 packedbits.h5
+TOOLTEST tpbitsCharOffsetExceeded.ddl -d /DS08BITS -M 8,1 packedbits.h5
+TOOLTEST tpbitsIntOffsetExceeded.ddl -d /DS16BITS -M 16,1 packedbits.h5
+TOOLTEST tpbitsLongOffsetExceeded.ddl -d /DS32BITS -M 32,1 packedbits.h5
 # Bad offset, must not be negative.
-$xCMD tpbitsOffsetNegative.ddl -d /DS08BITS -M -1,1 packedbits.h5
+TOOLTEST tpbitsOffsetNegative.ddl -d /DS08BITS -M -1,1 packedbits.h5
 # Bad length, must not be positive.
-$xCMD tpbitsLengthPositive.ddl -d /DS08BITS -M 4,0 packedbits.h5
+TOOLTEST tpbitsLengthPositive.ddl -d /DS08BITS -M 4,0 packedbits.h5
 # Offset+Length is too large. Max is 8 for now.
-$xCMD tpbitsLengthExceeded.ddl -d /DS08BITS -M 37,28 packedbits.h5
-$xCMD tpbitsCharLengthExceeded.ddl -d /DS08BITS -M 2,7 packedbits.h5
-$xCMD tpbitsIntLengthExceeded.ddl -d /DS16BITS -M 10,7 packedbits.h5
-$xCMD tpbitsLongLengthExceeded.ddl -d /DS32BITS -M 26,7 packedbits.h5
+TOOLTEST tpbitsLengthExceeded.ddl -d /DS08BITS -M 37,28 packedbits.h5
+TOOLTEST tpbitsCharLengthExceeded.ddl -d /DS08BITS -M 2,7 packedbits.h5
+TOOLTEST tpbitsIntLengthExceeded.ddl -d /DS16BITS -M 10,7 packedbits.h5
+TOOLTEST tpbitsLongLengthExceeded.ddl -d /DS32BITS -M 26,7 packedbits.h5
 # Incomplete pair of packed bits request.
-$xCMD tpbitsIncomplete.ddl -d /DS08BITS -M 0,2,2,1,0,2,2, packedbits.h5
+TOOLTEST tpbitsIncomplete.ddl -d /DS08BITS -M 0,2,2,1,0,2,2, packedbits.h5
 
 
 # Report test results and exit
diff --git a/tools/h5dump/testh5dumpxml.sh.in b/tools/h5dump/testh5dumpxml.sh.in
index c9f1ad2..0bd01b0 100755
--- a/tools/h5dump/testh5dumpxml.sh.in
+++ b/tools/h5dump/testh5dumpxml.sh.in
@@ -62,9 +62,6 @@ TOOLTEST() {
    # Run test.
    TESTING $DUMPER $@
    (
-      echo "#############################"
-      echo "Expected output for '$DUMPER $@'" 
-      echo "#############################"
       cd $srcdir/../testfiles
       $RUNSERIAL $DUMPER_BIN $@
    ) >$actual 2>$actual_err
diff --git a/tools/h5import/CMakeLists.txt b/tools/h5import/CMakeLists.txt
index a2f8a6b..abd0b7d 100644
--- a/tools/h5import/CMakeLists.txt
+++ b/tools/h5import/CMakeLists.txt
@@ -31,48 +31,49 @@ IF (BUILD_TESTING)
   TARGET_LINK_LIBRARIES (h5importtest ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET})
 
   SET (HDF5_REFERENCE_CONF_FILES
-      binfp32.conf
       binfp64.conf
       binin8.conf
+      binin8w.conf
       binin16.conf
       binin32.conf
       binuin16.conf
       binuin32.conf
-      textfp32.conf
-      textfp64.conf
-      textin8.conf
-      textin16.conf
-      textin32.conf
-      textuin16.conf
-      textuin32.conf
+      txtfp32.conf
+      txtfp64.conf
+      txtin8.conf
+      txtin16.conf
+      txtin32.conf
+      txtuin16.conf
+      txtuin32.conf
       textpfe.conf
-      textstr.conf
+      txtstr.conf
   )
   SET (HDF5_REFERENCE_TXT_FILES
-      fp1.txt
-      fp2.txt
-      in1.txt
-      in16.txt
-      in32.txt
-      in64.txt
-      str.txt
+      txtfp32.txt
+      txtfp64.txt
+      txtuin32.txt
+      txtin16.txt
+      txtin32.txt
+      textpfe64.txt
+      txtstr.txt
   )
   SET (HDF5_REFERENCE_TEST_FILES
-      test1.h5
-      test2.h5
-      test3.h5
-      test4.h5
-      test5.h5
-      test6.h5
-      test7.h5
-      test8.h5
-      test9.h5
-      test10.h5
-      test11.h5
-      test12.h5
-      test13.h5
-      test14.h5
-      test15.h5
+      binfp64.h5
+      binin8.h5
+      binin8w.h5
+      binin16.h5
+      binin32.h5
+      binuin16.h5
+      binuin32.h5
+      txtfp32.h5
+      txtfp64.h5
+      txtin8.h5
+      txtin16.h5
+      txtin32.h5
+      txtuin16.h5
+      txtuin32.h5
+      txtstr.h5
+      textpfe.h5
   )
 
   FILE (MAKE_DIRECTORY "${PROJECT_BINARY_DIR}/testfiles")
@@ -115,27 +116,33 @@ IF (BUILD_TESTING)
 ##############################################################################
 ##############################################################################
   MACRO (ADD_H5_TEST testname importfile conffile testfile)
-    ADD_TEST (
-        NAME H5IMPORT-${testname}-clear-objects
-        COMMAND    ${CMAKE_COMMAND}
-            -E remove
-            ${testfile}
-            ${testfile}.new
-            ${testfile}.new.err
-            ${testfile}.out
-            ${testfile}.out.err
-    )
+    IF (NOT HDF5_ENABLE_USING_MEMCHECKER)
+      ADD_TEST (
+          NAME H5IMPORT-${testname}-clear-objects
+          COMMAND    ${CMAKE_COMMAND}
+              -E remove
+              ${testfile}
+              ${testfile}.new
+              ${testfile}.new.err
+              ${testfile}.out
+              ${testfile}.out.err
+      )
+      IF (NOT "${last_test}" STREQUAL "")
+        SET_TESTS_PROPERTIES (H5IMPORT-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
+      ENDIF (NOT "${last_test}" STREQUAL "")
+      SET (last_test "H5IMPORT-${testname}-clear-objects")
+    ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER)
+
+    ADD_TEST (NAME H5IMPORT-${testname} COMMAND $<TARGET_FILE:h5import> ${importfile} -c testfiles/${conffile} -o ${testfile})
     IF (NOT "${last_test}" STREQUAL "")
-      SET_TESTS_PROPERTIES (H5IMPORT-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
+      SET_TESTS_PROPERTIES (H5IMPORT-${testname} PROPERTIES DEPENDS ${last_test})
     ENDIF (NOT "${last_test}" STREQUAL "")
-    ADD_TEST (NAME H5IMPORT-${testname} COMMAND $<TARGET_FILE:h5import> ${importfile} -c testfiles/${conffile} -o ${testfile})
-    SET_TESTS_PROPERTIES (H5IMPORT-${testname} PROPERTIES DEPENDS H5IMPORT-${testname}-clear-objects)
     SET (last_test "H5IMPORT-${testname}")
 
     # If using memchecker add tests without using scripts
     IF (NOT HDF5_ENABLE_USING_MEMCHECKER)
       ADD_TEST (
-          NAME H5IMPORT-H5DUMP-${testname}
+          NAME H5IMPORT-H5DMP-${testname}
           COMMAND "${CMAKE_COMMAND}"
               -D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
               -D "TEST_ARGS:STRING=${testfile}"
@@ -146,9 +153,9 @@ IF (BUILD_TESTING)
               -D "TEST_SKIP_COMPARE=TRUE"
               -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
       )
-      SET_TESTS_PROPERTIES (H5IMPORT-H5DUMP-${testname} PROPERTIES DEPENDS H5IMPORT-${testname})
+      SET_TESTS_PROPERTIES (H5IMPORT-H5DMP-${testname} PROPERTIES DEPENDS H5IMPORT-${testname})
       ADD_TEST (
-          NAME H5IMPORT-H5DUMP_CMP-${testname}
+          NAME H5IMPORT-H5DMP_CMP-${testname}
           COMMAND "${CMAKE_COMMAND}"
               -D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
               -D "TEST_ARGS:STRING=testfiles/${testfile}"
@@ -159,8 +166,8 @@ IF (BUILD_TESTING)
               -D "TEST_REFERENCE=${testfile}.new"
               -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
       )
-      SET_TESTS_PROPERTIES (H5IMPORT-H5DUMP_CMP-${testname} PROPERTIES DEPENDS H5IMPORT-H5DUMP-${testname})
-      SET (last_test "H5IMPORT-H5DUMP_CMP-${testname}")
+      SET_TESTS_PROPERTIES (H5IMPORT-H5DMP_CMP-${testname} PROPERTIES DEPENDS H5IMPORT-H5DMP-${testname})
+      SET (last_test "H5IMPORT-H5DMP_CMP-${testname}")
     ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER)
   ENDMACRO (ADD_H5_TEST testname resultcode testfile vparam srcname dstname)
 
@@ -186,55 +193,61 @@ IF (BUILD_TESTING)
           txtin32.txt
           ${HDF5_REFERENCE_TEST_FILES}
   )
+  SET (last_test "H5IMPORT-clear-objects")
 
   ADD_TEST (NAME H5IMPORT-h5importtest COMMAND $<TARGET_FILE:h5importtest>)
-  SET_TESTS_PROPERTIES (H5IMPORT-h5importtest PROPERTIES DEPENDS H5IMPORT-clear-objects)
+  IF (NOT "${last_test}" STREQUAL "")
+    SET_TESTS_PROPERTIES (H5IMPORT-h5importtest PROPERTIES DEPENDS ${last_test})
+  ENDIF (NOT "${last_test}" STREQUAL "")
   SET (last_test "H5IMPORT-h5importtest")
 
-  # ----- TESTING "ASCII I32 rank 3 - Output BE "
-  ADD_H5_TEST (ASCII_I32 in32.txt textin32.conf test1.h5)
+  # ----- TESTING "ASCII I32 rank 3 - Output BE " ;
+  ADD_H5_TEST (ASCII_I32 txtin16.txt txtin32.conf txtin32.h5)
 
   # ----- TESTING "ASCII I16 rank 3 - Output LE - CHUNKED - extended" 
-  ADD_H5_TEST (ASCII_I16 in16.txt textin16.conf test2.h5)
+  ADD_H5_TEST (ASCII_I16 txtin16.txt txtin16.conf txtin16.h5)
 
   # ----- TESTING "ASCII I8 - rank 3 - Output I8 LE-Chunked+Extended+Compressed " 
-  ADD_H5_TEST (ASCII_I8 in16.txt textin8.conf test3.h5)
+  ADD_H5_TEST (ASCII_I8 txtin16.txt txtin8.conf txtin8.h5)
 
   # ----- TESTING "ASCII UI32 - rank 3 - Output BE" 
-  ADD_H5_TEST (ASCII_UI32 in1.txt textuin32.conf test4.h5)
+  ADD_H5_TEST (ASCII_UI32 txtuin32.txt txtuin32.conf txtuin32.h5)
 
   # ----- TESTING "ASCII UI16 - rank 2 - Output LE+Chunked+Compressed " 
-  ADD_H5_TEST (ASCII_UI16 in1.txt textuin16.conf test5.h5)
+  ADD_H5_TEST (ASCII_UI16 txtuin32.txt txtuin16.conf txtuin16.h5)
 
   # ----- TESTING "ASCII F32 - rank 3 - Output LE " 
-  ADD_H5_TEST (ASCII_F32 fp1.txt textfp32.conf test6.h5)
+  ADD_H5_TEST (ASCII_F32 txtfp32.txt txtfp32.conf txtfp32.h5)
 
   # ----- TESTING "ASCII F64 - rank 3 - Output BE + CHUNKED+Extended+Compressed " 
-  ADD_H5_TEST (ASCII_F64 fp2.txt textfp64.conf test7.h5)
+  ADD_H5_TEST (ASCII_F64 txtfp64.txt txtfp64.conf txtfp64.h5)
 
   # ----- TESTING "BINARY F64 - rank 3 - Output LE+CHUNKED+Extended+Compressed " 
-  ADD_H5_TEST (BINARY_F64 binfp64.bin binfp64.conf test8.h5)
+  ADD_H5_TEST (BINARY_F64 binfp64.bin binfp64.conf binfp64.h5)
 
   # ----- TESTING "BINARY I16 - rank 3 - Output order LE + CHUNKED + extended " 
-  ADD_H5_TEST (BINARY_I16 binin16.bin binin16.conf test9.h5)
+  ADD_H5_TEST (BINARY_I16 binin16.bin binin16.conf binin16.h5)
 
   # ----- TESTING "BINARY I8 - rank 3 - Output I16LE + Chunked+Extended+Compressed " 
-  ADD_H5_TEST (BINARY_I8 binin8.bin binin8.conf test10.h5)
+  ADD_H5_TEST (BINARY_I8 binin8.bin binin8.conf binin8.h5)
 
   # ----- TESTING "BINARY I32 - rank 3 - Output BE + CHUNKED " 
-  ADD_H5_TEST (BINARY_I32 binin32.bin binin32.conf test11.h5)
+  ADD_H5_TEST (BINARY_I32 binin32.bin binin32.conf binin32.h5)
 
   # ----- TESTING "BINARY UI16 - rank 3 - Output byte BE + CHUNKED " 
-  ADD_H5_TEST (BINARY_UI16 binuin16.bin binuin16.conf test12.h5)
+  ADD_H5_TEST (BINARY_UI16 binuin16.bin binuin16.conf binuin16.h5)
 
   # ----- TESTING "BINARY UI32 - rank 3 - Output LE + CHUNKED " 
-  ADD_H5_TEST (BINARY_UI32 binuin32.bin binuin32.conf test13.h5)
+  ADD_H5_TEST (BINARY_UI32 binuin32.bin binuin32.conf binuin32.h5)
 
   # ----- TESTING "STR" 
-  ADD_H5_TEST (STR str.txt textstr.conf test14.h5)
+  ADD_H5_TEST (STR txtstr.txt txtstr.conf txtstr.h5)
+
+  # ----- TESTING "BINARY I8 CR LF EOF" 
+  ADD_H5_TEST (BINARY_I8_EOF binin8w.bin binin8w.conf binin8w.h5)
 
   # ----- TESTING "ASCII F64 - rank 1 - INPUT-CLASS TEXTFPE " 
-  ADD_H5_TEST (ASCII_F64_R1 in64.txt textpfe.conf test15.h5)
+  ADD_H5_TEST (ASCII_F64_R1 textpfe64.txt textpfe.conf textpfe.h5)
 
 ENDIF (BUILD_TESTING)
 
diff --git a/tools/h5import/Makefile.in b/tools/h5import/Makefile.in
index 69c4801..b2a90ff 100644
--- a/tools/h5import/Makefile.in
+++ b/tools/h5import/Makefile.in
@@ -181,6 +181,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -201,10 +202,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -248,7 +251,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/tools/h5import/h5import.c b/tools/h5import/h5import.c
index 82b92d2..232f3c1 100755
--- a/tools/h5import/h5import.c
+++ b/tools/h5import/h5import.c
@@ -22,250 +22,263 @@
 #include "h5import.h"
 #include "h5tools_utils.h"
 
-
 /* Name of tool */
 #define PROGRAMNAME "h5import"
 
+#ifdef H5_HAVE_WIN32_API
+#define READ_OPEN_FLAGS "rb"
+#else
+#define READ_OPEN_FLAGS "r"
+#endif
+
 int main(int argc, char *argv[])
 {
-  struct  Options opt;
-  int    outfile_named = FALSE;
-  int    token;
-  int    i;
-  int    state = 0;
-  struct Input *in=NULL;
-
-    const char *err1 = "Invalid number of arguments:  %d.\n";
-    const char *err2 = "Error in state table.\n";
-    const char *err3 = "No output file given.\n";
-    const char *err4 = "Program aborted.\n";
-    const char *err5 = "Invalid path %s.\n";
-    const char *err6 = "Invalid dimensions - %s.\n";
-    const char *err7 = "Invalid type of data - %s.\n";
-    const char *err8 = "Invalid size of data - %s.\n";
-    const char *err9 = "Cannot specify more than 30 input files in one call to h5import.\n";
+    struct Options  opt;
+    int             outfile_named = FALSE;
+    int             token;
+    int             i;
+    int             state = 0;
+    struct Input   *in = NULL;
+
+    const char     *err1 = "Invalid number of arguments:  %d.\n";
+    const char     *err2 = "Error in state table.\n";
+    const char     *err3 = "No output file given.\n";
+    const char     *err4 = "Program aborted.\n";
+    const char     *err5 = "Invalid path %s.\n";
+    const char     *err6 = "Invalid dimensions - %s.\n";
+    const char     *err7 = "Invalid type of data - %s.\n";
+    const char     *err8 = "Invalid size of data - %s.\n";
+    const char     *err9 = "Cannot specify more than 30 input files in one call to h5import.\n";
 
     h5tools_setprogname(PROGRAMNAME);
     h5tools_setstatus(EXIT_SUCCESS);
 
-   (void)HDsetvbuf(stderr, (char *) NULL, _IOLBF, 0);
-   (void)HDsetvbuf(stdout, (char *) NULL, _IOLBF, 0);
+    (void) HDsetvbuf(stderr, (char *) NULL, _IOLBF, 0);
+    (void) HDsetvbuf(stdout, (char *) NULL, _IOLBF, 0);
 
-    if ( argv[1] && (strcmp("-V",argv[1])==0) )
-    {
-        print_version("h5import");
+    if (argv[1] && (HDstrcmp("-V", argv[1]) == 0)) {
+        print_version(PROGRAMNAME);
         exit(EXIT_SUCCESS);
+    }
 
+    /*
+     * validate the number of command line arguments
+     */
+    if (argc < 2) {
+        (void) fprintf(stderr, err1, argc);
+        usage(argv[0]);
+        goto err;
     }
 
- /*
-  * validate the number of command line arguments
-  */
+    /* Initialize the file structure to 0 */
+    HDmemset(&opt, 0, sizeof(struct Options));
 
-  if (argc < 2)
-  {
-    (void) fprintf(stderr, err1, argc);
-    usage(argv[0]);
-    goto err;
-  }
+    /*
+     * parse the command line
+     */
+    for (i = 1; i < argc; i++) {
+        if ((token = gtoken(argv[i])) == ERR) {
+            usage(argv[0]);
+            goto err;
+        }
 
-  /* Initialize the file count to 0 */
-  opt.fcount = 0;
+        state = state_table[state][token];
 
- /*
-  * parse the command line
-  */
+        switch (state) {
 
-  for (i = 1; i < argc; i++)
-  {
-    if ((token = gtoken(argv[i])) == ERR)
-    {
-      usage(argv[0]);
-      goto err;
-    }
+        case 1: /* counting input files */
+            if (opt.fcount < 29) {
+                (void) HDstrcpy(opt.infiles[opt.fcount].datafile, argv[i]);
+                in = &(opt.infiles[opt.fcount].in);
+                opt.infiles[opt.fcount].config = 0;
+                setDefaultValues(in, opt.fcount);
+                opt.fcount++;
+            }
+            else {
+                (void) fprintf(stderr, err9, argv[i]);
+                goto err;
+            }
 
-    state = state_table[state][token];
+            break;
 
-    switch (state)
-    {
+        case 2: /* -c found; look for configfile */
+            break;
 
-      case 1: /* counting input files */
-				if (opt.fcount < 29) {
-	        (void) HDstrcpy(opt.infiles[opt.fcount].datafile, argv[i]);
-					in = &(opt.infiles[opt.fcount].in);
-					opt.infiles[opt.fcount].config = 0;
-					setDefaultValues(in, opt.fcount);
-	        opt.fcount++;
-				}
-				else {
-					(void) fprintf(stderr, err9, argv[i]);
-					goto err;
-				}
-
-      break;
-
-      case 2: /* -c found; look for configfile */
-      break;
-
-      case 3: /* get configfile name */
-        (void) HDstrcpy(opt.infiles[opt.fcount-1].configfile, argv[i]);
-	opt.infiles[opt.fcount-1].config = 1;
-      break;
-
-      case 4: /* -o found; look for outfile */
-      break;
-
-      case 5: /* get outfile found */
-        (void) HDstrcpy(opt.outfile, argv[i]);
-        outfile_named = TRUE;
-      break;
-
-      case 6:    /* -h found; help, then exit */
-        help(argv[0]);
-        exit(EXIT_SUCCESS);
-      break;
+        case 3: /* get configfile name */
+            (void) HDstrcpy(opt.infiles[opt.fcount-1].configfile, argv[i]);
+            opt.infiles[opt.fcount - 1].config = 1;
+            break;
 
-      case 7:    /* -d found; look for dimensions */
-      break;
+        case 4: /* -o found; look for outfile */
+            break;
 
-      case 8:    /* read dimensions */
-	if (parseDimensions(in, argv[i]) == -1)
-        {
-          (void) fprintf(stderr, err6, argv[i]);
-					goto err;
-        }
-      break;
+        case 5: /* get outfile found */
+            (void) HDstrcpy(opt.outfile, argv[i]);
+            outfile_named = TRUE;
+            break;
 
-      case 9:    /* -p found; look for path name */
-      break;
+        case 6: /* -h found; help, then exit */
+            help(argv[0]);
+            exit(EXIT_SUCCESS);
+            break;
 
-      case 10:    /* read path name */
- 	if (parsePathInfo(&in->path, argv[i]) == -1)
-        {
-          (void) fprintf(stderr, err5, argv[i]);
-					goto err;
-        }
-      break;
+        case 7: /* -d found; look for dimensions */
+            break;
 
-      case 11:    /* -t found; look for data type */
-      break;
+        case 8: /* read dimensions */
+            if (parseDimensions(in, argv[i]) == -1) {
+                (void) fprintf(stderr, err6, argv[i]);
+                goto err;
+            }
+            break;
 
-      case 12:    /* read data type */
-        if (getInputClass(in, argv[i]) == -1)
-        {
-          (void) fprintf(stderr, err7, argv[i]);
-					goto err;
-        }
+        case 9: /* -p found; look for path name */
+            break;
+
+        case 10: /* read path name */
+            if (parsePathInfo(&in->path, argv[i]) == -1) {
+                (void) fprintf(stderr, err5, argv[i]);
+                goto err;
+            }
+            break;
+
+        case 11: /* -t found; look for data type */
+            break;
+
+        case 12: /* read data type */
+            if (getInputClass(in, argv[i]) == -1) {
+                (void) fprintf(stderr, err7, argv[i]);
+                goto err;
+            }
+
+            if (in->inputClass == 0 || in->inputClass == 4)
+                in->outputClass = 0;
+            if (in->inputClass == 1 || in->inputClass == 2 || in->inputClass == 3)
+                in->outputClass = 1;
+            if (in->inputClass == 6 || in->inputClass == 7)
+                in->outputClass = 2;
+            break;
+
+        case 13: /* -s found; look for data size */
+            break;
+
+        case 14: /* read data size */
+            if (getInputSize(in, (int) HDstrtol(argv[i], NULL, BASE_10)) == -1) {
+                (void) fprintf(stderr, err8, argv[i]);
+                goto err;
+            }
+            /*set default value for output-size */
+            in->outputSize = in->inputSize;
+            break;
 
-        if (in->inputClass == 0 || in->inputClass == 4)
-            in->outputClass = 0;
-        if (in->inputClass == 1 || in->inputClass == 2 || in->inputClass == 3)
-            in->outputClass = 1;
-        if (in->inputClass == 6 || in->inputClass == 7)
-            in->outputClass = 2;
-      break;
-
-      case 13:    /* -s found; look for data size */
-      break;
-
-      case 14:    /* read data size */
-        if (getInputSize(in, (int)HDstrtol(argv[i], NULL, BASE_10)) == -1)
-        {
-          (void) fprintf(stderr, err8, argv[i]);
-					goto err;
+        case ERR: /* command syntax error */
+        default:
+            (void) fprintf(stderr, "%s", err2);
+            usage(argv[0]);
+            goto err;
         }
-        /*set default value for output-size */
-        in->outputSize = in->inputSize;
-      break;
+    }
 
-      case ERR:   /* command syntax error */
-      default:
-        (void) fprintf(stderr, "%s", err2);
+    if (FALSE == outfile_named) {
+        (void) fprintf(stderr, "%s", err3);
         usage(argv[0]);
         goto err;
     }
-  }
 
-  if (FALSE == outfile_named)
-  {
-    (void) fprintf(stderr, "%s", err3);
-    usage(argv[0]);
-    goto err;
-  }
-
-  if (process(&opt) == -1)
-    goto err;
+    if (process(&opt) == -1)
+        goto err;
+    
+    for (i = 0; i < opt.fcount; i++) {
+        in = &(opt.infiles[i].in);
+        if (in->sizeOfDimension)
+            HDfree(in->sizeOfDimension);
+        if (in->sizeOfChunk)
+            HDfree(in->sizeOfChunk);
+        if (in->maxsizeOfDimension)
+            HDfree(in->maxsizeOfDimension);
+        if (in->externFilename)
+            HDfree(in->externFilename);
+        if (in->data)
+            HDfree(in->data);
+    }
 
-  return(EXIT_SUCCESS);
-  err:
+    return (EXIT_SUCCESS);
+err: 
     (void) fprintf(stderr, "%s", err4);
-    return(EXIT_FAILURE);
+    for (i = 0; i < opt.fcount; i++) {
+        in = &(opt.infiles[i].in);
+        if (in->sizeOfDimension)
+            HDfree(in->sizeOfDimension);
+        if (in->sizeOfChunk)
+            HDfree(in->sizeOfChunk);
+        if (in->maxsizeOfDimension)
+            HDfree(in->maxsizeOfDimension);
+        if (in->externFilename)
+            HDfree(in->externFilename);
+        if (in->data)
+            HDfree(in->data);
+    }
+    return (EXIT_FAILURE);
 }
 
-static int
-gtoken(char *s)
+static int gtoken(char *s)
 {
-  size_t      len;
-  int         token;
-
-  const char *err1 = "Illegal argument: %s.\n";
-
-  /*
-   * identify the token type
-   */
-  if (s[0] == '-')
-  {     /* option name (or negative number) */
-    token = ERR;
-    len = HDstrlen(&s[1]);
-    switch (s[1])
-    {
-      case 'o':
-        if (!HDstrncmp("outfile", &s[1], len))
-          token = OPT_o;
-      break;
-
-      case 'c':
-        if (!HDstrncmp("config", &s[1], len))
-          token = OPT_c;
-      break;
-
-      case 'h':
-        if (!HDstrncmp("help", &s[1], len))
-          token = OPT_h;
-      break;
-
-      case 'd':
-        if (!HDstrncmp("dims", &s[1], len))
-          token = OPT_d;
-      break;
-
-      case 'p':
-        if (!HDstrncmp("path", &s[1], len))
-          token = OPT_p;
-      break;
-
-      case 't':
-        if (!HDstrncmp("type", &s[1], len))
-          token = OPT_t;
-      break;
-
-      case 's':
-        if (!HDstrncmp("size", &s[1], len))
-          token = OPT_s;
-      break;
-    }
+    size_t      len;
+    int         token;
+
+    const char *err1 = "Illegal argument: %s.\n";
+
+    /*
+     * identify the token type
+     */
+    if (s[0] == '-') { /* option name (or negative number) */
+        token = ERR;
+        len = HDstrlen(&s[1]);
+        switch (s[1]) {
+        case 'o':
+            if (!HDstrncmp("outfile", &s[1], len))
+                token = OPT_o;
+            break;
 
-    if (token == ERR)
-      (void) fprintf(stderr, err1, s);
-  }
-  else    /* filename */
-  {
-    token = FILNAME;
-  }
-  return (token);
-}
+        case 'c':
+            if (!HDstrncmp("config", &s[1], len))
+                token = OPT_c;
+            break;
+
+        case 'h':
+            if (!HDstrncmp("help", &s[1], len))
+                token = OPT_h;
+            break;
+
+        case 'd':
+            if (!HDstrncmp("dims", &s[1], len))
+                token = OPT_d;
+            break;
+
+        case 'p':
+            if (!HDstrncmp("path", &s[1], len))
+                token = OPT_p;
+            break;
+
+        case 't':
+            if (!HDstrncmp("type", &s[1], len))
+                token = OPT_t;
+            break;
 
+        case 's':
+            if (!HDstrncmp("size", &s[1], len))
+                token = OPT_s;
+            break;
+        }
 
+        if (token == ERR)
+            (void) fprintf(stderr, err1, s);
+    }
+    else { /* filename */
+        token = FILNAME;
+    }
+    return (token);
+}
 
 /*-------------------------------------------------------------------------
  * Function:    processDataFile
@@ -282,501 +295,429 @@ gtoken(char *s)
  *-------------------------------------------------------------------------
  */
 
-static int
-processDataFile(char *infile, struct Input *in, FILE **strm, hid_t file_id)
+static int processDataFile(char *infile, struct Input *in, hid_t file_id)
 {
-  const char *err1 = "Unable to open the input file  %s for reading.\n";
-  const char *err2 = "Error in allocating integer data storage.\n";
-  const char *err3 = "Error in allocating floating-point data storage.\n";
-  const char *err4 = "Error in reading integer data.\n";
-  const char *err5 = "Error in reading floating-point data.\n";
-  const char *err6 = "Error in allocating unsigned integer data storage.\n";
-  const char *err7 = "Error in reading unsigned integer data.\n";
-  const char *err10 = "Unrecognized input class type.\n";
-  const char *err11 = "Error in reading string data.\n";
-
- /*-------------------------------------------------------------------------
-  * special case for opening binary classes in WIN32
-  * "FP" denotes a floating point binary file,
-  * "IN" denotes a signed integer binary file,
-  * "UIN" denotes an unsigned integer binary file,
-  *-------------------------------------------------------------------------
-  */
-  if ( in->inputClass == 4 /* "IN" */ ||
-       in->inputClass == 3 /* "FP" */ ||
-       in->inputClass == 7 /* "UIN" */
-
-      )
-  {
-
-#ifdef WIN32
-
-      if ((*strm = fopen(infile, "rb")) == NULL)
-      {
-          (void) fprintf(stderr, err1, infile);
-          return(-1);
-      }
-#else
-
-      if ((*strm = fopen(infile, "r")) == NULL)
-      {
-          (void) fprintf(stderr, err1, infile);
-          return(-1);
-      }
-
-#endif
-
-  }
- /*-------------------------------------------------------------------------
-  * if the input class is not binary, just use "r"
-  *-------------------------------------------------------------------------
-  */
-  else
-  {
-      if ((*strm = fopen(infile, "r")) == NULL)
-      {
-          (void) fprintf(stderr, err1, infile);
-          return(-1);
-      }
-  }
-
-
+    FILE       *strm;
+    const char *err1 = "Unable to open the input file  %s for reading.\n";
+    const char *err2 = "Error in allocating integer data storage.\n";
+    const char *err3 = "Error in allocating floating-point data storage.\n";
+    const char *err4 = "Error in reading integer data.\n";
+    const char *err5 = "Error in reading floating-point data.\n";
+    const char *err6 = "Error in allocating unsigned integer data storage.\n";
+    const char *err7 = "Error in reading unsigned integer data.\n";
+    const char *err10 = "Unrecognized input class type.\n";
+    const char *err11 = "Error in reading string data.\n";
+
+    /*-------------------------------------------------------------------------
+     * special case for opening binary classes in H5_HAVE_WIN32_API
+     * "FP" denotes a floating point binary file,
+     * "IN" denotes a signed integer binary file,
+     * "UIN" denotes an unsigned integer binary file,
+     *-------------------------------------------------------------------------
+     */
+    if (in->inputClass == 4 /* "IN" */|| in->inputClass == 3 /* "FP" */|| in->inputClass == 7 /* "UIN" */) {
+
+        if ((strm = HDfopen(infile, READ_OPEN_FLAGS)) == NULL) {
+            (void) fprintf(stderr, err1, infile);
+            return (-1);
+        }
+    }
+    /*-------------------------------------------------------------------------
+     * if the input class is not binary, just use "r"
+     *-------------------------------------------------------------------------
+     */
+    else {
+        if ((strm = HDfopen(infile, "r")) == NULL) {
+            (void) fprintf(stderr, err1, infile);
+            return (-1);
+        }
+    }
 
-  switch(in->inputClass)
-  {
+    switch (in->inputClass) {
     case 0: /*  TEXTIN */
     case 4: /*  IN  */
-      if (allocateIntegerStorage(in) == -1)
-      {
-        (void) fprintf(stderr, err2, infile);
-        return(-1);
-      }
-
-      if (readIntegerData(strm, in) == -1)
-      {
-        (void) fprintf(stderr, err4, infile);
-        return(-1);
-      }
-    break;
+        if (allocateIntegerStorage(in) == -1) {
+            (void) fprintf(stderr, err2, infile);
+            HDfclose(strm);
+            return (-1);
+        }
+
+        if (readIntegerData(strm, in) == -1) {
+            (void) fprintf(stderr, err4, infile);
+            HDfclose(strm);
+            return (-1);
+        }
+        break;
 
     case 1: /*  TEXTFP */
     case 2: /*  TEXTFPE  */
     case 3: /*  FP  */
-      if (allocateFloatStorage(in) == -1)
-      {
-        (void) fprintf(stderr, err3, infile);
-        return(-1);
+        if (allocateFloatStorage(in) == -1) {
+            (void) fprintf(stderr, err3, infile);
+            HDfclose(strm);
+            return (-1);
 
-      }
+        }
 
-      if (readFloatData(strm, in) == -1)
-      {
-        (void) fprintf(stderr, err5, infile);
-          return(-1);
-      }
-    break;
+        if (readFloatData(strm, in) == -1) {
+            (void) fprintf(stderr, err5, infile);
+            HDfclose(strm);
+            return (-1);
+        }
+        break;
 
     case 5: /*  STR  */
 
-        if (processStrData(strm, in, file_id) == -1)
-        {
+        if (processStrData(strm, in, file_id) == -1) {
             (void) fprintf(stderr, err11, infile);
-            return(-1);
+            HDfclose(strm);
+            return (-1);
         }
 
-
-
-    break;
+        break;
 
     case 6: /* TEXTUIN */
     case 7: /* UIN */
-      if (allocateUIntegerStorage(in) == -1)
-      {
-        (void) fprintf(stderr, err6, infile);
-          return(-1);
-      }
-      if (readUIntegerData(strm, in) == -1)
-      {
-        (void) fprintf(stderr, err7, infile);
-         return(-1);
-      }
-    break;
+        if (allocateUIntegerStorage(in) == -1) {
+            (void) fprintf(stderr, err6, infile);
+            HDfclose(strm);
+            return (-1);
+        }
+        if (readUIntegerData(strm, in) == -1) {
+            (void) fprintf(stderr, err7, infile);
+            HDfclose(strm);
+            return (-1);
+        }
+        break;
 
     default:
         (void) fprintf(stderr, "%s", err10);
-        return(-1);
-  }
-  return (0);
+        HDfclose(strm);
+        return (-1);
+    }
+    HDfclose(strm);
+    return (0);
 }
 
-static int
-readIntegerData(FILE **strm, struct Input *in)
+static int readIntegerData(FILE *strm, struct Input *in)
 {
-  H5DT_INT8 *in08;
-  H5DT_INT16 *in16, temp;
-  H5DT_INT32 *in32;
-#ifndef WIN32
-  H5DT_INT64 *in64;
-  char buffer[256];
+    H5DT_INT8  *in08;
+    H5DT_INT16 *in16;
+    H5DT_INT16  temp;
+    H5DT_INT32 *in32;
+#ifdef H5_SIZEOF_LONG_LONG
+    H5DT_INT64 *in64;
+    char        buffer[256];
 #endif
-  hsize_t len=1;
-  hsize_t i;
-  int j;
+    hsize_t     len = 1;
+    hsize_t     i;
+    int         j;
 
-  const char *err1 = "Unable to get integer value from file.\n";
-  const char *err2 = "Unrecognized input class type.\n";
-  const char *err3 = "Invalid input size.\n";
+    const char *err1 = "Unable to get integer value from file.\n";
+    const char *err2 = "Unrecognized input class type.\n";
+    const char *err3 = "Invalid input size.\n";
 
-  for (j=0; j<in->rank;j++)
-    len *= in->sizeOfDimension[j];
+    for (j = 0; j < in->rank; j++)
+        len *= in->sizeOfDimension[j];
 
-  switch(in->inputSize)
-  {
+    switch (in->inputSize) {
     case 8:
-      switch(in->inputClass)
-      {
+        switch (in->inputClass) {
         case 0: /* TEXTIN */
-          in08 = (H5DT_INT8 *) in->data;
-          for (i = 0; i < len; i++, in08++)
-          {
-            if (fscanf(*strm, "%hd", &temp) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            in08 = (H5DT_INT8 *) in->data;
+            for (i = 0; i < len; i++, in08++) {
+                if (fscanf(strm, "%hd", &temp) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
+                (*in08) = (H5DT_INT8) temp;
             }
-            (*in08) = (H5DT_INT8)temp;
-          }
-        break;
+            break;
 
         case 4: /* IN */
-          in08 = (H5DT_INT8 *) in->data;
-          for (i = 0; i < len; i++, in08++)
-          {
-            if (fread((char *) in08, sizeof(H5DT_INT8), 1, *strm) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            in08 = (H5DT_INT8 *) in->data;
+            for (i = 0; i < len; i++, in08++) {
+                if (HDfread((char *) in08, sizeof(H5DT_INT8), 1, strm) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
             }
-          }
-        break;
+            break;
 
         default:
-          (void) fprintf(stderr, "%s", err2);
-          return (-1);
-      }
-    break;
+            (void) fprintf(stderr, "%s", err2);
+            return (-1);
+        }
+        break;
 
     case 16:
-      in16 = (H5DT_INT16 *) in->data;
-      switch(in->inputClass)
-      {
+        in16 = (H5DT_INT16 *) in->data;
+        switch (in->inputClass) {
         case 0: /* TEXTIN */
-          for (i = 0; i < len; i++, in16++)
-          {
-            if (fscanf(*strm, "%hd", in16) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            for (i = 0; i < len; i++, in16++) {
+                if (fscanf(strm, "%hd", in16) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
             }
-          }
-          in16 = (H5DT_INT16 *) in->data;
-        break;
+            in16 = (H5DT_INT16 *) in->data;
+            break;
 
         case 4: /* IN */
-          for (i = 0; i < len; i++, in16++)
-          {
-            if (fread((char *) in16, sizeof(H5DT_INT16), 1, *strm) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            for (i = 0; i < len; i++, in16++) {
+                if (HDfread((char *) in16, sizeof(H5DT_INT16), 1, strm) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
             }
-          }
-        break;
+            break;
 
         default:
-          (void) fprintf(stderr, "%s", err2);
-          return (-1);
-      }
-    break;
+            (void) fprintf(stderr, "%s", err2);
+            return (-1);
+        }
+        break;
 
     case 32:
-      in32 = (H5DT_INT32 *) in->data;
-      switch(in->inputClass)
-      {
+        in32 = (H5DT_INT32 *) in->data;
+        switch (in->inputClass) {
         case 0: /* TEXTIN */
-          for (i = 0; i < len; i++, in32++)
-          {
-            if (fscanf(*strm, "%d", in32) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            for (i = 0; i < len; i++, in32++) {
+                if (fscanf(strm, "%d", in32) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
             }
-          }
-        break;
+            break;
 
         case 4: /* IN */
-          for (i = 0; i < len; i++, in32++)
-          {
-            if (fread((char *) in32, sizeof(H5DT_INT32), 1, *strm) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            for (i = 0; i < len; i++, in32++) {
+                if (HDfread((char *) in32, sizeof(H5DT_INT32), 1, strm) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
             }
-          }
-        break;
+            break;
 
         default:
-          (void) fprintf(stderr, "%s", err2);
-          return (-1);
-      }
-    break;
+            (void) fprintf(stderr, "%s", err2);
+            return (-1);
+        }
+        break;
 
-#ifndef _WIN32
+#ifdef H5_SIZEOF_LONG_LONG
     case 64:
-      in64 = (H5DT_INT64 *) in->data;
-      switch(in->inputClass)
-      {
+        in64 = (H5DT_INT64 *) in->data;
+        switch (in->inputClass) {
         case 0: /* TEXTIN */
-          for (i = 0; i < len; i++, in64++)
-          {
-            if (fscanf(*strm, "%s", buffer) < 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            for (i = 0; i < len; i++, in64++) {
+                if (fscanf(strm, "%s", buffer) < 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
+                *in64 = (H5DT_INT64) HDstrtoll(buffer, NULL, 10);
             }
-            *in64 = (H5DT_INT64) HDstrtoll(buffer, NULL, 10);
-          }
-        break;
+            break;
 
         case 4: /* IN */
-          for (i = 0; i < len; i++, in64++)
-          {
-            if (fread((char *) in64, sizeof(H5DT_INT64), 1, *strm) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            for (i = 0; i < len; i++, in64++) {
+                if (HDfread((char *) in64, sizeof(H5DT_INT64), 1, strm) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
             }
-          }
-        break;
+            break;
 
         default:
-          (void) fprintf(stderr, "%s", err2);
-          return (-1);
-      }
-  	  break;
-#endif /* ifndef _WIN32 */
+            (void) fprintf(stderr, "%s", err2);
+            return (-1);
+        }
+        break;
+#endif /* ifdef H5_SIZEOF_LONG_LONG */
 
     default:
-      (void) fprintf(stderr, "%s", err3);
-      break;
-  }
-  return(0);
+        (void) fprintf(stderr, "%s", err3);
+        break;
+    }
+    return (0);
 }
 
-static int
-readUIntegerData(FILE **strm, struct Input *in)
+static int readUIntegerData(FILE *strm, struct Input *in)
 {
-  H5DT_UINT8 *in08;
-  H5DT_UINT16 *in16, temp;
-  H5DT_UINT32 *in32;
-#ifndef _WIN32
-  H5DT_UINT64 *in64;
-  char buffer[256];
+    H5DT_UINT8  *in08;
+    H5DT_UINT16 *in16;
+    H5DT_UINT16  temp;
+    H5DT_UINT32 *in32;
+#ifdef H5_SIZEOF_LONG_LONG
+    H5DT_UINT64 *in64;
+    char        buffer[256];
 #endif
-  hsize_t len=1;
-  hsize_t i;
-  int j;
-  const char *err1 = "Unable to get unsigned integer value from file.\n";
-  const char *err2 = "Unrecognized input class type.\n";
-  const char *err3 = "Invalid input size.\n";
-
-  for (j=0; j<in->rank;j++)
-    len *= in->sizeOfDimension[j];
-
-  switch(in->inputSize)
-  {
+    hsize_t     len = 1;
+    hsize_t     i;
+    int         j;
+    const char *err1 = "Unable to get unsigned integer value from file.\n";
+    const char *err2 = "Unrecognized input class type.\n";
+    const char *err3 = "Invalid input size.\n";
+
+    for (j = 0; j < in->rank; j++)
+        len *= in->sizeOfDimension[j];
+
+    switch (in->inputSize) {
     case 8:
-      switch(in->inputClass)
-      {
+        switch (in->inputClass) {
         case 6: /* TEXTUIN */
-          in08 = (H5DT_UINT8 *) in->data;
-          for (i = 0; i < len; i++, in08++)
-          {
-            if (fscanf(*strm, "%hu", &temp) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            in08 = (H5DT_UINT8 *) in->data;
+            for (i = 0; i < len; i++, in08++) {
+                if (fscanf(strm, "%hu", &temp) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
+                (*in08) = (H5DT_UINT8) temp;
             }
-            (*in08) = (H5DT_UINT8)temp;
-          }
-        break;
+            break;
 
         case 7: /* UIN */
-          in08 = (H5DT_UINT8 *) in->data;
-          for (i = 0; i < len; i++, in08++)
-          {
-            if (fread((char *) in08, sizeof(H5DT_UINT8), 1, *strm) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            in08 = (H5DT_UINT8 *) in->data;
+            for (i = 0; i < len; i++, in08++) {
+                if (HDfread((char *) in08, sizeof(H5DT_UINT8), 1, strm) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
             }
-          }
-        break;
+            break;
 
         default:
-          (void) fprintf(stderr, "%s", err2);
-          return (-1);
-      }
-    break;
+            (void) fprintf(stderr, "%s", err2);
+            return (-1);
+        }
+        break;
 
     case 16:
-      in16 = (H5DT_UINT16 *) in->data;
-      switch(in->inputClass)
-      {
+        in16 = (H5DT_UINT16 *) in->data;
+        switch (in->inputClass) {
         case 6: /* TEXTUIN */
-          for (i = 0; i < len; i++, in16++)
-          {
-            if (fscanf(*strm, "%hu", in16) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            for (i = 0; i < len; i++, in16++) {
+                if (fscanf(strm, "%hu", in16) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
             }
-          }
-        break;
+            break;
 
         case 7: /* UIN */
-          for (i = 0; i < len; i++, in16++)
-          {
-            if (fread((char *) in16, sizeof(H5DT_UINT16), 1, *strm) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            for (i = 0; i < len; i++, in16++) {
+                if (HDfread((char *) in16, sizeof(H5DT_UINT16), 1, strm) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
             }
-          }
-        break;
+            break;
 
         default:
-          (void) fprintf(stderr, "%s", err2);
-          return (-1);
-      }
-    break;
+            (void) fprintf(stderr, "%s", err2);
+            return (-1);
+        }
+        break;
 
     case 32:
-      in32 = (H5DT_UINT32 *) in->data;
-      switch(in->inputClass)
-      {
+        in32 = (H5DT_UINT32 *) in->data;
+        switch (in->inputClass) {
         case 6: /* TEXTUIN */
-          for (i = 0; i < len; i++, in32++)
-          {
-            if (fscanf(*strm, "%u", in32) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            for (i = 0; i < len; i++, in32++) {
+                if (fscanf(strm, "%u", in32) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
             }
-          }
-        break;
+            break;
 
         case 7: /* UIN */
-          for (i = 0; i < len; i++, in32++)
-          {
-            if (fread((char *) in32, sizeof(H5DT_UINT32), 1, *strm) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            for (i = 0; i < len; i++, in32++) {
+                if (HDfread((char *) in32, sizeof(H5DT_UINT32), 1, strm) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
             }
-          }
-        break;
+            break;
 
         default:
-          (void) fprintf(stderr, "%s", err2);
-          return (-1);
-      }
-    break;
+            (void) fprintf(stderr, "%s", err2);
+            return (-1);
+        }
+        break;
 
-#ifndef _WIN32
+#ifdef H5_SIZEOF_LONG_LONG
     case 64:
-      in64 = (H5DT_UINT64 *) in->data;
-      switch(in->inputClass)
-      {
+        in64 = (H5DT_UINT64 *) in->data;
+        switch (in->inputClass) {
         case 6: /* TEXTUIN */
-          for (i = 0; i < len; i++, in64++)
-          {
-            if (fscanf(*strm, "%s", buffer) < 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            for (i = 0; i < len; i++, in64++) {
+                if (fscanf(strm, "%s", buffer) < 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
+                *in64 = (H5DT_UINT64) HDstrtoll(buffer, NULL, 10);
             }
-            *in64 = (H5DT_UINT64) HDstrtoll(buffer, NULL, 10);
-          }
-        break;
+            break;
 
         case 7: /* UIN */
-          for (i = 0; i < len; i++, in64++)
-          {
-            if (fread((char *) in64, sizeof(H5DT_UINT64), 1, *strm) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            for (i = 0; i < len; i++, in64++) {
+                if (HDfread((char *) in64, sizeof(H5DT_UINT64), 1, strm) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
             }
-          }
-        break;
+            break;
 
         default:
-          (void) fprintf(stderr, "%s", err2);
-          return (-1);
-      }
-    break;
-#endif /* ifndef _WIN32 */
+            (void) fprintf(stderr, "%s", err2);
+            return (-1);
+        }
+        break;
+#endif /* ifdef H5_SIZEOF_LONG_LONG */
 
     default:
-      (void) fprintf(stderr, "%s", err3);
-      break;
-  }
-  return(0);
+        (void) fprintf(stderr, "%s", err3);
+        break;
+    }
+    return (0);
 }
 
-static int
-readFloatData(FILE **strm, struct Input *in)
+static int readFloatData(FILE *strm, struct Input *in)
 {
-  H5DT_FLOAT32 *fp32;
-  H5DT_FLOAT64 *fp64;
+    H5DT_FLOAT32 *fp32;
+    H5DT_FLOAT64 *fp64;
 
-  hsize_t len=1;
-  hsize_t i;
-  int j;
-  const char *err1 = "Unable to get integer value from file.\n";
-  const char *err2 = "Unrecognized input class type.\n";
-  const char *err3 = "Invalid input size type.\n";
+    hsize_t     len = 1;
+    hsize_t     i;
+    int         j;
+    const char *err1 = "Unable to get integer value from file.\n";
+    const char *err2 = "Unrecognized input class type.\n";
+    const char *err3 = "Invalid input size type.\n";
 
-  for (j=0; j<in->rank;j++)
-    len *= in->sizeOfDimension[j];
+    for (j = 0; j < in->rank; j++)
+        len *= in->sizeOfDimension[j];
 
-  switch(in->inputSize)
-  {
+    switch (in->inputSize) {
     case 32:
-      fp32 = (H5DT_FLOAT32 *) in->data;
-      switch(in->inputClass)
-      {
+        fp32 = (H5DT_FLOAT32 *) in->data;
+        switch (in->inputClass) {
         case 1: /* TEXTFP */
-          for (i = 0; i < len; i++, fp32++)
-          {
-            if (fscanf(*strm, "%f", fp32) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            for (i = 0; i < len; i++, fp32++) {
+                if (fscanf(strm, "%f", fp32) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
             }
-          }
 
-          fp32 = (H5DT_FLOAT32 *) in->data;
-        break;
+            fp32 = (H5DT_FLOAT32 *) in->data;
+            break;
 
-        /* same as TEXTFP */
+            /* same as TEXTFP */
         case 2: /*TEXTFPE */
 
-            for (i = 0; i < len; i++, fp32++)
-            {
-                if (fscanf(*strm, "%f", fp32) != 1)
-                {
+            for (i = 0; i < len; i++, fp32++) {
+                if (fscanf(strm, "%f", fp32) != 1) {
                     (void) fprintf(stderr, "%s", err1);
                     return (-1);
                 }
@@ -786,46 +727,39 @@ readFloatData(FILE **strm, struct Input *in)
             break;
 
         case 3: /* FP */
-          for (i = 0; i < len; i++, fp32++)
-          {
-            if (fread((char *) fp32, sizeof(H5DT_FLOAT32), 1, *strm) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            for (i = 0; i < len; i++, fp32++) {
+                if (HDfread((char *) fp32, sizeof(H5DT_FLOAT32), 1, strm) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
             }
-          }
-        break;
+            break;
 
         default:
-          (void) fprintf(stderr, "%s", err2);
-          return (-1);
-      }
-    break;
+            (void) fprintf(stderr, "%s", err2);
+            return (-1);
+        }
+        break;
 
     case 64:
-      fp64 = (H5DT_FLOAT64 *) in->data;
-      switch(in->inputClass)
-      {
+        fp64 = (H5DT_FLOAT64 *) in->data;
+        switch (in->inputClass) {
         case 1: /* TEXTFP */
-          for (i = 0; i < len; i++, fp64++)
-          {
-            if (fscanf(*strm, "%lf", fp64) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            for (i = 0; i < len; i++, fp64++) {
+                if (fscanf(strm, "%lf", fp64) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
             }
-          }
 
-          fp64 = (H5DT_FLOAT64 *) in->data;
-        break;
+            fp64 = (H5DT_FLOAT64 *) in->data;
+            break;
 
-        /* same as TEXTFP */
+            /* same as TEXTFP */
         case 2: /*TEXTFPE */
 
-            for (i = 0; i < len; i++, fp64++)
-            {
-                if (fscanf(*strm, "%lf", fp64) != 1)
-                {
+            for (i = 0; i < len; i++, fp64++) {
+                if (fscanf(strm, "%lf", fp64) != 1) {
                     (void) fprintf(stderr, "%s", err1);
                     return (-1);
                 }
@@ -835,31 +769,27 @@ readFloatData(FILE **strm, struct Input *in)
             break;
 
         case 3: /* FP */
-          for (i = 0; i < len; i++, fp64++)
-          {
-            if (fread((char *) fp64, sizeof(H5DT_FLOAT64), 1, *strm) != 1)
-            {
-              (void) fprintf(stderr, "%s", err1);
-              return (-1);
+            for (i = 0; i < len; i++, fp64++) {
+                if (HDfread((char *) fp64, sizeof(H5DT_FLOAT64), 1, strm) != 1) {
+                    (void) fprintf(stderr, "%s", err1);
+                    return (-1);
+                }
             }
-          }
-        break;
+            break;
 
         default:
-          (void) fprintf(stderr, "%s", err2);
-          return (-1);
-      }
-    break;
+            (void) fprintf(stderr, "%s", err2);
+            return (-1);
+        }
+        break;
 
     default:
-      (void) fprintf(stderr, "%s", err3);
-      break;
-  }
-  return(0);
+        (void) fprintf(stderr, "%s", err3);
+        break;
+    }
+    return (0);
 }
 
-
-
 /*-------------------------------------------------------------------------
  * Function: processStrData
  *
@@ -874,63 +804,66 @@ readFloatData(FILE **strm, struct Input *in)
  *
  *-------------------------------------------------------------------------
  */
-static int
-processStrData(FILE **strm, struct Input *in, hid_t file_id)
+static int processStrData(FILE *strm, struct Input *in, hid_t file_id)
 {
-    hid_t   group_id, dset_id, space_id, mspace_id, type_id, handle;
+    hid_t   group_id;
+    hid_t   dset_id;
+    hid_t   space_id;
+    hid_t   mspace_id;
+    hid_t   type_id;
+    hid_t   handle;
     hsize_t dims[1];
     char    str[1024];
     char    c;
-    int     i = 0, j, nlines = 0, line;
+    int     i = 0;
+    int     j;
+    int     nlines = 0;
+    int     line;
 
-/*-------------------------------------------------------------------------
- * get number of lines in the input file
- *-------------------------------------------------------------------------
- */
+    /*-------------------------------------------------------------------------
+     * get number of lines in the input file
+     *-------------------------------------------------------------------------
+     */
 
-    while ( !feof( *strm ) )
-    {
-        c = fgetc( *strm );
+    while (!HDfeof(strm)) {
+        c = HDfgetc(strm);
 
-        if ( c == 10 ) /* eol */
-        {
+        if (c == 10) { /* eol */
             nlines++;
-
         }
     }
 
-    if ( !nlines )
+    if (!nlines)
         return 0;
 
     /* number of records */
     dims[0] = nlines;
 
     /* rewind */
-    fseek(*strm,0L,0);
+    HDfseek(strm, 0L, 0);
 
-/*-------------------------------------------------------------------------
- * read file again and generate an HDF5 dataset
- *-------------------------------------------------------------------------
- */
+    /*-------------------------------------------------------------------------
+     * read file again and generate an HDF5 dataset
+     *-------------------------------------------------------------------------
+     */
 
-    if (( type_id = H5Tcopy(H5T_C_S1)) < 0 )
+    if ((type_id = H5Tcopy(H5T_C_S1)) < 0)
         goto out;
 
-    if ( H5Tset_size (type_id,H5T_VARIABLE) < 0 )
+    if (H5Tset_size(type_id, H5T_VARIABLE) < 0)
         goto out;
 
     /* disable error reporting */
-    H5E_BEGIN_TRY
+    H5E_BEGIN_TRY 
     {
-
         /* create parent groups */
-        if(in->path.count > 1) {
+        if (in->path.count > 1) {
             j = 0;
             handle = file_id;
-            while(j < in->path.count - 1) {
-                if((group_id = H5Gopen2(handle, in->path.group[j], H5P_DEFAULT)) < 0) {
+            while (j < in->path.count - 1) {
+                if ((group_id = H5Gopen2(handle, in->path.group[j], H5P_DEFAULT)) < 0) {
                     group_id = H5Gcreate2(handle, in->path.group[j++], H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
-                    for(; j < in->path.count - 1; j++)
+                    for (; j < in->path.count - 1; j++)
                         group_id = H5Gcreate2(group_id, in->path.group[j], H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
                     handle = group_id;
                     break;
@@ -945,1446 +878,1305 @@ processStrData(FILE **strm, struct Input *in, hid_t file_id)
         }
 
         /*enable error reporting */
-    } H5E_END_TRY;
+    }
+    H5E_END_TRY;
 
-    if((space_id = H5Screate_simple(1, dims, NULL)) < 0)
+    if ((space_id = H5Screate_simple(1, dims, NULL)) < 0)
         goto out;
 
-    if((mspace_id = H5Screate(H5S_SCALAR)) < 0)
+    if ((mspace_id = H5Screate(H5S_SCALAR)) < 0)
         goto out;
 
-    if((dset_id = H5Dcreate2(handle, in->path.group[j], type_id, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
+    if ((dset_id = H5Dcreate2(handle, in->path.group[j], type_id, space_id, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
         goto out;
 
     line = 0;
 
-    while(!feof(*strm)) {
-        c = fgetc(*strm);
+    while (!HDfeof(strm)) {
+        c = HDfgetc(strm);
 
         str[i] = c;
 
         i++;
 
-        if(c == 10) /* eol */
-        {
-            char    *str2 = str;
-            hid_t   fspace_id;
+        if (c == 10) { /* eol */
+            char *str2 = str;
+            hid_t fspace_id;
             hsize_t start[1];
             hsize_t count[1] = { 1 };
 
-            str[ i-1 ] = '\0'; /* terminate string */
+            str[i - 1] = '\0'; /* terminate string */
 
-            if (( fspace_id = H5Dget_space (dset_id)) < 0 )
+            if ((fspace_id = H5Dget_space(dset_id)) < 0)
                 goto out;
 
-            start[0] = line ++ ;
+            start[0] = line++;
 
-            if ( H5Sselect_hyperslab(fspace_id,H5S_SELECT_SET,start,NULL,count,NULL) < 0 )
+            if (H5Sselect_hyperslab(fspace_id, H5S_SELECT_SET, start, NULL, count, NULL) < 0)
                 goto out;
 
-            if ( H5Dwrite(dset_id,type_id,mspace_id,fspace_id,H5P_DEFAULT, &str2 ) < 0 )
+            if (H5Dwrite(dset_id, type_id, mspace_id, fspace_id, H5P_DEFAULT, &str2) < 0)
                 goto out;
 
-            if ( H5Sclose(fspace_id) < 0 )
+            if (H5Sclose(fspace_id) < 0)
                 goto out;
 
             i = 0;
-            str[ 0 ] = '\0';
+            str[0] = '\0';
 
         }
     }
 
-
     /* close */
     H5Dclose(dset_id);
     H5Sclose(space_id);
     H5Sclose(mspace_id);
     H5Tclose(type_id);
 
-    return(0);
+    return (0);
 
 out:
 
     return (-1);
 }
 
-
-static int
-allocateIntegerStorage(struct Input *in)
+static int allocateIntegerStorage(struct Input *in)
 {
-  hsize_t len=1;
-  int j;
-  const char *err1 = "Unable to allocate dynamic memory.\n";
-  const char *err2 = "Invalid storage size for integer input data.\n";
+    hsize_t     len = 1;
+    int         j;
+    const char *err1 = "Unable to allocate dynamic memory.\n";
+    const char *err2 = "Invalid storage size for integer input data.\n";
 
-  for (j=0; j<in->rank;j++)
-    len *= in->sizeOfDimension[j];
+    for (j = 0; j < in->rank; j++)
+        len *= in->sizeOfDimension[j];
 
-  switch(in->inputSize)
-  {
+    switch (in->inputSize) {
     case 8:
-      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT8))) == NULL)
-      {
-        (void) fprintf(stderr, "%s", err1);
-        return (-1);
-      }
-    break;
+        if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT8))) == NULL) {
+            (void) fprintf(stderr, "%s", err1);
+            return (-1);
+        }
+        break;
 
     case 16:
-      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT16))) == NULL)
-      {
-        (void) fprintf(stderr, "%s", err1);
-        return (-1);
-      }
-    break;
+        if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT16))) == NULL) {
+            (void) fprintf(stderr, "%s", err1);
+            return (-1);
+        }
+        break;
 
     case 32:
-      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT32))) == NULL)
-      {
-        (void) fprintf(stderr, "%s", err1);
-        return (-1);
-      }
-    break;
+        if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT32))) == NULL) {
+            (void) fprintf(stderr, "%s", err1);
+            return (-1);
+        }
+        break;
 
     case 64:
-      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT64))) == NULL)
-      {
-        (void) fprintf(stderr, "%s", err1);
-        return (-1);
-      }
-    break;
+        if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_INT64))) == NULL) {
+            (void) fprintf(stderr, "%s", err1);
+            return (-1);
+        }
+        break;
 
     default:
-      (void) fprintf(stderr, "%s", err2);
-    break;
-  }
-  return(0);
+        (void) fprintf(stderr, "%s", err2);
+        break;
+    }
+    return (0);
 }
 
 static int allocateUIntegerStorage(struct Input *in)
 {
-  hsize_t len=1;
-  const char *err1 = "Unable to allocate dynamic memory.\n";
-  const char *err2 = "Invalid storage size for unsigned integer input data.\n";
-  int j;
+    hsize_t     len = 1;
+    const char *err1 = "Unable to allocate dynamic memory.\n";
+    const char *err2 = "Invalid storage size for unsigned integer input data.\n";
+    int         j;
 
-  for (j=0; j<in->rank;j++)
-    len *= in->sizeOfDimension[j];
+    for (j = 0; j < in->rank; j++)
+        len *= in->sizeOfDimension[j];
 
-  switch(in->inputSize)
-  {
+    switch (in->inputSize) {
     case 8:
-      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT8))) == NULL)
-      {
-        (void) fprintf(stderr, "%s", err1);
-        return (-1);
-      }
-      break;
+        if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT8))) == NULL) {
+            (void) fprintf(stderr, "%s", err1);
+            return (-1);
+        }
+        break;
 
     case 16:
-      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT16))) == NULL)
-      {
-        (void) fprintf(stderr, "%s", err1);
-        return (-1);
-      }
-      break;
+        if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT16))) == NULL) {
+            (void) fprintf(stderr, "%s", err1);
+            return (-1);
+        }
+        break;
 
     case 32:
-      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT32))) == NULL)
-      {
-        (void) fprintf(stderr, "%s", err1);
-        return (-1);
-      }
-      break;
+        if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT32))) == NULL) {
+            (void) fprintf(stderr, "%s", err1);
+            return (-1);
+        }
+        break;
 
     case 64:
-      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT64))) == NULL)
-      {
-        (void) fprintf(stderr, "%s", err1);
-        return (-1);
-      }
-      break;
+        if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_UINT64))) == NULL) {
+            (void) fprintf(stderr, "%s", err1);
+            return (-1);
+        }
+        break;
 
     default:
-      (void) fprintf(stderr, "%s", err2);
-      break;
-  }
-  return(0);
+        (void) fprintf(stderr, "%s", err2);
+        break;
+    }
+    return (0);
 }
 
-static int
-allocateFloatStorage(struct Input *in)
+static int allocateFloatStorage(struct Input *in)
 {
-  hsize_t len = 1;
-  int j;
-  const char *err1 = "Unable to allocate dynamic memory.\n";
-  const char *err2 = "Invalid storage size for float input data.\n";
+    hsize_t     len = 1;
+    int         j;
+    const char *err1 = "Unable to allocate dynamic memory.\n";
+    const char *err2 = "Invalid storage size for float input data.\n";
 
-  for (j=0; j<in->rank;j++)
-    len *= in->sizeOfDimension[j];
+    for (j = 0; j < in->rank; j++)
+        len *= in->sizeOfDimension[j];
 
-  switch(in->inputSize)
-  {
+    switch (in->inputSize) {
     case 32:
-      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_FLOAT32))) == NULL)
-      {
-        (void) fprintf(stderr, "%s", err1);
-        return (-1);
-      }
-    break;
+        if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_FLOAT32))) == NULL) {
+            (void) fprintf(stderr, "%s", err1);
+            return (-1);
+        }
+        break;
 
     case 64:
-      if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_FLOAT64))) == NULL)
-      {
-        (void) fprintf(stderr, "%s", err1);
-        return (-1);
-      }
-    break;
+        if ((in->data = (VOIDP) HDmalloc((size_t) len * sizeof(H5DT_FLOAT64))) == NULL) {
+            (void) fprintf(stderr, "%s", err1);
+            return (-1);
+        }
+        break;
 
     default:
-      (void) fprintf(stderr, "%s", err2);
-    break;
-  }
-  return(0);
+        (void) fprintf(stderr, "%s", err2);
+        break;
+    }
+    return (0);
 }
 
-static int
-processConfigurationFile(char *infile, struct Input *in, FILE **strm)
+static int processConfigurationFile(char *infile, struct Input *in)
 {
-  char key[255];
-  int kindex;
-  char temp[255];
-  int ival;
-
-  const char *err1 = "Unable to open the configuration file:  %s for reading.\n";
-  const char *err2 = "Unknown keyword in configuration file: %s\n";
-  const char *err3a = "PATH keyword appears twice in %s.\n";
-  const char *err3b = "Error in parsing the path information from %s.\n";
-  const char *err4a = "INPUT-CLASS keyword appears twice in %s.\n";
-  const char *err4b = "Error in retrieving the input class from %s.\n";
-  const char *err5a = "INPUT-SIZE keyword appears twice in %s.\n";
-  const char *err5b = "Error in retrieving the input size from %s.\n";
-  const char *err6a = "RANK keyword appears twice in %s.\n";
-  const char *err6b = "Error in retrieving the rank from %s.\n";
-  const char *err7a = "DIMENSION-SIZES keyword appears twice in %s.\n";
-  const char *err7b = "DIMENSION-SIZES cannot appear before RANK is provided.\n";
-  const char *err7c = "Error in retrieving the dimension sizes from %s.\n";
-  const char *err8a = "OUTPUT-CLASS keyword appears twice in %s.\n";
-  const char *err8b = "Error in retrieving the output class from %s.\n";
-  const char *err9a = "OUTPUT-SIZE keyword appears twice in %s.\n";
-  const char *err9b = "Error in retrieving the output size from %s.\n";
-  const char *err10a = "OUTPUT-ARCHITECTURE keyword appears twice in %s.\n";
-  const char *err10b = "Error in retrieving the output architecture from %s.\n";
-  const char *err11a = "OUTPUT-BYTE-ORDER keyword appears twice in %s.\n";
-  const char *err11b = "Error in retrieving the output byte order from %s.\n";
-  const char *err12a = "CHUNKED-DIMENSION-SIZES keyword appears twice in %s.\n";
-  const char *err12b = "CHUNKED-DIMENSION-SIZES cannot appear before DIMENSION-SIZES are provided.\n";
-  const char *err12c = "Error in retrieving the chunked dimension sizes from %s.\n";
-  const char *err13a = "COMPRESSION-TYPE keyword appears twice in %s.\n";
-  const char *err13b = "Error in retrieving the compression type from %s.\n";
-  const char *err14a = "COMPRESSION-PARAM keyword appears twice in %s.\n";
-  const char *err14b = "Error in retrieving the compression parameter from %s.\n";
-  const char *err15a = "EXTERNAL-STORAGE keyword appears twice in %s.\n";
-  const char *err15b = "Error in retrieving the external storage paramters from %s.\n";
-  const char *err16a = "MAXIMUM-DIMENSIONS keyword appears twice in %s.\n";
-  const char *err16b = "MAXIMUM-DIMENSIONS cannot appear before DIMENSION-SIZES are provided.\n";
-  const char *err16c = "Error in retrieving the maximum dimension sizes from %s.\n";
-  const char *err17 =  "Configuration parameters are invalid in %s.\n";
-  const char *err18 =  "Unable to get string value.\n";
-  const char *err19 =  "Unable to get integer value.\n";
-
-  /* create vector to map which keywords have been found
-  check vector after each keyword to check for violation
-  at the end check vector to see if required fields have been provided
-  process the output file according to the options
-  */
-
-  if ((*strm = fopen(infile, "r")) == NULL)
-  {
-    (void) fprintf(stderr, err1, infile);
-    return (-1);
-  }
-
-  while (fscanf(*strm, "%s", key) == 1)
-  {
-    if ((kindex = mapKeywordToIndex(key)) == -1)
-    {
-      (void) fprintf(stderr, err2, infile);
-      return (-1);
+    FILE       *strm;
+    char        key[255];
+    int         kindex;
+    char        temp[255];
+    int         ival;
+
+    const char *err1 = "Unable to open the configuration file:  %s for reading.\n";
+    const char *err2 = "Unknown keyword in configuration file: %s\n";
+    const char *err3a = "PATH keyword appears twice in %s.\n";
+    const char *err3b = "Error in parsing the path information from %s.\n";
+    const char *err4a = "INPUT-CLASS keyword appears twice in %s.\n";
+    const char *err4b = "Error in retrieving the input class from %s.\n";
+    const char *err5a = "INPUT-SIZE keyword appears twice in %s.\n";
+    const char *err5b = "Error in retrieving the input size from %s.\n";
+    const char *err6a = "RANK keyword appears twice in %s.\n";
+    const char *err6b = "Error in retrieving the rank from %s.\n";
+    const char *err7a = "DIMENSION-SIZES keyword appears twice in %s.\n";
+    const char *err7b = "DIMENSION-SIZES cannot appear before RANK is provided.\n";
+    const char *err7c = "Error in retrieving the dimension sizes from %s.\n";
+    const char *err8a = "OUTPUT-CLASS keyword appears twice in %s.\n";
+    const char *err8b = "Error in retrieving the output class from %s.\n";
+    const char *err9a = "OUTPUT-SIZE keyword appears twice in %s.\n";
+    const char *err9b = "Error in retrieving the output size from %s.\n";
+    const char *err10a = "OUTPUT-ARCHITECTURE keyword appears twice in %s.\n";
+    const char *err10b = "Error in retrieving the output architecture from %s.\n";
+    const char *err11a = "OUTPUT-BYTE-ORDER keyword appears twice in %s.\n";
+    const char *err11b = "Error in retrieving the output byte order from %s.\n";
+    const char *err12a = "CHUNKED-DIMENSION-SIZES keyword appears twice in %s.\n";
+    const char *err12b = "CHUNKED-DIMENSION-SIZES cannot appear before DIMENSION-SIZES are provided.\n";
+    const char *err12c = "Error in retrieving the chunked dimension sizes from %s.\n";
+    const char *err13a = "COMPRESSION-TYPE keyword appears twice in %s.\n";
+    const char *err13b = "Error in retrieving the compression type from %s.\n";
+    const char *err14a = "COMPRESSION-PARAM keyword appears twice in %s.\n";
+    const char *err14b = "Error in retrieving the compression parameter from %s.\n";
+    const char *err15a = "EXTERNAL-STORAGE keyword appears twice in %s.\n";
+    const char *err15b = "Error in retrieving the external storage paramters from %s.\n";
+    const char *err16a = "MAXIMUM-DIMENSIONS keyword appears twice in %s.\n";
+    const char *err16b = "MAXIMUM-DIMENSIONS cannot appear before DIMENSION-SIZES are provided.\n";
+    const char *err16c = "Error in retrieving the maximum dimension sizes from %s.\n";
+    const char *err17 = "Configuration parameters are invalid in %s.\n";
+    const char *err18 = "Unable to get string value.\n";
+    const char *err19 = "Unable to get integer value.\n";
+
+    /* create vector to map which keywords have been found
+     check vector after each keyword to check for violation
+     at the end check vector to see if required fields have been provided
+     process the output file according to the options
+     */
+
+    if ((strm = HDfopen(infile, "r")) == NULL) {
+        (void) fprintf(stderr, err1, infile);
+        return (-1);
     }
-    switch (kindex)
-    {
-      case 0: /* PATH */
-        if (in->configOptionVector[PATH] == 1)
-        {
-          (void) fprintf(stderr, err3a, infile);
-          return (-1);
-        }
-	if (fscanf(*strm, "%s", temp) != 1)
-	{
-	  (void) fprintf(stderr, "%s", err18);
-	  return (-1);
-	}
-        if (parsePathInfo(&in->path, temp) == -1)
-        {
-          (void) fprintf(stderr, err3b, infile);
-          return (-1);
-        }
-        in->configOptionVector[PATH] = 1;
-      break;
-
-      case 1: /* INPUT-CLASS */
-        if (in->configOptionVector[INPUT_CLASS] == 1)
-        {
-          (void) fprintf(stderr, err4a, infile);
-          return (-1);
-        }
 
-	if (fscanf(*strm, "%s", temp) != 1)
-	{
-	  (void) fprintf(stderr, "%s", err18);
-	  return (-1);
-	}
-        if (getInputClass(in, temp) == -1)
-        {
-          (void) fprintf(stderr, err4b, infile);
-          return (-1);
+    while (fscanf(strm, "%s", key) == 1) {
+        if ((kindex = mapKeywordToIndex(key)) == -1) {
+            (void) fprintf(stderr, err2, infile);
+            HDfclose(strm);
+            return (-1);
         }
+        switch (kindex) {
+        case 0: /* PATH */
+            if (in->configOptionVector[PATH] == 1) {
+                (void) fprintf(stderr, err3a, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            if (fscanf(strm, "%s", temp) != 1) {
+                (void) fprintf(stderr, "%s", err18);
+                HDfclose(strm);
+                return (-1);
+            }
+            if (parsePathInfo(&in->path, temp) == -1) {
+                (void) fprintf(stderr, err3b, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            in->configOptionVector[PATH] = 1;
+            break;
 
-        in->configOptionVector[INPUT_CLASS] = 1;
-
-        /*set default value for output-class */
-        if (in->configOptionVector[OUTPUT_CLASS] == 0)
-        {
-          if (in->inputClass == 0 || in->inputClass == 4)
-            in->outputClass = 0;
-          if (in->inputClass == 1 || in->inputClass == 2 || in->inputClass == 3)
-            in->outputClass = 1;
-          if (in->inputClass == 6 || in->inputClass == 7)
-            in->outputClass = 2;
-        }
-      break;
+        case 1: /* INPUT-CLASS */
+            if (in->configOptionVector[INPUT_CLASS] == 1) {
+                (void) fprintf(stderr, err4a, infile);
+                HDfclose(strm);
+                return (-1);
+            }
 
-      case 2: /* INPUT-SIZE */
-        if (in->configOptionVector[INPUT_SIZE] == 1)
-        {
-          (void) fprintf(stderr, err5a, infile);
-          return (-1);
-        }
-	if (fscanf(*strm, "%d", (&ival)) != 1)
-	{
-	  (void) fprintf(stderr, "%s", err19);
-	  return (-1);
-	}
-        if (getInputSize(in, ival) == -1)
-        {
-          (void) fprintf(stderr, err5b, infile);
-          return (-1);
-        }
-        in->configOptionVector[INPUT_SIZE] = 1;
-
-        /*set default value for output-size */
-        if (in->configOptionVector[OUTPUT_SIZE] == 0)
-          in->outputSize = in->inputSize;
-      break;
-
-      case 3: /* RANK */
-        if (in->configOptionVector[RANK] == 1)
-        {
-          (void) fprintf(stderr, err6a, infile);
-          return (-1);
-        }
+            if (fscanf(strm, "%s", temp) != 1) {
+                (void) fprintf(stderr, "%s", err18);
+                HDfclose(strm);
+                return (-1);
+            }
+            if (getInputClass(in, temp) == -1) {
+                (void) fprintf(stderr, err4b, infile);
+                HDfclose(strm);
+                return (-1);
+            }
 
-        if (getRank(in, strm) == -1)
-        {
-          (void) fprintf(stderr, err6b, infile);
-          return (-1);
-        }
-        in->configOptionVector[RANK] = 1;
-      break;
-
-      case 4: /* DIMENSION-SIZES */
-        if (in->configOptionVector[DIM] == 1)
-        {
-          (void) fprintf(stderr, err7a, infile);
-          return (-1);
-        }
+            in->configOptionVector[INPUT_CLASS] = 1;
+
+            /*set default value for output-class */
+            if (in->configOptionVector[OUTPUT_CLASS] == 0) {
+                if (in->inputClass == 0 || in->inputClass == 4)
+                    in->outputClass = 0;
+                if (in->inputClass == 1 || in->inputClass == 2
+                        || in->inputClass == 3)
+                    in->outputClass = 1;
+                if (in->inputClass == 6 || in->inputClass == 7)
+                    in->outputClass = 2;
+            }
+            break;
 
-        if (in->configOptionVector[RANK] == 0)
-        {
-          (void) fprintf(stderr, err7b, infile);
-          return (-1);
-        }
-        if (getDimensionSizes(in, strm) == -1)
-        {
-          (void) fprintf(stderr, err7c, infile);
-          return (-1);
-        }
-        in->configOptionVector[DIM] = 1;
-      break;
-
-      case 5: /* OUTPUT-CLASS */
-        if (in->configOptionVector[OUTPUT_CLASS] == 1)
-        {
-          (void) fprintf(stderr, err8a, infile);
-          return (-1);
-        }
+        case 2: /* INPUT-SIZE */
+            if (in->configOptionVector[INPUT_SIZE] == 1) {
+                (void) fprintf(stderr, err5a, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            if (fscanf(strm, "%d", (&ival)) != 1) {
+                (void) fprintf(stderr, "%s", err19);
+                HDfclose(strm);
+                return (-1);
+            }
+            if (getInputSize(in, ival) == -1) {
+                (void) fprintf(stderr, err5b, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            in->configOptionVector[INPUT_SIZE] = 1;
 
-        if (getOutputClass(in, strm) == -1)
-        {
-          (void) fprintf(stderr, err8b, infile);
-          return (-1);
-        }
-        in->configOptionVector[OUTPUT_CLASS] = 1;
-      break;
-
-      case 6: /* OUTPUT-SIZE */
-        if (in->configOptionVector[OUTPUT_SIZE] == 1)
-        {
-          (void) fprintf(stderr, err9a, infile);
-          return (-1);
-        }
+            /*set default value for output-size */
+            if (in->configOptionVector[OUTPUT_SIZE] == 0)
+                in->outputSize = in->inputSize;
+            break;
 
-        if (getOutputSize(in, strm) == -1)
-        {
-          (void) fprintf(stderr, err9b, infile);
-          return (-1);
-        }
-        in->configOptionVector[OUTPUT_SIZE] = 1;
-      break;
-
-      case 7: /* OUTPUT-ARCHITECTURE */
-        if (in->configOptionVector[OUTPUT_ARCH] == 1)
-        {
-          (void) fprintf(stderr, err10a, infile);
-          return (-1);
-        }
+        case 3: /* RANK */
+            if (in->configOptionVector[RANK] == 1) {
+                (void) fprintf(stderr, err6a, infile);
+                HDfclose(strm);
+                return (-1);
+            }
 
-        if (getOutputArchitecture(in, strm) == -1)
-        {
-          (void) fprintf(stderr, err10b, infile);
-          return (-1);
-        }
-        in->configOptionVector[OUTPUT_ARCH] = 1;
-      break;
-
-      case 8: /* OUTPUT-BYTE-ORDER */
-        if (in->configOptionVector[OUTPUT_B_ORDER] == 1)
-        {
-          (void) fprintf(stderr, err11a, infile);
-          return (-1);
-        }
+            if (getRank(in, strm) == -1) {
+                (void) fprintf(stderr, err6b, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            in->configOptionVector[RANK] = 1;
+            break;
 
-        if (getOutputByteOrder(in, strm) == -1)
-        {
-          (void) fprintf(stderr, err11b, infile);
-          return (-1);
-        }
-        in->configOptionVector[OUTPUT_B_ORDER] = 1;
-      break;
-
-      case 9: /* CHUNKED-DIMENSION-SIZES */
-        if (in->configOptionVector[CHUNK] == 1)
-        {
-          (void) fprintf(stderr, err12a, infile);
-          return (-1);
-        }
-        /* cant appear before dimension sizes have been provided */
-        if (in->configOptionVector[DIM] == 0)
-        {
-          (void) fprintf(stderr, err12b, infile);
-          return (-1);
-        }
+        case 4: /* DIMENSION-SIZES */
+            if (in->configOptionVector[DIM] == 1) {
+                (void) fprintf(stderr, err7a, infile);
+                HDfclose(strm);
+                return (-1);
+            }
 
-        if (getChunkedDimensionSizes(in, strm) == -1)
-        {
-          (void) fprintf(stderr, err12c, infile);
-          return (-1);
-        }
-        in->configOptionVector[CHUNK] = 1;
-      break;
-
-      case 10: /* COMPRESSION-TYPE */
-        if (in->configOptionVector[COMPRESS] == 1)
-        {
-          (void) fprintf(stderr, err13a, infile);
-          return (-1);
-        }
+            if (in->configOptionVector[RANK] == 0) {
+                (void) fprintf(stderr, err7b, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            if (getDimensionSizes(in, strm) == -1) {
+                (void) fprintf(stderr, err7c, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            in->configOptionVector[DIM] = 1;
+            break;
 
-        if (getCompressionType(in, strm) == -1)
-        {
-          (void) fprintf(stderr, err13b, infile);
-          return (-1);
-        }
-        in->configOptionVector[COMPRESS] = 1;
+        case 5: /* OUTPUT-CLASS */
+            if (in->configOptionVector[OUTPUT_CLASS] == 1) {
+                (void) fprintf(stderr, err8a, infile);
+                HDfclose(strm);
+                return (-1);
+            }
 
-        if (in->configOptionVector[COMPRESS_PARAM] == 0)
-        {
-          if (in->compressionType == 0)
-            in->compressionParam = 6; /* default value if compressionType is GZIP */
-        }
-      break;
+            if (getOutputClass(in, strm) == -1) {
+                (void) fprintf(stderr, err8b, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            in->configOptionVector[OUTPUT_CLASS] = 1;
+            break;
 
-      case 11: /* COMPRESSION-PARAM */
-        if (in->configOptionVector[COMPRESS_PARAM] == 1)
-        {
-          (void) fprintf(stderr, err14a, infile);
-          return (-1);
-        }
+        case 6: /* OUTPUT-SIZE */
+            if (in->configOptionVector[OUTPUT_SIZE] == 1) {
+                (void) fprintf(stderr, err9a, infile);
+                HDfclose(strm);
+                return (-1);
+            }
 
-        if (getCompressionParameter(in, strm) == -1)
-        {
-          (void) fprintf(stderr, err14b, infile);
-          return (-1);
-        }
+            if (getOutputSize(in, strm) == -1) {
+                (void) fprintf(stderr, err9b, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            in->configOptionVector[OUTPUT_SIZE] = 1;
+            break;
 
-        in->configOptionVector[COMPRESS_PARAM] = 1;
+        case 7: /* OUTPUT-ARCHITECTURE */
+            if (in->configOptionVector[OUTPUT_ARCH] == 1) {
+                (void) fprintf(stderr, err10a, infile);
+                HDfclose(strm);
+                return (-1);
+            }
 
-        if (in->configOptionVector[COMPRESS] == 0)
-          in->compressionType = 0;
+            if (getOutputArchitecture(in, strm) == -1) {
+                (void) fprintf(stderr, err10b, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            in->configOptionVector[OUTPUT_ARCH] = 1;
+            break;
 
+        case 8: /* OUTPUT-BYTE-ORDER */
+            if (in->configOptionVector[OUTPUT_B_ORDER] == 1) {
+                (void) fprintf(stderr, err11a, infile);
+                HDfclose(strm);
+                return (-1);
+            }
 
-      break;
+            if (getOutputByteOrder(in, strm) == -1) {
+                (void) fprintf(stderr, err11b, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            in->configOptionVector[OUTPUT_B_ORDER] = 1;
+            break;
 
-      case 12: /* EXTERNAL-STORAGE */
-        if (in->configOptionVector[EXTERNAL] == 1)
-        {
-          (void) fprintf(stderr, err15a, infile);
-          return (-1);
-        }
+        case 9: /* CHUNKED-DIMENSION-SIZES */
+            if (in->configOptionVector[CHUNK] == 1) {
+                (void) fprintf(stderr, err12a, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            /* cant appear before dimension sizes have been provided */
+            if (in->configOptionVector[DIM] == 0) {
+                (void) fprintf(stderr, err12b, infile);
+                HDfclose(strm);
+                return (-1);
+            }
 
-        if (getExternalFilename(in, strm) == -1)
-        {
-          (void) fprintf(stderr, err15b, infile);
-          return (-1);
-        }
-        in->configOptionVector[EXTERNAL] = 1;
-      break;
-
-      case 13: /* MAXIMUM-DIMENSIONS */
-        if (in->configOptionVector[EXTEND] == 1)
-        {
-          (void) fprintf(stderr, err16a, infile);
-          return (-1);
-        }
-        /* cant appear before dimension sizes have been provided */
-        if (in->configOptionVector[DIM] == 0)
-        {
-          (void) fprintf(stderr, err16b, infile);
-          return (-1);
-        }
-        if (getMaximumDimensionSizes(in, strm) == -1)
-        {
-          (void) fprintf(stderr, err16c, infile);
-          return (-1);
-        }
-        in->configOptionVector[EXTEND] = 1;
-      break;
+            if (getChunkedDimensionSizes(in, strm) == -1) {
+                (void) fprintf(stderr, err12c, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            in->configOptionVector[CHUNK] = 1;
+            break;
 
-      default:
-        break;
+        case 10: /* COMPRESSION-TYPE */
+            if (in->configOptionVector[COMPRESS] == 1) {
+                (void) fprintf(stderr, err13a, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+
+            if (getCompressionType(in, strm) == -1) {
+                (void) fprintf(stderr, err13b, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            in->configOptionVector[COMPRESS] = 1;
+
+            if (in->configOptionVector[COMPRESS_PARAM] == 0) {
+                if (in->compressionType == 0)
+                    in->compressionParam = 6; /* default value if compressionType is GZIP */
+            }
+            break;
+
+        case 11: /* COMPRESSION-PARAM */
+            if (in->configOptionVector[COMPRESS_PARAM] == 1) {
+                (void) fprintf(stderr, err14a, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+
+            if (getCompressionParameter(in, strm) == -1) {
+                (void) fprintf(stderr, err14b, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+
+            in->configOptionVector[COMPRESS_PARAM] = 1;
+
+            if (in->configOptionVector[COMPRESS] == 0)
+                in->compressionType = 0;
+
+            break;
+
+        case 12: /* EXTERNAL-STORAGE */
+            if (in->configOptionVector[EXTERNAL] == 1) {
+                (void) fprintf(stderr, err15a, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+
+            if (getExternalFilename(in, strm) == -1) {
+                (void) fprintf(stderr, err15b, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            in->configOptionVector[EXTERNAL] = 1;
+            break;
+
+        case 13: /* MAXIMUM-DIMENSIONS */
+            if (in->configOptionVector[EXTEND] == 1) {
+                (void) fprintf(stderr, err16a, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            /* cant appear before dimension sizes have been provided */
+            if (in->configOptionVector[DIM] == 0) {
+                (void) fprintf(stderr, err16b, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            if (getMaximumDimensionSizes(in, strm) == -1) {
+                (void) fprintf(stderr, err16c, infile);
+                HDfclose(strm);
+                return (-1);
+            }
+            in->configOptionVector[EXTEND] = 1;
+            break;
+
+        default:
+            break;
+        }
+    }
+    /*
+     check if keywords obtained are valid
+     if yes, return 0 else error
+     */
+
+    if (validateConfigurationParameters(in) == -1) {
+        (void) fprintf(stderr, err17, infile);
+        HDfclose(strm);
+        return (-1);
     }
-  }
-  /*
-    check if keywords obtained are valid
-    if yes, return 0 else error
-  */
-
-  if (validateConfigurationParameters(in) == -1)
-  {
-    (void) fprintf(stderr, err17, infile);
-    return (-1);
-  }
 
-  return (0);
+    HDfclose(strm);
+    return (0);
 }
 
-static int
-validateConfigurationParameters(struct Input * in)
+static int validateConfigurationParameters(struct Input *in)
 {
-  const char *err1 = "One or more of the required fields (RANK, DIMENSION-SIZES) missing.\n";
-  const char *err2 = "Cannot specify chunking or compression or extendible data sets with the external file option.\n";
-  const char *err3 = "Cannot specify the compression or the extendible data sets without the chunking option.\n";
-  const char *err4a = "OUTPUT-ARCHITECTURE cannot be STD if OUTPUT-CLASS is floating point (FP).\n";
-  const char *err4b = "OUTPUT-ARCHITECTURE cannot be IEEE if OUTPUT-CLASS is integer (IN).\n";
-  const char *err5 = "For OUTPUT-CLASS FP, valid values for OUTPUT-SIZE are (32, 64) .\n";
-#ifdef _WIN32
-  const char *err6 = "No support for reading 64-bit integer (INPUT-CLASS: IN, TEXTIN, UIN, TEXTUIN files\n";
+    const char *err1 = "One or more of the required fields (RANK, DIMENSION-SIZES) missing.\n";
+    const char *err2 = "Cannot specify chunking or compression or extendible data sets with the external file option.\n";
+    const char *err3 = "Cannot specify the compression or the extendible data sets without the chunking option.\n";
+    const char *err4a = "OUTPUT-ARCHITECTURE cannot be STD if OUTPUT-CLASS is floating point (FP).\n";
+    const char *err4b = "OUTPUT-ARCHITECTURE cannot be IEEE if OUTPUT-CLASS is integer (IN).\n";
+    const char *err5 = "For OUTPUT-CLASS FP, valid values for OUTPUT-SIZE are (32, 64) .\n";
+#ifndef H5_SIZEOF_LONG_LONG
+    const char *err6 = "No support for reading 64-bit integer (INPUT-CLASS: IN, TEXTIN, UIN, TEXTUIN files\n";
 #endif
 
-   /* for class STR other parameters are ignored */
-  if (in->inputClass == 5) /* STR */
-      return (0);
+    /* for class STR other parameters are ignored */
+    if (in->inputClass == 5) /* STR */
+        return (0);
 
-  if (
-      (in->configOptionVector[DIM] != 1) ||
-      (in->configOptionVector[RANK] != 1))
-  {
-    (void) fprintf(stderr, "%s", err1);
-    return (-1);
-  }
-
-  if (in->configOptionVector[EXTERNAL] == 1)
-  {
-    if ((in->configOptionVector[COMPRESS] == 1) ||
-        (in->configOptionVector[CHUNK] == 1) ||
-        (in->configOptionVector[EXTEND] == 1))
-    {
-      (void) fprintf(stderr, "%s", err2);
-      return (-1);
+    if ((in->configOptionVector[DIM] != 1) || (in->configOptionVector[RANK] != 1)) {
+        (void) fprintf(stderr, "%s", err1);
+        return (-1);
     }
-  }
 
-  if ((in->configOptionVector[COMPRESS] == 1) ||
-      (in->configOptionVector[EXTEND] == 1))
-  {
-    if (in->configOptionVector[CHUNK] != 1)
-    {
-      (void) fprintf(stderr, "%s", err3);
-      return (-1);
+    if (in->configOptionVector[EXTERNAL] == 1) {
+        if ((in->configOptionVector[COMPRESS] == 1) || (in->configOptionVector[CHUNK] == 1) || (in->configOptionVector[EXTEND] == 1)) {
+            (void) fprintf(stderr, "%s", err2);
+            return (-1);
+        }
     }
-  }
 
-  /* Arch cant be STD if O/p class is FP */
-  if (in->outputArchitecture == 1)
-    if (in->outputClass == 1)
-    {
-      (void) fprintf(stderr, "%s", err4a);
-      return (-1);
+    if ((in->configOptionVector[COMPRESS] == 1) || (in->configOptionVector[EXTEND] == 1)) {
+        if (in->configOptionVector[CHUNK] != 1) {
+            (void) fprintf(stderr, "%s", err3);
+            return (-1);
+        }
     }
 
-  /* Arch cant be IEEE if O/p class is IN */
-  if (in->outputArchitecture == 2)
-    if (in->outputClass == 0)
-    {
-      (void) fprintf(stderr, "%s", err4b);
-      return (-1);
-    }
+    /* Arch cant be STD if O/p class is FP */
+    if (in->outputArchitecture == 1)
+        if (in->outputClass == 1) {
+            (void) fprintf(stderr, "%s", err4a);
+            return (-1);
+        }
 
-  if (in->outputClass == 1)
-    if(in->outputSize != 32 &&
-       in->outputSize != 64 )
-    {
-      (void) fprintf(stderr, "%s", err5);
-      return (-1);
-    }
+    /* Arch cant be IEEE if O/p class is IN */
+    if (in->outputArchitecture == 2)
+        if (in->outputClass == 0) {
+            (void) fprintf(stderr, "%s", err4b);
+            return (-1);
+        }
+
+    if (in->outputClass == 1)
+        if (in->outputSize != 32 && in->outputSize != 64) {
+            (void) fprintf(stderr, "%s", err5);
+            return (-1);
+        }
 
-#ifdef _WIN32
-  if (in->inputSize == 64 && (in->inputClass == 0 || in->inputClass == 4 || in->inputClass == 6 || in->inputClass == 7) )
-	{
-	  (void) fprintf(stderr, "%s", err6);
-	  return -1;
-	}
+#ifndef H5_SIZEOF_LONG_LONG
+    if (in->inputSize == 64 && (in->inputClass == 0 || in->inputClass == 4 || in->inputClass == 6 || in->inputClass == 7) ) {
+        (void) fprintf(stderr, "%s", err6);
+        return -1;
+    }
 #endif
-  return (0);
+    return (0);
 }
 
-static int
-mapKeywordToIndex(char *key)
+static int mapKeywordToIndex(char *key)
 {
-  int i;
+    int i;
 
-  for (i=0; i<NUM_KEYS; i++)
-    if (!HDstrcmp(keytable[i], key)) return i;
-  return -1;
+    for (i = 0; i < NUM_KEYS; i++)
+        if (!HDstrcmp(keytable[i], key))
+            return i;
+    return -1;
 }
 
-static int
-parsePathInfo(struct path_info *path, char *temp)
+static int parsePathInfo(struct path_info *path, char *temp)
 {
-  const char delimiter[] = "/";
-  char *token;
-  int i=0;
-  const char *err1 = "Path string larger than MAX_PATH_NAME_LENGTH.\n";
-
-  token = HDstrtok (temp, delimiter);
-  if (HDstrlen(token) >= MAX_PATH_NAME_LENGTH)
-  {
-    (void) fprintf(stderr, err1);
-    return (-1);
-  }
-   HDstrcpy(path->group[i++],token);
-
-
-  while (1)
-  {
-    token = HDstrtok (NULL, delimiter);
-    if (token == NULL)
-      break;
-    if (HDstrlen(token) >= MAX_PATH_NAME_LENGTH)
-    {
-      (void) fprintf(stderr, err1);
-      return (-1);
+    const char  delimiter[] = "/";
+    char       *token;
+    int         i = 0;
+    const char *err1 = "Path string larger than MAX_PATH_NAME_LENGTH.\n";
+
+    token = HDstrtok (temp, delimiter);
+    if (HDstrlen(token) >= MAX_PATH_NAME_LENGTH) {
+        (void) fprintf(stderr, err1);
+        return (-1);
     }
     HDstrcpy(path->group[i++],token);
-  }
-  path->count = i;
-  return (0);
+
+    while (1) {
+        token = HDstrtok (NULL, delimiter);
+        if (token == NULL)
+            break;
+        if (HDstrlen(token) >= MAX_PATH_NAME_LENGTH) {
+            (void) fprintf(stderr, err1);
+            return (-1);
+        }
+        HDstrcpy(path->group[i++],token);
+    }
+    path->count = i;
+    return (0);
 }
 
-static int
-parseDimensions(struct Input *in, char *strm)
+static int parseDimensions(struct Input *in, char *strm)
 {
-  const char delimiter[] = ",";
-  char temp[255];
-  char *token;
-  int i=0;
-  const char *err1 = "Unable to allocate dynamic memory.\n";
-
-  HDstrncpy(temp, strm, sizeof(temp));
-  temp[sizeof(temp)-1] = '\0';
-  HDstrtok (temp, delimiter);
-
-  while (1)
-  {
-    token = HDstrtok (NULL, delimiter);
-    if (token == NULL)
-      break;
-    i++;
-  }
-  in->rank = i+1;
-  if ((in->sizeOfDimension =
-               (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL)
-  {
-    (void) fprintf(stderr, "%s", err1);
-    return (-1);
-  }
-
-  i=0;
-  HDstrncpy(temp, strm, sizeof(temp));
-  temp[sizeof(temp)-1] = '\0';
-  in->sizeOfDimension[i++] = HDstrtol(HDstrtok (temp, delimiter), NULL, BASE_10);
-
-  while (1)
-  {
-    token = HDstrtok (NULL, delimiter);
-    if (token == NULL)
-      break;
-    in->sizeOfDimension[i++] = HDstrtol(token, NULL, BASE_10);
-  }
-  return (0);
+    const char  delimiter[] = ",";
+    char        temp[255];
+    char       *token;
+    int         i = 0;
+    const char *err1 = "Unable to allocate dynamic memory.\n";
+
+    HDstrncpy(temp, strm, sizeof(temp));
+    temp[sizeof(temp) - 1] = '\0';
+    HDstrtok (temp, delimiter);
+
+    while (1) {
+        token = HDstrtok (NULL, delimiter);
+        if (token == NULL)
+            break;
+        i++;
+    }
+    in->rank = i + 1;
+    if ((in->sizeOfDimension = (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL) {
+        (void) fprintf(stderr, "%s", err1);
+        return (-1);
+    }
+
+    i = 0;
+    HDstrncpy(temp, strm, sizeof(temp));
+    temp[sizeof(temp) - 1] = '\0';
+    in->sizeOfDimension[i++]
+            = HDstrtol(HDstrtok (temp, delimiter), NULL, BASE_10);
+
+    while (1) {
+        token = HDstrtok (NULL, delimiter);
+        if (token == NULL)
+            break;
+        in->sizeOfDimension[i++] = HDstrtol(token, NULL, BASE_10);
+    }
+    return (0);
 }
 
-static int
-getOutputClass(struct Input *in, FILE** strm)
+static int getOutputClass(struct Input *in, FILE *strm)
 {
-  char temp[255];
-  int kindex;
-  const char *err1 = "Unable to get 'string' value.\n";
-  const char *err2 = "Invalid value for output class.\n";
+    char        temp[255];
+    int         kindex;
+    const char *err1 = "Unable to get 'string' value.\n";
+    const char *err2 = "Invalid value for output class.\n";
 
-  if (fscanf(*strm, "%s", temp) != 1)
-    {
-    (void) fprintf(stderr, "%s", err1);
-    return (-1);
-  }
+    if (fscanf(strm, "%s", temp) != 1) {
+        (void) fprintf(stderr, "%s", err1);
+        return (-1);
+    }
 
-  if ((kindex = OutputClassStrToInt(temp)) == -1)
-  {
-    (void) fprintf(stderr, "%s", err2);
-    return (-1);
-  }
+    if ((kindex = OutputClassStrToInt(temp)) == -1) {
+        (void) fprintf(stderr, "%s", err2);
+        return (-1);
+    }
 
-  in->outputClass = kindex;
-  return (0);
+    in->outputClass = kindex;
+    return (0);
 }
 
-static int
-OutputClassStrToInt(char *temp)
+static int OutputClassStrToInt(char *temp)
 {
-  int i;
-  char classKeywordTable[3][15] = {
-    "IN",
-    "FP",
-    "UIN"
-  };
-  for  (i=0; i<3; i++)
-    if (!HDstrcmp(classKeywordTable[i], temp)) return i;
-
-  return -1;
+    int     i;
+    char    classKeywordTable[3][15] = { "IN", "FP", "UIN" };
+    for (i = 0; i < 3; i++)
+        if (!HDstrcmp(classKeywordTable[i], temp))
+            return i;
+
+    return -1;
 }
- /* same as getInputSize. But defined separately for extensibility */
-static int
-getOutputSize(struct Input *in, FILE** strm)
+/* same as getInputSize. But defined separately for extensibility */
+static int getOutputSize(struct Input *in, FILE *strm)
 {
-  int ival;
-  int i;
-  int outputSizeValidValues[4] = {8,16,32,64};
-  const char *err1 = "Unable to get integer value.\n";
-  const char *err2 = "Invalid value for output size.\n";
-
-  if (fscanf(*strm, "%d", (&ival)) != 1)
-  {
-    (void) fprintf(stderr, "%s", err1);
-        return (-1);
-  }
+    int         ival;
+    int         i;
+    int         outputSizeValidValues[4] = { 8, 16, 32, 64 };
+    const char *err1 = "Unable to get integer value.\n";
+    const char *err2 = "Invalid value for output size.\n";
 
-  for  (i=0; i<4; i++)
-    if (outputSizeValidValues[i] == ival)
-    {
-      in->outputSize = ival;
-      return (0);
+    if (fscanf(strm, "%d", (&ival)) != 1) {
+        (void) fprintf(stderr, "%s", err1);
+        return (-1);
     }
-  (void) fprintf(stderr, "%s", err2);
-  return(-1);
+
+    for (i = 0; i < 4; i++)
+        if (outputSizeValidValues[i] == ival) {
+            in->outputSize = ival;
+            return (0);
+        }
+    (void) fprintf(stderr, "%s", err2);
+    return (-1);
 }
 
-static int
-getInputClass(struct Input *in, char * temp)
+static int getInputClass(struct Input *in, char * temp)
 {
-  int kindex;
-  const char *err1 = "Invalid value for input class.\n";
+    int         kindex;
+    const char *err1 = "Invalid value for input class.\n";
 
-  if ((kindex = InputClassStrToInt(temp)) == -1)
-  {
-    (void) fprintf(stderr, "%s", err1);
-    return (-1);
-  }
+    if ((kindex = InputClassStrToInt(temp)) == -1) {
+        (void) fprintf(stderr, "%s", err1);
+        return (-1);
+    }
 
-  in->inputClass = kindex;
-  return (0);
+    in->inputClass = kindex;
+    return (0);
 }
 
-static int
-InputClassStrToInt(char *temp)
+static int InputClassStrToInt(char *temp)
 {
-  int i;
-  char classKeywordTable[8][15] = {
-    "TEXTIN",
-    "TEXTFP",
-    "TEXTFPE",
-    "FP",
-    "IN",
-    "STR",
-    "TEXTUIN",
-    "UIN"
-  };
-  for  (i=0; i<8; i++)
-    if (!HDstrcmp(classKeywordTable[i], temp)) return i;
-  return -1;
+    int     i;
+    char    classKeywordTable[8][15] = { "TEXTIN", "TEXTFP", "TEXTFPE", "FP", "IN", "STR", "TEXTUIN", "UIN" };
+    for (i = 0; i < 8; i++)
+        if (!HDstrcmp(classKeywordTable[i], temp))
+            return i;
+    return -1;
 }
 
- /* same as getOutputSize. But defined separately for extensibility */
-static int
-getInputSize(struct Input *in, int ival)
+/* same as getOutputSize. But defined separately for extensibility */
+static int getInputSize(struct Input *in, int ival)
 {
-  int i;
-  int inputSizeValidValues[4] = {8,16,32,64};
-  const char *err1 = "Invalid value for input size.\n";
-
-  for  (i=0; i<4; i++)
-    if (inputSizeValidValues[i] == ival)
-    {
-      in->inputSize = ival;
-      return (0);
-    }
-  (void) fprintf(stderr, "%s", err1);
-  return(-1);
+    int         i;
+    int         inputSizeValidValues[4] = { 8, 16, 32, 64 };
+    const char *err1 = "Invalid value for input size.\n";
+
+    for (i = 0; i < 4; i++)
+        if (inputSizeValidValues[i] == ival) {
+            in->inputSize = ival;
+            return (0);
+        }
+    (void) fprintf(stderr, "%s", err1);
+    return (-1);
 }
 
-static int
-getRank(struct Input *in, FILE** strm)
+static int getRank(struct Input *in, FILE *strm)
 {
-  int ival;
+    int         ival;
 
-  const char *err1 = "Unable to get integer value.\n";
-  const char *err2 = "Invalid value for rank.\n";
+    const char *err1 = "Unable to get integer value.\n";
+    const char *err2 = "Invalid value for rank.\n";
 
-  if (fscanf(*strm, "%d", (&ival)) != 1)
-  {
-    (void) fprintf(stderr, "%s", err1);
-    return (-1);
-  }
-  if (ival >=MIN_NUM_DIMENSION && ival <=MAX_NUM_DIMENSION )
-  {
-    in->rank = ival;
-    return (0);
-  }
+    if (fscanf(strm, "%d", (&ival)) != 1) {
+        (void) fprintf(stderr, "%s", err1);
+        return (-1);
+    }
+    if (ival >= MIN_NUM_DIMENSION && ival <= MAX_NUM_DIMENSION) {
+        in->rank = ival;
+        return (0);
+    }
 
-  (void) fprintf(stderr, "%s", err2);
-  return(-1);
+    (void) fprintf(stderr, "%s", err2);
+    return (-1);
 }
 
- /* same as getChunkedDimensionSizes. But defined separately for extensibility */
-static int
-getDimensionSizes(struct Input *in, FILE **strm)
+/* same as getChunkedDimensionSizes. But defined separately for extensibility */
+static int getDimensionSizes(struct Input *in, FILE *strm)
 {
-  int ival;
-  int i=0;
+    int         ival;
+    int         i = 0;
 
-  const char *err1 = "Unable to allocate dynamic memory.\n";
-  const char *err2 = "No. of dimensions for which dimension sizes provided is not equal to provided rank.\n";
+    const char *err1 = "Unable to allocate dynamic memory.\n";
+    const char *err2 = "No. of dimensions for which dimension sizes provided is not equal to provided rank.\n";
 
-  if ((in->sizeOfDimension =
-               (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL)
-  {
-    (void) fprintf(stderr, "%s", err1);
-    return (-1);
-  }
+    if ((in->sizeOfDimension = (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL) {
+        (void) fprintf(stderr, "%s", err1);
+        return (-1);
+    }
 
-  while (fscanf(*strm, "%d", (&ival)) == 1)
-    in->sizeOfDimension[i++] = ival;
+    while (fscanf(strm, "%d", (&ival)) == 1)
+        in->sizeOfDimension[i++] = ival;
 
-  if (in->rank != i)
-  {
-    (void) fprintf(stderr, "%s", err2);
-    return (-1);
-  }
-  return (0);
+    if (in->rank != i) {
+        (void) fprintf(stderr, "%s", err2);
+        return (-1);
+    }
+    return (0);
 }
- /* same as getDimensionSizes. But defined separately for extensibility */
-static int
-getChunkedDimensionSizes(struct Input *in, FILE **strm)
+/* same as getDimensionSizes. But defined separately for extensibility */
+static int getChunkedDimensionSizes(struct Input *in, FILE *strm)
 {
-  int ival;
-  int i=0;
+    int         ival;
+    int         i = 0;
 
-  const char *err1 = "Unable to allocate dynamic memory.\n";
-  const char *err2 = "No. of dimensions for which chunked dimension sizes provided is not equal to provided rank.\n";
-  const char *err3 = "The CHUNKED-DIMENSION-SIZES cannot exceed the sizes of DIMENSION-SIZES\n";
+    const char *err1 = "Unable to allocate dynamic memory.\n";
+    const char *err2 = "No. of dimensions for which chunked dimension sizes provided is not equal to provided rank.\n";
+    const char *err3 = "The CHUNKED-DIMENSION-SIZES cannot exceed the sizes of DIMENSION-SIZES\n";
 
-  if ((in->sizeOfChunk =
-           (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL)
-  {
-    (void) fprintf(stderr, "%s", err1);
-    return (-1);
-  }
-
-  while (fscanf(*strm, "%d", (&ival)) == 1)
-      in->sizeOfChunk[i++] = ival;
+    if ((in->sizeOfChunk = (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL) {
+        (void) fprintf(stderr, "%s", err1);
+        return (-1);
+    }
 
-  if (in->rank != i)
-  {
-    (void) fprintf(stderr, "%s", err2);
-    return (-1);
-  }
+    while (fscanf(strm, "%d", (&ival)) == 1)
+        in->sizeOfChunk[i++] = ival;
 
-  for (i=0; i<in->rank; i++)
-    if (in->sizeOfChunk[i] > in->sizeOfDimension[i])
-    {
-      (void) fprintf(stderr, "%s", err3);
-      return (-1);
+    if (in->rank != i) {
+        (void) fprintf(stderr, "%s", err2);
+        return (-1);
     }
-  return (0);
+
+    for (i = 0; i < in->rank; i++)
+        if (in->sizeOfChunk[i] > in->sizeOfDimension[i]) {
+            (void) fprintf(stderr, "%s", err3);
+            return (-1);
+        }
+    return (0);
 }
 
-static int
-getMaximumDimensionSizes(struct Input *in, FILE **strm)
+static int getMaximumDimensionSizes(struct Input *in, FILE *strm)
 {
-  int ival;
-  int i=0;
+    int         ival;
+    int         i = 0;
 
-  const char *err1 = "Unable to allocate dynamic memory.\n";
-  const char *err2 = "No. of dimensions for which maximum dimension sizes provided is not equal to provided rank.\n";
-  const char *err3 = "The MAXIMUM-DIMENSIONS cannot be less than the sizes of DIMENSION-SIZES. Exception: can be -1 to indicate unlimited size\n";
+    const char *err1 = "Unable to allocate dynamic memory.\n";
+    const char *err2 = "No. of dimensions for which maximum dimension sizes provided is not equal to provided rank.\n";
+    const char *err3 = "The MAXIMUM-DIMENSIONS cannot be less than the sizes of DIMENSION-SIZES. Exception: can be -1 to indicate unlimited size\n";
 
-  if ((in->maxsizeOfDimension =
-                (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL)
-  {
-    (void) fprintf(stderr, "%s", err1);
-    return (-1);
-  }
-
-  while (fscanf(*strm, "%d", (&ival)) == 1)
-  {
-    if (ival == -1)
-         in->maxsizeOfDimension[i++] = H5S_UNLIMITED;
-    else
-         in->maxsizeOfDimension[i++] = ival;
-  }
-
-  if (in->rank != i)
-  {
-    (void) fprintf(stderr, "%s", err2);
-    return (-1);
-  }
+    if ((in->maxsizeOfDimension = (hsize_t *) HDmalloc ((size_t) in->rank * sizeof(hsize_t))) == NULL) {
+        (void) fprintf(stderr, "%s", err1);
+        return (-1);
+    }
 
-  for (i=0; i<in->rank; i++)
-  {
-    if (in->maxsizeOfDimension[i] != H5S_UNLIMITED)
-      if (in->maxsizeOfDimension[i] < in->sizeOfDimension[i])
-      {
-        (void) fprintf(stderr, "%s", err3);
+    while (fscanf(strm, "%d", (&ival)) == 1) {
+        if (ival == -1)
+            in->maxsizeOfDimension[i++] = H5S_UNLIMITED;
+        else
+            in->maxsizeOfDimension[i++] = ival;
+    }
+
+    if (in->rank != i) {
+        (void) fprintf(stderr, "%s", err2);
         return (-1);
-      }
-  }
-  return (0);
+    }
+
+    for (i = 0; i < in->rank; i++) {
+        if (in->maxsizeOfDimension[i] != H5S_UNLIMITED)
+            if (in->maxsizeOfDimension[i] < in->sizeOfDimension[i]) {
+                (void) fprintf(stderr, "%s", err3);
+                return (-1);
+            }
+    }
+    return (0);
 }
 
-static int
-getOutputArchitecture(struct Input *in, FILE** strm)
+static int getOutputArchitecture(struct Input *in, FILE *strm)
 {
-  char temp[255];
-  int kindex;
-  const char *err1 = "Unable to get 'string' value.\n";
-  const char *err2 = "Invalid value for output architecture.\n";
+    char        temp[255];
+    int         kindex;
+    const char *err1 = "Unable to get 'string' value.\n";
+    const char *err2 = "Invalid value for output architecture.\n";
 
-  if (fscanf(*strm, "%s", temp) != 1)
-  {
-    (void) fprintf(stderr, "%s", err1);
-    return (-1);
-  }
+    if (fscanf(strm, "%s", temp) != 1) {
+        (void) fprintf(stderr, "%s", err1);
+        return (-1);
+    }
 
-  if ((kindex = OutputArchStrToInt(temp)) == -1)
-  {
-    (void) fprintf(stderr, "%s", err2);
-    return (-1);
-  }
+    if ((kindex = OutputArchStrToInt(temp)) == -1) {
+        (void) fprintf(stderr, "%s", err2);
+        return (-1);
+    }
 
-  in->outputArchitecture = kindex;
-  return (0);
+    in->outputArchitecture = kindex;
+    return (0);
 }
 
-static int
-OutputArchStrToInt(char *temp)
+static int OutputArchStrToInt(char *temp)
 {
-  int i;
-  char outputArchKeywordTable[8][15] = {
-    "NATIVE",
-    "STD",
-    "IEEE",
-    "INTEL",
-    "CRAY",
-    "MIPS",
-    "ALPHA",
-    "UNIX"
-  };
-  for  (i=0; i<8; i++)
-    if (!HDstrcmp(outputArchKeywordTable[i], temp)) return i;
-  return -1;
+    int     i;
+    char    outputArchKeywordTable[8][15] = { "NATIVE", "STD", "IEEE", "INTEL",
+            "CRAY", "MIPS", "ALPHA", "UNIX" };
+    for (i = 0; i < 8; i++)
+        if (!HDstrcmp(outputArchKeywordTable[i], temp))
+            return i;
+    return -1;
 }
 
-static int
-getOutputByteOrder(struct Input *in, FILE** strm)
+static int getOutputByteOrder(struct Input *in, FILE *strm)
 {
-  char temp[255];
-  int kindex;
-  const char *err1 = "Unable to get 'string' value.\n";
-  const char *err2 = "Invalid value for output byte-order.\n";
+    char        temp[255];
+    int         kindex;
+    const char *err1 = "Unable to get 'string' value.\n";
+    const char *err2 = "Invalid value for output byte-order.\n";
 
-  if (fscanf(*strm, "%s", temp) != 1)
-  {
-    (void) fprintf(stderr, "%s", err1);
-    return (-1);
-  }
+    if (fscanf(strm, "%s", temp) != 1) {
+        (void) fprintf(stderr, "%s", err1);
+        return (-1);
+    }
 
-  if ((kindex = OutputByteOrderStrToInt(temp)) == -1)
-  {
-    (void) fprintf(stderr, "%s", err2);
-    return (-1);
-  }
+    if ((kindex = OutputByteOrderStrToInt(temp)) == -1) {
+        (void) fprintf(stderr, "%s", err2);
+        return (-1);
+    }
 
-  in->outputByteOrder = kindex;
-  return (0);
+    in->outputByteOrder = kindex;
+    return (0);
 }
 
-static int
-OutputByteOrderStrToInt(char *temp)
+static int OutputByteOrderStrToInt(char *temp)
 {
-  int i;
-  char outputByteOrderKeywordTable[2][15] = {
-    "BE",
-    "LE"
-  };
-  for  (i=0; i<2; i++)
-    if (!HDstrcmp(outputByteOrderKeywordTable[i], temp)) return i;
-  return -1;
+    int     i;
+    char    outputByteOrderKeywordTable[2][15] = { "BE", "LE" };
+    for (i = 0; i < 2; i++)
+        if (!HDstrcmp(outputByteOrderKeywordTable[i], temp))
+            return i;
+    return -1;
 }
 
-static int
-getCompressionType(struct Input *in, FILE** strm)
+static int getCompressionType(struct Input *in, FILE *strm)
 {
-  char temp[255];
-  int kindex;
-  const char *err1 = "Unable to get 'string' value.\n";
-  const char *err2 = "Invalid value for compression.\n";
+    char        temp[255];
+    int         kindex;
+    const char *err1 = "Unable to get 'string' value.\n";
+    const char *err2 = "Invalid value for compression.\n";
 
-  if (fscanf(*strm, "%s", temp) != 1)
-  {
-    (void) fprintf(stderr, "%s", err1);
-    return (-1);
-  }
+    if (fscanf(strm, "%s", temp) != 1) {
+        (void) fprintf(stderr, "%s", err1);
+        return (-1);
+    }
 
-  if ((kindex = CompressionTypeStrToInt(temp)) == -1)
-  {
-    (void) fprintf(stderr, "%s", err2);
-    return (-1);
-  }
+    if ((kindex = CompressionTypeStrToInt(temp)) == -1) {
+        (void) fprintf(stderr, "%s", err2);
+        return (-1);
+    }
 
-  in->compressionType = kindex;
-  return (0);
+    in->compressionType = kindex;
+    return (0);
 
 }
 
-static int
-CompressionTypeStrToInt(char *temp)
+static int CompressionTypeStrToInt(char *temp)
 {
-  /* currently supports only GZIP */
-  /* can be extended by adding fields to the table */
-
-  int i;
-  char CompressionTypeKeywordTable[1][15] = {
-    "GZIP"
-  };
-  for  (i=0; i<1; i++)
-    if (!HDstrcmp(CompressionTypeKeywordTable[i], temp)) return i;
-  return -1;
+    /* currently supports only GZIP */
+    /* can be extended by adding fields to the table */
+
+    int     i;
+    char    CompressionTypeKeywordTable[1][15] = { "GZIP" };
+    for (i = 0; i < 1; i++)
+        if (!HDstrcmp(CompressionTypeKeywordTable[i], temp))
+            return i;
+    return -1;
 }
 
-static int
-getCompressionParameter(struct Input *in, FILE** strm)
+static int getCompressionParameter(struct Input *in, FILE *strm)
 {
-  /*  currently supports only GZIP */
-  /*  can be extended by adding more values to COMPRESSION-TYPE and
-    handling the paramters here by adding more cases  */
-
-  int ival;
-  const char *err1 = "Unable to get integer value.\n";
-  const char *err2 = "Invalid value for compression paramter.\n";
-  const char *err3 = "Unsupported Compression Type.\n";
-
-  switch (in->compressionType)
-  {
-    case 0:    /* GZIP */
-      if (fscanf(*strm, "%d", (&ival)) != 1)
-      {
-        (void) fprintf(stderr, "%s", err1);
-        return (-1);
-      }
+    /*  currently supports only GZIP */
+    /*  can be extended by adding more values to COMPRESSION-TYPE and */
+    /*  handling the paramters here by adding more cases  */
+
+    int         ival;
+    const char *err1 = "Unable to get integer value.\n";
+    const char *err2 = "Invalid value for compression paramter.\n";
+    const char *err3 = "Unsupported Compression Type.\n";
+
+    switch (in->compressionType) {
+    case 0: /* GZIP */
+        if (fscanf(strm, "%d", (&ival)) != 1) {
+            (void) fprintf(stderr, "%s", err1);
+            return (-1);
+        }
 
-      if (ival <0 || ival > 9)
-      {
-        (void) fprintf(stderr, "%s", err2);
-        return (-1);
-      }
-      in->compressionParam = ival;
-      return (0);
+        if (ival < 0 || ival > 9) {
+            (void) fprintf(stderr, "%s", err2);
+            return (-1);
+        }
+        in->compressionParam = ival;
+        return (0);
 
     default:
-      (void) fprintf(stderr, "%s", err3);
-      return (-1);
-  }
+        (void) fprintf(stderr, "%s", err3);
+        return (-1);
+    }
 }
 
-static int
-getExternalFilename(struct Input *in, FILE** strm)
+static int getExternalFilename(struct Input *in, FILE *strm)
 {
-  char temp[255];
-  const char *err1 = "Unable to get 'string' value.\n";
+    char        temp[255];
+    const char *err1 = "Unable to get 'string' value.\n";
 
-  if (fscanf(*strm, "%s", temp) != 1)
-  {
-    (void) fprintf(stderr, "%s", err1);
-    return (-1);
-  }
+    if (fscanf(strm, "%s", temp) != 1) {
+        (void) fprintf(stderr, "%s", err1);
+        return (-1);
+    }
 
-  in->externFilename = (char *) HDmalloc ((size_t) (HDstrlen(temp)) * sizeof(char));
-  (void) HDstrcpy(in->externFilename, temp);
-  return (0);
+    in->externFilename = (char *) HDmalloc ((size_t) (HDstrlen(temp)) * sizeof(char));
+    (void) HDstrcpy(in->externFilename, temp);
+    return (0);
 }
 
-void
-setDefaultValues(struct Input *in, int count)
+void setDefaultValues(struct Input *in, int count)
 {
-  int i;
-  char temp[255];
-  char num[255];
-
-  in->inputClass = 3; /* FP */
-  in->inputSize = 32;
-  in->outputClass = 1; /* FP */
-  in->outputSize = 32;
-  in->rank = 0;
-  in->path.count = 1;
-
-  HDstrcpy(temp, "dataset");
-  sprintf(num, "%d", count);
-  HDstrcat(temp, num);
-  HDstrcpy(in->path.group[0], temp);
-
-  in->outputArchitecture = 0; /* NATIVE */
-  in->outputByteOrder = -1;  /* use default    */
-  in->compressionType = 0;  /* GZIP   */
-  for (i=0; i<NUM_KEYS; i++)
-    in->configOptionVector[i] = 0;
+    int     i;
+    char    temp[255];
+    char    num[255];
+
+    in->inputClass = 3; /* FP */
+    in->inputSize = 32;
+    in->outputClass = 1; /* FP */
+    in->outputSize = 32;
+    in->rank = 0;
+    in->path.count = 1;
+
+    HDstrcpy(temp, "dataset");
+    sprintf(num, "%d", count);
+    HDstrcat(temp, num);
+    HDstrcpy(in->path.group[0], temp);
+
+    in->outputArchitecture = 0; /* NATIVE */
+    in->outputByteOrder = -1; /* use default    */
+    in->compressionType = 0; /* GZIP   */
+    for (i = 0; i < NUM_KEYS; i++)
+        in->configOptionVector[i] = 0;
 }
 
-hid_t
-createOutputDataType(struct Input *in)
+hid_t createOutputDataType(struct Input *in)
 {
-  hid_t new_type = (-1);
-  const char *err1 = "Invalid value for output class.\n";
+    hid_t       new_type = (-1);
+    const char *err1 = "Invalid value for output class.\n";
 
-  switch (in->outputClass)
-  {
+    switch (in->outputClass) {
     case 0:
-      switch (in->outputArchitecture)
-      {
+        switch (in->outputArchitecture) {
         case 0: /* NATIVE */
-          switch(in->outputSize)
-          {
+            switch (in->outputSize) {
             case 8:
-              new_type = H5Tcopy (H5T_NATIVE_CHAR);
-            break;
+                new_type = H5Tcopy(H5T_NATIVE_CHAR);
+                break;
 
             case 16:
-              new_type = H5Tcopy (H5T_NATIVE_SHORT);
-            break;
+                new_type = H5Tcopy(H5T_NATIVE_SHORT);
+                break;
 
             case 32:
-              new_type = H5Tcopy (H5T_NATIVE_INT);
-            break;
+                new_type = H5Tcopy(H5T_NATIVE_INT);
+                break;
 
             case 64:
-              new_type = H5Tcopy (H5T_NATIVE_LLONG);
-            break;
-          }
-              switch(in->outputByteOrder)
-              {
-                case -1: /* default */
+                new_type = H5Tcopy(H5T_NATIVE_LLONG);
                 break;
-                case 0:
-                  H5Tset_order (new_type,H5T_ORDER_BE);
+            }
+            switch (in->outputByteOrder) {
+            case -1: /* default */
+                break;
+            case 0:
+                H5Tset_order(new_type, H5T_ORDER_BE);
                 break;
 
-                case 1:
-                  H5Tset_order (new_type,H5T_ORDER_LE);
+            case 1:
+                H5Tset_order(new_type, H5T_ORDER_LE);
                 break;
-              }
-        break;
+            }
+            break;
 
         case 1: /* STD */
-          switch(in->outputSize)
-          {
+            switch (in->outputSize) {
             case 8:
-              switch(in->outputByteOrder)
-              {
+                switch (in->outputByteOrder) {
                 case -1:
                 case 0:
-                  new_type = H5Tcopy (H5T_STD_I8BE);
-                break;
+                    new_type = H5Tcopy(H5T_STD_I8BE);
+                    break;
 
                 case 1:
-                  new_type = H5Tcopy (H5T_STD_I8LE);
+                    new_type = H5Tcopy(H5T_STD_I8LE);
+                    break;
+                }
                 break;
-              }
-            break;
 
             case 16:
-              switch(in->outputByteOrder)
-              {
+                switch (in->outputByteOrder) {
                 case -1:
                 case 0:
-                  new_type = H5Tcopy (H5T_STD_I16BE);
-                break;
+                    new_type = H5Tcopy(H5T_STD_I16BE);
+                    break;
 
                 case 1:
-                  new_type = H5Tcopy (H5T_STD_I16LE);
+                    new_type = H5Tcopy(H5T_STD_I16LE);
+                    break;
+                }
                 break;
-              }
-            break;
 
             case 32:
-              switch(in->outputByteOrder)
-              {
+                switch (in->outputByteOrder) {
                 case -1:
                 case 0:
-                  new_type = H5Tcopy (H5T_STD_I32BE);
-                break;
+                    new_type = H5Tcopy(H5T_STD_I32BE);
+                    break;
 
                 case 1:
-                  new_type = H5Tcopy (H5T_STD_I32LE);
+                    new_type = H5Tcopy(H5T_STD_I32LE);
+                    break;
+                }
                 break;
-              }
-            break;
 
             case 64:
-              switch(in->outputByteOrder)
-              {
+                switch (in->outputByteOrder) {
                 case -1:
                 case 0:
-                  new_type = H5Tcopy (H5T_STD_I64BE);
-                break;
+                    new_type = H5Tcopy(H5T_STD_I64BE);
+                    break;
 
                 case 1:
-                  new_type = H5Tcopy (H5T_STD_I64LE);
+                    new_type = H5Tcopy(H5T_STD_I64LE);
+                    break;
+                }
                 break;
-              }
+            }
             break;
-          }
-          break;
 
         }
         break;
 
     case 1:
-      switch (in->outputArchitecture)
-      {
+        switch (in->outputArchitecture) {
         case 0:
-          switch(in->outputSize)
-          {
+            switch (in->outputSize) {
             case 32:
-              new_type = H5Tcopy (H5T_NATIVE_FLOAT);
-            break;
+                new_type = H5Tcopy(H5T_NATIVE_FLOAT);
+                break;
 
             case 64:
-              new_type = H5Tcopy (H5T_NATIVE_DOUBLE);
-            break;
-          }
-              switch(in->outputByteOrder)
-              {
-                case -1: /* DEFAULT */
+                new_type = H5Tcopy(H5T_NATIVE_DOUBLE);
                 break;
-                case 0:
-                  H5Tset_order (new_type,H5T_ORDER_BE);
+            }
+            switch (in->outputByteOrder) {
+            case -1: /* DEFAULT */
+                break;
+            case 0:
+                H5Tset_order(new_type, H5T_ORDER_BE);
                 break;
 
-                case 1:
-                  H5Tset_order (new_type,H5T_ORDER_LE);
+            case 1:
+                H5Tset_order(new_type, H5T_ORDER_LE);
                 break;
-              }
-        break;
+            }
+            break;
 
         case 1:
-          /* STD not supported for float */
-        break;
+            /* STD not supported for float */
+            break;
 
         case 2:
-          switch(in->outputSize)
-          {
+            switch (in->outputSize) {
             case 32:
-              switch(in->outputByteOrder)
-              {
+                switch (in->outputByteOrder) {
                 case -1:
                 case 0:
-                  new_type = H5Tcopy (H5T_IEEE_F32BE);
-                break;
+                    new_type = H5Tcopy(H5T_IEEE_F32BE);
+                    break;
 
                 case 1:
-                  new_type = H5Tcopy (H5T_IEEE_F32LE);
+                    new_type = H5Tcopy(H5T_IEEE_F32LE);
+                    break;
+                }
                 break;
-              }
-            break;
 
             case 64:
-              switch(in->outputByteOrder)
-              {
+                switch (in->outputByteOrder) {
                 case -1:
                 case 0:
-                  new_type = H5Tcopy (H5T_IEEE_F64BE);
-                break;
+                    new_type = H5Tcopy(H5T_IEEE_F64BE);
+                    break;
 
                 case 1:
-                  new_type = H5Tcopy (H5T_IEEE_F64LE);
+                    new_type = H5Tcopy(H5T_IEEE_F64LE);
+                    break;
+                }
                 break;
-              }
+            }
             break;
-          }
-        break;
 
-      }
-      break;
+        }
+        break;
 
     case 2:
-        switch (in->outputArchitecture)
-        {
-          case 0:
-            switch(in->outputSize)
-            {
-              case 8:
-                new_type = H5Tcopy (H5T_NATIVE_UCHAR);
-              break;
+        switch (in->outputArchitecture) {
+        case 0:
+            switch (in->outputSize) {
+            case 8:
+                new_type = H5Tcopy(H5T_NATIVE_UCHAR);
+                break;
 
-              case 16:
-                new_type = H5Tcopy (H5T_NATIVE_USHORT);
-              break;
+            case 16:
+                new_type = H5Tcopy(H5T_NATIVE_USHORT);
+                break;
 
-              case 32:
-                new_type = H5Tcopy (H5T_NATIVE_UINT);
-              break;
+            case 32:
+                new_type = H5Tcopy(H5T_NATIVE_UINT);
+                break;
 
-              case 64:
-                new_type = H5Tcopy (H5T_NATIVE_ULLONG);
-              break;
+            case 64:
+                new_type = H5Tcopy(H5T_NATIVE_ULLONG);
+                break;
             }
-              switch(in->outputByteOrder)
-              {
-                case -1: /* Default */
+            switch (in->outputByteOrder) {
+            case -1: /* Default */
                 break;
-                case 0:
-                  H5Tset_order (new_type,H5T_ORDER_BE);
+            case 0:
+                H5Tset_order(new_type, H5T_ORDER_BE);
                 break;
 
-                case 1:
-                  H5Tset_order (new_type,H5T_ORDER_LE);
+            case 1:
+                H5Tset_order(new_type, H5T_ORDER_LE);
                 break;
-              }
+            }
             break;
 
-          case 1:
-            switch(in->outputSize)
-            {
-              case 8:
-                switch(in->outputByteOrder)
-                {
-                  case -1:
-                  case 0:
-                    new_type = H5Tcopy (H5T_STD_U8BE);
-                  break;
-
-                  case 1:
-                    new_type = H5Tcopy (H5T_STD_U8LE);
-                  break;
+        case 1:
+            switch (in->outputSize) {
+            case 8:
+                switch (in->outputByteOrder) {
+                case -1:
+                case 0:
+                    new_type = H5Tcopy(H5T_STD_U8BE);
+                    break;
+
+                case 1:
+                    new_type = H5Tcopy(H5T_STD_U8LE);
+                    break;
                 }
                 break;
 
-              case 16:
-                switch(in->outputByteOrder)
-                {
-                  case -1:
-                  case 0:
-                    new_type = H5Tcopy (H5T_STD_U16BE);
-                  break;
-
-                  case 1:
-                    new_type = H5Tcopy (H5T_STD_U16LE);
-                  break;
+            case 16:
+                switch (in->outputByteOrder) {
+                case -1:
+                case 0:
+                    new_type = H5Tcopy(H5T_STD_U16BE);
+                    break;
+
+                case 1:
+                    new_type = H5Tcopy(H5T_STD_U16LE);
+                    break;
                 }
                 break;
 
-              case 32:
-                switch(in->outputByteOrder)
-                {
-                  case -1:
-                  case 0:
-                    new_type = H5Tcopy (H5T_STD_U32BE);
-                  break;
-
-                  case 1:
-                    new_type = H5Tcopy (H5T_STD_U32LE);
-                  break;
+            case 32:
+                switch (in->outputByteOrder) {
+                case -1:
+                case 0:
+                    new_type = H5Tcopy(H5T_STD_U32BE);
+                    break;
+
+                case 1:
+                    new_type = H5Tcopy(H5T_STD_U32LE);
+                    break;
                 }
                 break;
 
-              case 64:
-                switch(in->outputByteOrder)
-                {
-                  case -1:
-                  case 0:
-                    new_type = H5Tcopy (H5T_STD_U64BE);
-                  break;
-
-                  case 1:
-                    new_type = H5Tcopy (H5T_STD_U64LE);
-                  break;
+            case 64:
+                switch (in->outputByteOrder) {
+                case -1:
+                case 0:
+                    new_type = H5Tcopy(H5T_STD_U64BE);
+                    break;
+
+                case 1:
+                    new_type = H5Tcopy(H5T_STD_U64LE);
+                    break;
                 }
                 break;
             }
             break;
 
-          case 2:
+        case 2:
             /* IEEE not supported for INT */
-          break;
+            break;
 
         }
 
@@ -2397,48 +2189,44 @@ createOutputDataType(struct Input *in)
     return new_type;
 }
 
-hid_t
-createInputDataType(struct Input *in)
+hid_t createInputDataType(struct Input *in)
 {
-  hid_t new_type = (-1);
-  const char *err1 = "Invalid value for input class.\n";
+    hid_t       new_type = (-1);
+    const char *err1 = "Invalid value for input class.\n";
 
-  switch (in->inputClass)
-  {
+    switch (in->inputClass) {
     case 0:
     case 4:
-        switch(in->inputSize)
-        {
-          case 8:
-              new_type = H5Tcopy (H5T_NATIVE_CHAR);
-              break;
-
-          case 16:
-              new_type = H5Tcopy (H5T_NATIVE_SHORT);
-              break;
-
-          case 32:
-              new_type = H5Tcopy (H5T_NATIVE_INT);
-              break;
-
-          case 64:
-              new_type = H5Tcopy (H5T_NATIVE_LLONG);
-              break;
+        switch (in->inputSize) {
+        case 8:
+            new_type = H5Tcopy(H5T_NATIVE_CHAR);
+            break;
+
+        case 16:
+            new_type = H5Tcopy(H5T_NATIVE_SHORT);
+            break;
+
+        case 32:
+            new_type = H5Tcopy(H5T_NATIVE_INT);
+            break;
+
+        case 64:
+            new_type = H5Tcopy(H5T_NATIVE_LLONG);
+            break;
         }
         break;
 
     case 1:
     case 2:
     case 3:
-        switch(in->inputSize)
-        {
-          case 32:
-              new_type = H5Tcopy (H5T_NATIVE_FLOAT);
-              break;
-
-          case 64:
-              new_type = H5Tcopy (H5T_NATIVE_DOUBLE);
-              break;
+        switch (in->inputSize) {
+        case 32:
+            new_type = H5Tcopy(H5T_NATIVE_FLOAT);
+            break;
+
+        case 64:
+            new_type = H5Tcopy(H5T_NATIVE_DOUBLE);
+            break;
         }
         break;
 
@@ -2447,23 +2235,22 @@ createInputDataType(struct Input *in)
 
     case 6:
     case 7:
-        switch(in->inputSize)
-        {
-          case 8:
-              new_type = H5Tcopy (H5T_NATIVE_UCHAR);
-              break;
-
-          case 16:
-              new_type = H5Tcopy (H5T_NATIVE_USHORT);
-              break;
-
-          case 32:
-              new_type = H5Tcopy (H5T_NATIVE_UINT);
-              break;
-
-          case 64:
-              new_type = H5Tcopy (H5T_NATIVE_ULLONG);
-              break;
+        switch (in->inputSize) {
+        case 8:
+            new_type = H5Tcopy(H5T_NATIVE_UCHAR);
+            break;
+
+        case 16:
+            new_type = H5Tcopy(H5T_NATIVE_USHORT);
+            break;
+
+        case 32:
+            new_type = H5Tcopy(H5T_NATIVE_UINT);
+            break;
+
+        case 64:
+            new_type = H5Tcopy(H5T_NATIVE_ULLONG);
+            break;
         }
         break;
 
@@ -2471,161 +2258,159 @@ createInputDataType(struct Input *in)
         (void) fprintf(stderr, "%s", err1);
         return (-1);
     }
-  return new_type;
+    return new_type;
 }
 
-static int
-process(struct Options *opt)
+static int process(struct Options *opt)
 {
-  struct  Input *in;
-  hid_t   file_id, group_id, handle;
-  hid_t   dataset, dataspace = (-1);
-  FILE *strm, *extfile;
-  hid_t intype, outtype;
-  hid_t proplist;
-  hsize_t numOfElements = 1;
-  int j,k;
-
-  const char *err1 = "Error creating HDF output file: %s.\n";
-  const char *err2 = "Error in processing the configuration file: %s.\n";
-  const char *err3 = "Error in reading the input file: %s.\n";
-  const char *err4 = "Error in creating or opening external file.\n";
-  const char *err5 = "Error in creating the output data set. Dataset with the same name may exist at the specified path\n";
-  const char *err6 = "Error in writing the output data set.\n";
-
-  H5E_BEGIN_TRY {
-    if ((file_id = H5Fopen(opt->outfile, H5F_ACC_RDWR, H5P_DEFAULT)) < 0) {
-      if ((file_id = H5Fcreate(opt->outfile, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) == FAIL)
-      {
-        (void) fprintf(stderr, err1, opt->outfile);
-        return (-1);
-      }
-    }
-  } H5E_END_TRY;
+    struct Input   *in;
+    FILE           *extfile;
+    hid_t           file_id;
+    hid_t           group_id;
+    hid_t           handle;
+    hid_t           dataset;
+    hid_t           dataspace = (-1);
+    hid_t           intype;
+    hid_t           outtype;
+    hid_t           proplist;
+    hsize_t         numOfElements = 1;
+    int             j;
+    int             k;
+
+    const char *err1 = "Error creating HDF output file: %s.\n";
+    const char *err2 = "Error in processing the configuration file: %s.\n";
+    const char *err3 = "Error in reading the input file: %s.\n";
+    const char *err4 = "Error in creating or opening external file.\n";
+    const char *err5 = "Error in creating the output data set. Dataset with the same name may exist at the specified path\n";
+    const char *err6 = "Error in writing the output data set.\n";
 
-  for (k = 0; k < opt->fcount; k++)
-  {
-    in = &(opt->infiles[k].in);
-    if (opt->infiles[k].config == 1)
+    H5E_BEGIN_TRY
     {
-    	if (processConfigurationFile(opt->infiles[k].configfile, in, &strm) == -1)
-        {
-          (void) fprintf(stderr, err2, opt->infiles[k].configfile);
-          return (-1);
+        if ((file_id = H5Fopen(opt->outfile, H5F_ACC_RDWR, H5P_DEFAULT)) < 0) {
+            if ((file_id = H5Fcreate(opt->outfile, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT)) == FAIL) {
+                (void) fprintf(stderr, err1, opt->outfile);
+                return (-1);
+            }
         }
     }
-
-    if (processDataFile(opt->infiles[k].datafile, in, &strm, file_id ) == -1)
-    {
-      (void) fprintf(stderr, err3, opt->infiles[k].datafile);
-      return (-1);
-    }
-
-    if (in->inputClass != 5) /* STR */
-    {
-
-    for (j=0; j<in->rank;j++)
-      numOfElements *= in->sizeOfDimension[j];
-
-    /* disable error reporting */
-    H5E_BEGIN_TRY {
-        /* create parent groups */
-        if(in->path.count > 1) {
-            j = 0;
-            handle = file_id;
-            while(j < in->path.count - 1) {
-                if((group_id = H5Gopen2(handle, in->path.group[j], H5P_DEFAULT)) < 0) {
-                  group_id = H5Gcreate2(handle, in->path.group[j++], H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
-                  for (; j < in->path.count - 1; j++)
-                    group_id = H5Gcreate2(group_id, in->path.group[j], H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
-                  handle = group_id;
-                  break;
-                }
-                handle = group_id;
-                j++;
+    H5E_END_TRY;
+
+    for (k = 0; k < opt->fcount; k++) {
+        in = &(opt->infiles[k].in);
+        if (opt->infiles[k].config == 1) {
+            if (processConfigurationFile(opt->infiles[k].configfile, in) == -1) {
+                (void) fprintf(stderr, err2, opt->infiles[k].configfile);
+                return (-1);
             }
         }
-        else {
-          handle = file_id;
-          j=0;
-        }
 
-    /*enable error reporting */
-    } H5E_END_TRY;
+        if (processDataFile(opt->infiles[k].datafile, in, file_id) == -1) {
+            (void) fprintf(stderr, err3, opt->infiles[k].datafile);
+            return (-1);
+        }
 
-    /*create data type */
-    intype = createInputDataType(in);
-    outtype = createOutputDataType(in);
+        if (in->inputClass != 5) { /* STR */
+            for (j = 0; j < in->rank; j++)
+                numOfElements *= in->sizeOfDimension[j];
 
-    /* create property list */
-    proplist = H5Pcreate (H5P_DATASET_CREATE);
-    if (in->configOptionVector[CHUNK] == 1)
-    {
-      H5Pset_layout (proplist, H5D_CHUNKED);
-      /* not reqd chunking is implied if set_chunk is used  */
-      H5Pset_chunk (proplist, in->rank, in->sizeOfChunk);
-    }
+            /* disable error reporting */
+            H5E_BEGIN_TRY
+            {
+                /* create parent groups */
+                if (in->path.count > 1) {
+                    j = 0;
+                    handle = file_id;
+                    while (j < in->path.count - 1) {
+                        if ((group_id = H5Gopen2(handle, in->path.group[j], H5P_DEFAULT)) < 0) {
+                            group_id = H5Gcreate2(handle, in->path.group[j++], H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+                            for (; j < in->path.count - 1; j++)
+                                group_id = H5Gcreate2(group_id, in->path.group[j], H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
+                            handle = group_id;
+                            break;
+                        }
+                        handle = group_id;
+                        j++;
+                    }
+                }
+                else {
+                    handle = file_id;
+                    j = 0;
+                }
 
-    if (in->configOptionVector[COMPRESS] == 1)
-    {
-      H5Pset_deflate (proplist, (unsigned) in->compressionParam);
-    }
+                /*enable error reporting */
+            }
+            H5E_END_TRY;
+
+            /*create data type */
+            intype = createInputDataType(in);
+            outtype = createOutputDataType(in);
+
+            /* create property list */
+            proplist = H5Pcreate(H5P_DATASET_CREATE);
+            if (in->configOptionVector[CHUNK] == 1) {
+                H5Pset_layout(proplist, H5D_CHUNKED);
+                /* not reqd chunking is implied if set_chunk is used  */
+                H5Pset_chunk(proplist, in->rank, in->sizeOfChunk);
+            }
 
-    if (in->configOptionVector[EXTERNAL] == 1)
-    {
-      /* creating the external file if it doesnt exist */
-      if ((extfile = HDfopen(in->externFilename, "ab")) == NULL)
-      {
-        (void) fprintf(stderr, "%s", err4);
-        H5Pclose(proplist);
-        H5Sclose(dataspace);
-        H5Fclose(file_id);
-        return (-1);
-      }
-      HDfclose(extfile);
-      H5Pset_external (proplist, in->externFilename, (off_t)0, numOfElements * in->inputSize / 8);
-    }
+            if (in->configOptionVector[COMPRESS] == 1) {
+                H5Pset_deflate(proplist, (unsigned) in->compressionParam);
+            }
 
-    /* create dataspace */
-    if(in->configOptionVector[EXTEND] == 1)
-      dataspace = H5Screate_simple(in->rank, in->sizeOfDimension, in->maxsizeOfDimension);
-    else
-      dataspace = H5Screate_simple(in->rank, in->sizeOfDimension, NULL);
+            if (in->configOptionVector[EXTERNAL] == 1) {
+                /* creating the external file if it doesnt exist */
+                if ((extfile = HDfopen(in->externFilename, "ab")) == NULL) {
+                    (void) fprintf(stderr, "%s", err4);
+                    H5Pclose(proplist);
+                    H5Sclose(dataspace);
+                    H5Fclose(file_id);
+                    return (-1);
+                }
+                HDfclose(extfile);
+                H5Pset_external(proplist, in->externFilename, (off_t) 0, numOfElements * in->inputSize / 8);
+            }
 
-    /* disable error reporting */
-    H5E_BEGIN_TRY {
-    /* create data set */
-    if((dataset = H5Dcreate2(handle, in->path.group[j], outtype, dataspace, H5P_DEFAULT, proplist, H5P_DEFAULT)) < 0) {
-      (void)fprintf(stderr, "%s", err5);
-      H5Pclose(proplist);
-      H5Sclose(dataspace);
-      H5Fclose(file_id);
-      return (-1);
-    }
+            /* create dataspace */
+            if (in->configOptionVector[EXTEND] == 1)
+                dataspace = H5Screate_simple(in->rank, in->sizeOfDimension, in->maxsizeOfDimension);
+            else
+                dataspace = H5Screate_simple(in->rank, in->sizeOfDimension, NULL);
 
-    /*enable error reporting */
-    } H5E_END_TRY;
-
-     /* write dataset */
-    if(H5Dwrite(dataset, intype, H5S_ALL, H5S_ALL, H5P_DEFAULT, (VOIDP)in->data) < 0) {
-      (void) fprintf(stderr, "%s", err6);
-      H5Dclose(dataset);
-      H5Pclose(proplist);
-      H5Sclose(dataspace);
-      H5Fclose(file_id);
-      return (-1);
-    }
+            /* disable error reporting */
+            H5E_BEGIN_TRY
+            {
+                /* create data set */
+                if ((dataset = H5Dcreate2(handle, in->path.group[j], outtype, dataspace, H5P_DEFAULT, proplist, H5P_DEFAULT)) < 0) {
+                    (void) fprintf(stderr, "%s", err5);
+                    H5Pclose(proplist);
+                    H5Sclose(dataspace);
+                    H5Fclose(file_id);
+                    return (-1);
+                }
 
-    H5Dclose(dataset);
-    H5Pclose(proplist);
-    H5Sclose(dataspace);
-  }
+                /*enable error reporting */
+            }
+            H5E_END_TRY;
+
+            /* write dataset */
+            if (H5Dwrite(dataset, intype, H5S_ALL, H5S_ALL, H5P_DEFAULT, (VOIDP) in->data) < 0) {
+                (void) fprintf(stderr, "%s", err6);
+                H5Dclose(dataset);
+                H5Pclose(proplist);
+                H5Sclose(dataspace);
+                H5Fclose(file_id);
+                return (-1);
+            }
 
-  } /* STR */
+            H5Dclose(dataset);
+            H5Pclose(proplist);
+            H5Sclose(dataspace);
+        }
 
+    } /* STR */
 
-  H5Fclose(file_id);
-  return (0);
+    H5Fclose(file_id);
+    return (0);
 }
 
 /*
@@ -2636,294 +2421,409 @@ process(struct Options *opt)
  *      Print a helpful summary of command usage and features.
  */
 
-void
-help(char *name)
+void help(char *name)
 {
-  (void) fprintf(stdout, "Name:\n\n");
-  (void) fprintf(stdout, "\t%s\n\n", name);
-  (void) fprintf(stdout, "\t  TOOL NAME:\n");
-  (void) fprintf(stdout, "\t   %s\n", name);
-  (void) fprintf(stdout, "\t   SYNTAX:\n");
-  (void) fprintf(stdout, "\t   %s -h[elp], OR\n", name);
-  (void) fprintf(stdout, "\t   %s <infile> -c[onfig] <configfile> [<infile> -c[config] <configfile>...]", name);
-  (void) fprintf(stdout, "\t\t\t\t      -o[utfile] <outfile>\n\n");
-  (void) fprintf(stdout, "\t   PURPOSE:\n");
-  (void) fprintf(stdout, "\t 	To convert data stored in one or more ASCII or binary files\n");
-  (void) fprintf(stdout, "\t	into one or more datasets (in accordance with the \n");
-  (void) fprintf(stdout, "\t	user-specified type and storage properties) in an existing \n");
-  (void) fprintf(stdout, "\t	or new HDF5 file.\n\n");
-  (void) fprintf(stdout, "\t   DESCRIPTION:\n");
-  (void) fprintf(stdout, "\t	The primary objective of the utility is to convert floating\n");
-  (void) fprintf(stdout, "\t	point or integer data stored in ASCII text or binary form \n");
-  (void) fprintf(stdout, "\t	into a data-set according to the type and storage properties\n");
-  (void) fprintf(stdout, "\t	specified by the user. The utility can also accept ASCII\n");
-  (void) fprintf(stdout, "\t	text files and store the contents in a compact form as an\n");
-  (void) fprintf(stdout, "\t	array of one-dimensional strings.\n\n");
-  (void) fprintf(stdout, "\t	The input data to be written as a data-set can be provided\n");
-  (void) fprintf(stdout, "\t	to the utility in one of the following forms:\n");
-  (void) fprintf(stdout, "\t	1. ASCII text file with numeric data (floating point or \n");
-  (void) fprintf(stdout, "\t	integer data). \n");
-  (void) fprintf(stdout, "\t	2. Binary file with native floating point data (32-bit or \n");
-  (void) fprintf(stdout, "\t	64-bit) \n");
-  (void) fprintf(stdout, "\t	3. Binary file with native integer (signed or unsigned)\n");
-  (void) fprintf(stdout, "\t	data (8-bit or 16-bit or 32-bit or 64-bit). \n");
-  (void) fprintf(stdout, "\t	4. ASCII text file containing strings (text data).\n");
-  (void) fprintf(stdout, "\t    \n");
-  (void) fprintf(stdout, "\t	Every input file is associated with a configuration file \n");
-  (void) fprintf(stdout, "\t	also provided as an input to the utility. (See Section \n");
-  (void) fprintf(stdout, "\t	\"CONFIGURATION FILE\" to know how it is to be organized).\n");
-  (void) fprintf(stdout, "\t	The class, size and dimensions of the input data is \n");
-  (void) fprintf(stdout, "\t	specified in this configuration file. A point to note is\n");
-  (void) fprintf(stdout, "\t	that the floating point data in the ASCII text file may be\n");
-  (void) fprintf(stdout, "\t	organized in the fixed floating form (for example 323.56)\n");
-  (void) fprintf(stdout, "\t	or in a scientific notation (for example 3.23E+02). A \n");
-  (void) fprintf(stdout, "\t	different input-class specification is to be used for both\n");
-  (void) fprintf(stdout, "\t	forms.\n\n");
-  (void) fprintf(stdout, "\t	The utility extracts the input data from the input file \n");
-  (void) fprintf(stdout, "\t	according to the specified parameters and saves it into \n");
-  (void) fprintf(stdout, "\t	an H5 dataset. \n\n");
-  (void) fprintf(stdout, "\t	The user can specify output type and storage properties in \n");
-  (void) fprintf(stdout, "\t	the configuration file. The user is requited to specify the \n");
-  (void) fprintf(stdout, "\t	path of the dataset. If the groups in the path leading to \n");
-  (void) fprintf(stdout, "\t	the data-set do not exist, the groups will be created by the\n");
-  (void) fprintf(stdout, "\t	utility. If no group is specified, the dataset will be\n");
-  (void) fprintf(stdout, "\t	created under the root group.\n\n");
-  (void) fprintf(stdout, "\t	In addition to the name, the user is also required to \n");
-  (void) fprintf(stdout, "\t	provide the class and size of output data to be written to \n");
-  (void) fprintf(stdout, "\t	the dataset and may optionally specify the output-architecure,\n");
-  (void) fprintf(stdout, "\t	and the output-byte-order. If output-architecture is not \n");
-  (void) fprintf(stdout, "\t	specified the default is NATIVE. Output-byte-orders are fixed\n");
-  (void) fprintf(stdout, "\t	for some architectures and may be specified only if output-\n");
-  (void) fprintf(stdout, "\t	architecture is IEEE, UNIX or STD.\n\n");
-  (void) fprintf(stdout, "\t 	Also, layout and other storage properties such as \n");
-  (void) fprintf(stdout, "\t	compression, external storage and extendible data-sets may be\n");
-  (void) fprintf(stdout, "\t	optionally specified.  The layout and storage properties \n");
-  (void) fprintf(stdout, "\t	denote how raw data is to be organized on the disk. If these \n");
-  (void) fprintf(stdout, "\t	options are not specified the default is Contiguous layout \n");
-  (void) fprintf(stdout, "\t	and storage.\n\n");
-  (void) fprintf(stdout, "\t	The dataset can be organized in any of the following ways:\n");
-  (void) fprintf(stdout, "\t	1. Contiguous.\n");
-  (void) fprintf(stdout, "\t	2. Chunked.\n");
-  (void) fprintf(stdout, "\t	3. External Storage File    (has to be contiguous)\n");
-  (void) fprintf(stdout, "\t	4. Extendible data sets     (has to be chunked)\n");
-  (void) fprintf(stdout, "\t	5. Compressed.		    (has to be chunked)\n");
-  (void) fprintf(stdout, "\t	6. Compressed & Extendible  (has to be chunked)\n\n");
-  (void) fprintf(stdout, "\t	If the user wants to store raw data in a non-HDF file then \n");
-  (void) fprintf(stdout, "\t	the external storage file option is to be used and the name \n");
-  (void) fprintf(stdout, "\t	of the file is to be specified. \n\n");
-  (void) fprintf(stdout, "\t	If the user wants the dimensions of the data-set to be\n");
-  (void) fprintf(stdout, "\t	unlimited, the extendible data set option can be chosen. \n\n");
-  (void) fprintf(stdout, "\t	The user may also specify the type of compression and the \n");
-  (void) fprintf(stdout, "\t	level to which the data set must be compresses by setting \n");
-  (void) fprintf(stdout, "\t	the compressed option.\n\n");
-  (void) fprintf(stdout, "\t   SYNOPSIS:\n");
-  (void) fprintf(stdout, "\t  h5import -h[elp], OR\n");
-  (void) fprintf(stdout, "\t  h5import <infile> -c[onfig] <configfile> \
+    (void) fprintf(stdout, "Name:\n\n");
+    (void) fprintf(stdout, "\t%s\n\n", name);
+    (void) fprintf(stdout, "\t  TOOL NAME:\n");
+    (void) fprintf(stdout, "\t   %s\n", name);
+    (void) fprintf(stdout, "\t   SYNTAX:\n");
+    (void) fprintf(stdout, "\t   %s -h[elp], OR\n", name);
+    (void) fprintf(stdout,
+            "\t   %s <infile> -c[onfig] <configfile> [<infile> -c[config] <configfile>...]", name);
+    (void) fprintf(stdout, "\t\t\t\t      -o[utfile] <outfile>\n\n");
+    (void) fprintf(stdout, "\t   PURPOSE:\n");
+    (void) fprintf(stdout,
+            "\t   To convert data stored in one or more ASCII or binary files\n");
+    (void) fprintf(stdout,
+            "\t  into one or more datasets (in accordance with the \n");
+    (void) fprintf(stdout,
+            "\t  user-specified type and storage properties) in an existing \n");
+    (void) fprintf(stdout, "\t  or new HDF5 file.\n\n");
+    (void) fprintf(stdout, "\t   DESCRIPTION:\n");
+    (void) fprintf(stdout,
+            "\t  The primary objective of the utility is to convert floating\n");
+    (void) fprintf(stdout,
+            "\t  point or integer data stored in ASCII text or binary form \n");
+    (void) fprintf(stdout,
+            "\t  into a data-set according to the type and storage properties\n");
+    (void) fprintf(stdout,
+            "\t  specified by the user. The utility can also accept ASCII\n");
+    (void) fprintf(stdout,
+            "\t  text files and store the contents in a compact form as an\n");
+    (void) fprintf(stdout, "\t  array of one-dimensional strings.\n\n");
+    (void) fprintf(stdout,
+            "\t  The input data to be written as a data-set can be provided\n");
+    (void) fprintf(stdout, "\t  to the utility in one of the following forms:\n");
+    (void) fprintf(stdout,
+            "\t  1. ASCII text file with numeric data (floating point or \n");
+    (void) fprintf(stdout, "\t  integer data). \n");
+    (void) fprintf(stdout,
+            "\t  2. Binary file with native floating point data (32-bit or \n");
+    (void) fprintf(stdout, "\t  64-bit) \n");
+    (void) fprintf(stdout,
+            "\t  3. Binary file with native integer (signed or unsigned)\n");
+    (void) fprintf(stdout, "\t  data (8-bit or 16-bit or 32-bit or 64-bit). \n");
+    (void) fprintf(stdout,
+            "\t  4. ASCII text file containing strings (text data).\n");
+    (void) fprintf(stdout, "\t    \n");
+    (void) fprintf(stdout,
+            "\t  Every input file is associated with a configuration file \n");
+    (void) fprintf(stdout,
+            "\t  also provided as an input to the utility. (See Section \n");
+    (void) fprintf(stdout,
+            "\t  \"CONFIGURATION FILE\" to know how it is to be organized).\n");
+    (void) fprintf(stdout,
+            "\t  The class, size and dimensions of the input data is \n");
+    (void) fprintf(stdout,
+            "\t  specified in this configuration file. A point to note is\n");
+    (void) fprintf(stdout,
+            "\t  that the floating point data in the ASCII text file may be\n");
+    (void) fprintf(stdout,
+            "\t  organized in the fixed floating form (for example 323.56)\n");
+    (void) fprintf(stdout,
+            "\t  or in a scientific notation (for example 3.23E+02). A \n");
+    (void) fprintf(stdout,
+            "\t  different input-class specification is to be used for both\n");
+    (void) fprintf(stdout, "\t  forms.\n\n");
+    (void) fprintf(stdout,
+            "\t  The utility extracts the input data from the input file \n");
+    (void) fprintf(stdout,
+            "\t  according to the specified parameters and saves it into \n");
+    (void) fprintf(stdout, "\t  an H5 dataset. \n\n");
+    (void) fprintf(stdout,
+            "\t  The user can specify output type and storage properties in \n");
+    (void) fprintf(stdout,
+            "\t  the configuration file. The user is requited to specify the \n");
+    (void) fprintf(stdout,
+            "\t  path of the dataset. If the groups in the path leading to \n");
+    (void) fprintf(stdout,
+            "\t  the data-set do not exist, the groups will be created by the\n");
+    (void) fprintf(stdout,
+            "\t  utility. If no group is specified, the dataset will be\n");
+    (void) fprintf(stdout, "\t  created under the root group.\n\n");
+    (void) fprintf(stdout,
+            "\t  In addition to the name, the user is also required to \n");
+    (void) fprintf(stdout,
+            "\t  provide the class and size of output data to be written to \n");
+    (void) fprintf(stdout,
+            "\t  the dataset and may optionally specify the output-architecure,\n");
+    (void) fprintf(stdout,
+            "\t  and the output-byte-order. If output-architecture is not \n");
+    (void) fprintf(stdout,
+            "\t  specified the default is NATIVE. Output-byte-orders are fixed\n");
+    (void) fprintf(stdout,
+            "\t  for some architectures and may be specified only if output-\n");
+    (void) fprintf(stdout, "\t  architecture is IEEE, UNIX or STD.\n\n");
+    (void) fprintf(stdout,
+            "\t   Also, layout and other storage properties such as \n");
+    (void) fprintf(stdout,
+            "\t  compression, external storage and extendible data-sets may be\n");
+    (void) fprintf(stdout,
+            "\t  optionally specified.  The layout and storage properties \n");
+    (void) fprintf(stdout,
+            "\t  denote how raw data is to be organized on the disk. If these \n");
+    (void) fprintf(stdout,
+            "\t  options are not specified the default is Contiguous layout \n");
+    (void) fprintf(stdout, "\t  and storage.\n\n");
+    (void) fprintf(stdout,
+            "\t  The dataset can be organized in any of the following ways:\n");
+    (void) fprintf(stdout, "\t  1. Contiguous.\n");
+    (void) fprintf(stdout, "\t  2. Chunked.\n");
+    (void) fprintf(stdout,
+            "\t  3. External Storage File    (has to be contiguous)\n");
+    (void) fprintf(stdout,
+            "\t  4. Extendible data sets     (has to be chunked)\n");
+    (void) fprintf(stdout, "\t  5. Compressed.        (has to be chunked)\n");
+    (void) fprintf(stdout,
+            "\t  6. Compressed & Extendible  (has to be chunked)\n\n");
+    (void) fprintf(stdout,
+            "\t  If the user wants to store raw data in a non-HDF file then \n");
+    (void) fprintf(stdout,
+            "\t  the external storage file option is to be used and the name \n");
+    (void) fprintf(stdout, "\t  of the file is to be specified. \n\n");
+    (void) fprintf(stdout,
+            "\t  If the user wants the dimensions of the data-set to be\n");
+    (void) fprintf(stdout,
+            "\t  unlimited, the extendible data set option can be chosen. \n\n");
+    (void) fprintf(stdout,
+            "\t  The user may also specify the type of compression and the \n");
+    (void) fprintf(stdout,
+            "\t  level to which the data set must be compresses by setting \n");
+    (void) fprintf(stdout, "\t  the compressed option.\n\n");
+    (void) fprintf(stdout, "\t   SYNOPSIS:\n");
+    (void) fprintf(stdout, "\t  h5import -h[elp], OR\n");
+    (void) fprintf( stdout,
+            "\t  h5import <infile> -c[onfig] <configfile> \
                     [<infile> -c[config] <confile2>...] -o[utfile] <outfile>\n\n");
-  (void) fprintf(stdout, "\t   -h[elp]:\n");
-  (void) fprintf(stdout, "\t           Prints this summary of usage, and exits.\n\n");
-  (void) fprintf(stdout, "\t   <infile(s)>:\n");
-  (void) fprintf(stdout, "\t           Name of the Input file(s), containing a \n");
-  (void) fprintf(stdout, "\t		single n-dimensional floating point or integer array \n");
-  (void) fprintf(stdout, "\t		in either ASCII text, native floating point(32-bit \n");
-  (void) fprintf(stdout, "\t		or 64-bit) or native integer(8-bit or 16-bit or \n");
-  (void) fprintf(stdout, "\t		32-bit or 64-bit). Data to be specified in the order\n");
-  (void) fprintf(stdout, "\t		of fastest changing dimensions first.\n\n");
-  (void) fprintf(stdout, "\t	-c[config] <configfile>:\n");
-  (void) fprintf(stdout, "\t		Every input file should be associated with a \n");
-  (void) fprintf(stdout, "\t		configuration file and this is done by the -c option.\n");
-  (void) fprintf(stdout, "\t		<configfile> is the name of the configuration file.\n");
-  (void) fprintf(stdout, "\t		(See Section \"CONFIGURATION FILE\")\n\n");
-  (void) fprintf(stdout, "\t   -o[utfile] <outfile>:\n");
-  (void) fprintf(stdout, "\t           Name of the HDF5 output file. Data from one or more \n");
-  (void) fprintf(stdout, "\t		input files are stored as one or more data sets in \n");
-  (void) fprintf(stdout, "\t		<outfile>. The output file may be an existing file or \n");
-  (void) fprintf(stdout, "\t		it maybe new in which case it will be created.\n\n\n");
-  (void) fprintf(stdout, "\t   CONFIGURATION FILE:\n");
-  (void) fprintf(stdout, "\t	The configuration file is an ASCII text file and must be \n");
-  (void) fprintf(stdout, "\t	organized as \"CONFIG-KEYWORD VALUE\" pairs, one pair on each \n");
-  (void) fprintf(stdout, "\t	line.\n\n");
-  (void) fprintf(stdout, "\t   The configuration file may have the following keywords each \n");
-  (void) fprintf(stdout, "\t   followed by an acceptable value.\n\n");
-  (void) fprintf(stdout, "\t	Required KEYWORDS:\n");
-  (void) fprintf(stdout, "\t		PATH\n");
-  (void) fprintf(stdout, "\t		INPUT-CLASS\n");
-  (void) fprintf(stdout, "\t		INPUT-SIZE\n");
-  (void) fprintf(stdout, "\t		RANK\n");
-  (void) fprintf(stdout, "\t		DIMENSION-SIZES\n");
-  (void) fprintf(stdout, "\t		OUTPUT-CLASS\n");
-  (void) fprintf(stdout, "\t		OUTPUT-SIZE\n\n");
-  (void) fprintf(stdout, "\t	Optional KEYWORDS:\n");
-  (void) fprintf(stdout, "\t		OUTPUT-ARCHITECTURE\n");
-  (void) fprintf(stdout, "\t		OUTPUT-BYTE-ORDER\n");
-  (void) fprintf(stdout, "\t  		CHUNKED-DIMENSION-SIZES\n");
-  (void) fprintf(stdout, "\t		COMPRESSION-TYPE\n");
-  (void) fprintf(stdout, "\t		COMPRESSION-PARAM\n");
-  (void) fprintf(stdout, "\t		EXTERNAL-STORAGE\n");
-  (void) fprintf(stdout, "\t		MAXIMUM-DIMENSIONS\n\n\n");
-  (void) fprintf(stdout, "\t  	Values for keywords:\n");
-  (void) fprintf(stdout, "\t		PATH:\n");
-  (void) fprintf(stdout, "\t			Strings separated by spaces to represent\n");
-  (void) fprintf(stdout, "\t			the path of the data-set. If the groups in\n");
-  (void) fprintf(stdout, "\t			the path do no exist, they will be created. \n");
-  (void) fprintf(stdout, "\t			For example,\n");
-  (void) fprintf(stdout, "\t				PATH grp1/grp2/dataset1\n");
-  (void) fprintf(stdout, "\t				PATH: keyword\n");
-  (void) fprintf(stdout, "\t				grp1: group under the root. If\n");
-  (void) fprintf(stdout, "\t				      non-existent will be created.\n");
-  (void) fprintf(stdout, "\t				grp2: group under grp1. If \n");
-  (void) fprintf(stdout, "\t				      non-existent will be created \n");
-  (void) fprintf(stdout, "\t				      under grp1.\n");
-  (void) fprintf(stdout, "\t				dataset1: the name of the data-set \n");
-  (void) fprintf(stdout, "\t					  to be created.\n\n");
-  (void) fprintf(stdout, "\t               INPUT-CLASS:\n");
-  (void) fprintf(stdout, "\t			String denoting the type of input data.\n");
-  (void) fprintf(stdout, "\t			(\"TEXTIN\", \"TEXTFP\", \"FP\", \"IN\", \n");
-  (void) fprintf(stdout, "\t			\"STR\", \"TEXTUIN\", \"UIN\"). \n");
-  (void) fprintf(stdout, "\t			INPUT-CLASS \"TEXTIN\" denotes an ASCII text \n");
-  (void) fprintf(stdout, "\t			file with signed integer data in ASCII form,\n");
-  (void) fprintf(stdout, "\t			INPUT-CLASS \"TEXTUIN\" denotes an ASCII text \n");
-  (void) fprintf(stdout, "\t			file with unsigned integer data in ASCII form,\n");
-  (void) fprintf(stdout, "\t			\"TEXTFP\" denotes an ASCII text file containing\n");
-  (void) fprintf(stdout, "\t			floating point data in the fixed notation\n");
-  (void) fprintf(stdout, "\t			(325.34),\n");
-  (void) fprintf(stdout, "\t			\"FP\" denotes a floating point binary file,\n");
-  (void) fprintf(stdout, "\t			\"IN\" denotes a signed integer binary file,\n");
-  (void) fprintf(stdout, "\t			\"UIN\" denotes an unsigned integer binary file,\n");
-  (void) fprintf(stdout, "\t			 & \"STR\" denotes an ASCII text file the \n");
-  (void) fprintf(stdout, "\t			contents of which should be stored as an 1-D \n");
-  (void) fprintf(stdout, "\t			array of strings.\n");
-  (void) fprintf(stdout, "\t			If INPUT-CLASS is \"STR\", then RANK, \n");
-  (void) fprintf(stdout, "\t			DIMENSION-SIZES, OUTPUT-CLASS, OUTPUT-SIZE, \n");
-  (void) fprintf(stdout, "\t			OUTPUT-ARCHITECTURE and OUTPUT-BYTE-ORDER \n");
-  (void) fprintf(stdout, "\t			will be ignored.\n\n\n");
-  (void) fprintf(stdout, "\t		INPUT-SIZE:\n");
-  (void) fprintf(stdout, "\t			Integer denoting the size of the input data \n");
-  (void) fprintf(stdout, "\t			(8, 16, 32, 64). \n\n");
-  (void) fprintf(stdout, "\t			For floating point,\n");
-  (void) fprintf(stdout, "\t			INPUT-SIZE can be 32 or 64.\n");
-  (void) fprintf(stdout, "\t			For integers (signed and unsigned)\n");
-  (void) fprintf(stdout, "\t			INPUT-SIZE can be 8, 16, 32 or 64.\n\n");
-  (void) fprintf(stdout, "\t		RANK:\n");
-  (void) fprintf(stdout, "\t			Integer denoting the number of dimensions.\n\n");
-  (void) fprintf(stdout, "\t		DIMENSION-SIZES:\n");
-  (void) fprintf(stdout, "\t		        Integers separated by spaces to denote the \n");
-  (void) fprintf(stdout, "\t			dimension sizes for the no. of dimensions \n");
-  (void) fprintf(stdout, "\t			determined by rank.\n\n");
-  (void) fprintf(stdout, "\t		OUTPUT-CLASS:\n");
-  (void) fprintf(stdout, "\t			String dentoting data type of the dataset to \n");
-  (void) fprintf(stdout, "\t			be written (\"IN\",\"FP\", \"UIN\")\n\n");
-  (void) fprintf(stdout, "\t		OUTPUT-SIZE:\n");
-  (void) fprintf(stdout, "\t			Integer denoting the size of the data in the \n");
-  (void) fprintf(stdout, "\t			output dataset to be written.\n");
-  (void) fprintf(stdout, "\t			If OUTPUT-CLASS is \"FP\", OUTPUT-SIZE can be \n");
-  (void) fprintf(stdout, "\t			32 or 64.\n");
-  (void) fprintf(stdout, "\t			If OUTPUT-CLASS is \"IN\" or \"UIN\", OUTPUT-SIZE\n");
-  (void) fprintf(stdout, "\t			can be 8, 16, 32 or 64.\n\n");
-  (void) fprintf(stdout, "\t		OUTPUT-ARCHITECTURE:\n");
-  (void) fprintf(stdout, "\t			STRING denoting the type of output \n");
-  (void) fprintf(stdout, "\t			architecture. Can accept the following values\n");
-  (void) fprintf(stdout, "\t			STD\n");
-  (void) fprintf(stdout, "\t			IEEE\n");
-  (void) fprintf(stdout, "\t			INTEL\n");
-  (void) fprintf(stdout, "\t			CRAY\n");
-  (void) fprintf(stdout, "\t			MIPS\n");
-  (void) fprintf(stdout, "\t			ALPHA\n");
-  (void) fprintf(stdout, "\t			NATIVE (default)\n");
-  (void) fprintf(stdout, "\t			UNIX\n\n");
-  (void) fprintf(stdout, "\t		OUTPUT-BYTE-ORDER:\n");
-  (void) fprintf(stdout, "\t			String denoting the output-byte-order. Ignored\n");
-  (void) fprintf(stdout, "\t			if the OUTPUT-ARCHITECTURE is not specified or\n");
-  (void) fprintf(stdout, "\t			if it is IEEE, UNIX or STD. Can accept the \n");
-  (void) fprintf(stdout, "\t			following values.\n");
-  (void) fprintf(stdout, "\t			BE (default)\n");
-  (void) fprintf(stdout, "\t			LE\n\n");
-  (void) fprintf(stdout, "\t		CHUNKED-DIMENSION-SIZES:\n");
-  (void) fprintf(stdout, "\t			Integers separated by spaces to denote the \n");
-  (void) fprintf(stdout, "\t			dimension sizes of the chunk for the no. of \n");
-  (void) fprintf(stdout, "\t			dimensions determined by rank. Required field\n");
-  (void) fprintf(stdout, "\t			to denote that the dataset will be stored with\n");
-  (void) fprintf(stdout, "\t			chunked storage. If this field is absent the\n");
-  (void) fprintf(stdout, "\t			dataset will be stored with contiguous storage.\n\n");
-  (void) fprintf(stdout, "\t		COMPRESSION-TYPE:\n");
-  (void) fprintf(stdout, "\t			String denoting the type of compression to be\n");
-  (void) fprintf(stdout, "\t			used with the chunked storage. Requires the\n");
-  (void) fprintf(stdout, "\t			CHUNKED-DIMENSION-SIZES to be specified. The only \n");
-  (void) fprintf(stdout, "\t			currently supported compression method is GZIP. \n");
-  (void) fprintf(stdout, "\t			Will accept the following value\n");
-  (void) fprintf(stdout, "\t			GZIP\n\n");
-  (void) fprintf(stdout, "\t		COMPRESSION-PARAM:\n");
-  (void) fprintf(stdout, "\t			Integer used to denote compression level and \n");
-  (void) fprintf(stdout, "\t			this option is to be always specified when \n");
-  (void) fprintf(stdout, "\t			the COMPRESSION-TYPE option is specified. The\n");
-  (void) fprintf(stdout, "\t			values are applicable only to GZIP \n");
-  (void) fprintf(stdout, "\t			compression.\n");
-  (void) fprintf(stdout, "\t			Value 1-9: The level of Compression. \n");
-  (void) fprintf(stdout, "\t				1 will result in the fastest \n");
-  (void) fprintf(stdout, "\t				compression while 9 will result in \n");
-  (void) fprintf(stdout, "\t				the best compression ratio. The default\n");
-  (void) fprintf(stdout, "\t				level of compression is 6.\n\n");
-  (void) fprintf(stdout, "\t		EXTERNAL-STORAGE:\n");
-  (void) fprintf(stdout, "\t			String to denote the name of the non-HDF5 file \n");
-  (void) fprintf(stdout, "\t			to store data to. Cannot be used if CHUNKED-\n");
-  (void) fprintf(stdout, "\t			DIMENSIONS or COMPRESSION-TYPE or EXTENDIBLE-\n");
-  (void) fprintf(stdout, "\t			DATASET is specified.\n");
-  (void) fprintf(stdout, "\t			Value <external-filename>: the name of the \n");
-  (void) fprintf(stdout, "\t			external file as a string to be used.\n\n");
-  (void) fprintf(stdout, "\t		MAXIMUM-DIMENSIONS:\n");
-  (void) fprintf(stdout, "\t			Integers separated by spaces to denote the \n");
-  (void) fprintf(stdout, "\t			maximum dimension sizes of all the \n");
-  (void) fprintf(stdout, "\t			dimensions determined by rank. Requires the\n");
-  (void) fprintf(stdout, "\t			CHUNKED-DIMENSION-SIZES to be specified. A value of \n");
-  (void) fprintf(stdout, "\t			-1 for any dimension implies UNLIMITED \n");
-  (void) fprintf(stdout, "\t			DIMENSION size for that particular dimension.\n\n");
-  (void) fprintf(stdout, "\t   EXAMPLES:\n");
-  (void) fprintf(stdout, "\t	1. Configuration File may look like:\n\n");
-  (void) fprintf(stdout, "\t		PATH work h5 pkamat First-set\n");
-  (void) fprintf(stdout, "\t		INPUT-CLASS TEXTFP\n");
-  (void) fprintf(stdout, "\t		RANK 3\n");
-  (void) fprintf(stdout, "\t		DIMENSION-SIZES 5 2 4\n");
-  (void) fprintf(stdout, "\t		OUTPUT-CLASS FP\n");
-  (void) fprintf(stdout, "\t		OUTPUT-SIZE 64\n");
-  (void) fprintf(stdout, "\t		OUTPUT-ARCHITECTURE IEEE\n");
-  (void) fprintf(stdout, "\t		OUTPUT-BYTE-ORDER LE\n");
-  (void) fprintf(stdout, "\t  		CHUNKED-DIMENSION-SIZES 2 2 2 \n\n");
-  (void) fprintf(stdout, "\t	The above configuration will accept a floating point array \n");
-  (void) fprintf(stdout, "\t	(5 x 2 x 4)  in an ASCII file with the rank and dimension sizes \n");
-  (void) fprintf(stdout, "\t	specified and will save it in a chunked data-set (of pattern \n");
-  (void) fprintf(stdout, "\t	2 X 2 X 2) of 64-bit floating point in the little-endian order \n");
-  (void) fprintf(stdout, "\t	and IEEE architecture. The dataset will be stored at\n");
-  (void) fprintf(stdout, "\t	\"/work/h5/pkamat/First-set\"\n\n");
-  (void) fprintf(stdout, "\t	2. Another configuration could be:\n\n");
-  (void) fprintf(stdout, "\t		PATH Second-set\n");
-  (void) fprintf(stdout, "\t		INPUT-CLASS IN	\n");
-  (void) fprintf(stdout, "\t		RANK 5\n");
-  (void) fprintf(stdout, "\t		DIMENSION-SIZES 6 3 5 2 4\n");
-  (void) fprintf(stdout, "\t		OUTPUT-CLASS IN\n");
-  (void) fprintf(stdout, "\t		OUTPUT-SIZE 32\n");
-  (void) fprintf(stdout, "\t  		CHUNKED-DIMENSION-SIZES 2 2 2 2 2\n");
-  (void) fprintf(stdout, "\t		EXTENDIBLE-DATASET 1 3 \n");
-  (void) fprintf(stdout, "\t		COMPRESSION-TYPE GZIP\n");
-  (void) fprintf(stdout, "\t		COMPRESSION-PARAM 7\n\n\n");
-  (void) fprintf(stdout, "\t	The above configuration will accept an integer array \n");
-  (void) fprintf(stdout, "\t	(6 X 3 X 5 x 2 x 4)  in a binary file with the rank and \n");
-  (void) fprintf(stdout, "\t	dimension sizes specified and will save it in a chunked data-set\n");
-  (void) fprintf(stdout, "\t	(of pattern 2 X 2 X 2 X 2 X 2) of 32-bit floating point in \n");
-  (void) fprintf(stdout, "\t	native format (as output-architecture is not specified). The \n");
-  (void) fprintf(stdout, "\t	first and the third dimension will be defined as unlimited. The \n");
-  (void) fprintf(stdout, "\t	data-set will be compressed using GZIP and a compression level \n");
-  (void) fprintf(stdout, "\t	of 7.\n");
-  (void) fprintf(stdout, "\t	The dataset will be stored at \"/Second-set\"\n\n");
-  return;
+    (void) fprintf(stdout, "\t   -h[elp]:\n");
+    (void) fprintf(stdout,
+            "\t           Prints this summary of usage, and exits.\n\n");
+    (void) fprintf(stdout, "\t   <infile(s)>:\n");
+    (void) fprintf(stdout,
+            "\t           Name of the Input file(s), containing a \n");
+    (void) fprintf(stdout,
+            "\t    single n-dimensional floating point or integer array \n");
+    (void) fprintf(stdout,
+            "\t    in either ASCII text, native floating point(32-bit \n");
+    (void) fprintf(stdout,
+            "\t    or 64-bit) or native integer(8-bit or 16-bit or \n");
+    (void) fprintf(stdout,
+            "\t    32-bit or 64-bit). Data to be specified in the order\n");
+    (void) fprintf(stdout, "\t    of fastest changing dimensions first.\n\n");
+    (void) fprintf(stdout, "\t  -c[config] <configfile>:\n");
+    (void) fprintf(stdout,
+            "\t    Every input file should be associated with a \n");
+    (void) fprintf(stdout,
+            "\t    configuration file and this is done by the -c option.\n");
+    (void) fprintf(stdout,
+            "\t    <configfile> is the name of the configuration file.\n");
+    (void) fprintf(stdout, "\t    (See Section \"CONFIGURATION FILE\")\n\n");
+    (void) fprintf(stdout, "\t   -o[utfile] <outfile>:\n");
+    (void) fprintf(stdout,
+            "\t           Name of the HDF5 output file. Data from one or more \n");
+    (void) fprintf(stdout,
+            "\t    input files are stored as one or more data sets in \n");
+    (void) fprintf(stdout,
+            "\t    <outfile>. The output file may be an existing file or \n");
+    (void) fprintf(stdout,
+            "\t    it maybe new in which case it will be created.\n\n\n");
+    (void) fprintf(stdout, "\t   CONFIGURATION FILE:\n");
+    (void) fprintf(stdout,
+            "\t  The configuration file is an ASCII text file and must be \n");
+    (void) fprintf(stdout,
+            "\t  organized as \"CONFIG-KEYWORD VALUE\" pairs, one pair on each \n");
+    (void) fprintf(stdout, "\t  line.\n\n");
+    (void) fprintf(stdout,
+            "\t   The configuration file may have the following keywords each \n");
+    (void) fprintf(stdout, "\t   followed by an acceptable value.\n\n");
+    (void) fprintf(stdout, "\t  Required KEYWORDS:\n");
+    (void) fprintf(stdout, "\t    PATH\n");
+    (void) fprintf(stdout, "\t    INPUT-CLASS\n");
+    (void) fprintf(stdout, "\t    INPUT-SIZE\n");
+    (void) fprintf(stdout, "\t    RANK\n");
+    (void) fprintf(stdout, "\t    DIMENSION-SIZES\n");
+    (void) fprintf(stdout, "\t    OUTPUT-CLASS\n");
+    (void) fprintf(stdout, "\t    OUTPUT-SIZE\n\n");
+    (void) fprintf(stdout, "\t  Optional KEYWORDS:\n");
+    (void) fprintf(stdout, "\t    OUTPUT-ARCHITECTURE\n");
+    (void) fprintf(stdout, "\t    OUTPUT-BYTE-ORDER\n");
+    (void) fprintf(stdout, "\t      CHUNKED-DIMENSION-SIZES\n");
+    (void) fprintf(stdout, "\t    COMPRESSION-TYPE\n");
+    (void) fprintf(stdout, "\t    COMPRESSION-PARAM\n");
+    (void) fprintf(stdout, "\t    EXTERNAL-STORAGE\n");
+    (void) fprintf(stdout, "\t    MAXIMUM-DIMENSIONS\n\n\n");
+    (void) fprintf(stdout, "\t    Values for keywords:\n");
+    (void) fprintf(stdout, "\t    PATH:\n");
+    (void) fprintf(stdout, "\t      Strings separated by spaces to represent\n");
+    (void) fprintf(stdout, "\t      the path of the data-set. If the groups in\n");
+    (void) fprintf(stdout,
+            "\t      the path do no exist, they will be created. \n");
+    (void) fprintf(stdout, "\t      For example,\n");
+    (void) fprintf(stdout, "\t        PATH grp1/grp2/dataset1\n");
+    (void) fprintf(stdout, "\t        PATH: keyword\n");
+    (void) fprintf(stdout, "\t        grp1: group under the root. If\n");
+    (void) fprintf(stdout, "\t              non-existent will be created.\n");
+    (void) fprintf(stdout, "\t        grp2: group under grp1. If \n");
+    (void) fprintf(stdout, "\t              non-existent will be created \n");
+    (void) fprintf(stdout, "\t              under grp1.\n");
+    (void) fprintf(stdout, "\t        dataset1: the name of the data-set \n");
+    (void) fprintf(stdout, "\t            to be created.\n\n");
+    (void) fprintf(stdout, "\t               INPUT-CLASS:\n");
+    (void) fprintf(stdout, "\t      String denoting the type of input data.\n");
+    (void) fprintf(stdout, "\t      (\"TEXTIN\", \"TEXTFP\", \"FP\", \"IN\", \n");
+    (void) fprintf(stdout, "\t      \"STR\", \"TEXTUIN\", \"UIN\"). \n");
+    (void) fprintf(stdout,
+            "\t      INPUT-CLASS \"TEXTIN\" denotes an ASCII text \n");
+    (void) fprintf(stdout,
+            "\t      file with signed integer data in ASCII form,\n");
+    (void) fprintf(stdout,
+            "\t      INPUT-CLASS \"TEXTUIN\" denotes an ASCII text \n");
+    (void) fprintf(stdout,
+            "\t      file with unsigned integer data in ASCII form,\n");
+    (void) fprintf(stdout,
+            "\t      \"TEXTFP\" denotes an ASCII text file containing\n");
+    (void) fprintf(stdout, "\t      floating point data in the fixed notation\n");
+    (void) fprintf(stdout, "\t      (325.34),\n");
+    (void) fprintf(stdout,
+            "\t      \"FP\" denotes a floating point binary file,\n");
+    (void) fprintf(stdout,
+            "\t      \"IN\" denotes a signed integer binary file,\n");
+    (void) fprintf(stdout,
+            "\t      \"UIN\" denotes an unsigned integer binary file,\n");
+    (void) fprintf(stdout, "\t       & \"STR\" denotes an ASCII text file the \n");
+    (void) fprintf(stdout,
+            "\t      contents of which should be stored as an 1-D \n");
+    (void) fprintf(stdout, "\t      array of strings.\n");
+    (void) fprintf(stdout, "\t      If INPUT-CLASS is \"STR\", then RANK, \n");
+    (void) fprintf(stdout,
+            "\t      DIMENSION-SIZES, OUTPUT-CLASS, OUTPUT-SIZE, \n");
+    (void) fprintf(stdout, "\t      OUTPUT-ARCHITECTURE and OUTPUT-BYTE-ORDER \n");
+    (void) fprintf(stdout, "\t      will be ignored.\n\n\n");
+    (void) fprintf(stdout, "\t    INPUT-SIZE:\n");
+    (void) fprintf(stdout,
+            "\t      Integer denoting the size of the input data \n");
+    (void) fprintf(stdout, "\t      (8, 16, 32, 64). \n\n");
+    (void) fprintf(stdout, "\t      For floating point,\n");
+    (void) fprintf(stdout, "\t      INPUT-SIZE can be 32 or 64.\n");
+    (void) fprintf(stdout, "\t      For integers (signed and unsigned)\n");
+    (void) fprintf(stdout, "\t      INPUT-SIZE can be 8, 16, 32 or 64.\n\n");
+    (void) fprintf(stdout, "\t    RANK:\n");
+    (void) fprintf(stdout,
+            "\t      Integer denoting the number of dimensions.\n\n");
+    (void) fprintf(stdout, "\t    DIMENSION-SIZES:\n");
+    (void) fprintf(stdout,
+            "\t            Integers separated by spaces to denote the \n");
+    (void) fprintf(stdout, "\t      dimension sizes for the no. of dimensions \n");
+    (void) fprintf(stdout, "\t      determined by rank.\n\n");
+    (void) fprintf(stdout, "\t    OUTPUT-CLASS:\n");
+    (void) fprintf(stdout,
+            "\t      String dentoting data type of the dataset to \n");
+    (void) fprintf(stdout, "\t      be written (\"IN\",\"FP\", \"UIN\")\n\n");
+    (void) fprintf(stdout, "\t    OUTPUT-SIZE:\n");
+    (void) fprintf(stdout,
+            "\t      Integer denoting the size of the data in the \n");
+    (void) fprintf(stdout, "\t      output dataset to be written.\n");
+    (void) fprintf(stdout,
+            "\t      If OUTPUT-CLASS is \"FP\", OUTPUT-SIZE can be \n");
+    (void) fprintf(stdout, "\t      32 or 64.\n");
+    (void) fprintf(stdout,
+            "\t      If OUTPUT-CLASS is \"IN\" or \"UIN\", OUTPUT-SIZE\n");
+    (void) fprintf(stdout, "\t      can be 8, 16, 32 or 64.\n\n");
+    (void) fprintf(stdout, "\t    OUTPUT-ARCHITECTURE:\n");
+    (void) fprintf(stdout, "\t      STRING denoting the type of output \n");
+    (void) fprintf(stdout,
+            "\t      architecture. Can accept the following values\n");
+    (void) fprintf(stdout, "\t      STD\n");
+    (void) fprintf(stdout, "\t      IEEE\n");
+    (void) fprintf(stdout, "\t      INTEL\n");
+    (void) fprintf(stdout, "\t      CRAY\n");
+    (void) fprintf(stdout, "\t      MIPS\n");
+    (void) fprintf(stdout, "\t      ALPHA\n");
+    (void) fprintf(stdout, "\t      NATIVE (default)\n");
+    (void) fprintf(stdout, "\t      UNIX\n\n");
+    (void) fprintf(stdout, "\t    OUTPUT-BYTE-ORDER:\n");
+    (void) fprintf(stdout,
+            "\t      String denoting the output-byte-order. Ignored\n");
+    (void) fprintf(stdout,
+            "\t      if the OUTPUT-ARCHITECTURE is not specified or\n");
+    (void) fprintf(stdout, "\t      if it is IEEE, UNIX or STD. Can accept the \n");
+    (void) fprintf(stdout, "\t      following values.\n");
+    (void) fprintf(stdout, "\t      BE (default)\n");
+    (void) fprintf(stdout, "\t      LE\n\n");
+    (void) fprintf(stdout, "\t    CHUNKED-DIMENSION-SIZES:\n");
+    (void) fprintf(stdout, "\t      Integers separated by spaces to denote the \n");
+    (void) fprintf(stdout,
+            "\t      dimension sizes of the chunk for the no. of \n");
+    (void) fprintf(stdout,
+            "\t      dimensions determined by rank. Required field\n");
+    (void) fprintf(stdout,
+            "\t      to denote that the dataset will be stored with\n");
+    (void) fprintf(stdout,
+            "\t      chunked storage. If this field is absent the\n");
+    (void) fprintf(stdout,
+            "\t      dataset will be stored with contiguous storage.\n\n");
+    (void) fprintf(stdout, "\t    COMPRESSION-TYPE:\n");
+    (void) fprintf(stdout,
+            "\t      String denoting the type of compression to be\n");
+    (void) fprintf(stdout, "\t      used with the chunked storage. Requires the\n");
+    (void) fprintf(stdout,
+            "\t      CHUNKED-DIMENSION-SIZES to be specified. The only \n");
+    (void) fprintf(stdout,
+            "\t      currently supported compression method is GZIP. \n");
+    (void) fprintf(stdout, "\t      Will accept the following value\n");
+    (void) fprintf(stdout, "\t      GZIP\n\n");
+    (void) fprintf(stdout, "\t    COMPRESSION-PARAM:\n");
+    (void) fprintf(stdout,
+            "\t      Integer used to denote compression level and \n");
+    (void) fprintf(stdout, "\t      this option is to be always specified when \n");
+    (void) fprintf(stdout,
+            "\t      the COMPRESSION-TYPE option is specified. The\n");
+    (void) fprintf(stdout, "\t      values are applicable only to GZIP \n");
+    (void) fprintf(stdout, "\t      compression.\n");
+    (void) fprintf(stdout, "\t      Value 1-9: The level of Compression. \n");
+    (void) fprintf(stdout, "\t        1 will result in the fastest \n");
+    (void) fprintf(stdout, "\t        compression while 9 will result in \n");
+    (void) fprintf(stdout, "\t        the best compression ratio. The default\n");
+    (void) fprintf(stdout, "\t        level of compression is 6.\n\n");
+    (void) fprintf(stdout, "\t    EXTERNAL-STORAGE:\n");
+    (void) fprintf(stdout,
+            "\t      String to denote the name of the non-HDF5 file \n");
+    (void) fprintf(stdout,
+            "\t      to store data to. Cannot be used if CHUNKED-\n");
+    (void) fprintf(stdout,
+            "\t      DIMENSIONS or COMPRESSION-TYPE or EXTENDIBLE-\n");
+    (void) fprintf(stdout, "\t      DATASET is specified.\n");
+    (void) fprintf(stdout, "\t      Value <external-filename>: the name of the \n");
+    (void) fprintf(stdout, "\t      external file as a string to be used.\n\n");
+    (void) fprintf(stdout, "\t    MAXIMUM-DIMENSIONS:\n");
+    (void) fprintf(stdout, "\t      Integers separated by spaces to denote the \n");
+    (void) fprintf(stdout, "\t      maximum dimension sizes of all the \n");
+    (void) fprintf(stdout, "\t      dimensions determined by rank. Requires the\n");
+    (void) fprintf(stdout,
+            "\t      CHUNKED-DIMENSION-SIZES to be specified. A value of \n");
+    (void) fprintf(stdout, "\t      -1 for any dimension implies UNLIMITED \n");
+    (void) fprintf(stdout,
+            "\t      DIMENSION size for that particular dimension.\n\n");
+    (void) fprintf(stdout, "\t   EXAMPLES:\n");
+    (void) fprintf(stdout, "\t  1. Configuration File may look like:\n\n");
+    (void) fprintf(stdout, "\t    PATH work h5 pkamat First-set\n");
+    (void) fprintf(stdout, "\t    INPUT-CLASS TEXTFP\n");
+    (void) fprintf(stdout, "\t    RANK 3\n");
+    (void) fprintf(stdout, "\t    DIMENSION-SIZES 5 2 4\n");
+    (void) fprintf(stdout, "\t    OUTPUT-CLASS FP\n");
+    (void) fprintf(stdout, "\t    OUTPUT-SIZE 64\n");
+    (void) fprintf(stdout, "\t    OUTPUT-ARCHITECTURE IEEE\n");
+    (void) fprintf(stdout, "\t    OUTPUT-BYTE-ORDER LE\n");
+    (void) fprintf(stdout, "\t      CHUNKED-DIMENSION-SIZES 2 2 2 \n\n");
+    (void) fprintf(stdout,
+            "\t  The above configuration will accept a floating point array \n");
+    (void) fprintf(stdout,
+            "\t  (5 x 2 x 4)  in an ASCII file with the rank and dimension sizes \n");
+    (void) fprintf(stdout,
+            "\t  specified and will save it in a chunked data-set (of pattern \n");
+    (void) fprintf(stdout,
+            "\t  2 X 2 X 2) of 64-bit floating point in the little-endian order \n");
+    (void) fprintf(stdout,
+            "\t  and IEEE architecture. The dataset will be stored at\n");
+    (void) fprintf(stdout, "\t  \"/work/h5/pkamat/First-set\"\n\n");
+    (void) fprintf(stdout, "\t  2. Another configuration could be:\n\n");
+    (void) fprintf(stdout, "\t    PATH Second-set\n");
+    (void) fprintf(stdout, "\t    INPUT-CLASS IN  \n");
+    (void) fprintf(stdout, "\t    RANK 5\n");
+    (void) fprintf(stdout, "\t    DIMENSION-SIZES 6 3 5 2 4\n");
+    (void) fprintf(stdout, "\t    OUTPUT-CLASS IN\n");
+    (void) fprintf(stdout, "\t    OUTPUT-SIZE 32\n");
+    (void) fprintf(stdout, "\t      CHUNKED-DIMENSION-SIZES 2 2 2 2 2\n");
+    (void) fprintf(stdout, "\t    EXTENDIBLE-DATASET 1 3 \n");
+    (void) fprintf(stdout, "\t    COMPRESSION-TYPE GZIP\n");
+    (void) fprintf(stdout, "\t    COMPRESSION-PARAM 7\n\n\n");
+    (void) fprintf(stdout,
+            "\t  The above configuration will accept an integer array \n");
+    (void) fprintf(stdout,
+            "\t  (6 X 3 X 5 x 2 x 4)  in a binary file with the rank and \n");
+    (void) fprintf(stdout,
+            "\t  dimension sizes specified and will save it in a chunked data-set\n");
+    (void) fprintf(stdout,
+            "\t  (of pattern 2 X 2 X 2 X 2 X 2) of 32-bit floating point in \n");
+    (void) fprintf(stdout,
+            "\t  native format (as output-architecture is not specified). The \n");
+    (void) fprintf(stdout,
+            "\t  first and the third dimension will be defined as unlimited. The \n");
+    (void) fprintf(stdout,
+            "\t  data-set will be compressed using GZIP and a compression level \n");
+    (void) fprintf(stdout, "\t  of 7.\n");
+    (void) fprintf(stdout,
+            "\t  The dataset will be stored at \"/Second-set\"\n\n");
+    return;
 }
 
-
-void
-usage(char *name)
+void usage(char *name)
 {
-  (void) fprintf(stdout, "\nUsage:\t%s -h[elp], OR\n", name);
-  (void) fprintf(stdout, "\t%s <infile> -c[onfig] <configfile> \
+    (void) fprintf(stdout, "\nUsage:\t%s -h[elp], OR\n", name);
+    (void) fprintf(stdout,
+            "\t%s <infile> -c[onfig] <configfile> \
   [<infile> -c[config] <configfile>...] -o[utfile] <outfile> \n\n", name);
-  return;
+    return;
 }
 
diff --git a/tools/h5import/h5import.h b/tools/h5import/h5import.h
index 9e4f6e8..05de476 100755
--- a/tools/h5import/h5import.h
+++ b/tools/h5import/h5import.h
@@ -74,111 +74,110 @@
 
 struct path_info
 {
-  char group[MAX_GROUPS_IN_PATH][MAX_PATH_NAME_LENGTH];
-  int count;
+    char group[MAX_GROUPS_IN_PATH][MAX_PATH_NAME_LENGTH];
+    int count;
 };
 
 struct Input
 {
-  struct path_info path;
-  int inputClass;
-  int inputSize;
-  int rank;
-  hsize_t* sizeOfDimension;
-  int outputClass;
-  int outputSize;
-  int outputArchitecture;
-  int outputByteOrder;
-  hsize_t* sizeOfChunk;
-  hsize_t* maxsizeOfDimension;
-  int compressionType;
-  int compressionParam;
-  char *externFilename;
-  VOIDP data;
-  int configOptionVector[NUM_KEYS];
+    struct path_info path;
+    int inputClass;
+    int inputSize;
+    int rank;
+    hsize_t* sizeOfDimension;
+    int outputClass;
+    int outputSize;
+    int outputArchitecture;
+    int outputByteOrder;
+    hsize_t* sizeOfChunk;
+    hsize_t* maxsizeOfDimension;
+    int compressionType;
+    int compressionParam;
+    char *externFilename;
+    VOIDP data;
+    int configOptionVector[NUM_KEYS];
 };
 
 struct infilesformat
 {
-  char datafile[255];
-  char configfile[255];
-  struct Input in;
-  int config; /* Configfile present? No - 0. Yes - 1 */
+    char datafile[255];
+    char configfile[255];
+    struct Input in;
+    int config; /* Configfile present? No - 0. Yes - 1 */
 };
 
 struct Options
 {
-  struct infilesformat  infiles[30];  /* structure to hold the list of input file names. Limited to 30*/
-  char   outfile[256];  /* output file name */
-  int    fcount;       /* number of input files */
+    struct infilesformat  infiles[30];  /* structure to hold the list of input file names. Limited to 30*/
+    char   outfile[256];  /* output file name */
+    int    fcount;       /* number of input files */
 };
 
 char keytable[NUM_KEYS][30] = {
-  "PATH",
-  "INPUT-CLASS",
-  "INPUT-SIZE",
-  "RANK",
-  "DIMENSION-SIZES",
-  "OUTPUT-CLASS",
-  "OUTPUT-SIZE",
-  "OUTPUT-ARCHITECTURE",
-  "OUTPUT-BYTE-ORDER",
-  "CHUNKED-DIMENSION-SIZES",
-  "COMPRESSION-TYPE",
-  "COMPRESSION-PARAM",
-  "EXTERNAL-STORAGE",
-  "MAXIMUM-DIMENSIONS"
+        "PATH",
+        "INPUT-CLASS",
+        "INPUT-SIZE",
+        "RANK",
+        "DIMENSION-SIZES",
+        "OUTPUT-CLASS",
+        "OUTPUT-SIZE",
+        "OUTPUT-ARCHITECTURE",
+        "OUTPUT-BYTE-ORDER",
+        "CHUNKED-DIMENSION-SIZES",
+        "COMPRESSION-TYPE",
+        "COMPRESSION-PARAM",
+        "EXTERNAL-STORAGE",
+        "MAXIMUM-DIMENSIONS"
 };
 
 static int  state_table[15][8] =
 {
-  /* token ordering:
-     FILNAME      OPT_o   OPT_c  OPT_h  OPT_d  OPT_p  OPT_t  OPT_s   */
+    /* token ordering: FILNAME      OPT_o   OPT_c  OPT_h  OPT_d  OPT_p  OPT_t  OPT_s   */
 
-  /* state 0: start */
-  {1, ERR, ERR, 6, ERR, ERR, ERR, ERR},
+    /* state 0: start */
+    {1, ERR, ERR, 6, ERR, ERR, ERR, ERR},
 
-  /* state 1: input files */
-  {ERR, ERR, 2, ERR, 7, ERR, ERR, ERR},
+    /* state 1: input files */
+    {ERR, ERR, 2, ERR, 7, ERR, ERR, ERR},
 
-  /* state 2: -c[onfigfile] */
-  {3, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
+    /* state 2: -c[onfigfile] */
+    {3, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
 
-  /* state 3: configfile */
-  {1, 4, ERR, ERR, ERR, ERR, ERR, ERR},
+    /* state 3: configfile */
+    {1, 4, ERR, ERR, ERR, ERR, ERR, ERR},
 
-  /* state 4: -o[utfile] */
-  {5, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
+    /* state 4: -o[utfile] */
+    {5, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
 
-  /* state 5: outfile */
-  {ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
+    /* state 5: outfile */
+    {ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
 
-  /* state 6: -h[elp] */
-  {ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
+    /* state 6: -h[elp] */
+    {ERR, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
 
-  /* state 7: -d[ims] */
-  {8, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
+    /* state 7: -d[ims] */
+    {8, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
 
-  /* state 8: dimensions */
-  {1, 4, ERR, ERR, ERR, 9, 11, 13},
+    /* state 8: dimensions */
+    {1, 4, ERR, ERR, ERR, 9, 11, 13},
 
-  /* state 9: -p[ath] */
-  {10, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
+    /* state 9: -p[ath] */
+    {10, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
 
-  /* state 10: path name */
-  {1, 4, ERR, ERR, ERR, ERR, 11, 13},
+    /* state 10: path name */
+    {1, 4, ERR, ERR, ERR, ERR, 11, 13},
 
-  /* state 11: -t[ype] */
-  {12, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
+    /* state 11: -t[ype] */
+    {12, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
 
-  /* state 12: data type */
-  {1, 4, ERR, ERR, ERR, ERR, ERR, 13},
+    /* state 12: data type */
+    {1, 4, ERR, ERR, ERR, ERR, ERR, 13},
 
-  /* state 13: -s[ize] */
-  {14, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
+    /* state 13: -s[ize] */
+    {14, ERR, ERR, ERR, ERR, ERR, ERR, ERR},
 
-  /* state 14: data size */
-  {1, 4, ERR, ERR, ERR, ERR, ERR, ERR}
+    /* state 14: data size */
+    {1, 4, ERR, ERR, ERR, ERR, ERR, ERR}
 
 };
 
@@ -193,39 +192,39 @@ void  help(char *);
 
 static int  gtoken(char *s);
 static int  process(struct Options *opt);
-static int  processConfigurationFile(char *infile, struct Input *in, FILE **strm);
+static int  processConfigurationFile(char *infile, struct Input *in);
 static int  mapKeywordToIndex(char *key);
 static int  parsePathInfo(struct path_info *path, char *strm);
 static int  parseDimensions(struct Input *in, char *strm);
 static int  getInputSize(struct Input *in, int ival);
 static int  getInputClass(struct Input *in, char * strm);
 static int  InputClassStrToInt(char *temp);
-static int  getRank(struct Input *in, FILE** strm);
-static int  getDimensionSizes(struct Input *in, FILE** strm);
-static int  getOutputSize(struct Input *in, FILE** strm);
-static int  getOutputClass(struct Input *in, FILE** strm);
+static int  getRank(struct Input *in, FILE *strm);
+static int  getDimensionSizes(struct Input *in, FILE *strm);
+static int  getOutputSize(struct Input *in, FILE *strm);
+static int  getOutputClass(struct Input *in, FILE *strm);
 static int  OutputClassStrToInt(char *temp);
-static int  getOutputArchitecture(struct Input *in, FILE** strm);
+static int  getOutputArchitecture(struct Input *in, FILE *strm);
 static int  OutputArchStrToInt(char *temp);
-static int  getOutputByteOrder(struct Input *in, FILE** strm);
+static int  getOutputByteOrder(struct Input *in, FILE *strm);
 static int  OutputByteOrderStrToInt(char *temp);
-static int  getChunkedDimensionSizes(struct Input *in, FILE **strm);
-static int  getCompressionType(struct Input *in, FILE** strm);
+static int  getChunkedDimensionSizes(struct Input *in, FILE *strm);
+static int  getCompressionType(struct Input *in, FILE *strm);
 static int  CompressionTypeStrToInt(char *temp);
-static int  getCompressionParameter(struct Input *in, FILE** strm);
-static int  getExternalFilename(struct Input *in, FILE** strm);
-static int  getMaximumDimensionSizes(struct Input *in, FILE **strm);
-static int  processDataFile(char *infile, struct Input *in, FILE **strm, hid_t file_id);
-static int  readIntegerData(FILE **strm, struct Input *in);
-static int  readFloatData(FILE **strm, struct Input *in);
+static int  getCompressionParameter(struct Input *in, FILE *strm);
+static int  getExternalFilename(struct Input *in, FILE *strm);
+static int  getMaximumDimensionSizes(struct Input *in, FILE *strm);
+static int  processDataFile(char *infile, struct Input *in, hid_t file_id);
+static int  readIntegerData(FILE *strm, struct Input *in);
+static int  readFloatData(FILE *strm, struct Input *in);
 static int  allocateIntegerStorage(struct Input *in);
 static int  allocateFloatStorage(struct Input *in);
 hid_t       createOutputDataType(struct Input *in);
 hid_t       createInputDataType(struct Input *in);
-static int  readUIntegerData(FILE **strm, struct Input *in);
+static int  readUIntegerData(FILE *strm, struct Input *in);
 static int  allocateUIntegerStorage(struct Input *in);
-static int  validateConfigurationParameters(struct Input * in);
-static int  processStrData(FILE **strm, struct Input *in, hid_t file_id);
+static int  validateConfigurationParameters(struct Input *in);
+static int  processStrData(FILE *strm, struct Input *in, hid_t file_id);
 
 #endif  /* H5IMPORT_H__ */
 
diff --git a/tools/h5import/h5importtest.c b/tools/h5import/h5importtest.c
index 9c839a3..434cba7 100755
--- a/tools/h5import/h5importtest.c
+++ b/tools/h5import/h5importtest.c
@@ -16,6 +16,12 @@
 #include <stdio.h>
 #include "H5private.h"
 
+#ifdef H5_HAVE_WIN32_API
+#define OPEN_FLAGS "wb"
+#else
+#define OPEN_FLAGS "w"
+#endif
+
 /*
  * Name:
  *      h5importtest
@@ -42,7 +48,7 @@ main(void)
     int       rowo4i = (int)11 , colo4i = (int)21 , plno4i = (int)51 ;
     int       rowi4i = (int)1 , coli4i = (int)2 , plni4i = (int)5 ;
 
-#ifndef WIN32
+#ifdef H5_SIZEOF_LONG_LONG
     long long row4i64[3], col4i64[4], pln4i64[5];
     long long rowo4i64 = (long long)11 , colo4i64 = (long long)21 , plno4i64 = (long long)51 ;
     long long rowi4i64 = (long long)1 , coli4i64 = (long long)2 , plni4i64 = (long long)5 ;
@@ -91,7 +97,7 @@ main(void)
     col4i[0] = colo4i;
     pln4i[0] = plno4i;
 
-#ifndef WIN32
+#ifdef H5_SIZEOF_LONG_LONG
     row4i64[0] = rowo4i64;
     col4i64[0] = colo4i64;
     pln4i64[0] = plno4i64;
@@ -110,7 +116,7 @@ main(void)
         row4[i] = row4[i - 1] + rowi4;
         row8[i] = row8[i - 1] + rowi8;
         row4i[i] = row4i[i - 1] + rowi4i;
-#ifndef WIN32
+#ifdef H5_SIZEOF_LONG_LONG
         row4i64[i] = row4i64[i - 1] + rowi4i64;
 #endif
         row4i16[i] = row4i16[i - 1] + rowi4i16;
@@ -122,7 +128,7 @@ main(void)
         col4[j] = col4[j - 1] + coli4;
         col8[j] = col8[j - 1] + coli8;
         col4i[j] = col4i[j - 1] + coli4i;
-#ifndef WIN32
+#ifdef H5_SIZEOF_LONG_LONG
         col4i64[j] = col4i64[j - 1] + coli4i64;
 #endif
         col4i16[j] = col4i16[j - 1] + coli4i16;
@@ -133,7 +139,7 @@ main(void)
         pln4[k] = pln4[k - 1] + plni4;
         pln8[k] = pln8[k - 1] + plni8;
         pln4i[k] = pln4i[k - 1] + plni4i;
-#ifndef WIN32
+#ifdef H5_SIZEOF_LONG_LONG
         pln4i64[k] = pln4i64[k - 1] + plni4i64;
 #endif
         pln4i16[k] = pln4i16[k - 1] + plni4i16;
@@ -165,7 +171,7 @@ main(void)
   */
 
 
-    sp = fopen("txtin16.txt", "w");
+    sp = HDfopen("txtin16.txt", "w");
     for (k = 0; k < npln; k++)
     {
         for (i = 0; i < nrow; i++)
@@ -175,14 +181,14 @@ main(void)
             (void) fprintf(sp, "\n");
         }
     }
-    (void) fclose(sp);
+    (void) HDfclose(sp);
 
  /*-------------------------------------------------------------------------
   * TOOLTEST txtin32.txt -c $srcdir/testfiles/textin32.conf -o textin32.h5
   *-------------------------------------------------------------------------
   */
 
-    sp = fopen("txtin32.txt", "w");
+    sp = HDfopen("txtin32.txt", "w");
     for (k = 0; k < npln; k++)
     {
         for (i = 0; i < nrow; i++)
@@ -192,51 +198,43 @@ main(void)
             (void) fprintf(sp, "\n");
         }
     }
-    (void) fclose(sp);
+    (void) HDfclose(sp);
 
  /*-------------------------------------------------------------------------
   * TOOLTEST binin32.bin -c $srcdir/testfiles/binin32.conf -o binin32.h5
   *-------------------------------------------------------------------------
   */
 
-#ifdef WIN32
-    sp = fopen("binin32.bin", "wb");
-#else
-    sp = fopen("binin32.bin", "w");
-#endif
+    sp = HDfopen("binin32.bin", OPEN_FLAGS);
     for (k = 0; k < npln; k++)
     {
         for (i = 0; i < nrow; i++)
         {
             for (j = 0; j < ncol; j++)
             {
-                (void) fwrite((char *) &b32i3[k][i][j], sizeof(int), 1, sp);
+                (void) HDfwrite((char *) &b32i3[k][i][j], sizeof(int), 1, sp);
             }
         }
     }
-    (void) fclose(sp);
+    (void) HDfclose(sp);
 
  /*-------------------------------------------------------------------------
   * TOOLTEST binuin32.bin -c $srcdir/testfiles/binuin32.conf -o binuin32.h5
   *-------------------------------------------------------------------------
   */
 
-#ifdef WIN32
-    sp = fopen("binuin32.bin", "wb");
-#else
-    sp = fopen("binuin32.bin", "w");
-#endif
+    sp = HDfopen("binuin32.bin", OPEN_FLAGS);
     for (k = 0; k < npln; k++)
     {
         for (i = 0; i < nrow; i++)
         {
             for (j = 0; j < ncol; j++)
             {
-                (void) fwrite((char *) &b32i3[k][i][j], sizeof(unsigned int), 1, sp);
+                (void) HDfwrite((char *) &b32i3[k][i][j], sizeof(unsigned int), 1, sp);
             }
         }
     }
-    (void) fclose(sp);
+    (void) HDfclose(sp);
 
 
 
@@ -246,43 +244,35 @@ main(void)
   *-------------------------------------------------------------------------
   */
 
-#ifdef WIN32
-    sp = fopen("binin16.bin", "wb");
-#else
-    sp = fopen("binin16.bin", "w");
-#endif
+    sp = HDfopen("binin16.bin", OPEN_FLAGS);
     for (k = 0; k < npln; k++)
     {
         for (i = 0; i < nrow; i++)
         {
             for (j = 0; j < ncol; j++)
             {
-                (void) fwrite((char *) &b16i3[k][i][j], sizeof(short), 1, sp);
+                (void) HDfwrite((char *) &b16i3[k][i][j], sizeof(short), 1, sp);
             }
         }
     }
-    (void) fclose(sp);
+    (void) HDfclose(sp);
 
  /*-------------------------------------------------------------------------
   * TOOLTEST binuin16.bin -c $srcdir/testfiles/binuin16.conf -o binuin16.h5
   *-------------------------------------------------------------------------
   */
-#ifdef WIN32
-    sp = fopen("binuin16.bin", "wb");
-#else
-    sp = fopen("binuin16.bin", "w");
-#endif
+    sp = HDfopen("binuin16.bin", OPEN_FLAGS);
     for (k = 0; k < npln; k++)
     {
         for (i = 0; i < nrow; i++)
         {
             for (j = 0; j < ncol; j++)
             {
-                (void) fwrite((char *) &b16i3[k][i][j], sizeof(unsigned short), 1, sp);
+                (void) HDfwrite((char *) &b16i3[k][i][j], sizeof(unsigned short), 1, sp);
             }
         }
     }
-    (void) fclose(sp);
+    (void) HDfclose(sp);
 
 
 
@@ -291,22 +281,18 @@ main(void)
   *-------------------------------------------------------------------------
   */
 
-#ifdef WIN32
-    sp = fopen("binin8.bin", "wb");
-#else
-    sp = fopen("binin8.bin", "w");
-#endif
+    sp = HDfopen("binin8.bin", OPEN_FLAGS);
     for (k = 0; k < npln; k++)
     {
         for (i = 0; i < nrow; i++)
         {
             for (j = 0; j < ncol; j++)
             {
-                (void) fwrite((char *) &b8i3[k][i][j], sizeof(char), 1, sp);
+                (void) HDfwrite((char *) &b8i3[k][i][j], sizeof(char), 1, sp);
             }
         }
     }
-    (void) fclose(sp);
+    (void) HDfclose(sp);
 
 #endif /* UNICOS */
 
@@ -322,22 +308,18 @@ main(void)
   * binary 64-bit file - rank 2 & 3
   */
 
-#ifdef WIN32
-    sp = fopen("binfp64.bin", "wb");
-#else
-    sp = fopen("binfp64.bin", "w");
-#endif
+    sp = HDfopen("binfp64.bin", OPEN_FLAGS);
     for (k = 0; k < npln; k++)
     {
         for (i = 0; i < nrow; i++)
         {
             for (j = 0; j < ncol; j++)
             {
-                (void) fwrite((char *) &b64r3[k][i][j], sizeof(double), 1, sp);
+                (void) HDfwrite((char *) &b64r3[k][i][j], sizeof(double), 1, sp);
             }
         }
     }
-    (void) fclose(sp);
+    (void) HDfclose(sp);
 
 
 
@@ -350,18 +332,14 @@ main(void)
         /* test CR+LF (13,10) and EOF (26) in windows */
         char bin8w[4] = {13,10,26,0};
 
-#ifdef WIN32
-        sp = fopen("binin8w.bin", "wb");
-#else
-        sp = fopen("binin8w.bin", "w");
-#endif
+        sp = HDfopen("binin8w.bin", OPEN_FLAGS);
         for (i = 0; i < 4; i++)
         {
             char c = bin8w[i];
-            if ( fwrite( &c, sizeof(char), 1, sp) != 1 )
+            if ( HDfwrite( &c, sizeof(char), 1, sp) != 1 )
                 printf("error writing file\n");
         }
-        fclose(sp);
+        HDfclose(sp);
 
 
     }
diff --git a/tools/h5import/h5importtestutil.sh b/tools/h5import/h5importtestutil.sh
index d558eba..943b194 100755
--- a/tools/h5import/h5importtestutil.sh
+++ b/tools/h5import/h5importtestutil.sh
@@ -20,9 +20,112 @@ TESTNAME=h5import
 EXIT_SUCCESS=0
 EXIT_FAILURE=1
 
+CP='cp'
+
 # initialize errors variable
 nerrors=0
 
+# The build (current) directory might be different than the source directory.
+if test -z "$srcdir"; then
+   srcdir=.
+fi
+
+# source dirs
+SRC_TOOLS="$srcdir/.."
+SRC_TOOLS_TESTFILES="$SRC_TOOLS/testfiles"
+
+# testfiles source dirs for tools
+SRC_H5LS_TESTFILES="$SRC_TOOLS_TESTFILES"
+SRC_H5DUMP_TESTFILES="$SRC_TOOLS_TESTFILES"
+SRC_H5DIFF_TESTFILES="$SRC_TOOLS/h5diff/testfiles"
+SRC_H5COPY_TESTFILES="$SRC_TOOLS/h5copy/testfiles"
+SRC_H5REPACK_TESTFILES="$SRC_TOOLS/h5repack/testfiles"
+SRC_H5JAM_TESTFILES="$SRC_TOOLS/h5jam/testfiles"
+SRC_H5STAT_TESTFILES="$SRC_TOOLS/h5stat/testfiles"
+SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/h5import/testfiles"
+
+TESTDIR=./testfiles
+test -d $TESTDIR || mkdir $TESTDIR
+
+######################################################################
+# test files
+# --------------------------------------------------------------------
+# All the test files copy from source directory to test directory
+# NOTE: Keep this framework to add/remove test files.
+#       Any test files from other tools can be used in this framework.
+#       This list are also used for checking exist.
+#       Comment '#' without space can be used.
+# --------------------------------------------------------------------
+LIST_HDF5_TEST_FILES="
+$SRC_H5IMPORT_TESTFILES/binfp64.h5
+$SRC_H5IMPORT_TESTFILES/binin8.h5
+$SRC_H5IMPORT_TESTFILES/binin8w.h5
+$SRC_H5IMPORT_TESTFILES/binin16.h5
+$SRC_H5IMPORT_TESTFILES/binin32.h5
+$SRC_H5IMPORT_TESTFILES/binuin16.h5
+$SRC_H5IMPORT_TESTFILES/binuin32.h5
+$SRC_H5IMPORT_TESTFILES/txtfp32.h5
+$SRC_H5IMPORT_TESTFILES/txtfp64.h5
+$SRC_H5IMPORT_TESTFILES/txtin8.h5
+$SRC_H5IMPORT_TESTFILES/txtin16.h5
+$SRC_H5IMPORT_TESTFILES/txtin32.h5
+$SRC_H5IMPORT_TESTFILES/txtuin16.h5
+$SRC_H5IMPORT_TESTFILES/txtuin32.h5
+$SRC_H5IMPORT_TESTFILES/txtstr.h5
+$SRC_H5IMPORT_TESTFILES/textpfe.h5
+"
+
+LIST_OTHER_TEST_FILES="
+$SRC_H5IMPORT_TESTFILES/binfp64.conf
+$SRC_H5IMPORT_TESTFILES/binin8.conf
+$SRC_H5IMPORT_TESTFILES/binin8w.conf
+$SRC_H5IMPORT_TESTFILES/binin16.conf
+$SRC_H5IMPORT_TESTFILES/binin32.conf
+$SRC_H5IMPORT_TESTFILES/binuin16.conf
+$SRC_H5IMPORT_TESTFILES/binuin32.conf
+$SRC_H5IMPORT_TESTFILES/txtfp32.conf
+$SRC_H5IMPORT_TESTFILES/txtfp64.conf
+$SRC_H5IMPORT_TESTFILES/txtin8.conf
+$SRC_H5IMPORT_TESTFILES/txtin16.conf
+$SRC_H5IMPORT_TESTFILES/txtin32.conf
+$SRC_H5IMPORT_TESTFILES/txtuin16.conf
+$SRC_H5IMPORT_TESTFILES/txtuin32.conf
+$SRC_H5IMPORT_TESTFILES/textpfe.conf
+$SRC_H5IMPORT_TESTFILES/txtstr.conf
+$SRC_H5IMPORT_TESTFILES/txtfp32.txt
+$SRC_H5IMPORT_TESTFILES/txtfp64.txt
+$SRC_H5IMPORT_TESTFILES/txtuin32.txt
+$SRC_H5IMPORT_TESTFILES/txtin16.txt
+$SRC_H5IMPORT_TESTFILES/txtin32.txt
+$SRC_H5IMPORT_TESTFILES/textpfe64.txt
+$SRC_H5IMPORT_TESTFILES/txtstr.txt
+"
+
+#
+# copy test files and expected output files from source dirs to test dir
+#
+COPY_TESTFILES="$LIST_HDF5_TEST_FILES $LIST_OTHER_TEST_FILES"
+
+COPY_TESTFILES_TO_TESTDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_TESTFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            if [ -a $tstfile ]; then
+                $CP -f $tstfile $TESTDIR
+            else
+                echo "Error: FAILED to copy $tstfile"
+                echo "       $tstfile doesn't exist!"
+                exit $EXIT_FAILURE
+            fi
+        fi
+    done
+}
+
 TESTING() {
    SPACES="                                                               "
    echo "Testing $* $SPACES" | cut -c1-70 | tr -d '\012'
@@ -58,61 +161,80 @@ if [ -f h5import -a -f h5importtest ]; then
 
 rm -f  output.h5 log1 tx* b* *.dat
 
+# prepare for test
+COPY_TESTFILES_TO_TESTDIR
+
 mkdir tmp_testfiles
-cp $srcdir/testfiles/*.h5 tmp_testfiles/
+$CP $TESTDIR/*.h5 ./tmp_testfiles/
 
 $RUNSERIAL ./h5importtest
 
+################################################
+###        T H E   T E S T S
+################################################
+
 TESTING "ASCII I32 rank 3 - Output BE " ;
-TOOLTEST $srcdir/testfiles/in32.txt -c $srcdir/testfiles/textin32.conf -o test1.h5
+TOOLTEST $TESTDIR/txtin16.txt -c $TESTDIR/txtin32.conf -o txtin32.h5
 
 TESTING "ASCII I16 rank 3 - Output LE - CHUNKED - extended" 
-TOOLTEST $srcdir/testfiles/in16.txt -c $srcdir/testfiles/textin16.conf -o test2.h5
+TOOLTEST $TESTDIR/txtin16.txt -c $TESTDIR/txtin16.conf -o txtin16.h5
+
 
 TESTING "ASCII I8 - rank 3 - Output I8 LE-Chunked+Extended+Compressed " 
-TOOLTEST $srcdir/testfiles/in16.txt -c $srcdir/testfiles/textin8.conf  -o test3.h5
+TOOLTEST $TESTDIR/txtin16.txt -c $TESTDIR/txtin8.conf  -o txtin8.h5
 
 TESTING "ASCII UI32 - rank 3 - Output BE" 
-TOOLTEST $srcdir/testfiles/in1.txt -c $srcdir/testfiles/textuin32.conf -o test4.h5
+TOOLTEST $TESTDIR/txtuin32.txt -c $TESTDIR/txtuin32.conf -o txtuin32.h5
 
 TESTING "ASCII UI16 - rank 2 - Output LE+Chunked+Compressed " 
-TOOLTEST $srcdir/testfiles/in1.txt -c $srcdir/testfiles/textuin16.conf -o test5.h5
+TOOLTEST $TESTDIR/txtuin32.txt -c $TESTDIR/txtuin16.conf -o txtuin16.h5
 
 TESTING "ASCII F32 - rank 3 - Output LE " 
-TOOLTEST $srcdir/testfiles/fp1.txt -c $srcdir/testfiles/textfp32.conf -o test6.h5
+TOOLTEST $TESTDIR/txtfp32.txt -c $TESTDIR/txtfp32.conf -o txtfp32.h5
+
 
 TESTING "ASCII F64 - rank 3 - Output BE + CHUNKED+Extended+Compressed " 
-TOOLTEST $srcdir/testfiles/fp2.txt -c $srcdir/testfiles/textfp64.conf -o test7.h5
+TOOLTEST $TESTDIR/txtfp64.txt -c $TESTDIR/txtfp64.conf -o txtfp64.h5
 
 TESTING "BINARY F64 - rank 3 - Output LE+CHUNKED+Extended+Compressed " 
-TOOLTEST binfp64.bin -c $srcdir/testfiles/binfp64.conf -o test8.h5
+TOOLTEST binfp64.bin -c $TESTDIR/binfp64.conf -o binfp64.h5
+
 
 TESTING "BINARY I16 - rank 3 - Output order LE + CHUNKED + extended " 
-TOOLTEST binin16.bin -c $srcdir/testfiles/binin16.conf -o test9.h5
+TOOLTEST binin16.bin -c $TESTDIR/binin16.conf -o binin16.h5
+
 
 TESTING "BINARY I8 - rank 3 - Output I16LE + Chunked+Extended+Compressed " 
-TOOLTEST binin8.bin -c $srcdir/testfiles/binin8.conf  -o test10.h5
+TOOLTEST binin8.bin -c $TESTDIR/binin8.conf  -o binin8.h5
+
 
 TESTING "BINARY I32 - rank 3 - Output BE + CHUNKED " 
-TOOLTEST binin32.bin -c $srcdir/testfiles/binin32.conf -o test11.h5
+TOOLTEST binin32.bin -c $TESTDIR/binin32.conf -o binin32.h5
+
 
 TESTING "BINARY UI16 - rank 3 - Output byte BE + CHUNKED " 
-TOOLTEST binuin16.bin -c $srcdir/testfiles/binuin16.conf -o test12.h5
+TOOLTEST binuin16.bin -c $TESTDIR/binuin16.conf -o binuin16.h5
 
 TESTING "BINARY UI32 - rank 3 - Output LE + CHUNKED " 
-TOOLTEST binuin32.bin -c $srcdir/testfiles/binuin32.conf -o test13.h5
+TOOLTEST binuin32.bin -c $TESTDIR/binuin32.conf -o binuin32.h5
+
 
 TESTING "STR" 
-TOOLTEST $srcdir/testfiles/str.txt -c $srcdir/testfiles/textstr.conf -o test14.h5
+TOOLTEST $TESTDIR/txtstr.txt -c $TESTDIR/txtstr.conf -o txtstr.h5
+
+TESTING "BINARY I8 CR LF EOF" 
+TOOLTEST binin8w.bin -c $TESTDIR/binin8w.conf -o binin8w.h5
 
 TESTING "ASCII F64 - rank 1 - INPUT-CLASS TEXTFPE " 
-TOOLTEST $srcdir/testfiles/in64.txt -c $srcdir/testfiles/textpfe.conf -o test15.h5
+TOOLTEST $TESTDIR/textpfe64.txt -c $TESTDIR/textpfe.conf -o textpfe.h5
+
+
 
 rm -f  txtin32.txt txtin16.txt *.bin *.h5
 rm -rf tmp_testfiles
 else
-	echo "** h5import or h5importtest not available ***"
-	nerrors="` expr $nerrors + 1 `";
+  echo "** h5import or h5importtest not available ***"
+  nerrors="` expr $nerrors + 1 `";
 fi
 
 #
diff --git a/tools/h5import/testfiles/binfp32.conf b/tools/h5import/testfiles/binfp32.conf
deleted file mode 100755
index 66e6b35..0000000
--- a/tools/h5import/testfiles/binfp32.conf
+++ /dev/null
@@ -1,12 +0,0 @@
-PATH /fpbin/32-bit
-INPUT-CLASS FP
-INPUT-SIZE	32
-RANK 3
-DIMENSION-SIZES 5 3 4
-OUTPUT-ARCHITECTURE IEEE
-OUTPUT-BYTE-ORDER BE
-CHUNKED-DIMENSION-SIZES 2 2 2 
-COMPRESSION-PARAM 2
-
-
-
diff --git a/tools/h5import/testfiles/test8.h5 b/tools/h5import/testfiles/binfp64.h5
similarity index 100%
rename from tools/h5import/testfiles/test8.h5
rename to tools/h5import/testfiles/binfp64.h5
diff --git a/tools/h5import/testfiles/test9.h5 b/tools/h5import/testfiles/binin16.h5
similarity index 100%
rename from tools/h5import/testfiles/test9.h5
rename to tools/h5import/testfiles/binin16.h5
diff --git a/tools/h5import/testfiles/test11.h5 b/tools/h5import/testfiles/binin32.h5
similarity index 100%
rename from tools/h5import/testfiles/test11.h5
rename to tools/h5import/testfiles/binin32.h5
diff --git a/tools/h5import/testfiles/test10.h5 b/tools/h5import/testfiles/binin8.h5
similarity index 100%
rename from tools/h5import/testfiles/test10.h5
rename to tools/h5import/testfiles/binin8.h5
diff --git a/tools/h5import/testfiles/binin8w.conf b/tools/h5import/testfiles/binin8w.conf
new file mode 100644
index 0000000..fccb4ac
--- /dev/null
+++ b/tools/h5import/testfiles/binin8w.conf
@@ -0,0 +1,9 @@
+
+INPUT-CLASS IN
+INPUT-SIZE  8
+RANK 1
+DIMENSION-SIZES 4
+OUTPUT-BYTE-ORDER LE
+OUTPUT-CLASS IN
+OUTPUT-SIZE 8
+OUTPUT-ARCHITECTURE STD
diff --git a/tools/h5import/testfiles/binin8w.h5 b/tools/h5import/testfiles/binin8w.h5
new file mode 100644
index 0000000..64acaed
Binary files /dev/null and b/tools/h5import/testfiles/binin8w.h5 differ
diff --git a/tools/h5import/testfiles/test12.h5 b/tools/h5import/testfiles/binuin16.h5
similarity index 100%
rename from tools/h5import/testfiles/test12.h5
rename to tools/h5import/testfiles/binuin16.h5
diff --git a/tools/h5import/testfiles/test13.h5 b/tools/h5import/testfiles/binuin32.h5
similarity index 100%
rename from tools/h5import/testfiles/test13.h5
rename to tools/h5import/testfiles/binuin32.h5
diff --git a/tools/h5import/testfiles/test15.h5 b/tools/h5import/testfiles/test15.h5
deleted file mode 100644
index 73a157c..0000000
Binary files a/tools/h5import/testfiles/test15.h5 and /dev/null differ
diff --git a/tools/h5import/testfiles/textin8.conf b/tools/h5import/testfiles/textin8.conf
deleted file mode 100755
index 95fc5d8..0000000
--- a/tools/h5import/testfiles/textin8.conf
+++ /dev/null
@@ -1,17 +0,0 @@
-PATH /int/8-bit
-INPUT-CLASS TEXTIN
-INPUT-SIZE	8
-OUTPUT-CLASS IN
-OUTPUT-SIZE 8
-OUTPUT-BYTE-ORDER LE
-OUTPUT-ARCHITECTURE STD
-RANK 3
-DIMENSION-SIZES 2 4 3
-CHUNKED-DIMENSION-SIZES 2 2 2
-MAXIMUM-DIMENSIONS -1 -1 -1
-COMPRESSION-PARAM 3
-COMPRESSION-TYPE GZIP
-
-
-
-
diff --git a/tools/h5import/testfiles/textpfe.h5 b/tools/h5import/testfiles/textpfe.h5
new file mode 100644
index 0000000..213051d
Binary files /dev/null and b/tools/h5import/testfiles/textpfe.h5 differ
diff --git a/tools/h5import/testfiles/in64.txt b/tools/h5import/testfiles/textpfe64.txt
similarity index 100%
rename from tools/h5import/testfiles/in64.txt
rename to tools/h5import/testfiles/textpfe64.txt
diff --git a/tools/h5import/testfiles/textfp32.conf b/tools/h5import/testfiles/txtfp32.conf
similarity index 100%
rename from tools/h5import/testfiles/textfp32.conf
rename to tools/h5import/testfiles/txtfp32.conf
diff --git a/tools/h5import/testfiles/test6.h5 b/tools/h5import/testfiles/txtfp32.h5
similarity index 100%
rename from tools/h5import/testfiles/test6.h5
rename to tools/h5import/testfiles/txtfp32.h5
diff --git a/tools/h5import/testfiles/fp1.txt b/tools/h5import/testfiles/txtfp32.txt
similarity index 100%
rename from tools/h5import/testfiles/fp1.txt
rename to tools/h5import/testfiles/txtfp32.txt
diff --git a/tools/h5import/testfiles/textfp64.conf b/tools/h5import/testfiles/txtfp64.conf
similarity index 100%
rename from tools/h5import/testfiles/textfp64.conf
rename to tools/h5import/testfiles/txtfp64.conf
diff --git a/tools/h5import/testfiles/test7.h5 b/tools/h5import/testfiles/txtfp64.h5
similarity index 100%
rename from tools/h5import/testfiles/test7.h5
rename to tools/h5import/testfiles/txtfp64.h5
diff --git a/tools/h5import/testfiles/fp2.txt b/tools/h5import/testfiles/txtfp64.txt
similarity index 100%
rename from tools/h5import/testfiles/fp2.txt
rename to tools/h5import/testfiles/txtfp64.txt
diff --git a/tools/h5import/testfiles/textin16.conf b/tools/h5import/testfiles/txtin16.conf
similarity index 100%
rename from tools/h5import/testfiles/textin16.conf
rename to tools/h5import/testfiles/txtin16.conf
diff --git a/tools/h5import/testfiles/test2.h5 b/tools/h5import/testfiles/txtin16.h5
similarity index 100%
rename from tools/h5import/testfiles/test2.h5
rename to tools/h5import/testfiles/txtin16.h5
diff --git a/tools/h5import/testfiles/in1.txt b/tools/h5import/testfiles/txtin16.txt
old mode 100755
new mode 100644
similarity index 100%
rename from tools/h5import/testfiles/in1.txt
rename to tools/h5import/testfiles/txtin16.txt
diff --git a/tools/h5import/testfiles/textin32.conf b/tools/h5import/testfiles/txtin32.conf
similarity index 100%
rename from tools/h5import/testfiles/textin32.conf
rename to tools/h5import/testfiles/txtin32.conf
diff --git a/tools/h5import/testfiles/test1.h5 b/tools/h5import/testfiles/txtin32.h5
similarity index 100%
rename from tools/h5import/testfiles/test1.h5
rename to tools/h5import/testfiles/txtin32.h5
diff --git a/tools/h5import/testfiles/in16.txt b/tools/h5import/testfiles/txtin32.txt
similarity index 100%
rename from tools/h5import/testfiles/in16.txt
rename to tools/h5import/testfiles/txtin32.txt
diff --git a/tools/h5import/testfiles/txtin8.conf b/tools/h5import/testfiles/txtin8.conf
new file mode 100755
index 0000000..9dbfd2b
--- /dev/null
+++ b/tools/h5import/testfiles/txtin8.conf
@@ -0,0 +1,18 @@
+PATH /int/8-bit
+INPUT-CLASS TEXTIN
+INPUT-SIZE	8
+OUTPUT-CLASS IN
+OUTPUT-SIZE 8
+OUTPUT-BYTE-ORDER LE
+OUTPUT-ARCHITECTURE STD
+RANK 3
+DIMENSION-SIZES 2 4 3
+CHUNKED-DIMENSION-SIZES 2 2 2
+MAXIMUM-DIMENSIONS -1 -1 -1
+COMPRESSION-PARAM 3
+COMPRESSION-TYPE GZIP
+
+
+
+
+
diff --git a/tools/h5import/testfiles/test3.h5 b/tools/h5import/testfiles/txtin8.h5
similarity index 100%
rename from tools/h5import/testfiles/test3.h5
rename to tools/h5import/testfiles/txtin8.h5
diff --git a/tools/h5import/testfiles/textstr.conf b/tools/h5import/testfiles/txtstr.conf
similarity index 100%
rename from tools/h5import/testfiles/textstr.conf
rename to tools/h5import/testfiles/txtstr.conf
diff --git a/tools/h5import/testfiles/test14.h5 b/tools/h5import/testfiles/txtstr.h5
similarity index 100%
rename from tools/h5import/testfiles/test14.h5
rename to tools/h5import/testfiles/txtstr.h5
diff --git a/tools/h5import/testfiles/str.txt b/tools/h5import/testfiles/txtstr.txt
similarity index 100%
rename from tools/h5import/testfiles/str.txt
rename to tools/h5import/testfiles/txtstr.txt
diff --git a/tools/h5import/testfiles/textuin16.conf b/tools/h5import/testfiles/txtuin16.conf
similarity index 100%
rename from tools/h5import/testfiles/textuin16.conf
rename to tools/h5import/testfiles/txtuin16.conf
diff --git a/tools/h5import/testfiles/test5.h5 b/tools/h5import/testfiles/txtuin16.h5
similarity index 100%
rename from tools/h5import/testfiles/test5.h5
rename to tools/h5import/testfiles/txtuin16.h5
diff --git a/tools/h5import/testfiles/textuin32.conf b/tools/h5import/testfiles/txtuin32.conf
similarity index 100%
rename from tools/h5import/testfiles/textuin32.conf
rename to tools/h5import/testfiles/txtuin32.conf
diff --git a/tools/h5import/testfiles/test4.h5 b/tools/h5import/testfiles/txtuin32.h5
similarity index 100%
rename from tools/h5import/testfiles/test4.h5
rename to tools/h5import/testfiles/txtuin32.h5
diff --git a/tools/h5import/testfiles/in32.txt b/tools/h5import/testfiles/txtuin32.txt
old mode 100644
new mode 100755
similarity index 100%
rename from tools/h5import/testfiles/in32.txt
rename to tools/h5import/testfiles/txtuin32.txt
diff --git a/tools/h5jam/CMakeLists.txt b/tools/h5jam/CMakeLists.txt
index 81a624d..9925e2a 100644
--- a/tools/h5jam/CMakeLists.txt
+++ b/tools/h5jam/CMakeLists.txt
@@ -56,6 +56,9 @@ IF (BUILD_TESTING)
       u511.txt
       u512.txt
       u513.txt
+      h5jam-help.txt
+      h5unjam-help.txt
+      h5jam-ub-nohdf5.txt
   )
   SET (HDF5_REFERENCE_TEST_FILES
       tall.h5
@@ -92,6 +95,58 @@ IF (BUILD_TESTING)
 ##############################################################################
 ##############################################################################
 
+  # ============================================================
+  # TEST_H5JAM_OUTPUT
+  # For the purpose to verify only output & exitcode from h5jam
+  #
+  MACRO (TEST_H5JAM_OUTPUT expectfile resultcode)
+    # If using memchecker add tests without using scripts
+    IF (HDF5_ENABLE_USING_MEMCHECKER)
+      ADD_TEST (NAME H5JAM-${expectfile} COMMAND $<TARGET_FILE:h5jam> ${ARGN})
+      IF (NOT "${resultcode}" STREQUAL "0")
+        SET_TESTS_PROPERTIES (H5JAM-${expectfile} PROPERTIES WILL_FAIL "true")
+      ENDIF (NOT "${resultcode}" STREQUAL "0")
+    ELSE (HDF5_ENABLE_USING_MEMCHECKER)
+      ADD_TEST (
+          NAME H5JAM-${expectfile}
+          COMMAND "${CMAKE_COMMAND}"
+              -D "TEST_PROGRAM=$<TARGET_FILE:h5jam>"
+              -D "TEST_ARGS:STRING=${ARGN}"
+              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
+              -D "TEST_OUTPUT=${expectfile}.out"
+              -D "TEST_EXPECT=${resultcode}"
+              -D "TEST_REFERENCE=testfiles/${expectfile}.txt"
+              -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+      )
+    ENDIF (HDF5_ENABLE_USING_MEMCHECKER)
+  ENDMACRO (TEST_H5JAM_OUTPUT)
+
+  # ============================================================
+  # TEST_H5UNJAM_OUTPUT
+  # For the purpose to verify only output & exitcode from h5unjam
+  #
+  MACRO (TEST_H5UNJAM_OUTPUT expectfile resultcode)
+    # If using memchecker add tests without using scripts
+    IF (HDF5_ENABLE_USING_MEMCHECKER)
+      ADD_TEST (NAME H5JAM-UNJAM-${expectfile} COMMAND $<TARGET_FILE:h5unjam> ${ARGN})
+      IF (NOT "${resultcode}" STREQUAL "0")
+        SET_TESTS_PROPERTIES (H5JAM-UNJAM-${expectfile} PROPERTIES WILL_FAIL "true")
+      ENDIF (NOT "${resultcode}" STREQUAL "0")
+    ELSE (HDF5_ENABLE_USING_MEMCHECKER)
+      ADD_TEST (
+          NAME H5JAM-UNJAM-${expectfile}
+          COMMAND "${CMAKE_COMMAND}"
+              -D "TEST_PROGRAM=$<TARGET_FILE:h5unjam>"
+              -D "TEST_ARGS=${ARGN}"
+              -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
+              -D "TEST_OUTPUT=${expectfile}.out"
+              -D "TEST_EXPECT=${resultcode}"
+              -D "TEST_REFERENCE=testfiles/${expectfile}.txt"
+              -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
+      )
+    ENDIF (HDF5_ENABLE_USING_MEMCHECKER)
+  ENDMACRO (TEST_H5UNJAM_OUTPUT)
+
   MACRO (CLEANUP testname)
     ADD_TEST (
         NAME H5JAM-CLEANUP-${testname}-clear-objects
@@ -119,7 +174,7 @@ IF (BUILD_TESTING)
         SET_TESTS_PROPERTIES (H5JAM-CHECKFILE-${testname}-clear-objects PROPERTIES DEPENDS ${last_test})
       ENDIF (NOT "${last_test}" STREQUAL "")
       ADD_TEST (
-          NAME H5JAM-CHECKFILE-H5DUMP-${testname}
+          NAME H5JAM-CHECKFILE-H5DMP-${testname}
           COMMAND "${CMAKE_COMMAND}"
               -D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
               -D "TEST_ARGS:STRING=testfiles/${expected}"
@@ -130,9 +185,9 @@ IF (BUILD_TESTING)
               -D "TEST_SKIP_COMPARE=TRUE"
               -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
       )
-      SET_TESTS_PROPERTIES (H5JAM-CHECKFILE-H5DUMP-${testname} PROPERTIES DEPENDS H5JAM-CHECKFILE-${testname}-clear-objects)
+      SET_TESTS_PROPERTIES (H5JAM-CHECKFILE-H5DMP-${testname} PROPERTIES DEPENDS H5JAM-CHECKFILE-${testname}-clear-objects)
       ADD_TEST (
-          NAME H5JAM-CHECKFILE-H5DUMP_CMP-${testname}
+          NAME H5JAM-CHECKFILE-H5DMP_CMP-${testname}
           COMMAND "${CMAKE_COMMAND}"
               -D "TEST_PROGRAM=$<TARGET_FILE:h5dump>"
               -D "TEST_ARGS:STRING=${actual}"
@@ -143,8 +198,8 @@ IF (BUILD_TESTING)
               -D "TEST_REFERENCE=${expected}.new"
               -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
       )
-      SET_TESTS_PROPERTIES (H5JAM-CHECKFILE-H5DUMP_CMP-${testname} PROPERTIES DEPENDS H5JAM-CHECKFILE-H5DUMP-${testname})
-      SET (last_test "H5JAM-CHECKFILE-H5DUMP_CMP-${testname}")
+      SET_TESTS_PROPERTIES (H5JAM-CHECKFILE-H5DMP_CMP-${testname} PROPERTIES DEPENDS H5JAM-CHECKFILE-H5DMP-${testname})
+      SET (last_test "H5JAM-CHECKFILE-H5DMP_CMP-${testname}")
     ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER)
   ENDMACRO(CHECKFILE testname expected actual)
 
@@ -309,6 +364,15 @@ IF (BUILD_TESTING)
 ##############################################################################
 ##############################################################################
 
+#-------------------------------
+# Testing h5jam
+#-------------------------------
+  # help page
+  TEST_H5JAM_OUTPUT(h5jam-help 0 -h)
+
+  # don't allow HDF5 format file as an user block file
+  TEST_H5JAM_OUTPUT(h5jam-ub-nohdf5 1 -i testfiles/tall.h5 -u testfiles/tall.h5 -o tall-tmp.h5)
+
   JAMTEST (tall_u10 u10.txt tall.h5 ta2.h5)
   CHECKFILE (tall_u10 tall.h5 ta2.h5)
 #  CLEANUP (tall_u10 ta2.h5)
@@ -422,6 +486,12 @@ IF (BUILD_TESTING)
   CHECKFILE (N_twithub513_u513_c tall.h5 tay9.h5)
 #  CLEANUP (N_twithub513_u513_c tay9.h5)
 
+#-------------------------------
+# Testing h5unjam
+#-------------------------------
+  # help page
+  TEST_H5UNJAM_OUTPUT(h5unjam-help 0 -h)
+
   SETUP (twithub_tall twithub.h5 tai1.h5)
   UNJAMTEST (twithub_tall tai1.h5 o10.txt taa1.h5)
   CHECKFILE (twithub_tall tall.h5 taa1.h5)
diff --git a/tools/h5jam/Makefile.in b/tools/h5jam/Makefile.in
index 032b43e..31190ec 100644
--- a/tools/h5jam/Makefile.in
+++ b/tools/h5jam/Makefile.in
@@ -195,6 +195,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -215,10 +216,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -262,7 +265,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/tools/h5jam/h5jam.c b/tools/h5jam/h5jam.c
index 5eaa26a..5520dc7 100644
--- a/tools/h5jam/h5jam.c
+++ b/tools/h5jam/h5jam.c
@@ -38,14 +38,14 @@ char *ub_file = NULL;
  * parameters. The long-named ones can be partially spelled. When
  * adding more, make sure that they don't clash with each other.
  */
-static const char *s_opts = "hi:u:o:c:V";	/* add more later ? */
+static const char *s_opts = "hi:u:o:c:V";  /* add more later ? */
 static struct long_options l_opts[] = {
   {"help", no_arg, 'h'},
   {"hel", no_arg, 'h'},
-  {"i", require_arg, 'i'},	/* input file */
-  {"u", require_arg, 'u'},	/* user block file */
-  {"o", require_arg, 'o'},	/* output file */
-  {"clobber", no_arg, 'c'},	/* clobber existing UB */
+  {"i", require_arg, 'i'},  /* input file */
+  {"u", require_arg, 'u'},  /* user block file */
+  {"o", require_arg, 'o'},  /* output file */
+  {"clobber", no_arg, 'c'},  /* clobber existing UB */
   {"clobbe", no_arg, 'c'},
   {"clobb", no_arg, 'c'},
   {"clob", no_arg, 'c'},
@@ -70,20 +70,76 @@ static struct long_options l_opts[] = {
 static void
 usage (const char *prog)
 {
-  fflush (stdout);
-  fprintf (stdout,
-	   "usage: %s -u user_block_file -i h5_file [-o ofile | --clobber] \n",
-	   prog);
-  fprintf (stdout, "           Add 'user_block_file' to front of \n");
-  fprintf (stdout,
-	   "           'h5_file', pad so 'h5_file' starts on proper\n");
-  fprintf (stdout, "           byte.\n");
-  fprintf (stdout, "\n");
-  fprintf (stdout, "       %s -h \n", prog);
-  fprintf (stdout, "           Print a usage message and exit\n");
-  fprintf (stdout, "       %s -V \n", prog);
-  fprintf (stdout, "           Print HDF5 library version and exit\n");
+    HDfflush (stdout);
+    HDfprintf (stdout,
+    "usage: %s -i <in_file.h5> -u <in_user_file> [-o <out_file.h5>] [--clobber]\n", prog);
+    HDfprintf (stdout, "\n");
+    HDfprintf (stdout,
+    "Adds user block to front of an HDF5 file and creates a new concatenated file.\n");
+    HDfprintf (stdout, "\n");
+    HDfprintf (stdout, 
+    "OPTIONS\n");
+    HDfprintf (stdout, 
+    "  -i in_file.h5    Specifies the input HDF5 file.\n");
+    HDfprintf (stdout, 
+    "  -u in_user_file  Specifies the file to be inserted into the user block.\n");
+    HDfprintf (stdout, 
+    "                   Can be any file format except an HDF5 format.\n");
+    HDfprintf (stdout,
+    "  -o out_file.h5   Specifies the output HDF5 file.\n");
+    HDfprintf (stdout,
+    "                   If not specified, the user block will be concatenated in\n");
+    HDfprintf (stdout,
+    "                   place to the input HDF5 file.\n");
+    HDfprintf (stdout,
+    "  --clobber        Wipes out any existing user block before concatenating\n");
+    HDfprintf (stdout,
+    "                   the given user block.\n");
+    HDfprintf (stdout,
+    "                   The size of the new user block will be the larger of;\n");
+    HDfprintf (stdout,
+    "                    - the size of existing user block in the input HDF5 file\n");
+    HDfprintf (stdout,
+    "                    - the size of user block required by new input user file\n");
+    HDfprintf (stdout,
+    "                   (size = 512 x 2N,  N is positive integer.)\n");
+    HDfprintf (stdout, "\n");
+    HDfprintf (stdout,
+    "  -h               Prints a usage message and exits.\n");
+    HDfprintf (stdout,
+    "  -V               Prints the HDF5 library version and exits.\n");
+    HDfprintf (stdout, "\n");
+    HDfprintf (stdout,
+    "Exit Status:\n");
+    HDfprintf (stdout,
+    "   0   Succeeded.\n");
+    HDfprintf (stdout,
+    "   >0  An error occurred.\n");
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function:    leave
+ *
+ * Purpose:     Shutdown and call exit()
+ *
+ * Return:      Does not return
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+leave(int ret)
+{
+    if (ub_file)
+        HDfree (ub_file);
+    if (input_file)
+        HDfree (input_file);
+    if (output_file)
+        HDfree (output_file);
 
+    h5tools_close();
+
+    exit(ret);
 }
 
 /*-------------------------------------------------------------------------
@@ -111,30 +167,30 @@ parse_command_line (int argc, const char *argv[])
   while ((opt = get_option (argc, argv, s_opts, l_opts)) != EOF)
     {
       switch ((char) opt)
-	{
-	case 'o':
-	  output_file = HDstrdup (opt_arg);
-	  break;
-	case 'i':
-	  input_file = HDstrdup (opt_arg);
-	  break;
-	case 'u':
-	  ub_file = HDstrdup (opt_arg);
-	  break;
-	case 'c':
-	  do_clobber = TRUE;
-	  break;
-	case 'h':
-	  usage (h5tools_getprogname());
-	  exit (EXIT_SUCCESS);
-    case 'V':
-	  print_version (h5tools_getprogname());
-	  exit (EXIT_SUCCESS);
-	case '?':
-	default:
-	  usage (h5tools_getprogname());
-	  exit (EXIT_FAILURE);
-	}
+      {
+      case 'o':
+          output_file = HDstrdup (opt_arg);
+          break;
+      case 'i':
+          input_file = HDstrdup (opt_arg);
+          break;
+      case 'u':
+          ub_file = HDstrdup (opt_arg);
+          break;
+      case 'c':
+          do_clobber = TRUE;
+          break;
+      case 'h':
+          usage (h5tools_getprogname());
+          leave (EXIT_SUCCESS);
+      case 'V':
+          print_version (h5tools_getprogname());
+          leave (EXIT_SUCCESS);
+      case '?':
+      default:
+          usage (h5tools_getprogname());
+          leave (EXIT_FAILURE);
+      }
     }
 }
 
@@ -155,204 +211,205 @@ parse_command_line (int argc, const char *argv[])
 int
 main (int argc, const char *argv[])
 {
-  int ufid;
-  int h5fid;
-  int ofid;
-  void *edata;
-  H5E_auto2_t func;
-  hid_t ifile;
-  hid_t plist;
-  herr_t status;
-  htri_t testval;
-  hsize_t usize;
-  hsize_t h5fsize;
-  hsize_t startub;
-  hsize_t where;
-  hsize_t newubsize;
-  off_t fsize;
-  h5_stat_t sbuf;
-  h5_stat_t sbuf2;
-  int res;
-
-  h5tools_setprogname(PROGRAMNAME);
-  h5tools_setstatus(EXIT_SUCCESS);
-
-  /* Disable error reporting */
-  H5Eget_auto2(H5E_DEFAULT, &func, &edata);
-  H5Eset_auto2(H5E_DEFAULT, NULL, NULL);
+    int         ufid = -1;
+    int         h5fid = -1;
+    int         ofid = -1;
+    void       *edata;
+    H5E_auto2_t func;
+    hid_t       ifile = -1;
+    hid_t       plist = -1;
+    herr_t      status;
+    htri_t      testval;
+    hsize_t     usize;
+    hsize_t     h5fsize;
+    hsize_t     startub;
+    hsize_t     where;
+    hsize_t     newubsize;
+    off_t       fsize;
+    h5_stat_t   sbuf;
+    h5_stat_t   sbuf2;
+    int         res;
+
+    h5tools_setprogname(PROGRAMNAME);
+    h5tools_setstatus(EXIT_SUCCESS);
+
+    /* Disable error reporting */
+    H5Eget_auto2(H5E_DEFAULT, &func, &edata);
+    H5Eset_auto2(H5E_DEFAULT, NULL, NULL);
+
+    parse_command_line (argc, argv);
+
+    if (ub_file == NULL) {
+        /* no user block */
+        error_msg("missing arguemnt for -u <user_file>.\n");
+        help_ref_msg(stderr);
+        leave (EXIT_FAILURE);
+    }
 
-  parse_command_line (argc, argv);
+    testval = H5Fis_hdf5 (ub_file);
 
-  if (ub_file == NULL)
-    {
-      /* no user block */
-      error_msg("no user block file name\n");
-      usage (h5tools_getprogname());
-      exit (EXIT_FAILURE);
+    if (testval > 0) {
+        error_msg("-u <user_file> cannot be HDF5 file, but it appears to be an HDF5 file.\n");
+        help_ref_msg(stderr);
+        leave (EXIT_FAILURE);
     }
 
-  if (input_file == NULL)
-    {
-      /* no user block */
-      error_msg("no HDF5 file\n");
-      usage (h5tools_getprogname());
-      exit (EXIT_FAILURE);
+    if (input_file == NULL) {
+        error_msg("missing arguemnt for -i <HDF5 file>.\n");
+        help_ref_msg(stderr);
+        leave (EXIT_FAILURE);
     }
 
-  testval = H5Fis_hdf5 (input_file);
+    testval = H5Fis_hdf5 (input_file);
 
-  if (testval <= 0)
-    {
-      error_msg("Input HDF5 file is not HDF \"%s\"\n", input_file);
-      exit (EXIT_FAILURE);
+    if (testval <= 0) {
+        error_msg("Input HDF5 file \"%s\" is not HDF5 format.\n", input_file);
+        help_ref_msg(stderr);
+        leave (EXIT_FAILURE);
     }
 
-  ifile = H5Fopen (input_file, H5F_ACC_RDONLY, H5P_DEFAULT);
+    ifile = H5Fopen (input_file, H5F_ACC_RDONLY, H5P_DEFAULT);
 
-  if (ifile < 0)
-    {
-      error_msg("Can't open input HDF5 file \"%s\"\n", input_file);
-      exit (EXIT_FAILURE);
+    if (ifile < 0) {
+        error_msg("Can't open input HDF5 file \"%s\"\n", input_file);
+        leave (EXIT_FAILURE);
     }
 
-  plist = H5Fget_create_plist (ifile);
-  if (plist < 0)
-    {
-      error_msg("Can't get file creation plist for file \"%s\"\n",
-		 input_file);
-      exit (EXIT_FAILURE);
+    plist = H5Fget_create_plist (ifile);
+    if (plist < 0) {
+        error_msg("Can't get file creation plist for file \"%s\"\n", input_file);
+        H5Fclose(ifile);
+        leave (EXIT_FAILURE);
     }
 
-  status = H5Pget_userblock (plist, &usize);
-  if (status < 0)
-    {
-      error_msg("Can't get user block for file \"%s\"\n",
-		 input_file);
-      exit (EXIT_FAILURE);
+    status = H5Pget_userblock (plist, &usize);
+    if (status < 0) {
+        error_msg("Can't get user block for file \"%s\"\n", input_file);
+        H5Pclose(plist);
+        H5Fclose(ifile);
+        leave (EXIT_FAILURE);
     }
 
-  H5Pclose(plist);
-  H5Fclose(ifile);
+    H5Pclose(plist);
+    H5Fclose(ifile);
 
-  ufid = HDopen(ub_file, O_RDONLY, 0);
-  if(ufid < 0) {
-      error_msg("unable to open user block file \"%s\"\n",
-		 ub_file);
-      exit (EXIT_FAILURE);
+    ufid = HDopen(ub_file, O_RDONLY, 0);
+    if(ufid < 0) {
+        error_msg("unable to open user block file \"%s\"\n", ub_file);
+        leave (EXIT_FAILURE);
     }
 
-  res = HDfstat(ufid, &sbuf);
-  if(res < 0) {
-      error_msg("Can't stat file \"%s\"\n", ub_file);
-      exit (EXIT_FAILURE);
+    res = HDfstat(ufid, &sbuf);
+    if(res < 0) {
+        error_msg("Can't stat file \"%s\"\n", ub_file);
+        HDclose (ufid);
+        leave (EXIT_FAILURE);
     }
 
-  fsize = sbuf.st_size;
+    fsize = sbuf.st_size;
 
-  h5fid = HDopen(input_file, O_RDONLY, 0);
-  if(h5fid < 0) {
-      error_msg("unable to open HDF5 file for read \"%s\"\n",
-		 input_file);
-      exit (EXIT_FAILURE);
+    h5fid = HDopen(input_file, O_RDONLY, 0);
+    if(h5fid < 0) {
+        error_msg("unable to open HDF5 file for read \"%s\"\n", input_file);
+        HDclose (ufid);
+        leave (EXIT_FAILURE);
     }
 
-  res = HDfstat(h5fid, &sbuf2);
-  if(res < 0) {
-      error_msg("Can't stat file \"%s\"\n", input_file);
-      exit (EXIT_FAILURE);
+    res = HDfstat(h5fid, &sbuf2);
+    if(res < 0) {
+        error_msg("Can't stat file \"%s\"\n", input_file);
+        HDclose (h5fid);
+        HDclose (ufid);
+        leave (EXIT_FAILURE);
     }
 
-  h5fsize = sbuf2.st_size;
+    h5fsize = sbuf2.st_size;
 
-  if (output_file == NULL)
-    {
-      ofid = HDopen (input_file, O_WRONLY, 0);
-
-      if (ofid < 0)
-	{
-	  error_msg("unable to open output file \"%s\"\n",
-		     output_file);
-	  exit (EXIT_FAILURE);
-	}
+    if (output_file == NULL) {
+        ofid = HDopen (input_file, O_WRONLY, 0);
+
+        if (ofid < 0) {
+            error_msg("unable to open output file \"%s\"\n", output_file);
+            HDclose (h5fid);
+            HDclose (ufid);
+            leave (EXIT_FAILURE);
+        }
     }
-  else
-    {
-      ofid = HDopen (output_file, O_WRONLY | O_CREAT | O_TRUNC, 0644);
-
-      if (ofid < 0)
-	{
-	  error_msg("unable to create output file \"%s\"\n",
-		     output_file);
-	  exit (EXIT_FAILURE);
-	}
+    else {
+        ofid = HDopen (output_file, O_WRONLY | O_CREAT | O_TRUNC, 0644);
+
+        if (ofid < 0) {
+            error_msg("unable to create output file \"%s\"\n", output_file);
+            HDclose (h5fid);
+            HDclose (ufid);
+            leave (EXIT_FAILURE);
+        }
     }
 
-  newubsize = compute_user_block_size ((hsize_t) fsize);
-
-  startub = usize;
-
-  if (usize > 0)
-    {
-      if (do_clobber == TRUE)
-	{
-	  /* where is max of the current size or the new UB */
-	  if (usize > newubsize)
-	    {
-	      newubsize = usize;
-	    }
-	  startub = 0;		/*blast the old */
-	}
-      else
-	{
-	  /* add new ub to current ublock, pad to new offset */
-	  newubsize += usize;
-	  newubsize = compute_user_block_size ((hsize_t) newubsize);
-	}
+    newubsize = compute_user_block_size ((hsize_t) fsize);
+
+    startub = usize;
+
+    if (usize > 0) {
+        if (do_clobber == TRUE) {
+            /* where is max of the current size or the new UB */
+            if (usize > newubsize) {
+                newubsize = usize;
+            }
+            startub = 0;    /*blast the old */
+        }
+        else {
+            /* add new ub to current ublock, pad to new offset */
+            newubsize += usize;
+            newubsize = compute_user_block_size ((hsize_t) newubsize);
+        }
     }
 
-  /* copy the HDF5 from starting at usize to starting at newubsize:
-   *  makes room at 'from' for new ub */
-  /* if no current ub, usize is 0 */
-  copy_some_to_file (h5fid, ofid, usize, newubsize,
-		     (ssize_t) (h5fsize - usize));
+    /* copy the HDF5 from starting at usize to starting at newubsize:
+     *  makes room at 'from' for new ub */
+    /* if no current ub, usize is 0 */
+    copy_some_to_file (h5fid, ofid, usize, newubsize, (ssize_t) (h5fsize - usize));
 
-  /* copy the old ub to the beginning of the new file */
-  if (!do_clobber)
-    {
-      where =
-	copy_some_to_file (h5fid, ofid, (hsize_t) 0, (hsize_t) 0,
-			   (ssize_t) usize);
+    /* copy the old ub to the beginning of the new file */
+    if (!do_clobber) {
+        where = copy_some_to_file (h5fid, ofid, (hsize_t) 0, (hsize_t) 0, (ssize_t) usize);
     }
 
-  /* copy the new ub to the end of the ub */
-  where = copy_some_to_file (ufid, ofid, (hsize_t) 0, startub, (ssize_t) - 1);
-
-  /* pad the ub */
-  where = write_pad (ofid, where);
+    /* copy the new ub to the end of the ub */
+    where = copy_some_to_file (ufid, ofid, (hsize_t) 0, startub, (ssize_t) - 1);
 
+    /* pad the ub */
+    where = write_pad (ofid, where);
 
-  HDclose (ufid);
-  HDclose (h5fid);
-  HDclose (ofid);
+    if (ub_file)
+        HDfree (ub_file);
+    if (input_file)
+        HDfree (input_file);
+    if (output_file)
+        HDfree (output_file);
+    
+    if (ufid >= 0) HDclose (ufid);
+    if (h5fid >= 0) HDclose (h5fid);
+    if (ofid >= 0) HDclose (ofid);
 
-  return h5tools_getstatus();
+    return h5tools_getstatus();
 }
 
 /*-------------------------------------------------------------------------
  * Function:    copy_some_to_file
  *
  * Purpose:     Copy part of the input file to output.
- *		  infid: fd of file to read
- *		  outfid: fd of file to write
- *		  startin: offset of where to read from infid
- *		  startout: offset of where to write to outfid
- *		  limit: bytes to read/write
+ *      infid: fd of file to read
+ *      outfid: fd of file to write
+ *      startin: offset of where to read from infid
+ *      startout: offset of where to write to outfid
+ *      limit: bytes to read/write
  *
- *		If limit is < 0, the entire input file is copied.
+ *    If limit is < 0, the entire input file is copied.
  *
- *		Note: this routine can be used to copy within
- *		the same file, i.e., infid and outfid can be the
- *		same file.
+ *    Note: this routine can be used to copy within
+ *    the same file, i.e., infid and outfid can be the
+ *    same file.
  *
  * Return:      Success:    last byte written in the output.
  *              Failure:    Exits program with EXIT_FAILURE value.
@@ -365,7 +422,7 @@ main (int argc, const char *argv[])
  */
 hsize_t
 copy_some_to_file (int infid, int outfid, hsize_t startin, hsize_t startout,
-		   ssize_t limit)
+       ssize_t limit)
 {
   char buf[1024];
   h5_stat_t sbuf;
@@ -390,9 +447,9 @@ copy_some_to_file (int infid, int outfid, hsize_t startin, hsize_t startout,
   if(limit < 0) {
       res = HDfstat(infid, &sbuf);
       if(res < 0) {
-	  error_msg("Can't stat file \n");
-	  exit (EXIT_FAILURE);
-	}
+    error_msg("Can't stat file \n");
+    exit (EXIT_FAILURE);
+  }
 
       howmuch = sbuf.st_size;
     }
@@ -424,19 +481,19 @@ copy_some_to_file (int infid, int outfid, hsize_t startin, hsize_t startout,
       HDlseek (infid, (off_t) from, SEEK_SET);
 
       if (howmuch > 512)
-	{
-	  nchars = HDread (infid, buf, (unsigned) 512);
-	}
+  {
+    nchars = HDread (infid, buf, (unsigned) 512);
+  }
       else
-	{
-	  nchars = HDread (infid, buf, (unsigned)howmuch);
-	}
+  {
+    nchars = HDread (infid, buf, (unsigned)howmuch);
+  }
 
       if (nchars <= 0)
-	{
-	  printf ("huh? \n");
-	  exit (EXIT_FAILURE);
-	}
+  {
+    printf ("huh? \n");
+    exit (EXIT_FAILURE);
+  }
       /*ncw = */ HDwrite (outfid, buf, (unsigned) nchars);
 
       /* assert (ncw == nchars) */
@@ -444,15 +501,15 @@ copy_some_to_file (int infid, int outfid, hsize_t startin, hsize_t startout,
       tot += nchars;
       howmuch -= nchars;
       if (howmuch > 512)
-	{
-	  to -= nchars;
-	  from -= nchars;
-	}
+  {
+    to -= nchars;
+    from -= nchars;
+  }
       else
-	{
-	  to -= howmuch;
-	  from -= howmuch;
-	}
+  {
+    to -= howmuch;
+    from -= howmuch;
+  }
     }
 
   /* assert howmuch == 0 */
@@ -467,10 +524,10 @@ copy_some_to_file (int infid, int outfid, hsize_t startin, hsize_t startout,
  *
  * Purpose:     Find the offset of the HDF5 header after the user block:
  *                 align at 0, 512, 1024, etc.
- *			ublock_size: the size of the user block (bytes).
+ *      ublock_size: the size of the user block (bytes).
  *
  * Return:      Success:    the location of the header == the size of the
- *				padded user block.
+ *        padded user block.
  *              Failure:    none
  *
  * Return:      Success:    last byte written in the output.
@@ -520,6 +577,6 @@ write_pad(int ofile, hsize_t where)
     for(i = 0; i < psize; i++)
         HDwrite (ofile, buf, 1);
 
-    return(where + psize);	/* the new size of the file. */
+    return(where + psize);  /* the new size of the file. */
 }
 
diff --git a/tools/h5jam/h5unjam.c b/tools/h5jam/h5unjam.c
index bfebc6c..14ed651 100644
--- a/tools/h5jam/h5unjam.c
+++ b/tools/h5jam/h5unjam.c
@@ -42,10 +42,10 @@ static const char *s_opts = "hu:i:o:d:V";
 static struct long_options l_opts[] = {
     { "help", no_arg, 'h' },
     { "hel", no_arg, 'h' },
-  {"i", require_arg, 'i'},	/* input file */
-  {"u", require_arg, 'u'},	/* user block file */
-  {"o", require_arg, 'o'},	/* output file */
-  {"delete", no_arg, 'd'},	/* delete ub */
+  {"i", require_arg, 'i'},  /* input file */
+  {"u", require_arg, 'u'},  /* user block file */
+  {"o", require_arg, 'o'},  /* output file */
+  {"delete", no_arg, 'd'},  /* delete ub */
   {"delet", no_arg, 'd'},
   {"dele", no_arg, 'd'},
   {"del", no_arg, 'd'},
@@ -69,15 +69,80 @@ static struct long_options l_opts[] = {
 static void
 usage(const char *prog)
 {
-    fflush(stdout);
-    fprintf(stdout, "usage: %s -i h5_file -o user_block_file_out -o h5_file_out [-d | --delete]\n", prog);
-    fprintf(stdout, "           Extract user block from 'h5_file' into 'user_block_file'\n");
-    fprintf(stdout, "           and HDF5 file into 'h5_file_out'\n");
-
-    fprintf(stdout, "       %s -h\n",prog);
-    fprintf(stdout, "           Print a usage message and exit\n");
-    fprintf(stdout, "       %s -V \n", prog);
-    fprintf(stdout, "           Print HDF5 library version and exit\n");
+    HDfflush(stdout);
+    HDfprintf(stdout,
+    "usage: %s -i <in_file.h5>  [-o <out_file.h5> ] [-u <out_user_file> | --delete]\n", prog);
+    HDfprintf(stdout, "\n");
+    HDfprintf(stdout,
+    "Splits user file and HDF5 file into two files: user block data and HDF5 data.\n");
+    HDfprintf(stdout, "\n");
+    HDfprintf(stdout,
+    "OPTIONS\n");
+    HDfprintf(stdout,
+    "  -i in_file.h5   Specifies the HDF5 as input.  If the input HDF5 file\n");
+    HDfprintf(stdout,
+    "                  contains no user block, exit with an error message.\n");
+    HDfprintf(stdout,
+    "  -o out_file.h5  Specifies output HDF5 file without a user block.\n");
+    HDfprintf(stdout,
+    "                  If not specified, the user block will be removed from the\n");
+    HDfprintf(stdout,
+    "                  input HDF5 file.\n");
+    HDfprintf(stdout,
+    "  -u out_user_file\n");
+    HDfprintf(stdout,
+    "                  Specifies the output file containing the data from the\n");
+    HDfprintf(stdout,
+    "                  user block.\n");
+    HDfprintf(stdout,
+    "                  Cannot be used with --delete option.\n");
+    HDfprintf(stdout,
+    "  --delete        Remove the user block from the input HDF5 file. The content\n");
+    HDfprintf(stdout,
+    "                  of the user block is discarded.\n");
+    HDfprintf(stdout,
+    "                  Cannot be used with the -u option.\n");
+    HDfprintf(stdout, "\n");
+    HDfprintf(stdout,
+    "  -h              Prints a usage message and exits.\n");
+    HDfprintf(stdout,
+    "  -V              Prints the HDF5 library version and exits.\n");
+    HDfprintf(stdout, "\n");
+    HDfprintf(stdout,
+    "  If neither --delete nor -u is specified, the user block from the input file\n");
+    HDfprintf(stdout,
+    "  will be displayed to stdout.\n");
+    HDfprintf(stdout, "\n");
+    HDfprintf(stdout,
+    "Exit Status:\n");
+    HDfprintf(stdout,
+    "  0      Succeeded.\n");
+    HDfprintf(stdout,
+    "  >0    An error occurred.\n");
+}
+
+/*-------------------------------------------------------------------------
+ * Function:    leave
+ *
+ * Purpose:     Shutdown and call exit()
+ *
+ * Return:      Does not return
+ *
+ *-------------------------------------------------------------------------
+ */
+static void
+leave(int ret)
+{
+    if (ub_file)
+        HDfree (ub_file);
+    if (input_file)
+        HDfree (input_file);
+    if (output_file)
+        HDfree (output_file);
+
+    h5tools_close();
+
+    exit(ret);
 }
 
 /*-------------------------------------------------------------------------
@@ -99,33 +164,33 @@ usage(const char *prog)
 static void
 parse_command_line(int argc, const char *argv[])
 {
-    int                 opt  = FALSE;
+    int opt = FALSE;
 
     /* parse command line options */
     while ((opt = get_option(argc, argv, s_opts, l_opts)) != EOF) {
-        switch ((char)opt) {
-	case 'o':
-	  output_file = HDstrdup (opt_arg);
-	  break;
-	case 'i':
-	  input_file = HDstrdup (opt_arg);
-	  break;
-	case 'u':
-	  ub_file = HDstrdup (opt_arg);
-	  break;
-	case 'd':
-	  do_delete = TRUE;
-	  break;
-    case 'h':
-        usage(h5tools_getprogname());
-        exit(EXIT_SUCCESS);
-    case 'V':
-        print_version (h5tools_getprogname());
-        exit (EXIT_SUCCESS);
-    case '?':
-    default:
-        usage(h5tools_getprogname());
-        exit(EXIT_FAILURE);
+        switch ((char) opt) {
+        case 'o':
+            output_file = HDstrdup (opt_arg);
+            break;
+        case 'i':
+            input_file = HDstrdup (opt_arg);
+            break;
+        case 'u':
+            ub_file = HDstrdup (opt_arg);
+            break;
+        case 'd':
+            do_delete = TRUE;
+            break;
+        case 'h':
+            usage(h5tools_getprogname());
+            leave(EXIT_SUCCESS);
+        case 'V':
+            print_version(h5tools_getprogname());
+            leave(EXIT_SUCCESS);
+        case '?':
+        default:
+            usage(h5tools_getprogname());
+            leave(EXIT_FAILURE);
         }
     }
 
@@ -156,19 +221,19 @@ parse_command_line(int argc, const char *argv[])
 int
 main(int argc, const char *argv[])
 {
-    int   ifid;
-    int   ufid;
-    int   h5fid;
+    int                 ifid = -1;
+    int                 ufid = -1;
+    int                 h5fid = -1;
     void               *edata;
-    H5E_auto2_t          func;
-    hid_t               ifile;
-    off_t fsize;
-    hsize_t usize;
-    htri_t testval;
-    herr_t status;
-    hid_t plist;
-    int res;
-    h5_stat_t sbuf;
+    H5E_auto2_t         func;
+    hid_t               ifile = -1;
+    hid_t               plist = -1;
+    off_t               fsize;
+    hsize_t             usize;
+    htri_t              testval;
+    herr_t              status;
+    int                 res;
+    h5_stat_t           sbuf;
 
     h5tools_setprogname(PROGRAMNAME);
     h5tools_setstatus(EXIT_SUCCESS);
@@ -179,67 +244,87 @@ main(int argc, const char *argv[])
 
     parse_command_line(argc, argv);
 
+    if (input_file == NULL) {
+        /* no user block */
+        error_msg("missing arguemnt for HDF5 file input.\n");
+        help_ref_msg(stderr);
+        leave (EXIT_FAILURE);
+    }
+
     testval = H5Fis_hdf5(input_file);
 
     if (testval <= 0) {
-        error_msg("Input HDF5 file is not HDF \"%s\"\n", input_file);
-        exit(EXIT_FAILURE);
+        error_msg("Input HDF5 file \"%s\" is not HDF\n", input_file);
+        help_ref_msg (stderr);
+        h5tools_setstatus(EXIT_FAILURE);
+        goto done;
     }
 
     ifile = H5Fopen(input_file, H5F_ACC_RDONLY , H5P_DEFAULT);
 
     if (ifile < 0) {
         error_msg("Can't open input HDF5 file \"%s\"\n", input_file);
-        exit(EXIT_FAILURE);
+        h5tools_setstatus(EXIT_FAILURE);
+        goto done;
     }
 
     plist = H5Fget_create_plist(ifile);
     if (plist < 0) {
         error_msg("Can't get file creation plist for file \"%s\"\n", input_file);
-        exit(EXIT_FAILURE);
+        h5tools_setstatus(EXIT_FAILURE);
+        goto done;
     }
 
-    status =  H5Pget_userblock(plist, & usize  );
+    status = H5Pget_userblock(plist, & usize);
     if (status < 0) {
         error_msg("Can't get user block for file \"%s\"\n", input_file);
-        exit(EXIT_FAILURE);
+        h5tools_setstatus(EXIT_FAILURE);
+        goto done;
     }
 
+    H5Pclose(plist);
+    H5Fclose(ifile);
+
     if (usize == 0) {
-	/* no user block to remove: message? */
+  /* no user block to remove: message? */
         error_msg("\"%s\" has no user block: no change to file\n", input_file);
-        exit(EXIT_SUCCESS);
-
+        h5tools_setstatus(EXIT_SUCCESS);
+        goto done;
     }
 
     ifid = HDopen(input_file,O_RDONLY,0);
     if(ifid < 0) {
         error_msg("unable to open input HDF5 file \"%s\"\n", input_file);
-        exit(EXIT_FAILURE);
+        h5tools_setstatus(EXIT_FAILURE);
+        goto done;
     }
 
     res = HDfstat(ifid, &sbuf);
     if(res < 0) {
         error_msg("Can't stat file \"%s\"\n", input_file);
-        exit(EXIT_FAILURE);
+        h5tools_setstatus(EXIT_FAILURE);
+        goto done;
     }
 
     fsize = sbuf.st_size;
 
     if (do_delete && (ub_file != NULL)) {
-            error_msg("??\"%s\"\n", ub_file);
-            exit(EXIT_FAILURE);
+        error_msg("??\"%s\"\n", ub_file);
+        h5tools_setstatus(EXIT_FAILURE);
+        goto done;
     }
 
     if (ub_file == NULL) {
-	/* write to sdtout */
-	ufid = HDdup(1);
-    } else {
+        /* write to sdtout */
+        ufid = HDdup(1);
+    } 
+    else {
         ufid = HDopen(ub_file,O_WRONLY|O_CREAT|O_TRUNC, 0644 );
 
         if (ufid < 0) {
             error_msg("unable to open user block file for output\"%s\"\n", ub_file);
-            exit(EXIT_FAILURE);
+            h5tools_setstatus(EXIT_FAILURE);
+            goto done;
         }
     }
 
@@ -248,23 +333,27 @@ main(int argc, const char *argv[])
 
         if (h5fid < 0) {
             error_msg("unable to open output HDF5 file \"%s\"\n", input_file);
-            exit(EXIT_FAILURE);
+            h5tools_setstatus(EXIT_FAILURE);
+            goto done;
         }
-    } else {
+    } 
+    else {
         h5fid = HDopen(output_file,O_WRONLY|O_CREAT|O_TRUNC, 0644 );
 
         if (h5fid < 0) {
             error_msg("unable to open output HDF5 file \"%s\"\n", output_file);
-            exit(EXIT_FAILURE);
+            h5tools_setstatus(EXIT_FAILURE);
+            goto done;
         }
     }
 
 
     /* copy from 0 to 'usize - 1' into ufid */
     if (!do_delete) {
-	if(copy_to_file(ifid, ufid, 0, (ssize_t) usize) < 0) {
+        if(copy_to_file(ifid, ufid, 0, (ssize_t) usize) < 0) {
             error_msg("unable to copy user block to output file \"%s\"\n", ub_file);
-            exit(EXIT_FAILURE);
+            h5tools_setstatus(EXIT_FAILURE);
+            goto done;
         }
     }
 
@@ -273,13 +362,22 @@ main(int argc, const char *argv[])
      */
     if(copy_to_file(ifid, h5fid, (ssize_t) usize, (ssize_t)(fsize - (ssize_t)usize)) < 0) {
         error_msg("unable to copy hdf5 data to output file \"%s\"\n", output_file);
-        exit(EXIT_FAILURE);
+        h5tools_setstatus(EXIT_FAILURE);
+        goto done;
     }
 
+done:
+    if (ub_file) {
+        HDfree (ub_file);
+        if (ufid >= 0) HDclose(ufid);
+    }
+    if (input_file)
+        HDfree (input_file);
+    if (output_file)
+        HDfree (output_file);
 
-    HDclose(ufid);
-    HDclose(h5fid);
-    HDclose(ifid);
+    if (h5fid >= 0) HDclose(h5fid);
+    if (ifid >= 0) HDclose(ifid);
 
     return h5tools_getstatus();
 }
diff --git a/tools/h5jam/testfiles/h5jam-help.txt b/tools/h5jam/testfiles/h5jam-help.txt
new file mode 100644
index 0000000..ce97c22
--- /dev/null
+++ b/tools/h5jam/testfiles/h5jam-help.txt
@@ -0,0 +1,24 @@
+usage: h5jam -i <in_file.h5> -u <in_user_file> [-o <out_file.h5>] [--clobber]
+
+Adds user block to front of an HDF5 file and creates a new concatenated file.
+
+OPTIONS
+  -i in_file.h5    Specifies the input HDF5 file.
+  -u in_user_file  Specifies the file to be inserted into the user block.
+                   Can be any file format except an HDF5 format.
+  -o out_file.h5   Specifies the output HDF5 file.
+                   If not specified, the user block will be concatenated in
+                   place to the input HDF5 file.
+  --clobber        Wipes out any existing user block before concatenating
+                   the given user block.
+                   The size of the new user block will be the larger of;
+                    - the size of existing user block in the input HDF5 file
+                    - the size of user block required by new input user file
+                   (size = 512 x 2N,  N is positive integer.)
+
+  -h               Prints a usage message and exits.
+  -V               Prints the HDF5 library version and exits.
+
+Exit Status:
+   0   Succeeded.
+   >0  An error occurred.
diff --git a/tools/h5jam/testfiles/h5jam-ub-nohdf5.txt b/tools/h5jam/testfiles/h5jam-ub-nohdf5.txt
new file mode 100644
index 0000000..72c0b17
--- /dev/null
+++ b/tools/h5jam/testfiles/h5jam-ub-nohdf5.txt
@@ -0,0 +1,2 @@
+h5jam error: -u <user_file> cannot be HDF5 file, but it appears to be an HDF5 file.
+Try '-h' or '--help' for more information or see the <h5jam> entry in the 'HDF5 Reference Manual'.
diff --git a/tools/h5jam/testfiles/h5unjam-help.txt b/tools/h5jam/testfiles/h5unjam-help.txt
new file mode 100644
index 0000000..f0d92e9
--- /dev/null
+++ b/tools/h5jam/testfiles/h5unjam-help.txt
@@ -0,0 +1,27 @@
+usage: h5unjam -i <in_file.h5>  [-o <out_file.h5> ] [-u <out_user_file> | --delete]
+
+Splits user file and HDF5 file into two files: user block data and HDF5 data.
+
+OPTIONS
+  -i in_file.h5   Specifies the HDF5 as input.  If the input HDF5 file
+                  contains no user block, exit with an error message.
+  -o out_file.h5  Specifies output HDF5 file without a user block.
+                  If not specified, the user block will be removed from the
+                  input HDF5 file.
+  -u out_user_file
+                  Specifies the output file containing the data from the
+                  user block.
+                  Cannot be used with --delete option.
+  --delete        Remove the user block from the input HDF5 file. The content
+                  of the user block is discarded.
+                  Cannot be used with the -u option.
+
+  -h              Prints a usage message and exits.
+  -V              Prints the HDF5 library version and exits.
+
+  If neither --delete nor -u is specified, the user block from the input file
+  will be displayed to stdout.
+
+Exit Status:
+  0      Succeeded.
+  >0    An error occurred.
diff --git a/tools/h5jam/testh5jam.sh.in b/tools/h5jam/testh5jam.sh.in
index cfefcdc..f359926 100644
--- a/tools/h5jam/testh5jam.sh.in
+++ b/tools/h5jam/testh5jam.sh.in
@@ -35,6 +35,7 @@ UNJAM_BIN=`pwd`    # The path of the jam binary
 CMP='cmp -s'
 DIFF='diff -c'
 AWK='awk'
+CP='cp'
 
 nerrors=0
 verbose=yes
@@ -43,8 +44,75 @@ verbose=yes
 if test -z "$srcdir"; then
    srcdir=.
 fi
-TESTFILES="$srcdir/testfiles"
 
+# source dirs
+SRC_TOOLS="$srcdir/.."
+SRC_TOOLS_TESTFILES="$SRC_TOOLS/testfiles"
+
+# testfiles source dirs for tools
+SRC_H5LS_TESTFILES="$SRC_TOOLS_TESTFILES"
+SRC_H5DUMP_TESTFILES="$SRC_TOOLS_TESTFILES"
+SRC_H5DIFF_TESTFILES="$SRC_TOOLS/h5diff/testfiles"
+SRC_H5COPY_TESTFILES="$SRC_TOOLS/h5copy/testfiles"
+SRC_H5REPACK_TESTFILES="$SRC_TOOLS/h5repack/testfiles"
+SRC_H5JAM_TESTFILES="$SRC_TOOLS/h5jam/testfiles"
+SRC_H5STAT_TESTFILES="$SRC_TOOLS/h5stat/testfiles"
+SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/h5import/testfiles"
+
+TESTDIR=./testfiles
+test -d $TESTDIR || mkdir $TESTDIR
+
+######################################################################
+# test files
+# --------------------------------------------------------------------
+# All the test files copy from source directory to test directory
+# NOTE: Keep this framework to add/remove test files.
+#       Any test files from other tools can be used in this framework.
+#       This list are also used for checking exist.
+#       Comment '#' without space can be used.
+# --------------------------------------------------------------------
+LIST_HDF5_TEST_FILES="
+$SRC_H5JAM_TESTFILES/tall.h5
+$SRC_H5JAM_TESTFILES/twithub.h5
+$SRC_H5JAM_TESTFILES/twithub513.h5
+"
+LIST_OTHER_TEST_FILES="
+$SRC_H5JAM_TESTFILES/u10.txt
+$SRC_H5JAM_TESTFILES/u511.txt
+$SRC_H5JAM_TESTFILES/u512.txt
+$SRC_H5JAM_TESTFILES/u513.txt
+$SRC_H5JAM_TESTFILES/h5jam-help.txt
+$SRC_H5JAM_TESTFILES/h5unjam-help.txt
+$SRC_H5JAM_TESTFILES/h5jam-ub-nohdf5.txt
+"
+
+# Source in the output filter function definitions.
+. $srcdir/../../bin/output_filter.sh
+
+#
+# copy test files and expected output files from source dirs to test dir
+#
+COPY_TESTFILES="$LIST_HDF5_TEST_FILES $LIST_OTHER_TEST_FILES"
+
+COPY_TESTFILES_TO_TESTDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_TESTFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            if [ -a $tstfile ]; then
+                $CP -f $tstfile $TESTDIR
+            else
+                echo "Error: FAILED to copy $tstfile"
+                echo "       $tstfile doesn't exist!"
+                exit $EXIT_FAILURE
+            fi
+        fi
+    done
+}
 
 # Print a line-line message left justified in a field of 70 characters
 # beginning with the word "Testing".
@@ -381,150 +449,219 @@ UNJAMTEST () {
 }
 
 
+#
+# TOOLTEST_OUTPUT < JAM | UNJAM > expect-output.txt exit-code options
+#
+# Only verify stdout/stderr output from h5jam and j5unjam
+#
+
+TOOLTEST_OUTPUT() {
+    if [ "$1" == "JAM" ]; then
+        TOOLCMD=$JAM_BIN/$JAM
+    elif [ "$1" == "UNJAM" ]; then
+        TOOLCMD=$JAM_BIN/$UNJAM
+    fi
+    shift
+    expect="$TESTDIR/$1"
+    actual="$TESTDIR/`basename $1 .ls`.out"
+    actual_err="$TESTDIR/`basename $1 .ls`.err"
+    actual_sav=${actual}-sav
+    actual_err_sav=${actual_err}-sav
+    shift
+    retvalexpect=$1
+    shift
+
+    TESTING h5jam $@
+    (
+        cd $TESTDIR
+        $TOOLCMD "$@"
+    ) >$actual 2>$actual_err
+
+    # save actual and actual_err in case they are needed later.
+    cp $actual $actual_sav
+    STDOUT_FILTER $actual
+    cp $actual_err $actual_err_sav
+    STDERR_FILTER $actual_err
+    # combine stderr to stdout for output compare 
+    cat $actual_err >> $actual
+
+    if [ ! -f $expect ]; then
+	    # Create the expect file if it doesn't yet exist.
+        echo " CREATED"
+        cp $actual $expect
+	    rm -f $actual $actual_err
+    elif $CMP $expect $actual; then
+        echo " PASSED"
+	    rm -f $actual $actual_err
+    else
+        echo "*FAILED*"
+	    echo "    Expected result differs from actual result"
+	    nerrors="`expr $nerrors + 1`"
+        test yes = "$verbose" && $DIFF $expect $actual |sed 's/^/    /'
+    fi
+}
+
 ##############################################################################
 ##############################################################################
 ###			  T H E   T E S T S                                ###
 ##############################################################################
 ##############################################################################
+# prepare for test
+COPY_TESTFILES_TO_TESTDIR
 
-JAMTEST $TESTFILES/u10.txt $TESTFILES/tall.h5 ta2.h5
-CHECKFILE $TESTFILES/tall.h5 ta2.h5
+#-------------------------------
+# Testing h5jam
+#-------------------------------
+# help page
+TOOLTEST_OUTPUT JAM h5jam-help.txt 0 -h
+
+# don't allow HDF5 format file as an user block file
+TOOLTEST_OUTPUT JAM h5jam-ub-nohdf5.txt 1 -i tall.h5 -u tall.h5 -o tall-tmp.h5
+
+JAMTEST $TESTDIR/u10.txt $TESTDIR/tall.h5 ta2.h5
+CHECKFILE $TESTDIR/tall.h5 ta2.h5
 CLEANUP ta2.h5
-JAMTEST $TESTFILES/u511.txt $TESTFILES/tall.h5 ta3.h5
-CHECKFILE $TESTFILES/tall.h5 ta3.h5
+JAMTEST $TESTDIR/u511.txt $TESTDIR/tall.h5 ta3.h5
+CHECKFILE $TESTDIR/tall.h5 ta3.h5
 CLEANUP ta3.h5
-JAMTEST $TESTFILES/u512.txt $TESTFILES/tall.h5 ta4.h5
-CHECKFILE $TESTFILES/tall.h5 ta4.h5
+JAMTEST $TESTDIR/u512.txt $TESTDIR/tall.h5 ta4.h5
+CHECKFILE $TESTDIR/tall.h5 ta4.h5
 CLEANUP ta4.h5
-JAMTEST $TESTFILES/u513.txt $TESTFILES/tall.h5 ta5.h5
-CHECKFILE $TESTFILES/tall.h5 ta5.h5
+JAMTEST $TESTDIR/u513.txt $TESTDIR/tall.h5 ta5.h5
+CHECKFILE $TESTDIR/tall.h5 ta5.h5
 CLEANUP ta5.h5
 
-SETUP $TESTFILES/tall.h5 ta.h5
-JAMTEST $TESTFILES/u10.txt ta.h5 
-CHECKFILE $TESTFILES/tall.h5 ta.h5
-SETUP $TESTFILES/tall.h5 ta.h5
-JAMTEST $TESTFILES/u511.txt ta.h5 
-CHECKFILE $TESTFILES/tall.h5 ta.h5
-SETUP $TESTFILES/tall.h5 ta.h5
-JAMTEST $TESTFILES/u512.txt ta.h5 
-CHECKFILE $TESTFILES/tall.h5 ta.h5
-SETUP $TESTFILES/tall.h5 ta.h5
-JAMTEST $TESTFILES/u513.txt ta.h5 
-CHECKFILE $TESTFILES/tall.h5 ta.h5
+SETUP $TESTDIR/tall.h5 ta.h5
+JAMTEST $TESTDIR/u10.txt ta.h5 
+CHECKFILE $TESTDIR/tall.h5 ta.h5
+SETUP $TESTDIR/tall.h5 ta.h5
+JAMTEST $TESTDIR/u511.txt ta.h5 
+CHECKFILE $TESTDIR/tall.h5 ta.h5
+SETUP $TESTDIR/tall.h5 ta.h5
+JAMTEST $TESTDIR/u512.txt ta.h5 
+CHECKFILE $TESTDIR/tall.h5 ta.h5
+SETUP $TESTDIR/tall.h5 ta.h5
+JAMTEST $TESTDIR/u513.txt ta.h5 
+CHECKFILE $TESTDIR/tall.h5 ta.h5
 CLEANUP ta.h5
 
-JAMTEST $TESTFILES/u10.txt $TESTFILES/twithub.h5 tax2.h5
-CHECKFILE $TESTFILES/tall.h5 tax2.h5
+JAMTEST $TESTDIR/u10.txt $TESTDIR/twithub.h5 tax2.h5
+CHECKFILE $TESTDIR/tall.h5 tax2.h5
 CLEANUP tax2.h5
-JAMTEST $TESTFILES/u511.txt $TESTFILES/twithub.h5 tax3.h5
-CHECKFILE $TESTFILES/tall.h5 tax3.h5
+JAMTEST $TESTDIR/u511.txt $TESTDIR/twithub.h5 tax3.h5
+CHECKFILE $TESTDIR/tall.h5 tax3.h5
 CLEANUP tax3.h5
-JAMTEST $TESTFILES/u512.txt $TESTFILES/twithub.h5 tax4.h5
-CHECKFILE $TESTFILES/tall.h5 tax4.h5
+JAMTEST $TESTDIR/u512.txt $TESTDIR/twithub.h5 tax4.h5
+CHECKFILE $TESTDIR/tall.h5 tax4.h5
 CLEANUP tax4.h5
-JAMTEST $TESTFILES/u513.txt $TESTFILES/twithub.h5 tax5.h5
-CHECKFILE $TESTFILES/tall.h5 tax5.h5
+JAMTEST $TESTDIR/u513.txt $TESTDIR/twithub.h5 tax5.h5
+CHECKFILE $TESTDIR/tall.h5 tax5.h5
 CLEANUP tax5.h5
 
-JAMTEST $TESTFILES/u10.txt $TESTFILES/twithub513.h5 tax6.h5
-CHECKFILE $TESTFILES/tall.h5 tax6.h5
+JAMTEST $TESTDIR/u10.txt $TESTDIR/twithub513.h5 tax6.h5
+CHECKFILE $TESTDIR/tall.h5 tax6.h5
 CLEANUP tax6.h5
-JAMTEST $TESTFILES/u511.txt $TESTFILES/twithub513.h5 tax7.h5
-CHECKFILE $TESTFILES/tall.h5 tax7.h5
+JAMTEST $TESTDIR/u511.txt $TESTDIR/twithub513.h5 tax7.h5
+CHECKFILE $TESTDIR/tall.h5 tax7.h5
 CLEANUP tax7.h5
-JAMTEST $TESTFILES/u512.txt $TESTFILES/twithub513.h5 tax8.h5
-CHECKFILE $TESTFILES/tall.h5 tax8.h5
+JAMTEST $TESTDIR/u512.txt $TESTDIR/twithub513.h5 tax8.h5
+CHECKFILE $TESTDIR/tall.h5 tax8.h5
 CLEANUP tax8.h5
-JAMTEST $TESTFILES/u513.txt $TESTFILES/twithub513.h5 tax9.h5
-CHECKFILE $TESTFILES/tall.h5 tax9.h5
+JAMTEST $TESTDIR/u513.txt $TESTDIR/twithub513.h5 tax9.h5
+CHECKFILE $TESTDIR/tall.h5 tax9.h5
 CLEANUP tax9.h5
 
-JAMTEST $TESTFILES/u10.txt $TESTFILES/twithub.h5 --clobber taz2.h5 
-CHECKFILE $TESTFILES/tall.h5 taz2.h5
+JAMTEST $TESTDIR/u10.txt $TESTDIR/twithub.h5 --clobber taz2.h5 
+CHECKFILE $TESTDIR/tall.h5 taz2.h5
 CLEANUP taz2.h5
-JAMTEST $TESTFILES/u511.txt $TESTFILES/twithub.h5 --clobber taz3.h5
-CHECKFILE $TESTFILES/tall.h5 taz3.h5
+JAMTEST $TESTDIR/u511.txt $TESTDIR/twithub.h5 --clobber taz3.h5
+CHECKFILE $TESTDIR/tall.h5 taz3.h5
 CLEANUP taz3.h5
-JAMTEST $TESTFILES/u512.txt $TESTFILES/twithub.h5 --clobber taz4.h5 
-CHECKFILE $TESTFILES/tall.h5 taz4.h5
+JAMTEST $TESTDIR/u512.txt $TESTDIR/twithub.h5 --clobber taz4.h5 
+CHECKFILE $TESTDIR/tall.h5 taz4.h5
 CLEANUP taz4.h5
-JAMTEST $TESTFILES/u513.txt $TESTFILES/twithub.h5 --clobber taz5.h5 
-CHECKFILE $TESTFILES/tall.h5 taz5.h5
+JAMTEST $TESTDIR/u513.txt $TESTDIR/twithub.h5 --clobber taz5.h5 
+CHECKFILE $TESTDIR/tall.h5 taz5.h5
 CLEANUP taz5.h5
 
-JAMTEST $TESTFILES/u10.txt $TESTFILES/twithub513.h5 --clobber taz6.h5 
-CHECKFILE $TESTFILES/tall.h5 taz6.h5
+JAMTEST $TESTDIR/u10.txt $TESTDIR/twithub513.h5 --clobber taz6.h5 
+CHECKFILE $TESTDIR/tall.h5 taz6.h5
 CLEANUP taz6.h5
-JAMTEST $TESTFILES/u511.txt $TESTFILES/twithub513.h5 --clobber taz7.h5
-CHECKFILE $TESTFILES/tall.h5 taz7.h5
+JAMTEST $TESTDIR/u511.txt $TESTDIR/twithub513.h5 --clobber taz7.h5
+CHECKFILE $TESTDIR/tall.h5 taz7.h5
 CLEANUP taz7.h5
-JAMTEST $TESTFILES/u512.txt $TESTFILES/twithub513.h5 --clobber taz8.h5 
-CHECKFILE $TESTFILES/tall.h5 taz8.h5
+JAMTEST $TESTDIR/u512.txt $TESTDIR/twithub513.h5 --clobber taz8.h5 
+CHECKFILE $TESTDIR/tall.h5 taz8.h5
 CLEANUP taz8.h5
-JAMTEST $TESTFILES/u513.txt $TESTFILES/twithub513.h5 --clobber taz9.h5 
-CHECKFILE $TESTFILES/tall.h5 taz9.h5
+JAMTEST $TESTDIR/u513.txt $TESTDIR/twithub513.h5 --clobber taz9.h5 
+CHECKFILE $TESTDIR/tall.h5 taz9.h5
 CLEANUP taz9.h5
 
-SETUP $TESTFILES/twithub.h5 tay2.h5
-JAMTEST $TESTFILES/u10.txt tay2.h5 --clobber
-CHECKFILE $TESTFILES/tall.h5 tay2.h5
+SETUP $TESTDIR/twithub.h5 tay2.h5
+JAMTEST $TESTDIR/u10.txt tay2.h5 --clobber
+CHECKFILE $TESTDIR/tall.h5 tay2.h5
 CLEANUP tay2.h5
-SETUP $TESTFILES/twithub.h5 tay3.h5
-JAMTEST $TESTFILES/u511.txt tay3.h5 --clobber
-CHECKFILE $TESTFILES/tall.h5 tay3.h5
+SETUP $TESTDIR/twithub.h5 tay3.h5
+JAMTEST $TESTDIR/u511.txt tay3.h5 --clobber
+CHECKFILE $TESTDIR/tall.h5 tay3.h5
 CLEANUP tay3.h5
-SETUP $TESTFILES/twithub.h5 tay4.h5
-JAMTEST $TESTFILES/u512.txt tay4.h5 --clobber
-CHECKFILE $TESTFILES/tall.h5 tay4.h5
+SETUP $TESTDIR/twithub.h5 tay4.h5
+JAMTEST $TESTDIR/u512.txt tay4.h5 --clobber
+CHECKFILE $TESTDIR/tall.h5 tay4.h5
 CLEANUP tay4.h5
-SETUP $TESTFILES/twithub.h5 tay5.h5
-JAMTEST $TESTFILES/u513.txt tay5.h5 --clobber
-CHECKFILE $TESTFILES/tall.h5 tay5.h5
+SETUP $TESTDIR/twithub.h5 tay5.h5
+JAMTEST $TESTDIR/u513.txt tay5.h5 --clobber
+CHECKFILE $TESTDIR/tall.h5 tay5.h5
 CLEANUP tay5.h5
 
-SETUP $TESTFILES/twithub513.h5 tay6.h5
-JAMTEST $TESTFILES/u10.txt tay6.h5 --clobber
-CHECKFILE $TESTFILES/tall.h5 tay6.h5
+SETUP $TESTDIR/twithub513.h5 tay6.h5
+JAMTEST $TESTDIR/u10.txt tay6.h5 --clobber
+CHECKFILE $TESTDIR/tall.h5 tay6.h5
 CLEANUP tay6.h5
-SETUP $TESTFILES/twithub513.h5 tay7.h5
-JAMTEST $TESTFILES/u511.txt tay7.h5 --clobber
-CHECKFILE $TESTFILES/tall.h5 tay7.h5
+SETUP $TESTDIR/twithub513.h5 tay7.h5
+JAMTEST $TESTDIR/u511.txt tay7.h5 --clobber
+CHECKFILE $TESTDIR/tall.h5 tay7.h5
 CLEANUP tay7.h5
-SETUP $TESTFILES/twithub513.h5 tay8.h5
-JAMTEST $TESTFILES/u512.txt tay8.h5 --clobber
-CHECKFILE $TESTFILES/tall.h5 tay8.h5
+SETUP $TESTDIR/twithub513.h5 tay8.h5
+JAMTEST $TESTDIR/u512.txt tay8.h5 --clobber
+CHECKFILE $TESTDIR/tall.h5 tay8.h5
 CLEANUP tay8.h5
-SETUP $TESTFILES/twithub513.h5 tay9.h5
-JAMTEST $TESTFILES/u513.txt tay9.h5 --clobber
-CHECKFILE $TESTFILES/tall.h5 tay9.h5
+SETUP $TESTDIR/twithub513.h5 tay9.h5
+JAMTEST $TESTDIR/u513.txt tay9.h5 --clobber
+CHECKFILE $TESTDIR/tall.h5 tay9.h5
 CLEANUP tay9.h5
 
-SETUP $TESTFILES/twithub.h5 tai1.h5
+#---------------------------------
+# Testing h5unjam 
+#---------------------------------
+# help page
+TOOLTEST_OUTPUT UNJAM h5unjam-help.txt 0 -h
+
+SETUP $TESTDIR/twithub.h5 tai1.h5
 UNJAMTEST tai1.h5 o10.txt taa1.h5
-CHECKFILE $TESTFILES/tall.h5 taa1.h5
+CHECKFILE $TESTDIR/tall.h5 taa1.h5
 CLEANUP taa1.h5 tai1.h5 o10.txt
-SETUP $TESTFILES/twithub513.h5 tai2.h5
+SETUP $TESTDIR/twithub513.h5 tai2.h5
 UNJAMTEST tai2.h5 o512.txt taa2.h5
-CHECKFILE $TESTFILES/tall.h5 taa2.h5
+CHECKFILE $TESTDIR/tall.h5 taa2.h5
 CLEANUP taa2.h5 tai2.h5 o512.txt
 
-SETUP $TESTFILES/twithub.h5 tai3.h5
+SETUP $TESTDIR/twithub.h5 tai3.h5
 UNJAMTEST tai3.h5 - taa3.h5
-CHECKFILE $TESTFILES/tall.h5 taa3.h5
+CHECKFILE $TESTDIR/tall.h5 taa3.h5
 CLEANUP taa3.h5 tai3.h5
-SETUP $TESTFILES/twithub513.h5 tai4.h5
+SETUP $TESTDIR/twithub513.h5 tai4.h5
 UNJAMTEST tai4.h5 - taa4.h5
-CHECKFILE $TESTFILES/tall.h5 taa4.h5
+CHECKFILE $TESTDIR/tall.h5 taa4.h5
 CLEANUP taa4.h5 tai4.h5
 
-SETUP $TESTFILES/twithub.h5 taj2.h5
+SETUP $TESTDIR/twithub.h5 taj2.h5
 UNJAMTEST taj2.h5 --delete tac2.h5
-CHECKFILE $TESTFILES/tall.h5 tac2.h5
+CHECKFILE $TESTDIR/tall.h5 tac2.h5
 CLEANUP tac2.h5 taj2.h5
-SETUP $TESTFILES/twithub513.h5 taj3.h5
+SETUP $TESTDIR/twithub513.h5 taj3.h5
 UNJAMTEST taj3.h5 --delete tac3.h5
-CHECKFILE $TESTFILES/tall.h5 tac3.h5
+CHECKFILE $TESTDIR/tall.h5 tac3.h5
 CLEANUP tac3.h5 taj3.h5
 
 
diff --git a/tools/h5ls/CMakeLists.txt b/tools/h5ls/CMakeLists.txt
index 6956c4e..2cd11cd 100644
--- a/tools/h5ls/CMakeLists.txt
+++ b/tools/h5ls/CMakeLists.txt
@@ -26,9 +26,9 @@ SET (H5_DEP_EXECUTABLES
 
 IF (BUILD_TESTING)
   # --------------------------------------------------------------------
-  # Copy all the HDF5 files from the test directory into the source directory
+  # Copy all the test files from source directory to test directory
   # --------------------------------------------------------------------
-  SET (HDF5_REFERENCE_FILES
+  SET (LIST_EXPECT_OUTPUT_FILES
       help-1.ls
       help-2.ls
       help-3.ls
@@ -83,7 +83,7 @@ IF (BUILD_TESTING)
       tvldtypes2le.ls
       tvldtypes2be.ls
   )
-  SET (HDF5_REFERENCE_TEST_FILES
+  SET (LIST_HDF5_TEST_FILES
       tall.h5
       tarray1.h5
       tattr2.h5
@@ -107,27 +107,29 @@ IF (BUILD_TESTING)
       tvldtypes1.h5
   )
 
-  FOREACH (ls_file ${HDF5_REFERENCE_FILES})
-    SET (lsdest "${PROJECT_BINARY_DIR}/${ls_file}")
-    #MESSAGE (STATUS " Translating ${ls_file}")
+  # copy the list of expected output files
+  FOREACH (out_file ${LIST_EXPECT_OUTPUT_FILES})
+    SET (out_dest "${PROJECT_BINARY_DIR}/${out_file}")
+    #MESSAGE (STATUS " Translating ${out_file}")
     ADD_CUSTOM_COMMAND (
         TARGET     h5ls
         POST_BUILD
-        COMMAND    ${XLATE_UTILITY}
-        ARGS       ${HDF5_TOOLS_SRC_DIR}/testfiles/${ls_file} ${lsdest} -l3
+        COMMAND    ${CMAKE_COMMAND}
+        ARGS       -E copy_if_different ${HDF5_TOOLS_SRC_DIR}/testfiles/${out_file} ${out_dest}
     )
-  ENDFOREACH (ls_file ${HDF5_REFERENCE_FILES})
+  ENDFOREACH (out_file ${LIST_EXPECT_OUTPUT_FILES})
 
-  FOREACH (h5_file ${HDF5_REFERENCE_TEST_FILES})
-    SET (dest "${PROJECT_BINARY_DIR}/${h5_file}")
+  # copy the list of hdf5 test files
+  FOREACH (h5_file ${LIST_HDF5_TEST_FILES})
+    SET (h5_dest "${PROJECT_BINARY_DIR}/${h5_file}")
     #MESSAGE (STATUS " Copying ${h5_file}")
     ADD_CUSTOM_COMMAND (
         TARGET     h5ls
         POST_BUILD
         COMMAND    ${CMAKE_COMMAND}
-        ARGS       -E copy_if_different ${HDF5_TOOLS_SRC_DIR}/testfiles/${h5_file} ${dest}
+        ARGS       -E copy_if_different ${HDF5_TOOLS_SRC_DIR}/testfiles/${h5_file} ${h5_dest}
     )
-  ENDFOREACH (h5_file ${HDF5_REFERENCE_TEST_FILES})
+  ENDFOREACH (h5_file ${LIST_HDF5_TEST_FILES})
   
 ##############################################################################
 ##############################################################################
@@ -142,8 +144,17 @@ IF (BUILD_TESTING)
       IF (${resultcode} STREQUAL "1")
         SET_TESTS_PROPERTIES (H5LS-${resultfile} PROPERTIES WILL_FAIL "true")
       ENDIF (${resultcode} STREQUAL "1")
+      IF (NOT "${last_test}" STREQUAL "")
+        SET_TESTS_PROPERTIES (H5LS-${resultfile} PROPERTIES DEPENDS ${last_test})
+      ENDIF (NOT "${last_test}" STREQUAL "")
+      SET (last_test "H5LS-${resultfile}")
     ELSE (HDF5_ENABLE_USING_MEMCHECKER)
       ADD_TEST (
+          NAME H5LS-clear-${resultfile}-objects
+          COMMAND    ${CMAKE_COMMAND}
+              -E remove ${resultfile}.out ${resultfile}.out.err
+      )
+      ADD_TEST (
           NAME H5LS-${resultfile}
           COMMAND "${CMAKE_COMMAND}"
               -D "TEST_PROGRAM=$<TARGET_FILE:h5ls>"
@@ -154,11 +165,8 @@ IF (BUILD_TESTING)
               -D "TEST_REFERENCE=${resultfile}.ls"
               -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
       )
+      SET_TESTS_PROPERTIES (H5LS-${resultfile} PROPERTIES DEPENDS "H5LS-clear-${resultfile}-objects")
     ENDIF (HDF5_ENABLE_USING_MEMCHECKER)
-    IF (NOT "${last_test}" STREQUAL "")
-      SET_TESTS_PROPERTIES (H5LS-${resultfile} PROPERTIES DEPENDS ${last_test})
-    ENDIF (NOT "${last_test}" STREQUAL "")
-    SET (last_test "H5LS-${resultfile}")
   ENDMACRO (ADD_H5_TEST file)
 
 ##############################################################################
@@ -167,8 +175,9 @@ IF (BUILD_TESTING)
 ##############################################################################
 ##############################################################################
 
-  # Remove any output file left over from previous test run
-  ADD_TEST (
+  IF (HDF5_ENABLE_USING_MEMCHECKER)
+    # Remove any output file left over from previous test run
+    ADD_TEST (
       NAME H5LS-clearall-objects
       COMMAND    ${CMAKE_COMMAND}
           -E remove 
@@ -278,11 +287,12 @@ IF (BUILD_TESTING)
           tvldtypes2le.out.err
           tvldtypes2be.out
           tvldtypes2be.out.err
-  )
-  IF (NOT "${last_test}" STREQUAL "")
-    SET_TESTS_PROPERTIES (H5LS-clearall-objects PROPERTIES DEPENDS ${last_test})
-  ENDIF (NOT "${last_test}" STREQUAL "")
-  SET (last_test "H5LS-clearall-objects")
+    )
+    IF (NOT "${last_test}" STREQUAL "")
+      SET_TESTS_PROPERTIES (H5LS-clearall-objects PROPERTIES DEPENDS ${last_test})
+    ENDIF (NOT "${last_test}" STREQUAL "")
+    SET (last_test "H5LS-clearall-objects")
+  ENDIF (HDF5_ENABLE_USING_MEMCHECKER)
 
   # test the help syntax
   ADD_H5_TEST (help-1 0 -w80 -h)
@@ -387,15 +397,15 @@ IF (BUILD_TESTING)
   # test for non-existing file
   ADD_H5_TEST (nosuchfile 1 nosuchfile.h5)
 
-  IF (WORDS_BIGENDIAN)
+  IF (H5_WORDS_BIGENDIAN)
     # test for variable length data types in verbose mode
     ADD_H5_TEST (tvldtypes2be 0 -v tvldtypes1.h5)
     # test for dataset region references data types in verbose mode
     ADD_H5_TEST (tdataregbe 0 -v tdatareg.h5)
-  ELSE (WORDS_BIGENDIAN)
+  ELSE (H5_WORDS_BIGENDIAN)
     ADD_H5_TEST (tvldtypes2le 0 -v tvldtypes1.h5)
     ADD_H5_TEST (tdataregle 0 -v tdatareg.h5)
-  ENDIF (WORDS_BIGENDIAN)
+  ENDIF (H5_WORDS_BIGENDIAN)
 
 ENDIF (BUILD_TESTING)
 
diff --git a/tools/h5ls/Makefile.in b/tools/h5ls/Makefile.in
index 74a81eb..1a33335 100644
--- a/tools/h5ls/Makefile.in
+++ b/tools/h5ls/Makefile.in
@@ -175,6 +175,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -195,10 +196,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -242,7 +245,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/tools/h5ls/h5ls.c b/tools/h5ls/h5ls.c
index 722f45c..a00a9e1 100644
--- a/tools/h5ls/h5ls.c
+++ b/tools/h5ls/h5ls.c
@@ -846,15 +846,15 @@ display_enum_type(hid_t type, int ind)
             for (j=0; j<dst_size; j++)
                 printf("%02x", value[i*dst_size+j]);
         } else if (H5T_SGN_NONE==H5Tget_sign(native)) {
- 	    /*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size"
- 	     *strangely, unless use another pointer "copy".*/
- 	    copy = value+i*dst_size;
+       /*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size"
+        *strangely, unless use another pointer "copy".*/
+       copy = value+i*dst_size;
             HDfprintf(stdout,"%"H5_PRINTF_LL_WIDTH"u",
             *((unsigned long long*)((void*)copy)));
         } else {
- 	    /*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size"
- 	     *strangely, unless use another pointer "copy".*/
- 	    copy = value+i*dst_size;
+       /*On SGI Altix(cobalt), wrong values were printed out with "value+i*dst_size"
+        *strangely, unless use another pointer "copy".*/
+       copy = value+i*dst_size;
             HDfprintf(stdout,"%"H5_PRINTF_LL_WIDTH"d",
             *((long long*)((void*)copy)));
         }
@@ -1838,10 +1838,11 @@ list_obj(const char *name, const H5O_info_t *oinfo, const char *first_seen, void
              * H5Oget_comment again with the correct value.
              * If the call to H5Oget_comment returned an error, skip this block */
             if (cmt_bufsize > 0) {
-                comment = (char *)HDmalloc((size_t)cmt_bufsize); /* new_size including null terminator */
+                comment = (char *)HDmalloc((size_t)cmt_bufsize + 1); /* new_size including null terminator */
                 if(comment) {
                     cmt_bufsize = H5Oget_comment(obj, comment, cmt_bufsize);
                     if(cmt_bufsize > 0) {
+                        comment[cmt_bufsize] = 0;
                         printf("    %-10s \"", "Comment:");
                         display_string(stdout, comment, FALSE);
                         puts("\"");
diff --git a/tools/h5ls/testh5ls.sh.in b/tools/h5ls/testh5ls.sh.in
index d793c90..bdf0af7 100644
--- a/tools/h5ls/testh5ls.sh.in
+++ b/tools/h5ls/testh5ls.sh.in
@@ -24,6 +24,7 @@ H5LS_BIN=`pwd`/$H5LS    # The path of the tool binary
 
 CMP='cmp -s'
 DIFF='diff -c'
+CP='cp'
 NLINES=20			# Max. lines of output to display if test fails
 
 WORDS_BIGENDIAN="@WORDS_BIGENDIAN@"
@@ -31,12 +32,115 @@ WORDS_BIGENDIAN="@WORDS_BIGENDIAN@"
 nerrors=0
 verbose=yes
 h5haveexitcode=yes	    # default is yes
-
 # The build (current) directory might be different than the source directory.
 if test -z "$srcdir"; then
     srcdir=.
 fi
-test -d ../testfiles || mkdir ../testfiles
+# source dirs
+SRC_TOOLS="$srcdir/.."
+SRC_TOOLS_TESTFILES="$SRC_TOOLS/testfiles"
+# testfiles source dirs for tools
+SRC_H5LS_TESTFILES="$SRC_TOOLS_TESTFILES"
+SRC_H5DUMP_TESTFILES="$SRC_TOOLS_TESTFILES"
+SRC_H5DIFF_TESTFILES="$SRC_TOOLS/h5diff/testfiles"
+SRC_H5COPY_TESTFILES="$SRC_TOOLS/h5copy/testfiles"
+SRC_H5REPACK_TESTFILES="$SRC_TOOLS/h5repack/testfiles"
+SRC_H5JAM_TESTFILES="$SRC_TOOLS/h5jam/testfiles"
+SRC_H5STAT_TESTFILES="$SRC_TOOLS/h5stat/testfiles"
+SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/h5import/testfiles"
+
+TESTDIR=./testfiles
+test -d $TESTDIR || mkdir $TESTDIR
+
+######################################################################
+# test files
+# --------------------------------------------------------------------
+# All the test files copy from source directory to test directory
+# NOTE: Keep this framework to add/remove test files.
+#       Any test files from other tools can be used in this framework.
+#       This list are also used for checking exist.
+#       Comment '#' without space can be used.
+# --------------------------------------------------------------------
+LIST_HDF5_TEST_FILES="
+$SRC_H5LS_TESTFILES/tall.h5
+$SRC_H5LS_TESTFILES/tarray1.h5
+$SRC_H5LS_TESTFILES/tattr2.h5
+$SRC_H5LS_TESTFILES/tcompound.h5
+$SRC_H5LS_TESTFILES/tdatareg.h5
+$SRC_H5LS_TESTFILES/tdset.h5
+$SRC_H5LS_TESTFILES/tempty.h5
+$SRC_H5LS_TESTFILES/textlink.h5
+$SRC_H5LS_TESTFILES/textlinksrc.h5
+$SRC_H5LS_TESTFILES/textlinktar.h5
+$SRC_H5LS_TESTFILES/tgroup.h5
+$SRC_H5LS_TESTFILES/tgrp_comments.h5
+$SRC_H5LS_TESTFILES/thlink.h5
+$SRC_H5LS_TESTFILES/tloop.h5
+$SRC_H5LS_TESTFILES/tnestedcomp.h5
+$SRC_H5LS_TESTFILES/tsaf.h5
+$SRC_H5LS_TESTFILES/tslink.h5
+$SRC_H5LS_TESTFILES/tsoftlinks.h5
+$SRC_H5LS_TESTFILES/tstr.h5
+$SRC_H5LS_TESTFILES/tudlink.h5
+$SRC_H5LS_TESTFILES/tvldtypes1.h5
+"
+
+LIST_OTHER_TEST_FILES="
+$SRC_H5LS_TESTFILES/help-1.ls
+$SRC_H5LS_TESTFILES/help-2.ls
+$SRC_H5LS_TESTFILES/help-3.ls
+$SRC_H5LS_TESTFILES/nosuchfile.ls
+$SRC_H5LS_TESTFILES/tall-1.ls
+$SRC_H5LS_TESTFILES/tall-2.ls
+$SRC_H5LS_TESTFILES/tarray1.ls
+$SRC_H5LS_TESTFILES/tattr2.ls
+$SRC_H5LS_TESTFILES/tcomp-1.ls
+$SRC_H5LS_TESTFILES/tdataregbe.ls
+$SRC_H5LS_TESTFILES/tdataregle.ls
+$SRC_H5LS_TESTFILES/tdset-1.ls
+$SRC_H5LS_TESTFILES/tempty.ls
+$SRC_H5LS_TESTFILES/textlink-1.ls
+$SRC_H5LS_TESTFILES/textlinksrc-1.ls
+$SRC_H5LS_TESTFILES/textlinksrc-2.ls
+$SRC_H5LS_TESTFILES/textlinksrc-3.ls
+$SRC_H5LS_TESTFILES/textlinksrc-4.ls
+$SRC_H5LS_TESTFILES/textlinksrc-5.ls
+$SRC_H5LS_TESTFILES/textlinksrc-6.ls
+$SRC_H5LS_TESTFILES/textlinksrc-7.ls
+$SRC_H5LS_TESTFILES/textlinksrc-1-old.ls
+$SRC_H5LS_TESTFILES/textlinksrc-2-old.ls
+$SRC_H5LS_TESTFILES/textlinksrc-3-old.ls
+$SRC_H5LS_TESTFILES/textlinksrc-6-old.ls
+$SRC_H5LS_TESTFILES/textlinksrc-7-old.ls
+$SRC_H5LS_TESTFILES/tsoftlinks-1.ls
+$SRC_H5LS_TESTFILES/tsoftlinks-2.ls
+$SRC_H5LS_TESTFILES/tsoftlinks-3.ls
+$SRC_H5LS_TESTFILES/tsoftlinks-4.ls
+$SRC_H5LS_TESTFILES/tsoftlinks-5.ls
+$SRC_H5LS_TESTFILES/textlinksrc-nodangle-1.ls
+$SRC_H5LS_TESTFILES/textlinksrc-nodangle-2.ls
+$SRC_H5LS_TESTFILES/tgrp_comments.ls
+$SRC_H5LS_TESTFILES/tsoftlinks-nodangle-1.ls
+$SRC_H5LS_TESTFILES/thlinks-nodangle-1.ls
+$SRC_H5LS_TESTFILES/tgroup.ls
+$SRC_H5LS_TESTFILES/tgroup-1.ls
+$SRC_H5LS_TESTFILES/tgroup-2.ls
+$SRC_H5LS_TESTFILES/tgroup-3.ls
+$SRC_H5LS_TESTFILES/thlink-1.ls
+$SRC_H5LS_TESTFILES/tloop-1.ls
+$SRC_H5LS_TESTFILES/tnestcomp-1.ls
+$SRC_H5LS_TESTFILES/tnestcomp-2.ls
+$SRC_H5LS_TESTFILES/tnestcomp-3.ls
+$SRC_H5LS_TESTFILES/tnestcomp-4.ls
+$SRC_H5LS_TESTFILES/tsaf.ls
+$SRC_H5LS_TESTFILES/tslink-1.ls
+$SRC_H5LS_TESTFILES/tstr-1.ls
+$SRC_H5LS_TESTFILES/tudlink-1.ls
+$SRC_H5LS_TESTFILES/tvldtypes1.ls
+$SRC_H5LS_TESTFILES/tvldtypes2le.ls
+$SRC_H5LS_TESTFILES/tvldtypes2be.ls
+"
+
 
 # RUNSERIAL is used. Check if it can return exit code from executalbe correctly.
 if [ -n "$RUNSERIAL_NOEXITCODE" ]; then
@@ -45,6 +149,31 @@ if [ -n "$RUNSERIAL_NOEXITCODE" ]; then
     h5haveexitcode=no
 fi
 
+#
+# copy test files and expected output files from source dirs to test dir
+#
+COPY_TESTFILES="$LIST_HDF5_TEST_FILES $LIST_OTHER_TEST_FILES"
+
+COPY_TESTFILES_TO_TESTDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_TESTFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            if [ -a $tstfile ]; then
+                $CP -f $tstfile $TESTDIR
+            else
+                echo "Error: FAILED to copy $tstfile"
+                echo "       $tstfile doesn't exist!"
+                exit $EXIT_FAILURE
+            fi
+        fi
+    done
+}
+
 # Print a line-line message left justified in a field of 70 characters
 # beginning with the word "Testing".
 TESTING() {
@@ -52,89 +181,8 @@ TESTING() {
     echo "Testing $* $SPACES" |cut -c1-70 |tr -d '\012'
 }
 
-# Some systems will dump some messages to stdout for various reasons.
-# Remove them from the stdout result file.
-# $1 is the file name of the file to be filtered.
-# Cases of filter needed:
-# 1. Sandia Red-Storm
-#    yod always prints these two lines at the beginning.
-#    LibLustre: NAL NID: 0004a605 (5)
-#    Lustre: OBD class driver Build Version: 1, info at clusterfs.com
-# 2. LANL Lambda
-#    mpijob mirun -np always add an extra line at the end like:
-#    P4 procgroup file is /users/acheng/.lsbatch/host10524.l82
-STDOUT_FILTER() {
-    result_file=$1
-    tmp_file=/tmp/h5test_tmp_$$
-    # Filter Sandia Red-Storm yod messages.
-    cp $result_file $tmp_file
-    sed -e '/^LibLustre:/d' -e '/^Lustre:/d' \
-	< $tmp_file > $result_file
-    # Filter LANL Lambda mpirun message.
-    cp $result_file $tmp_file
-    sed -e '/^P4 procgroup file is/d' \
-	< $tmp_file > $result_file
-    # cleanup
-    rm -f $tmp_file
-}
-
-# Some systems will dump some messages to stderr for various reasons.
-# Remove them from the stderr result file.
-# $1 is the file name of the file to be filtered.
-# Cases of filter needed:
-# 1. MPE:
-# In parallel mode and if MPE library is used, it prints the following
-# two message lines whether the MPE tracing is used or not.
-#    Writing logfile.
-#    Finished writing logfile.
-# 2. LANL MPI:
-# The LANL MPI will print some messages like the following,
-#    LA-MPI: *** mpirun (1.5.10)
-#    LA-MPI: *** 3 process(es) on 2 host(s): 2*fln21 1*fln22
-#    LA-MPI: *** libmpi (1.5.10)
-#    LA-MPI: *** Copyright 2001-2004, ACL, Los Alamos National Laboratory
-# 3. h5diff debug output:
-#    Debug output all have prefix "h5diff debug: ".
-# 4. AIX system prints messages like these when it is aborting:
-#    ERROR: 0031-300  Forcing all remote tasks to exit due to exit code 1 in task 0
-#    ERROR: 0031-250  task 4: Terminated
-#    ERROR: 0031-250  task 3: Terminated
-#    ERROR: 0031-250  task 2: Terminated
-#    ERROR: 0031-250  task 1: Terminated
-# 5. LLNL Blue-Gene mpirun prints messages like there when it exit non-zero:
-#    <Apr 12 15:01:49.075658> BE_MPI (ERROR): The error message in the job record is as follows:
-#    <Apr 12 15:01:49.075736> BE_MPI (ERROR):   "killed by exit(1) on node 0"
-
-
-STDERR_FILTER() {
-    result_file=$1
-    tmp_file=/tmp/h5test_tmp_$$
-    # Filter LLNL Blue-Gene error messages in both serial and parallel modes
-    # since mpirun is used in both modes.
-    cp $result_file $tmp_file
-    sed -e '/ BE_MPI (ERROR): /d' \
-	< $tmp_file > $result_file
-    # Filter MPE messages
-    if test -n "$pmode"; then
-	cp $result_file $tmp_file
-	sed -e '/^Writing logfile./d' -e '/^Finished writing logfile./d' \
-	    < $tmp_file > $result_file
-    fi
-    # Filter LANL MPI messages
-    # and LLNL srun messages
-    # and AIX error messages
-    if test -n "$pmode"; then
-	cp $result_file $tmp_file
-	sed -e '/^LA-MPI:/d' -e '/^srun:/d' -e '/^ERROR:/d' \
-	    < $tmp_file > $result_file
-    fi
-    # Filter h5diff debug output
-	cp $result_file $tmp_file
-	sed -e '/^h5diff debug: /d' \
-	    < $tmp_file > $result_file
-    # clean up temporary files.
-    rm -f $tmp_file
-}
+# Source in the output filter function definitions.
+. $srcdir/../../bin/output_filter.sh
 
 # Run a test and print PASS or *FAIL*. For now, if h5ls can complete
 # with exit status 0, consider it pass. If a test fails then increment
@@ -145,9 +193,9 @@ STDERR_FILTER() {
 # $1 -- actual output filename to use
 # $2 and on -- argument for the h5ls tool
 TOOLTEST() {
-    expect="$srcdir/../testfiles/$1"
-    actual="../testfiles/`basename $1 .ls`.out"
-    actual_err="../testfiles/`basename $1 .ls`.err"
+    expect="$TESTDIR/$1"
+    actual="$TESTDIR/`basename $1 .ls`.out"
+    actual_err="$TESTDIR/`basename $1 .ls`.err"
     actual_sav=${actual}-sav
     actual_err_sav=${actual_err}-sav
     shift
@@ -159,10 +207,7 @@ TOOLTEST() {
     # any unexpected output from that stream too.
     TESTING $H5LS $@
     (
-	echo "#############################"
-	echo " output for '$H5LS $@'" 
-	echo "#############################"
-	cd $srcdir/../testfiles
+	cd $TESTDIR
         $RUNSERIAL $H5LS_BIN "$@"
     ) >$actual 2>$actual_err 
     
@@ -207,6 +252,8 @@ TOOLTEST() {
 ###			  T H E   T E S T S                                ###
 ##############################################################################
 ##############################################################################
+# prepare for test
+COPY_TESTFILES_TO_TESTDIR
 
 # Toss in a bunch of tests.  Not sure if they are the right kinds.
 # test the help syntax
diff --git a/tools/h5repack/CMakeLists.txt b/tools/h5repack/CMakeLists.txt
index 833466e..7fbf834 100644
--- a/tools/h5repack/CMakeLists.txt
+++ b/tools/h5repack/CMakeLists.txt
@@ -40,29 +40,11 @@ IF (BUILD_TESTING)
   TARGET_NAMING (testh5repack_detect_szip ${LIB_TYPE})
   TARGET_LINK_LIBRARIES (testh5repack_detect_szip ${HDF5_LIB_TARGET} ${HDF5_TOOLS_LIB_TARGET} ${HDF5_TEST_LIB_TARGET})
 
-  ADD_TEST (NAME testh5repack_detect_szip COMMAND $<TARGET_FILE:testh5repack_detect_szip>)
-  IF (HDF5_ENABLE_SZIP_SUPPORT)
-    IF (HDF5_ENABLE_SZIP_ENCODING)
-      SET (passRegex "yes")
-      SET_TESTS_PROPERTIES (testh5repack_detect_szip PROPERTIES PASS_REGULAR_EXPRESSION "yes")
-    ELSE (HDF5_ENABLE_SZIP_ENCODING)
-      SET (passRegex "no")
-      SET_TESTS_PROPERTIES (testh5repack_detect_szip PROPERTIES PASS_REGULAR_EXPRESSION "no")
-    ENDIF (HDF5_ENABLE_SZIP_ENCODING)
-  ELSE (HDF5_ENABLE_SZIP_SUPPORT)
-    SET (passRegex "no")
-    SET_TESTS_PROPERTIES (testh5repack_detect_szip PROPERTIES PASS_REGULAR_EXPRESSION "no")
-  ENDIF (HDF5_ENABLE_SZIP_SUPPORT)
-
   ADD_EXECUTABLE (h5repacktest ${REPACK_COMMON_SRCS} ${HDF5_TOOLS_H5REPACK_SOURCE_DIR}/h5repacktst.c)
   TARGET_NAMING (h5repacktest ${LIB_TYPE})
   TARGET_LINK_LIBRARIES (h5repacktest  ${HDF5_TOOLS_LIB_TARGET} ${HDF5_TEST_LIB_TARGET})
 
-  ADD_TEST (NAME h5repacktest COMMAND $<TARGET_FILE:h5repacktest>)
-  SET_TESTS_PROPERTIES (h5repacktest PROPERTIES DEPENDS testh5repack_detect_szip)
-
   IF (HDF5_TEST_VFD)
-
     SET (VFD_LIST
         sec2
         stdio
@@ -78,7 +60,7 @@ IF (BUILD_TESTING)
 
     MACRO (ADD_VFD_TEST vfdname resultcode)
       ADD_TEST (
-        NAME VFD-${vfdname}-h5repacktest 
+        NAME H5REPACK-VFD-${vfdname}-h5repacktest 
         COMMAND "${CMAKE_COMMAND}"
             -D "TEST_PROGRAM=$<TARGET_FILE:h5repacktest>"
             -D "TEST_ARGS:STRING="
@@ -88,13 +70,11 @@ IF (BUILD_TESTING)
             -D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
             -P "${HDF5_RESOURCES_DIR}/vfdTest.cmake"
       )
+      IF (NOT "${last_test}" STREQUAL "")
+        SET_TESTS_PROPERTIES (H5REPACK-VFD-${vfdname}-h5repacktest PROPERTIES DEPENDS ${last_test})
+      ENDIF (NOT "${last_test}" STREQUAL "")
+      SET (last_test "H5REPACK-VFD-${vfdname}-h5repacktest")
     ENDMACRO (ADD_VFD_TEST)
-  
-    # Run test with different Virtual File Driver
-    FOREACH (vfd ${VFD_LIST})
-      ADD_VFD_TEST (${vfd} 0)
-    ENDFOREACH (vfd ${VFD_LIST})
-
   ENDIF (HDF5_TEST_VFD)
     
   # --------------------------------------------------------------------
@@ -381,6 +361,30 @@ IF (BUILD_TESTING)
   SET (FILE18 h5repack_layout2.h5)
   SET (FILE_REF h5repack_refs.h5)
 
+  ADD_TEST (NAME H5REPACK-testh5repack_detect_szip COMMAND $<TARGET_FILE:testh5repack_detect_szip>)
+  IF (HDF5_ENABLE_SZIP_SUPPORT)
+    IF (HDF5_ENABLE_SZIP_ENCODING)
+      SET (passRegex "yes")
+      SET_TESTS_PROPERTIES (H5REPACK-testh5repack_detect_szip PROPERTIES PASS_REGULAR_EXPRESSION "yes")
+    ELSE (HDF5_ENABLE_SZIP_ENCODING)
+      SET (passRegex "no")
+      SET_TESTS_PROPERTIES (H5REPACK-testh5repack_detect_szip PROPERTIES PASS_REGULAR_EXPRESSION "no")
+    ENDIF (HDF5_ENABLE_SZIP_ENCODING)
+  ELSE (HDF5_ENABLE_SZIP_SUPPORT)
+    SET (passRegex "no")
+    SET_TESTS_PROPERTIES (H5REPACK-testh5repack_detect_szip PROPERTIES PASS_REGULAR_EXPRESSION "no")
+  ENDIF (HDF5_ENABLE_SZIP_SUPPORT)
+  IF (NOT "${last_test}" STREQUAL "")
+    SET_TESTS_PROPERTIES (H5REPACK-testh5repack_detect_szip PROPERTIES DEPENDS ${last_test})
+  ENDIF (NOT "${last_test}" STREQUAL "")
+  SET (last_test "H5REPACK-testh5repack_detect_szip")
+
+  ADD_TEST (NAME H5REPACK-h5repacktest COMMAND $<TARGET_FILE:h5repacktest>)
+  IF (NOT "${last_test}" STREQUAL "")
+    SET_TESTS_PROPERTIES (H5REPACK-h5repacktest PROPERTIES DEPENDS ${last_test})
+  ENDIF (NOT "${last_test}" STREQUAL "")
+  SET (last_test "H5REPACK-h5repacktest")
+
 #
 # The tests
 # We use the files generated by h5repacktst
@@ -395,393 +399,396 @@ IF (BUILD_TESTING)
 # filters are defined.
 
 # detect whether the encoder is present. 
-SET (USE_FILTER_SZIP_ENCODER "no")
-IF (HDF5_ENABLE_SZIP_ENCODING)
-  SET (USE_FILTER_SZIP_ENCODER ${testh5repack_detect_szip})
-ENDIF (HDF5_ENABLE_SZIP_ENCODING)
-
-IF (H5_HAVE_FILTER_DEFLATE)
-  SET (USE_FILTER_DEFLATE "true")
-ENDIF (H5_HAVE_FILTER_DEFLATE)
-
-IF (H5_HAVE_FILTER_SZIP)
-  SET (USE_FILTER_SZIP "true")
-ENDIF (H5_HAVE_FILTER_SZIP)
-
-IF (H5_HAVE_FILTER_SHUFFLE)
-  SET (USE_FILTER_SHUFFLE "true")
-ENDIF (H5_HAVE_FILTER_SHUFFLE)
-
-IF (H5_HAVE_FILTER_FLETCHER32)
-  SET (USE_FILTER_FLETCHER32 "true")
-ENDIF (H5_HAVE_FILTER_FLETCHER32)
-
-IF (H5_HAVE_FILTER_NBIT)
-  SET (USE_FILTER_NBIT "true")
-ENDIF (H5_HAVE_FILTER_NBIT)
-
-IF (H5_HAVE_FILTER_SCALEOFFSET)
-  SET (USE_FILTER_SCALEOFFSET "true")
-ENDIF (H5_HAVE_FILTER_SCALEOFFSET)
+  SET (USE_FILTER_SZIP_ENCODER "no")
+  IF (HDF5_ENABLE_SZIP_ENCODING)
+    SET (USE_FILTER_SZIP_ENCODER ${testh5repack_detect_szip})
+  ENDIF (HDF5_ENABLE_SZIP_ENCODING)
+
+  IF (H5_HAVE_FILTER_DEFLATE)
+    SET (USE_FILTER_DEFLATE "true")
+  ENDIF (H5_HAVE_FILTER_DEFLATE)
+
+  IF (H5_HAVE_FILTER_SZIP)
+    SET (USE_FILTER_SZIP "true")
+  ENDIF (H5_HAVE_FILTER_SZIP)
+
+  IF (H5_HAVE_FILTER_SHUFFLE)
+    SET (USE_FILTER_SHUFFLE "true")
+  ENDIF (H5_HAVE_FILTER_SHUFFLE)
+
+  IF (H5_HAVE_FILTER_FLETCHER32)
+    SET (USE_FILTER_FLETCHER32 "true")
+  ENDIF (H5_HAVE_FILTER_FLETCHER32)
+
+  IF (H5_HAVE_FILTER_NBIT)
+    SET (USE_FILTER_NBIT "true")
+  ENDIF (H5_HAVE_FILTER_NBIT)
+
+  IF (H5_HAVE_FILTER_SCALEOFFSET)
+    SET (USE_FILTER_SCALEOFFSET "true")
+  ENDIF (H5_HAVE_FILTER_SCALEOFFSET)
   
 # copy files (these files have no filters) 
-ADD_H5_TEST (fill "TEST" ${FILE0})
-ADD_H5_TEST (objs "TEST" ${FILE1})
-ADD_H5_TEST (attr "TEST" ${FILE2})
-ADD_H5_TEST (hlink "TEST" ${FILE3})
-ADD_H5_TEST (layout "TEST" ${FILE4})
-ADD_H5_TEST (early "TEST" ${FILE5})
+  ADD_H5_TEST (fill "TEST" ${FILE0})
+  ADD_H5_TEST (objs "TEST" ${FILE1})
+  ADD_H5_TEST (attr "TEST" ${FILE2})
+  ADD_H5_TEST (hlink "TEST" ${FILE3})
+  ADD_H5_TEST (layout "TEST" ${FILE4})
+  ADD_H5_TEST (early "TEST" ${FILE5})
 
 # use $FILE4 to write some filters  (this file has  no filters)
 
 # gzip with individual object
-SET (arg ${FILE4} -f dset1:GZIP=1  -l dset1:CHUNK=20x10)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_DEFLATE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_DEFLATE)
-ADD_H5_TEST (gzip_individual ${TESTTYPE} ${arg})
+  SET (arg ${FILE4} -f dset1:GZIP=1  -l dset1:CHUNK=20x10)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_DEFLATE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_DEFLATE)
+  ADD_H5_TEST (gzip_individual ${TESTTYPE} ${arg})
   
 # gzip for all 
-SET (arg ${FILE4} -f GZIP=1)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_DEFLATE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_DEFLATE)
-ADD_H5_TEST (gzip_all ${TESTTYPE} ${arg})
+  SET (arg ${FILE4} -f GZIP=1)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_DEFLATE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_DEFLATE)
+  ADD_H5_TEST (gzip_all ${TESTTYPE} ${arg})
 
 # szip with individual object
-SET (arg ${FILE4} -f dset2:SZIP=8,EC  -l dset2:CHUNK=20x10)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP)
-ADD_H5_TEST (szip_individual ${TESTTYPE} ${arg}) 
+  SET (arg ${FILE4} -f dset2:SZIP=8,EC  -l dset2:CHUNK=20x10)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP)
+  ADD_H5_TEST (szip_individual ${TESTTYPE} ${arg}) 
 
 # szip for all
-SET (arg ${FILE4} -f SZIP=8,NN)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP)
-ADD_H5_TEST (szip_all ${TESTTYPE} ${arg}) 
+  SET (arg ${FILE4} -f SZIP=8,NN)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP)
+  ADD_H5_TEST (szip_all ${TESTTYPE} ${arg}) 
 
 # shuffle with individual object
-SET (arg ${FILE4} -f dset2:SHUF  -l dset2:CHUNK=20x10)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_SHUFFLE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_SHUFFLE)
-ADD_H5_TEST (shuffle_individual ${TESTTYPE} ${arg}) 
+  SET (arg ${FILE4} -f dset2:SHUF  -l dset2:CHUNK=20x10)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_SHUFFLE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_SHUFFLE)
+  ADD_H5_TEST (shuffle_individual ${TESTTYPE} ${arg}) 
 
 # shuffle for all
-SET (arg ${FILE4} -f SHUF)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_SHUFFLE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_SHUFFLE)
-ADD_H5_TEST (shuffle_all ${TESTTYPE} ${arg})
+  SET (arg ${FILE4} -f SHUF)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_SHUFFLE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_SHUFFLE)
+  ADD_H5_TEST (shuffle_all ${TESTTYPE} ${arg})
   
 # fletcher32  with individual object
-SET (arg ${FILE4} -f dset2:FLET  -l dset2:CHUNK=20x10)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_FLETCHER32)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_FLETCHER32)
-ADD_H5_TEST (fletcher_individual ${TESTTYPE} ${arg})
+  SET (arg ${FILE4} -f dset2:FLET  -l dset2:CHUNK=20x10)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_FLETCHER32)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_FLETCHER32)
+  ADD_H5_TEST (fletcher_individual ${TESTTYPE} ${arg})
 
 # fletcher32 for all
-SET (arg ${FILE4} -f FLET)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_FLETCHER32)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_FLETCHER32)
-ADD_H5_TEST (fletcher_all ${TESTTYPE} ${arg})
+  SET (arg ${FILE4} -f FLET)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_FLETCHER32)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_FLETCHER32)
+  ADD_H5_TEST (fletcher_all ${TESTTYPE} ${arg})
 
 # all filters
-SET (arg ${FILE4} -f dset2:SHUF -f dset2:FLET -f dset2:SZIP=8,NN -f dset2:GZIP=1 -l dset2:CHUNK=20x10)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP OR NOT USE_FILTER_SHUFFLE OR NOT USE_FILTER_FLETCHER32 OR NOT USE_FILTER_DEFLATE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP OR NOT USE_FILTER_SHUFFLE OR NOT USE_FILTER_FLETCHER32 OR NOT USE_FILTER_DEFLATE)
-ADD_H5_TEST (all_filters ${TESTTYPE} ${arg})
+  SET (arg ${FILE4} -f dset2:SHUF -f dset2:FLET -f dset2:SZIP=8,NN -f dset2:GZIP=1 -l dset2:CHUNK=20x10)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP OR NOT USE_FILTER_SHUFFLE OR NOT USE_FILTER_FLETCHER32 OR NOT USE_FILTER_DEFLATE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP OR NOT USE_FILTER_SHUFFLE OR NOT USE_FILTER_FLETCHER32 OR NOT USE_FILTER_DEFLATE)
+  ADD_H5_TEST (all_filters ${TESTTYPE} ${arg})
 
 # verbose gzip with individual object
-SET (arg ${FILE11} -v -f /dset_deflate:GZIP=9)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_DEFLATE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_DEFLATE)
-ADD_H5_CMP_TEST (gzip_verbose_filters "O?...ing file[^\n]+\n" ${TESTTYPE} 0 ${arg})
+  SET (arg ${FILE11} -v -f /dset_deflate:GZIP=9)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_DEFLATE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_DEFLATE)
+  ADD_H5_CMP_TEST (gzip_verbose_filters "O?...ing file[^\n]+\n" ${TESTTYPE} 0 ${arg})
   
 ###########################################################
 # the following tests assume the input files have filters
 ###########################################################
 
 # szip copy
-SET (arg ${FILE7})
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP)
-ADD_H5_TEST (szip_copy ${TESTTYPE} ${arg})
+  SET (arg ${FILE7})
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP)
+  ADD_H5_TEST (szip_copy ${TESTTYPE} ${arg})
   
 # szip remove
-SET (arg ${FILE7} --filter=dset_szip:NONE)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP)
-ADD_H5_TEST (szip_remove ${TESTTYPE} ${arg})
+  SET (arg ${FILE7} --filter=dset_szip:NONE)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP)
+  ADD_H5_TEST (szip_remove ${TESTTYPE} ${arg})
   
 # deflate copy
-SET (arg ${FILE8})
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_DEFLATE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_DEFLATE)
-ADD_H5_TEST (deflate_copy ${TESTTYPE} ${arg})
+  SET (arg ${FILE8})
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_DEFLATE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_DEFLATE)
+  ADD_H5_TEST (deflate_copy ${TESTTYPE} ${arg})
 
 # deflate remove
-SET (arg ${FILE8} -f dset_deflate:NONE)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_DEFLATE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_DEFLATE)
-ADD_H5_TEST (deflate_remove ${TESTTYPE} ${arg})
+  SET (arg ${FILE8} -f dset_deflate:NONE)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_DEFLATE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_DEFLATE)
+  ADD_H5_TEST (deflate_remove ${TESTTYPE} ${arg})
     
 # shuffle copy
-SET (arg ${FILE9})
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_SHUFFLE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_SHUFFLE)
-ADD_H5_TEST (shuffle_copy ${TESTTYPE} ${arg})
+  SET (arg ${FILE9})
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_SHUFFLE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_SHUFFLE)
+  ADD_H5_TEST (shuffle_copy ${TESTTYPE} ${arg})
 
 # shuffle remove
-SET (arg ${FILE9} -f dset_shuffle:NONE)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_SHUFFLE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_SHUFFLE)
-ADD_H5_TEST (shuffle_remove ${TESTTYPE} ${arg})
+  SET (arg ${FILE9} -f dset_shuffle:NONE)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_SHUFFLE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_SHUFFLE)
+  ADD_H5_TEST (shuffle_remove ${TESTTYPE} ${arg})
 
 # fletcher32 copy
-SET (arg ${FILE10})
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_FLETCHER32)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_FLETCHER32)
-ADD_H5_TEST (fletcher_copy ${TESTTYPE} ${arg})
+  SET (arg ${FILE10})
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_FLETCHER32)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_FLETCHER32)
+  ADD_H5_TEST (fletcher_copy ${TESTTYPE} ${arg})
 
 # fletcher32 remove
-SET (arg ${FILE10} -f dset_fletcher32:NONE)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_FLETCHER32)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_FLETCHER32)
-ADD_H5_TEST (fletcher_remove ${TESTTYPE} ${arg})
+  SET (arg ${FILE10} -f dset_fletcher32:NONE)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_FLETCHER32)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_FLETCHER32)
+  ADD_H5_TEST (fletcher_remove ${TESTTYPE} ${arg})
 
 # nbit copy
-SET (arg ${FILE12})
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_NBIT)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_NBIT)
-ADD_H5_TEST (nbit_copy ${TESTTYPE} ${arg})
+  SET (arg ${FILE12})
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_NBIT)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_NBIT)
+  ADD_H5_TEST (nbit_copy ${TESTTYPE} ${arg})
 
 # nbit remove
-SET (arg ${FILE12} -f dset_nbit:NONE)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_NBIT)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_NBIT)
-ADD_H5_TEST (nbit_remove ${TESTTYPE} ${arg})
+  SET (arg ${FILE12} -f dset_nbit:NONE)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_NBIT)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_NBIT)
+  ADD_H5_TEST (nbit_remove ${TESTTYPE} ${arg})
 
 # nbit add
-SET (arg ${FILE12} -f dset_int31:NBIT)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_NBIT)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_NBIT)
-ADD_H5_TEST (nbit_add ${TESTTYPE} ${arg})
+  SET (arg ${FILE12} -f dset_int31:NBIT)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_NBIT)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_NBIT)
+  ADD_H5_TEST (nbit_add ${TESTTYPE} ${arg})
 
 # scaleoffset copy
-SET (arg ${FILE13})
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_SCALEOFFSET)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_SCALEOFFSET)
-ADD_H5_TEST (scale_copy ${TESTTYPE} ${arg})
+  SET (arg ${FILE13})
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_SCALEOFFSET)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_SCALEOFFSET)
+  ADD_H5_TEST (scale_copy ${TESTTYPE} ${arg})
 
 # scaleoffset add
-SET (arg ${FILE13} -f dset_none:SOFF=31,IN)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_SCALEOFFSET)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_SCALEOFFSET)
-ADD_H5_TEST (scale_add ${TESTTYPE} ${arg})
+  SET (arg ${FILE13} -f dset_none:SOFF=31,IN)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_SCALEOFFSET)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_SCALEOFFSET)
+  ADD_H5_TEST (scale_add ${TESTTYPE} ${arg})
 
 # scaleoffset remove
-SET (arg ${FILE13} -f dset_scaleoffset:NONE)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_SCALEOFFSET)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_SCALEOFFSET)
-ADD_H5_TEST (scale_remove ${TESTTYPE} ${arg})
+  SET (arg ${FILE13} -f dset_scaleoffset:NONE)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_SCALEOFFSET)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_SCALEOFFSET)
+  ADD_H5_TEST (scale_remove ${TESTTYPE} ${arg})
 
 # remove all  filters
-SET (arg ${FILE11} -f NONE)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_FLETCHER32 OR NOT USE_FILTER_DEFLATE OR NOT USE_FILTER_SZIP OR NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SHUFFLE OR NOT USE_FILTER_NBIT OR NOT USE_FILTER_SCALEOFFSET)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_FLETCHER32 OR NOT USE_FILTER_DEFLATE OR NOT USE_FILTER_SZIP OR NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SHUFFLE OR NOT USE_FILTER_NBIT OR NOT USE_FILTER_SCALEOFFSET)
-ADD_H5_TEST (remove_all ${TESTTYPE} ${arg})
+  SET (arg ${FILE11} -f NONE)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_FLETCHER32 OR NOT USE_FILTER_DEFLATE OR NOT USE_FILTER_SZIP OR NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SHUFFLE OR NOT USE_FILTER_NBIT OR NOT USE_FILTER_SCALEOFFSET)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_FLETCHER32 OR NOT USE_FILTER_DEFLATE OR NOT USE_FILTER_SZIP OR NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SHUFFLE OR NOT USE_FILTER_NBIT OR NOT USE_FILTER_SCALEOFFSET)
+  ADD_H5_TEST (remove_all ${TESTTYPE} ${arg})
 
 #filter conversions
-
-SET (arg ${FILE8} -f dset_deflate:SZIP=8,NN)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP OR NOT USE_FILTER_DEFLATE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP OR NOT USE_FILTER_DEFLATE)
-ADD_H5_TEST (deflate_convert ${TESTTYPE} ${arg}) 
-
-SET (arg ${FILE7} -f dset_szip:GZIP=1)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_SZIP OR NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_DEFLATE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_SZIP OR NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_DEFLATE)
-ADD_H5_TEST (szip_convert ${TESTTYPE} ${arg}) 
+  SET (arg ${FILE8} -f dset_deflate:SZIP=8,NN)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP OR NOT USE_FILTER_DEFLATE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_SZIP OR NOT USE_FILTER_DEFLATE)
+  ADD_H5_TEST (deflate_convert ${TESTTYPE} ${arg}) 
+
+  SET (arg ${FILE7} -f dset_szip:GZIP=1)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_SZIP OR NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_DEFLATE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_SZIP OR NOT USE_FILTER_SZIP_ENCODER OR NOT USE_FILTER_DEFLATE)
+  ADD_H5_TEST (szip_convert ${TESTTYPE} ${arg}) 
 
 #limit
-SET (arg ${FILE4} -f GZIP=1 -m 1024)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_DEFLATE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_DEFLATE)
-ADD_H5_TEST (deflate_limit ${TESTTYPE} ${arg})
+  SET (arg ${FILE4} -f GZIP=1 -m 1024)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_DEFLATE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_DEFLATE)
+  ADD_H5_TEST (deflate_limit ${TESTTYPE} ${arg})
 
 #file
-SET (arg ${FILE4} -e ${INFO_FILE})
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_DEFLATE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_DEFLATE)
-ADD_H5_TEST (deflate_file ${TESTTYPE} ${arg}) 
+  SET (arg ${FILE4} -e ${INFO_FILE})
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_DEFLATE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_DEFLATE)
+  ADD_H5_TEST (deflate_file ${TESTTYPE} ${arg}) 
 
 #########################################################
 # layout options (these files have no filters)
 #########################################################
-
-ADD_H5_TEST (dset2_chunk_20x10 "TEST" ${FILE4} --layout=dset2:CHUNK=20x10)
-ADD_H5_VERIFY_TEST (dset2_chunk_20x10 "TEST" 0 ${FILE4} dset2 CHUNKED)
-ADD_H5_TEST (chunk_20x10 "TEST" ${FILE4} -l CHUNK=20x10)
-ADD_H5_VERIFY_TEST (chunk_20x10 "TEST" 1 ${FILE4} null CHUNKED)
-ADD_H5_TEST (dset2_conti "TEST" ${FILE4} -l dset2:CONTI)
-ADD_H5_VERIFY_TEST (dset2_conti "TEST" 0 ${FILE4} dset2 CONTIGUOUS)
-ADD_H5_TEST (conti "TEST" ${FILE4} -l CONTI)
-ADD_H5_VERIFY_TEST (conti "TEST" 1 ${FILE4} null CONTIGUOUS)
-ADD_H5_TEST (dset2_compa "TEST" ${FILE4} -l dset2:COMPA)
-ADD_H5_VERIFY_TEST (dset2_compa "TEST" 0 ${FILE4} dset2 COMPACT)
-ADD_H5_TEST (compa "TEST" ${FILE4} -l COMPA)
-ADD_H5_VERIFY_TEST (compa "TEST" 1 ${FILE4} null COMPACT)
+  ADD_H5_TEST (dset2_chunk_20x10 "TEST" ${FILE4} --layout=dset2:CHUNK=20x10)
+  ADD_H5_VERIFY_TEST (dset2_chunk_20x10 "TEST" 0 ${FILE4} dset2 CHUNKED)
+  ADD_H5_TEST (chunk_20x10 "TEST" ${FILE4} -l CHUNK=20x10)
+  ADD_H5_VERIFY_TEST (chunk_20x10 "TEST" 1 ${FILE4} null CHUNKED)
+  ADD_H5_TEST (dset2_conti "TEST" ${FILE4} -l dset2:CONTI)
+  ADD_H5_VERIFY_TEST (dset2_conti "TEST" 0 ${FILE4} dset2 CONTIGUOUS)
+  ADD_H5_TEST (conti "TEST" ${FILE4} -l CONTI)
+  ADD_H5_VERIFY_TEST (conti "TEST" 1 ${FILE4} null CONTIGUOUS)
+  ADD_H5_TEST (dset2_compa "TEST" ${FILE4} -l dset2:COMPA)
+  ADD_H5_VERIFY_TEST (dset2_compa "TEST" 0 ${FILE4} dset2 COMPACT)
+  ADD_H5_TEST (compa "TEST" ${FILE4} -l COMPA)
+  ADD_H5_VERIFY_TEST (compa "TEST" 1 ${FILE4} null COMPACT)
 
 ################################################################
 # layout conversions (file has no filters)
 ###############################################################
-
-ADD_H5_TEST (dset_compa_conti "TEST" ${FILE4} -l dset_compact:CONTI)
-ADD_H5_VERIFY_TEST (dset_compa_conti "TEST" 0 ${FILE4} dset_compact CONTIGUOUS)
-ADD_H5_TEST (dset_compa_chunk "TEST" ${FILE4} -l dset_compact:CHUNK=2x5)
-ADD_H5_VERIFY_TEST (dset_compa_chunk "TEST" 0 ${FILE4} dset_compact CHUNKED)
-ADD_H5_TEST (dset_compa_compa "TEST" ${FILE4} -l dset_compact:COMPA)
-ADD_H5_VERIFY_TEST (dset_compa_compa "TEST" 0 ${FILE4} dset_compact COMPACT)
-ADD_H5_TEST (dset_conti_compa "TEST" ${FILE4} -l dset_contiguous:COMPA)
-ADD_H5_VERIFY_TEST (dset_conti_compa "TEST" 0 ${FILE4} dset_contiguous COMPACT)
-ADD_H5_TEST (dset_conti_chunk "TEST" ${FILE4} -l dset_contiguous:CHUNK=3x6)
-ADD_H5_VERIFY_TEST (dset_conti_chunk "TEST" 0 ${FILE4} dset_contiguous CHUNKED)
-ADD_H5_TEST (dset_conti_conti "TEST" ${FILE4} -l dset_contiguous:CONTI)
-ADD_H5_VERIFY_TEST (dset_conti_conti "TEST" 0 ${FILE4} dset_contiguous CONTIGUOUS)
-ADD_H5_TEST (chunk_compa "TEST" ${FILE4} -l dset_chunk:COMPA)
-ADD_H5_VERIFY_TEST (chunk_compa "TEST" 0 ${FILE4} dset_chunk COMPACT)
-ADD_H5_TEST (chunk_conti "TEST" ${FILE4} -l dset_chunk:CONTI)
-ADD_H5_VERIFY_TEST (chunk_conti "TEST" 0 ${FILE4} dset_chunk CONTIGUOUS)
-ADD_H5_TEST (chunk_18x13 "TEST" ${FILE4} -l dset_chunk:CHUNK=18x13)
-ADD_H5_VERIFY_TEST (chunk_18x13 "TEST" 0 ${FILE4} dset_chunk CHUNKED)
+  ADD_H5_TEST (dset_compa_conti "TEST" ${FILE4} -l dset_compact:CONTI)
+  ADD_H5_VERIFY_TEST (dset_compa_conti "TEST" 0 ${FILE4} dset_compact CONTIGUOUS)
+  ADD_H5_TEST (dset_compa_chunk "TEST" ${FILE4} -l dset_compact:CHUNK=2x5)
+  ADD_H5_VERIFY_TEST (dset_compa_chunk "TEST" 0 ${FILE4} dset_compact CHUNKED)
+  ADD_H5_TEST (dset_compa_compa "TEST" ${FILE4} -l dset_compact:COMPA)
+  ADD_H5_VERIFY_TEST (dset_compa_compa "TEST" 0 ${FILE4} dset_compact COMPACT)
+  ADD_H5_TEST (dset_conti_compa "TEST" ${FILE4} -l dset_contiguous:COMPA)
+  ADD_H5_VERIFY_TEST (dset_conti_compa "TEST" 0 ${FILE4} dset_contiguous COMPACT)
+  ADD_H5_TEST (dset_conti_chunk "TEST" ${FILE4} -l dset_contiguous:CHUNK=3x6)
+  ADD_H5_VERIFY_TEST (dset_conti_chunk "TEST" 0 ${FILE4} dset_contiguous CHUNKED)
+  ADD_H5_TEST (dset_conti_conti "TEST" ${FILE4} -l dset_contiguous:CONTI)
+  ADD_H5_VERIFY_TEST (dset_conti_conti "TEST" 0 ${FILE4} dset_contiguous CONTIGUOUS)
+  ADD_H5_TEST (chunk_compa "TEST" ${FILE4} -l dset_chunk:COMPA)
+  ADD_H5_VERIFY_TEST (chunk_compa "TEST" 0 ${FILE4} dset_chunk COMPACT)
+  ADD_H5_TEST (chunk_conti "TEST" ${FILE4} -l dset_chunk:CONTI)
+  ADD_H5_VERIFY_TEST (chunk_conti "TEST" 0 ${FILE4} dset_chunk CONTIGUOUS)
+  ADD_H5_TEST (chunk_18x13 "TEST" ${FILE4} -l dset_chunk:CHUNK=18x13)
+  ADD_H5_VERIFY_TEST (chunk_18x13 "TEST" 0 ${FILE4} dset_chunk CHUNKED)
 
 # test convert small size dataset ( < 1k) to compact layout without -m
-ADD_H5_TEST (contig_small_compa "TEST" ${FILE18} -l contig_small:COMPA)
-ADD_H5_VERIFY_TEST (contig_small_compa "TEST" 0 ${FILE18} contig_small COMPACT)
+  ADD_H5_TEST (contig_small_compa "TEST" ${FILE18} -l contig_small:COMPA)
+  ADD_H5_VERIFY_TEST (contig_small_compa "TEST" 0 ${FILE18} contig_small COMPACT)
 
-ADD_H5_TEST (contig_small_fixed_compa "TEST" ${FILE18} -l chunked_small_fixed:COMPA)
-ADD_H5_VERIFY_TEST (contig_small_fixed_compa "TEST" 0 ${FILE18} chunked_small_fixed COMPACT)
+  ADD_H5_TEST (contig_small_fixed_compa "TEST" ${FILE18} -l chunked_small_fixed:COMPA)
+  ADD_H5_VERIFY_TEST (contig_small_fixed_compa "TEST" 0 ${FILE18} chunked_small_fixed COMPACT)
 
 # Native option
 # Do not use FILE1, as the named dtype will be converted to native, and h5diff will
 # report a difference.
-ADD_H5_TEST (native_fill "TEST" ${FILE0} -n)
-ADD_H5_TEST (native_attr "TEST" ${FILE2} -n)
-
+  ADD_H5_TEST (native_fill "TEST" ${FILE0} -n)
+  ADD_H5_TEST (native_attr "TEST" ${FILE2} -n)
 
 # latest file format with long switches. use FILE4=h5repack_layout.h5 (no filters)
-SET (arg ${FILE4} --layout CHUNK=20x10 --filter GZIP=1 --minimum=10 --native --latest --compact=8 --indexed=6 --ssize=8[:dtype])
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_DEFLATE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_DEFLATE)
-ADD_H5_TEST (layout_long_switches ${TESTTYPE} ${arg})
-ADD_H5_VERIFY_TEST (layout_long_switches ${TESTTYPE} 1 ${FILE4} null CHUNKED)
+  SET (arg ${FILE4} --layout CHUNK=20x10 --filter GZIP=1 --minimum=10 --native --latest --compact=8 --indexed=6 --ssize=8[:dtype])
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_DEFLATE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_DEFLATE)
+  ADD_H5_TEST (layout_long_switches ${TESTTYPE} ${arg})
+  ADD_H5_VERIFY_TEST (layout_long_switches ${TESTTYPE} 1 ${FILE4} null CHUNKED)
 
 # latest file format with short switches. use FILE4=h5repack_layout.h5 (no filters)
-SET (arg ${FILE4} -l CHUNK=20x10 -f GZIP=1 -m 10 -n -L -c 8 -d 6 -s 8[:dtype])
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_DEFLATE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_DEFLATE)
-ADD_H5_TEST (layout_short_switches ${TESTTYPE} ${arg})
-ADD_H5_VERIFY_TEST (layout_short_switches ${TESTTYPE} 1 ${FILE4} null CHUNKED)
+  SET (arg ${FILE4} -l CHUNK=20x10 -f GZIP=1 -m 10 -n -L -c 8 -d 6 -s 8[:dtype])
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_DEFLATE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_DEFLATE)
+  ADD_H5_TEST (layout_short_switches ${TESTTYPE} ${arg})
+  ADD_H5_VERIFY_TEST (layout_short_switches ${TESTTYPE} 1 ${FILE4} null CHUNKED)
 
 # several global filters
-SET (arg ${FILE4} --filter GZIP=1 --filter SHUF)
-SET (TESTTYPE "TEST")
-IF (NOT USE_FILTER_DEFLATE OR NOT USE_FILTER_SHUFFLE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_DEFLATE OR NOT USE_FILTER_SHUFFLE)
-ADD_H5_TEST (global_filters ${TESTTYPE} ${arg})
+  SET (arg ${FILE4} --filter GZIP=1 --filter SHUF)
+  SET (TESTTYPE "TEST")
+  IF (NOT USE_FILTER_DEFLATE OR NOT USE_FILTER_SHUFFLE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_DEFLATE OR NOT USE_FILTER_SHUFFLE)
+  ADD_H5_TEST (global_filters ${TESTTYPE} ${arg})
 
 # syntax of -i infile -o outfile
 # latest file format with short switches. use FILE4=h5repack_layout.h5 (no filters)
-SET (arg ${FILE4} -l CHUNK=20x10 -f GZIP=1 -m 10 -n -L -c 8 -d 6 -s 8[:dtype])
-SET (TESTTYPE "LEGACY")
-IF (NOT USE_FILTER_DEFLATE)
-  SET (TESTTYPE "SKIP")
-ENDIF (NOT USE_FILTER_DEFLATE)
-#ADD_H5_TEST (old_style_layout_short_switches ${TESTTYPE} ${arg})
+  SET (arg ${FILE4} -l CHUNK=20x10 -f GZIP=1 -m 10 -n -L -c 8 -d 6 -s 8[:dtype])
+  SET (TESTTYPE "LEGACY")
+  IF (NOT USE_FILTER_DEFLATE)
+    SET (TESTTYPE "SKIP")
+  ENDIF (NOT USE_FILTER_DEFLATE)
+#  ADD_H5_TEST (old_style_layout_short_switches ${TESTTYPE} ${arg})
 
 # add a userblock to file
-SET (arg ${FILE1} -u ${PROJECT_BINARY_DIR}/testfiles/ublock.bin -b 2048)
-ADD_H5_TEST (add_userblock "TEST" ${arg})
+  SET (arg ${FILE1} -u ${PROJECT_BINARY_DIR}/testfiles/ublock.bin -b 2048)
+  ADD_H5_TEST (add_userblock "TEST" ${arg})
 
 # add alignment
-SET (arg ${FILE1} -t 1 -a 1)
-ADD_H5_TEST (add_alignment "TEST" ${arg})
+  SET (arg ${FILE1} -t 1 -a 1)
+  ADD_H5_TEST (add_alignment "TEST" ${arg})
 
 # Check repacking file with old version of layout message (should get upgraded
-#       to new version and be readable, etc.)
-ADD_H5_TEST (upgrade_layout "TEST" ${FILE14})
+# to new version and be readable, etc.)
+  ADD_H5_TEST (upgrade_layout "TEST" ${FILE14})
 
 # test for datum size > H5TOOLS_MALLOCSIZE
-ADD_H5_TEST (gt_mallocsize "TEST" ${FILE1} -f GZIP=1)
+  ADD_H5_TEST (gt_mallocsize "TEST" ${FILE1} -f GZIP=1)
 
 # Check repacking file with committed datatypes in odd configurations
-ADD_H5_TEST (committed_dt "TEST" ${FILE15})
+  ADD_H5_TEST (committed_dt "TEST" ${FILE15})
 
 # tests family driver (file is located in common testfiles folder, uses TOOLTEST1
-#ADD_H5_TEST ( family "FAMILY" ${FILE16})
+#  ADD_H5_TEST ( family "FAMILY" ${FILE16})
 
 # test various references (bug 1814)
-ADD_H5_TEST (bug1814 "TEST" ${FILE_REF})
+  ADD_H5_TEST (bug1814 "TEST" ${FILE_REF})
+
+  IF (HDF5_TEST_VFD)
+    # Run test with different Virtual File Driver
+    FOREACH (vfd ${VFD_LIST})
+      ADD_VFD_TEST (${vfd} 0)
+    ENDFOREACH (vfd ${VFD_LIST})
+  ENDIF (HDF5_TEST_VFD)
   
 ENDIF (BUILD_TESTING)
 
diff --git a/tools/h5repack/Makefile.in b/tools/h5repack/Makefile.in
index 1a0cd6a..0d749d3 100644
--- a/tools/h5repack/Makefile.in
+++ b/tools/h5repack/Makefile.in
@@ -195,6 +195,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -215,10 +216,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -262,7 +265,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/tools/h5repack/h5repack.c b/tools/h5repack/h5repack.c
index 6672b68..c2cecf1 100644
--- a/tools/h5repack/h5repack.c
+++ b/tools/h5repack/h5repack.c
@@ -105,7 +105,7 @@ int h5repack_init (pack_opt_t *options,
     return (options_table_init(&(options->op_tbl)));
 }
 
-
+
 /*-------------------------------------------------------------------------
 * Function: h5repack_end
 *
@@ -119,7 +119,7 @@ int h5repack_end  (pack_opt_t *options)
     return options_table_free(options->op_tbl);
 }
 
-
+
 /*-------------------------------------------------------------------------
 * Function: h5repack_addfilter
 *
@@ -167,7 +167,7 @@ int h5repack_addfilter(const char* str,
     return 0;
 }
 
-
+
 /*-------------------------------------------------------------------------
 * Function: h5repack_addlayout
 *
@@ -233,9 +233,9 @@ int h5repack_addlayout(const char* str,
     return 0;
 }
 
-/* Note: The below copy_named_datatype(), named_datatype_free(), copy_attr() 
- * were located in h5repack_copy.c as static prior to bugfix1726. 
- * Made shared functions as copy_attr() was needed in h5repack_refs.c. 
+/* Note: The below copy_named_datatype(), named_datatype_free(), copy_attr()
+ * were located in h5repack_copy.c as static prior to bugfix1726.
+ * Made shared functions as copy_attr() was needed in h5repack_refs.c.
  * However copy_attr() may be obsoleted when H5Acopy is available and put back
  * others to static in h5repack_copy.c.
  */
@@ -266,21 +266,21 @@ hid_t copy_named_datatype(hid_t type_in, hid_t fidout, named_dt_t **named_dt_hea
     if(H5Oget_info(type_in, &oinfo) < 0)
         goto error;
 
-    if(*named_dt_head_p) 
+    if(*named_dt_head_p)
     {
         /* Stack already exists, search for the datatype */
         while(dt && dt->addr_in != oinfo.addr)
             dt = dt->next;
 
         dt_ret = dt;
-    } 
-    else 
+    }
+    else
     {
         /* Create the stack */
         size_t  i;
 
         for(i=0; i<travt->nobjs; i++)
-            if(travt->objs[i].type == H5TRAV_TYPE_NAMED_DATATYPE) 
+            if(travt->objs[i].type == H5TRAV_TYPE_NAMED_DATATYPE)
             {
                 /* Push onto the stack */
                 if(NULL == (dt = (named_dt_t *) HDmalloc(sizeof(named_dt_t))))
@@ -293,7 +293,7 @@ hid_t copy_named_datatype(hid_t type_in, hid_t fidout, named_dt_t **named_dt_hea
                 dt->id_out = -1;
 
                 /* Check if this type is the one requested */
-                if(oinfo.addr == dt->addr_in) 
+                if(oinfo.addr == dt->addr_in)
                 {
                     HDassert(!dt_ret);
                     dt_ret = dt;
@@ -303,7 +303,7 @@ hid_t copy_named_datatype(hid_t type_in, hid_t fidout, named_dt_t **named_dt_hea
 
     /* Handle the case that the requested datatype was not found.  This is
      * possible if the datatype was committed anonymously in the input file. */
-    if(!dt_ret) 
+    if(!dt_ret)
     {
         /* Push the new datatype onto the stack */
         if(NULL == (dt_ret = (named_dt_t *) HDmalloc(sizeof(named_dt_t))))
@@ -318,7 +318,7 @@ hid_t copy_named_datatype(hid_t type_in, hid_t fidout, named_dt_t **named_dt_hea
 
     /* If the requested datatype does not yet exist in the output file, copy it
      * anonymously */
-    if(dt_ret->id_out < 0) 
+    if(dt_ret->id_out < 0)
     {
         if (options->use_native==1)
             dt_ret->id_out = h5tools_get_native_type(type_in);
@@ -360,7 +360,7 @@ int named_datatype_free(named_dt_t **named_dt_head_p, int ignore_err)
 {
     named_dt_t *dt = *named_dt_head_p;
 
-    while(dt) 
+    while(dt)
     {
         /* Pop the datatype off the stack and free it */
         if(H5Tclose(dt->id_out) < 0 && !ignore_err)
@@ -413,6 +413,8 @@ int copy_attr(hid_t loc_in,
     H5O_info_t oinfo;             /* object info */
     int        j;
     unsigned   u;
+    hbool_t    is_ref=0;
+    H5T_class_t type_class = -1;
 
     if(H5Oget_info(loc_in, &oinfo) < 0)
         goto error;
@@ -446,7 +448,7 @@ int copy_attr(hid_t loc_in,
 
             /* Copy named dt */
             if((wtype_id = copy_named_datatype(ftype_id, fidout, named_dt_head_p,
-                    travt, options)) < 0) 
+                    travt, options)) < 0)
             {
                 H5Fclose(fidout);
                 goto error;
@@ -462,6 +464,7 @@ int copy_attr(hid_t loc_in,
                 wtype_id = H5Tcopy(ftype_id);
         } /* end else */
 
+
         /* get the dataspace handle  */
         if((space_id = H5Aget_space(attr_id)) < 0)
             goto error;
@@ -478,15 +481,37 @@ int copy_attr(hid_t loc_in,
             goto error;
 
         /*-------------------------------------------------------------------------
-        * object references are a special case
-        * we cannot just copy the buffers, but instead we recreate the reference
-        * this is done on a second sweep of the file that just copies
-        * the referenced objects
+        * object references are a special case. We cannot just copy the buffers,
+        * but instead we recreate the reference.
+        * This is done on a second sweep of the file that just copies the referenced
+        * objects at copy_refs_attr()
         *-------------------------------------------------------------------------
         */
+        type_class = H5Tget_class(wtype_id);
+        is_ref = (type_class == H5T_REFERENCE);
+        if (type_class == H5T_VLEN ||type_class == H5T_ARRAY ) {
+        	hid_t base_type = -1;
+        	base_type = H5Tget_super(ftype_id);
+        	is_ref = (is_ref || (H5Tget_class(base_type)==H5T_REFERENCE));
+        	H5Tclose(base_type);
+        }
 
-        if(H5T_REFERENCE == H5Tget_class(wtype_id)) {
-            ;
+        if (type_class == H5T_COMPOUND) {
+        	int nmembers = H5Tget_nmembers(wtype_id) ;
+        	for (j=0; j<nmembers; j++) {
+        		hid_t mtid = H5Tget_member_type( wtype_id, j );
+        		H5T_class_t mtclass = H5Tget_class(mtid);
+        		H5Tclose(mtid);
+
+        		if (mtclass==H5T_REFERENCE) {
+        			is_ref = 1;
+        			break;
+        		}
+        	} /* for (j=0; i<nmembers; j++) */
+        } /* if (type_class == H5T_COMPOUND) */
+
+        if(is_ref) {
+            ; /* handled by copy_refs_attr() */
         }
         else {
             /*-------------------------------------------------------------------------
@@ -602,20 +627,20 @@ static int check_options(pack_opt_t *options)
             switch (options->layout_g)
             {
             case H5D_COMPACT:
-                strcpy(slayout,"compact");
+                HDstrcpy(slayout,"compact");
                 break;
             case H5D_CONTIGUOUS:
-                strcpy(slayout,"contiguous");
+                HDstrcpy(slayout,"contiguous");
                 break;
             case H5D_CHUNKED:
-                strcpy(slayout,"chunked");
+                HDstrcpy(slayout,"chunked");
                 break;
             case H5D_LAYOUT_ERROR:
             case H5D_NLAYOUTS:
                 error_msg("invalid layout\n");
                 return -1;
             default:
-                strcpy(slayout,"invalid layout\n");
+                HDstrcpy(slayout,"invalid layout\n");
                 return -1;
             }
             printf(" Apply %s layout to all\n", slayout);
diff --git a/tools/h5repack/h5repack.sh.in b/tools/h5repack/h5repack.sh.in
index f5cc615..88611ce 100755
--- a/tools/h5repack/h5repack.sh.in
+++ b/tools/h5repack/h5repack.sh.in
@@ -41,32 +41,11 @@ H5DUMP=../h5dump/h5dump         # The h5dump tool name
 H5DUMP_BIN=`pwd`/$H5DUMP        # The path of the h5dump tool binary
 
 GREP='grep'
+CP='cp'
 
 H5DETECTSZIP=testh5repack_detect_szip              
 H5DETECTSZIP_BIN=`pwd`/$H5DETECTSZIP    
 
-INFO_FILE=testfiles/h5repack.info
-
-FILE0=h5repack_fill.h5
-FILE1=h5repack_objs.h5
-FILE2=h5repack_attr.h5
-FILE3=h5repack_hlink.h5
-FILE4=h5repack_layout.h5
-FILE5=h5repack_early.h5
-FILE7=h5repack_szip.h5
-FILE8=h5repack_deflate.h5
-FILE9=h5repack_shuffle.h5
-FILE10=h5repack_fletcher.h5
-FILE11=h5repack_filters.h5
-FILE12=h5repack_nbit.h5
-FILE13=h5repack_soffset.h5
-FILE14=h5repack_layouto.h5      # A file with an older version of the layout message
-                                # (copy of test/tlayouto.h5)
-FILE15=h5repack_named_dtypes.h5
-FILE16=tfamily%05d.h5           # located in common testfiles folder
-FILE18=h5repack_layout2.h5
-FILE_REF=h5repack_refs.h5
-
 
 nerrors=0
 verbose=yes
@@ -77,7 +56,95 @@ if test -z "$srcdir"; then
    srcdir=.
 fi
 
+# source dirs
+SRC_TOOLS="$srcdir/.."
+SRC_TOOLS_TESTFILES="$SRC_TOOLS/testfiles"
+# testfiles source dirs for tools
+SRC_H5LS_TESTFILES="$SRC_TOOLS_TESTFILES"
+SRC_H5DUMP_TESTFILES="$SRC_TOOLS_TESTFILES"
+SRC_H5DIFF_TESTFILES="$SRC_TOOLS/h5diff/testfiles"
+SRC_H5COPY_TESTFILES="$SRC_TOOLS/h5copy/testfiles"
+SRC_H5REPACK_TESTFILES="$SRC_TOOLS/h5repack/testfiles"
+SRC_H5JAM_TESTFILES="$SRC_TOOLS/h5jam/testfiles"
+SRC_H5STAT_TESTFILES="$SRC_TOOLS/h5stat/testfiles"
+SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/h5import/testfiles"
+
+TESTDIR=./testfiles
+test -d $TESTDIR || mkdir $TESTDIR
+
+######################################################################
+# test files
+# --------------------------------------------------------------------
+# All the test files copy from source directory to test directory
+# NOTE: Keep this framework to add/remove test files.
+#       Any test files from other tools can be used in this framework.
+#       This list are also used for checking exist.
+#       Comment '#' without space can be used.
+# --------------------------------------------------------------------
+LIST_HDF5_TEST_FILES="
+$SRC_H5REPACK_TESTFILES/h5repack_attr.h5
+$SRC_H5REPACK_TESTFILES/h5repack_attr_refs.h5
+$SRC_H5REPACK_TESTFILES/h5repack_deflate.h5
+$SRC_H5REPACK_TESTFILES/h5repack_early.h5
+$SRC_H5REPACK_TESTFILES/h5repack_ext.h5
+$SRC_H5REPACK_TESTFILES/h5repack_fill.h5
+$SRC_H5REPACK_TESTFILES/h5repack_filters.h5
+$SRC_H5REPACK_TESTFILES/h5repack_fletcher.h5
+$SRC_H5REPACK_TESTFILES/h5repack_hlink.h5
+$SRC_H5REPACK_TESTFILES/h5repack_layout.h5
+$SRC_H5REPACK_TESTFILES/h5repack_layouto.h5
+$SRC_H5REPACK_TESTFILES/h5repack_layout2.h5
+$SRC_H5REPACK_TESTFILES/h5repack_named_dtypes.h5
+$SRC_H5REPACK_TESTFILES/h5repack_nbit.h5
+$SRC_H5REPACK_TESTFILES/h5repack_objs.h5
+$SRC_H5REPACK_TESTFILES/h5repack_refs.h5
+$SRC_H5REPACK_TESTFILES/h5repack_shuffle.h5
+$SRC_H5REPACK_TESTFILES/h5repack_soffset.h5
+$SRC_H5REPACK_TESTFILES/h5repack_szip.h5
+$SRC_TOOLS_TESTFILES/tfamily00000.h5
+$SRC_TOOLS_TESTFILES/tfamily00001.h5
+$SRC_TOOLS_TESTFILES/tfamily00002.h5
+$SRC_TOOLS_TESTFILES/tfamily00003.h5
+$SRC_TOOLS_TESTFILES/tfamily00004.h5
+$SRC_TOOLS_TESTFILES/tfamily00005.h5
+$SRC_TOOLS_TESTFILES/tfamily00006.h5
+$SRC_TOOLS_TESTFILES/tfamily00007.h5
+$SRC_TOOLS_TESTFILES/tfamily00008.h5
+$SRC_TOOLS_TESTFILES/tfamily00009.h5
+$SRC_TOOLS_TESTFILES/tfamily00010.h5
+"
+
+LIST_OTHER_TEST_FILES="
+$SRC_H5REPACK_TESTFILES/h5repack_ext.bin
+$SRC_H5REPACK_TESTFILES/ublock.bin
+$SRC_H5REPACK_TESTFILES/h5repack.info
+$SRC_TOOLS_TESTFILES/h5repack_filters.h5.ddl
+"
 
+#
+# copy test files and expected output files from source dirs to test dir
+#
+COPY_TESTFILES="$LIST_HDF5_TEST_FILES $LIST_OTHER_TEST_FILES"
+
+COPY_TESTFILES_TO_TESTDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_TESTFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            if [ -a $tstfile ]; then
+                $CP -f $tstfile $TESTDIR
+            else
+                echo "Error: FAILED to copy $tstfile"
+                echo "       $tstfile doesn't exist!"
+                exit $EXIT_FAILURE
+            fi
+        fi
+    done
+}
 
 # Print a line-line message left justified in a field of 70 characters
 # beginning with the word "Testing".
@@ -127,8 +194,7 @@ TOOLTEST()
 {
     echo $@
     TOOLTEST_MAIN $@
-    path=`pwd`
-    outfile=$path/out.$1
+    outfile=$TESTDIR/out.$1
     rm -f $outfile
 }
 
@@ -138,9 +204,8 @@ TOOLTEST_MAIN()
     # Run test.
     TESTING $H5REPACK $@
 
-    infile=$srcdir/testfiles/$1
-    path=`pwd`
-    outfile=$path/out.$1
+    infile=$TESTDIR/$1
+    outfile=$TESTDIR/out.$1
     shift
     $RUNSERIAL $H5REPACK_BIN "$@" $infile $outfile
     RET=$?
@@ -157,16 +222,15 @@ TOOLTEST_MAIN()
 # Verifying layouts of a dataset 
 VERIFY_LAYOUT_DSET()
 {
-    path=`pwd`
-    outfile=$path/out.$1
-    layoutfile=$path/layout.$1
+    outfile=$TESTDIR/out.$1
+    layoutfile=$TESTDIR/layout.$1
     dset=$2
     expectlayout=$3
     
     #---------------------------------
     # check the layout from a dataset
     VERIFY  "Layout"
-    $H5DUMP_BIN -d $dset -pH $outfile > $layoutfile
+    $RUNSERIAL $H5DUMP_BIN -d $dset -pH $outfile > $layoutfile
     $GREP $expectlayout $layoutfile > /dev/null
     if [ $? -eq 0 ]; then
         echo " PASSED"
@@ -183,9 +247,8 @@ VERIFY_LAYOUT_DSET()
 # Verifying layouts from entire file
 VERIFY_LAYOUT_ALL()
 {
-    path=`pwd`
-    outfile=$path/out.$1
-    layoutfile=$path/layout.$1
+    outfile=$TESTDIR/out.$1
+    layoutfile=$TESTDIR/layout.$1
     expectlayout=$2
     
     #---------------------------------
@@ -194,7 +257,7 @@ VERIFY_LAYOUT_ALL()
     VERIFY  "Layout "
         # if CONTIGUOUS
         if [ $expectlayout = "CONTIGUOUS" ]; then
-            $H5DUMP_BIN -pH $outfile > $layoutfile
+            $RUNSERIAL $H5DUMP_BIN -pH $outfile > $layoutfile
             $GREP "COMPACT" $layoutfile  > /dev/null
             if [ $? -eq 0 ]; then
                 echo " FAILED"
@@ -209,7 +272,7 @@ VERIFY_LAYOUT_ALL()
         else    
             # if COMPACT
             if [ $expectlayout = "COMPACT" ]; then
-                $H5DUMP_BIN -pH $outfile > $layoutfile
+                $RUNSERIAL $H5DUMP_BIN -pH $outfile > $layoutfile
                 $GREP "CHUNKED" $layoutfile  > /dev/null
                 if [ $? -eq 0 ]; then
                     echo " FAILED"
@@ -224,7 +287,7 @@ VERIFY_LAYOUT_ALL()
             else
                 # if CHUNKED
                 if [ $expectlayout = "CHUNKED" ]; then
-                    $H5DUMP_BIN -pH $outfile > $layoutfile
+                    $RUNSERIAL $H5DUMP_BIN -pH $outfile > $layoutfile
                     $GREP "CONTIGUOUS" $layoutfile  > /dev/null
                     if [ $? -eq 0 ]; then
                         echo " FAILED"
@@ -252,9 +315,8 @@ TOOLTEST0()
     # Run test.
     TESTING $H5REPACK $@
 
-    infile=$srcdir/testfiles/$1
-    path=`pwd`
-    outfile=$path/out.$1
+    infile=$TESTDIR/$1
+    outfile=$TESTDIR/out.$1
     shift
     $RUNSERIAL $H5REPACK_BIN -i $infile -o $outfile "$@"
     RET=$?
@@ -269,7 +331,7 @@ TOOLTEST0()
 }
 
 
-# same as TOOLTEST, but it uses the common testfiles at $srcdir/../testfiles/
+# same as TOOLTEST, but it uses without -i -o options
 # used to test the family driver, where these files reside
 #
 TOOLTEST1() 
@@ -277,9 +339,8 @@ TOOLTEST1()
     # Run test.
     TESTING $H5REPACK $@
 
-    infile=$srcdir/../testfiles/$1
-    path=`pwd`
-    outfile=$path/out.$1
+    infile=$TESTDIR/$1
+    outfile=$TESTDIR/out.$1
     shift
     $RUNSERIAL $H5REPACK_BIN "$@" $infile $outfile
     RET=$?
@@ -299,13 +360,12 @@ TOOLTESTV()
 {
     # Run test.
     TESTING $H5REPACK $@
-    expect="$srcdir/../testfiles/$1.ddl"
-    actual="../testfiles/`basename $1 .ddl`.out"
-    actual_err="../testfiles/`basename $1 .ddl`.err"
+    expect="$TESTDIR/$1.ddl"
+    actual="$TESTDIR/`basename $1 .ddl`.out"
+    actual_err="$TESTDIR/`basename $1 .ddl`.err"
 
-    infile=$srcdir/testfiles/$1
-    path=`pwd`
-    outfile=$path/out.$1
+    infile=$TESTDIR/$1
+    outfile=$TESTDIR/out.$1
     shift
     $RUNSERIAL $H5REPACK_BIN "$@" $infile $outfile >$actual 2>$actual_err
     cp $actual $actual_sav
@@ -324,6 +384,7 @@ TOOLTESTV()
    rm -f $actual $actual_err $actual_sav
 }
 
+# This is different from $srcdir/../../bin/output_filter.sh
 STDOUT_FILTER() {
     result_file=$1
     tmp_file=/tmp/h5test_tmp_$$
@@ -354,19 +415,25 @@ if test $USE_FILTER_SZIP = "yes"; then
 USE_FILTER_SZIP_ENCODER=`$RUNSERIAL $H5DETECTSZIP_BIN`
 fi
 
+##############################################################################
+###			  T H E   T E S T S                               
+##############################################################################
+# prepare for test
+COPY_TESTFILES_TO_TESTDIR
+
 # copy files (these files have no filters) 
-TOOLTEST $FILE0
-TOOLTEST $FILE1
-TOOLTEST $FILE2
-TOOLTEST $FILE3
-TOOLTEST $FILE4
-TOOLTEST $FILE5
+TOOLTEST h5repack_fill.h5
+TOOLTEST h5repack_objs.h5
+TOOLTEST h5repack_attr.h5
+TOOLTEST h5repack_hlink.h5
+TOOLTEST h5repack_layout.h5
+TOOLTEST h5repack_early.h5
 
 
-# use $FILE4 to write some filters  (this file has  no filters)
+# use h5repack_layout.h5 to write some filters  (this file has  no filters)
 
 # gzip with individual object
-arg="$FILE4 -f dset1:GZIP=1  -l dset1:CHUNK=20x10"
+arg="h5repack_layout.h5 -f dset1:GZIP=1  -l dset1:CHUNK=20x10"
 if test  $USE_FILTER_DEFLATE != "yes" ; then
  SKIP $arg
 else
@@ -374,7 +441,7 @@ else
 fi
   
 # gzip for all 
-arg="$FILE4 -f GZIP=1"
+arg="h5repack_layout.h5 -f GZIP=1"
 if test  $USE_FILTER_DEFLATE != "yes" ; then
  SKIP $arg
 else
@@ -382,7 +449,7 @@ else
 fi
 
 # szip with individual object
-arg="$FILE4 -f dset2:SZIP=8,EC  -l dset2:CHUNK=20x10"
+arg="h5repack_layout.h5 -f dset2:SZIP=8,EC  -l dset2:CHUNK=20x10"
 if test $USE_FILTER_SZIP_ENCODER != "yes" -o $USE_FILTER_SZIP != "yes" ; then
  SKIP $arg
 else
@@ -390,7 +457,7 @@ else
 fi
 
 # szip for all
-arg="$FILE4 -f SZIP=8,NN"
+arg="h5repack_layout.h5 -f SZIP=8,NN"
 if test $USE_FILTER_SZIP_ENCODER != "yes" -o $USE_FILTER_SZIP != "yes" ; then
  SKIP $arg
 else
@@ -398,7 +465,7 @@ else
 fi
 
 # shuffle with individual object
-arg="$FILE4 -f dset2:SHUF  -l dset2:CHUNK=20x10"
+arg="h5repack_layout.h5 -f dset2:SHUF  -l dset2:CHUNK=20x10"
 if test $USE_FILTER_SHUFFLE != "yes"  ; then
  SKIP $arg
 else
@@ -407,7 +474,7 @@ fi
   
 
 # shuffle for all
-arg="$FILE4 -f SHUF"
+arg="h5repack_layout.h5 -f SHUF"
 if test $USE_FILTER_SHUFFLE != "yes"  ; then
  SKIP $arg
 else
@@ -415,7 +482,7 @@ else
 fi
   
 # fletcher32  with individual object
-arg="$FILE4 -f dset2:FLET  -l dset2:CHUNK=20x10"
+arg="h5repack_layout.h5 -f dset2:FLET  -l dset2:CHUNK=20x10"
 if test $USE_FILTER_FLETCHER32 != "yes"  ; then
  SKIP $arg
 else
@@ -423,7 +490,7 @@ else
 fi
 
 # fletcher32 for all
-arg="$FILE4 -f FLET"
+arg="h5repack_layout.h5 -f FLET"
 if test $USE_FILTER_FLETCHER32 != "yes"  ; then
  SKIP $arg
 else
@@ -431,7 +498,7 @@ else
 fi
 
 # all filters
-arg="$FILE4 -f dset2:SHUF -f dset2:FLET -f dset2:SZIP=8,NN -f dset2:GZIP=1 -l dset2:CHUNK=20x10"
+arg="h5repack_layout.h5 -f dset2:SHUF -f dset2:FLET -f dset2:SZIP=8,NN -f dset2:GZIP=1 -l dset2:CHUNK=20x10"
 if test $USE_FILTER_SZIP_ENCODER != "yes" -o $USE_FILTER_SZIP != "yes" -o $USE_FILTER_SHUFFLE != "yes" -o $USE_FILTER_FLETCHER32 != "yes" -o $USE_FILTER_DEFLATE != "yes" ; then
  SKIP $arg
 else
@@ -439,7 +506,7 @@ else
 fi
 
 # verbose gzip with individual object
-arg="$FILE11 -v -f /dset_deflate:GZIP=9"
+arg="h5repack_filters.h5 -v -f /dset_deflate:GZIP=9"
 if test  $USE_FILTER_DEFLATE != "yes" ; then
  SKIP $arg
 else
@@ -451,7 +518,7 @@ fi
 ###########################################################
 
 # szip copy
-arg="$FILE7"
+arg="h5repack_szip.h5"
 if test $USE_FILTER_SZIP_ENCODER != "yes" -o $USE_FILTER_SZIP != "yes" ; then
  SKIP $arg
 else
@@ -459,7 +526,7 @@ else
 fi
   
 # szip remove
-arg="$FILE7 --filter=dset_szip:NONE"
+arg="h5repack_szip.h5 --filter=dset_szip:NONE"
 if test $USE_FILTER_SZIP_ENCODER != "yes" -o $USE_FILTER_SZIP != "yes" ; then
  SKIP $arg
 else
@@ -467,7 +534,7 @@ else
 fi
   
 # deflate copy
-arg="$FILE8"
+arg="h5repack_deflate.h5"
 if test $USE_FILTER_DEFLATE != "yes" ; then
  SKIP $arg
 else
@@ -475,7 +542,7 @@ else
 fi
 
 # deflate remove
-arg="$FILE8 -f dset_deflate:NONE"
+arg="h5repack_deflate.h5 -f dset_deflate:NONE"
 if test $USE_FILTER_DEFLATE != "yes" ; then
  SKIP $arg
 else
@@ -483,7 +550,7 @@ else
 fi
     
 # shuffle copy
-arg="$FILE9"
+arg="h5repack_shuffle.h5"
 if test $USE_FILTER_SHUFFLE != "yes" ; then
  SKIP $arg
 else
@@ -491,7 +558,7 @@ else
 fi
 
 # shuffle remove
-arg="$FILE9 -f dset_shuffle:NONE"
+arg="h5repack_shuffle.h5 -f dset_shuffle:NONE"
 if test $USE_FILTER_SHUFFLE != "yes" ; then
  SKIP $arg
 else
@@ -499,7 +566,7 @@ else
 fi
 
 # fletcher32 copy
-arg="$FILE10"
+arg="h5repack_fletcher.h5"
 if test $USE_FILTER_FLETCHER32 != "yes" ; then
  SKIP $arg
 else
@@ -507,7 +574,7 @@ else
 fi
 
 # fletcher32 remove
-arg="$FILE10 -f dset_fletcher32:NONE"
+arg="h5repack_fletcher.h5 -f dset_fletcher32:NONE"
 if test $USE_FILTER_FLETCHER32 != "yes" ; then
  SKIP $arg
 else
@@ -515,7 +582,7 @@ else
 fi        
 
 # nbit copy
-arg="$FILE12"
+arg="h5repack_nbit.h5"
 if test $USE_FILTER_NBIT != "yes" ; then
  SKIP $arg
 else
@@ -523,7 +590,7 @@ else
 fi
 
 # nbit remove
-arg="$FILE12 -f dset_nbit:NONE"
+arg="h5repack_nbit.h5 -f dset_nbit:NONE"
 if test $USE_FILTER_NBIT != "yes" ; then
  SKIP $arg
 else
@@ -531,7 +598,7 @@ else
 fi        
 
 # nbit add
-arg="$FILE12 -f dset_int31:NBIT"
+arg="h5repack_nbit.h5 -f dset_int31:NBIT"
 if test $USE_FILTER_NBIT != "yes" ; then
  SKIP $arg
 else
@@ -539,7 +606,7 @@ else
 fi
 
 # scaleoffset copy
-arg="$FILE13"
+arg="h5repack_soffset.h5"
 if test $USE_FILTER_SCALEOFFSET != "yes" ; then
  SKIP $arg
 else
@@ -547,7 +614,7 @@ else
 fi
 
 # scaleoffset add
-arg="$FILE13 -f dset_none:SOFF=31,IN"
+arg="h5repack_soffset.h5 -f dset_none:SOFF=31,IN"
 if test $USE_FILTER_SCALEOFFSET != "yes" ; then
  SKIP $arg
 else
@@ -555,7 +622,7 @@ else
 fi
 
 # scaleoffset remove
-arg="$FILE13 -f dset_scaleoffset:NONE"
+arg="h5repack_soffset.h5 -f dset_scaleoffset:NONE"
 if test $USE_FILTER_SCALEOFFSET != "yes" ; then
  SKIP $arg
 else
@@ -563,7 +630,7 @@ else
 fi        
 
 # remove all  filters
-arg="$FILE11 -f NONE"
+arg="h5repack_filters.h5 -f NONE"
 if test $USE_FILTER_FLETCHER32 != "yes" -o $USE_FILTER_DEFLATE != "yes" -o $USE_FILTER_SZIP != "yes" -o $USE_FILTER_SZIP_ENCODER != "yes" -o $USE_FILTER_SHUFFLE != "yes"  -o $USE_FILTER_NBIT != "yes"  -o $USE_FILTER_SCALEOFFSET != "yes"  ; then
  SKIP $arg
 else
@@ -572,14 +639,14 @@ fi
 
 #filter conversions
 
-arg="$FILE8 -f dset_deflate:SZIP=8,NN"
+arg="h5repack_deflate.h5 -f dset_deflate:SZIP=8,NN"
 if test $USE_FILTER_SZIP_ENCODER != "yes" -o $USE_FILTER_SZIP != "yes" -o $USE_FILTER_DEFLATE != "yes" ; then
  SKIP $arg
 else
  TOOLTEST $arg 
 fi
 
-arg="$FILE7 -f dset_szip:GZIP=1"
+arg="h5repack_szip.h5 -f dset_szip:GZIP=1"
 if test $USE_FILTER_SZIP != "yes" -o $USE_FILTER_SZIP_ENCODER != "yes"  -o $USE_FILTER_DEFLATE != "yes" ; then
  SKIP $arg
 else
@@ -588,7 +655,7 @@ fi
 
 
 #limit
-arg="$FILE4 -f GZIP=1 -m 1024"
+arg="h5repack_layout.h5 -f GZIP=1 -m 1024"
 if test $USE_FILTER_DEFLATE != "yes"  ; then
  SKIP $arg
 else
@@ -596,7 +663,7 @@ else
 fi
 
 #file
-arg="$FILE4 -e $INFO_FILE"
+arg="h5repack_layout.h5 -e $TESTDIR/h5repack.info"
 if test $USE_FILTER_DEFLATE != "yes" ; then
  SKIP $arg 
 else
@@ -606,90 +673,90 @@ fi
 #########################################################
 # layout options (these files have no filters)
 #########################################################
-TOOLTEST_MAIN $FILE4 --layout dset2:CHUNK=20x10
-VERIFY_LAYOUT_DSET $FILE4 dset2 CHUNKED
+TOOLTEST_MAIN h5repack_layout.h5 --layout dset2:CHUNK=20x10
+VERIFY_LAYOUT_DSET h5repack_layout.h5 dset2 CHUNKED
 
-TOOLTEST_MAIN $FILE4 -l CHUNK=20x10
-VERIFY_LAYOUT_ALL $FILE4 CHUNKED
+TOOLTEST_MAIN h5repack_layout.h5 -l CHUNK=20x10
+VERIFY_LAYOUT_ALL h5repack_layout.h5 CHUNKED
 
-TOOLTEST_MAIN $FILE4 -l dset2:CONTI
-VERIFY_LAYOUT_DSET $FILE4 dset2 CONTIGUOUS
+TOOLTEST_MAIN h5repack_layout.h5 -l dset2:CONTI
+VERIFY_LAYOUT_DSET h5repack_layout.h5 dset2 CONTIGUOUS
 
-TOOLTEST_MAIN $FILE4 -l CONTI
-VERIFY_LAYOUT_ALL $FILE4 CONTIGUOUS
+TOOLTEST_MAIN h5repack_layout.h5 -l CONTI
+VERIFY_LAYOUT_ALL h5repack_layout.h5 CONTIGUOUS
 
-TOOLTEST_MAIN $FILE4 -l dset2:COMPA
-VERIFY_LAYOUT_DSET $FILE4 dset2 COMPACT
+TOOLTEST_MAIN h5repack_layout.h5 -l dset2:COMPA
+VERIFY_LAYOUT_DSET h5repack_layout.h5 dset2 COMPACT
 
-TOOLTEST_MAIN $FILE4 -l COMPA
-VERIFY_LAYOUT_ALL $FILE4 COMPACT
+TOOLTEST_MAIN h5repack_layout.h5 -l COMPA
+VERIFY_LAYOUT_ALL h5repack_layout.h5 COMPACT
 
 ################################################################
 # layout conversions (file has no filters)
 ###############################################################
 
-TOOLTEST_MAIN $FILE4 -l dset_compact:CONTI
-VERIFY_LAYOUT_DSET $FILE4 dset_compact CONTIGUOUS
+TOOLTEST_MAIN h5repack_layout.h5 -l dset_compact:CONTI
+VERIFY_LAYOUT_DSET h5repack_layout.h5 dset_compact CONTIGUOUS
 
-TOOLTEST_MAIN $FILE4 -l dset_compact:CHUNK=2x5
-VERIFY_LAYOUT_DSET $FILE4 dset_compact CHUNKED
+TOOLTEST_MAIN h5repack_layout.h5 -l dset_compact:CHUNK=2x5
+VERIFY_LAYOUT_DSET h5repack_layout.h5 dset_compact CHUNKED
 
-TOOLTEST_MAIN $FILE4 -l dset_compact:COMPA
-VERIFY_LAYOUT_DSET $FILE4 dset_compact COMPACT
+TOOLTEST_MAIN h5repack_layout.h5 -l dset_compact:COMPA
+VERIFY_LAYOUT_DSET h5repack_layout.h5 dset_compact COMPACT
 
-TOOLTEST_MAIN $FILE4 -l dset_contiguous:COMPA
-VERIFY_LAYOUT_DSET $FILE4 dset_contiguous COMPACT
+TOOLTEST_MAIN h5repack_layout.h5 -l dset_contiguous:COMPA
+VERIFY_LAYOUT_DSET h5repack_layout.h5 dset_contiguous COMPACT
 
-TOOLTEST_MAIN $FILE4 -l dset_contiguous:CHUNK=3x6
-VERIFY_LAYOUT_DSET $FILE4 dset_contiguous CHUNKED
+TOOLTEST_MAIN h5repack_layout.h5 -l dset_contiguous:CHUNK=3x6
+VERIFY_LAYOUT_DSET h5repack_layout.h5 dset_contiguous CHUNKED
 
-TOOLTEST_MAIN $FILE4 -l dset_contiguous:CONTI
-VERIFY_LAYOUT_DSET $FILE4 dset_contiguous CONTIGUOUS
+TOOLTEST_MAIN h5repack_layout.h5 -l dset_contiguous:CONTI
+VERIFY_LAYOUT_DSET h5repack_layout.h5 dset_contiguous CONTIGUOUS
 
-TOOLTEST_MAIN $FILE4 -l dset_chunk:COMPA
-VERIFY_LAYOUT_DSET $FILE4 dset_chunk COMPACT
+TOOLTEST_MAIN h5repack_layout.h5 -l dset_chunk:COMPA
+VERIFY_LAYOUT_DSET h5repack_layout.h5 dset_chunk COMPACT
 
-TOOLTEST_MAIN $FILE4 -l dset_chunk:CONTI
-VERIFY_LAYOUT_DSET $FILE4 dset_chunk CONTIGUOUS
+TOOLTEST_MAIN h5repack_layout.h5 -l dset_chunk:CONTI
+VERIFY_LAYOUT_DSET h5repack_layout.h5 dset_chunk CONTIGUOUS
 
-TOOLTEST_MAIN $FILE4 -l dset_chunk:CHUNK=18x13
-VERIFY_LAYOUT_DSET $FILE4 dset_chunk CHUNKED
+TOOLTEST_MAIN h5repack_layout.h5 -l dset_chunk:CHUNK=18x13
+VERIFY_LAYOUT_DSET h5repack_layout.h5 dset_chunk CHUNKED
 
 # test convert small size dataset ( < 1k) to compact layout without -m
-TOOLTEST_MAIN $FILE18 -l contig_small:COMPA
-VERIFY_LAYOUT_DSET $FILE18 contig_small COMPACT
+TOOLTEST_MAIN h5repack_layout2.h5 -l contig_small:COMPA
+VERIFY_LAYOUT_DSET h5repack_layout2.h5 contig_small COMPACT
 
-TOOLTEST_MAIN $FILE18 -l chunked_small_fixed:COMPA
-VERIFY_LAYOUT_DSET $FILE18 chunked_small_fixed COMPACT
+TOOLTEST_MAIN h5repack_layout2.h5 -l chunked_small_fixed:COMPA
+VERIFY_LAYOUT_DSET h5repack_layout2.h5 chunked_small_fixed COMPACT
 
 # Native option
 # Do not use FILE1, as the named dtype will be converted to native, and h5diff will
 # report a difference.
-TOOLTEST $FILE0 -n
-TOOLTEST $FILE2 -n
+TOOLTEST h5repack_fill.h5 -n
+TOOLTEST h5repack_attr.h5 -n
 
 
 # latest file format with long switches. use FILE4=h5repack_layout.h5 (no filters)
-arg="$FILE4 --layout CHUNK=20x10 --filter GZIP=1 --minimum=10 --native --latest --compact=8 --indexed=6 --ssize=8[:dtype]"
+arg="h5repack_layout.h5 --layout CHUNK=20x10 --filter GZIP=1 --minimum=10 --native --latest --compact=8 --indexed=6 --ssize=8[:dtype]"
 if test $USE_FILTER_DEFLATE != "yes" ; then
  SKIP $arg
 else
  TOOLTEST_MAIN $arg
- VERIFY_LAYOUT_ALL $FILE4 CHUNKED
+ VERIFY_LAYOUT_ALL h5repack_layout.h5 CHUNKED
 fi
 
 # latest file format with short switches. use FILE4=h5repack_layout.h5 (no filters)
-arg="$FILE4 -l CHUNK=20x10 -f GZIP=1 -m 10 -n -L -c 8 -d 6 -s 8[:dtype]"
+arg="h5repack_layout.h5 -l CHUNK=20x10 -f GZIP=1 -m 10 -n -L -c 8 -d 6 -s 8[:dtype]"
 if test $USE_FILTER_DEFLATE != "yes" ; then
  SKIP $arg
 else
  TOOLTEST_MAIN $arg
- VERIFY_LAYOUT_ALL $FILE4 CHUNKED
+ VERIFY_LAYOUT_ALL h5repack_layout.h5 CHUNKED
 fi
 
 # several global filters
 
-arg="$FILE4 --filter GZIP=1 --filter SHUF"
+arg="h5repack_layout.h5 --filter GZIP=1 --filter SHUF"
 if test $USE_FILTER_DEFLATE != "yes" -o $USE_FILTER_SHUFFLE != "yes" ; then
  SKIP $arg
 else
@@ -698,7 +765,7 @@ fi
 
 # syntax of -i infile -o outfile
 # latest file format with short switches. use FILE4=h5repack_layout.h5 (no filters)
-arg="$FILE4 -l CHUNK=20x10 -f GZIP=1 -m 10 -n -L -c 8 -d 6 -s 8[:dtype]"
+arg="h5repack_layout.h5 -l CHUNK=20x10 -f GZIP=1 -m 10 -n -L -c 8 -d 6 -s 8[:dtype]"
 if test $USE_FILTER_DEFLATE != "yes" ; then
  SKIP $arg
 else
@@ -706,28 +773,32 @@ else
 fi 
 
 # add a userblock to file
-arg="$FILE1 -u ublock.bin -b 2048"
+arg="h5repack_objs.h5 -u ublock.bin -b 2048"
 TOOLTEST $arg
 
 # add alignment
-arg="$FILE1 -t 1 -a 1 "
+arg="h5repack_objs.h5 -t 1 -a 1 "
 TOOLTEST $arg
 
 # Check repacking file with old version of layout message (should get upgraded
 #       to new version and be readable, etc.)
-TOOLTEST $FILE14
+TOOLTEST h5repack_layouto.h5
 
 # test for datum size > H5TOOLS_MALLOCSIZE
-TOOLTEST $FILE1 -f GZIP=1
+TOOLTEST h5repack_objs.h5 -f GZIP=1
 
 # Check repacking file with committed datatypes in odd configurations
-TOOLTEST $FILE15
+TOOLTEST h5repack_named_dtypes.h5
 
 # tests family driver (file is located in common testfiles folder, uses TOOLTEST1
-TOOLTEST1 $FILE16
+TOOLTEST1 tfamily%05d.h5
 
 # test various references (bug 1814 and 1726)
-TOOLTEST $FILE_REF
+TOOLTEST h5repack_refs.h5
+
+# test attribute with various references (bug1797 / HDFFV-5932)
+# the references in attribute of compund or vlen datatype 
+TOOLTEST h5repack_attr_refs.h5 
 
 if test $nerrors -eq 0 ; then
     echo "All $TESTNAME tests passed."
diff --git a/tools/h5repack/h5repack_copy.c b/tools/h5repack/h5repack_copy.c
index 765fd57..9a09b9e 100644
--- a/tools/h5repack/h5repack_copy.c
+++ b/tools/h5repack/h5repack_copy.c
@@ -31,8 +31,24 @@
 * macros
 *-------------------------------------------------------------------------
 */
-#define USERBLOCK_XFER_SIZE     512     /* size of buffer/# of bytes to xfer at a time when copying userblock */
 
+/* size of buffer/# of bytes to xfer at a time when copying userblock */
+#define USERBLOCK_XFER_SIZE     512     
+
+/* check H5Dread()/H5Dwrite() error, e.g. memory allocation error inside the library. */
+#define CHECK_H5DRW_ERROR(_fun, _did, _mtid, _msid, _fsid, _pid, _buf)  {  \
+    H5E_BEGIN_TRY {  \
+        if(_fun(_did, _mtid, _msid, _fsid, _pid, _buf) < 0) {  \
+            int _err_num = 0; \
+            char _msg[80]; \
+            H5Ewalk2(H5E_DEFAULT, H5E_WALK_DOWNWARD, walk_error_callback, &_err_num); \
+            H5Eget_msg(_err_num, NULL, _msg, 80); \
+            error_msg("%s %s -- %s\n", #_fun, "failed", _msg); \
+            goto error; \
+        } \
+    } H5E_END_TRY; \
+}
+   
 /*-------------------------------------------------------------------------
 * local functions
 *-------------------------------------------------------------------------
@@ -43,6 +59,16 @@ static int   copy_user_block(const char *infile, const char *outfile, hsize_t si
 #if defined (H5REPACK_DEBUG_USER_BLOCK)
 static void  print_user_block(const char *filename, hid_t fid);
 #endif
+static herr_t walk_error_callback(unsigned n, const H5E_error2_t *err_desc, void *udata);
+
+/* get the major number from the error stack. */
+static herr_t walk_error_callback(UNUSED unsigned n, const H5E_error2_t *err_desc, void *udata)
+{
+    if (err_desc) 
+        *((int *)udata) = err_desc->maj_num;
+        
+    return 0;
+}
 
 /*-------------------------------------------------------------------------
 * Function: copy_objects
@@ -764,6 +790,11 @@ int do_copy_objects(hid_t fidin,
                                 goto error;
                         }
 
+                        /* unset the unlimimted dimensions, which cannot be applied to layout other than chunked. */ 
+                        if (options->layout_g != H5D_CHUNKED) {
+                             H5Sset_extent_simple( f_space_id, rank, dims, NULL );
+                        }
+
                         /*-------------------------------------------------------------------------
                         * create the output dataset;
                         * disable error checking in case the dataset cannot be created with the
@@ -798,11 +829,10 @@ int do_copy_objects(hid_t fidin,
                                 buf = HDmalloc(need);
 
                             if(buf != NULL) {
-                                if(H5Dread(dset_in, wtype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0)
-                                    goto error;
-                                if(H5Dwrite(dset_out, wtype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf) < 0)
-                                    goto error;
-
+                               /* read/write: use the macro to check error, e.g. memory allocation error inside the library. */
+                                CHECK_H5DRW_ERROR(H5Dread, dset_in, wtype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
+                                CHECK_H5DRW_ERROR(H5Dwrite, dset_out, wtype_id, H5S_ALL, H5S_ALL, H5P_DEFAULT, buf);
+                               
                                 /* Check if we have VL data in the dataset's
                                  * datatype that must be reclaimed */
                                 if(TRUE == H5Tdetect_class(wtype_id, H5T_VLEN))
@@ -881,11 +911,9 @@ int do_copy_objects(hid_t fidin,
                                         hs_nelmts = 1;
                                     } /* rank */
 
-                                    /* read/write */
-                                    if (H5Dread(dset_in, wtype_id, sm_space, f_space_id, H5P_DEFAULT, sm_buf) < 0)
-                                        goto error;
-                                    if (H5Dwrite(dset_out, wtype_id, sm_space, f_space_id, H5P_DEFAULT, sm_buf) < 0)
-                                        goto error;
+                                    /* read/write: use the macro to check error, e.g. memory allocation error inside the library. */
+                                    CHECK_H5DRW_ERROR(H5Dread, dset_in, wtype_id, sm_space, f_space_id, H5P_DEFAULT, sm_buf);
+                                    CHECK_H5DRW_ERROR(H5Dwrite, dset_out, wtype_id, sm_space, f_space_id, H5P_DEFAULT, sm_buf);
 
                                     /* reclaim any VL memory, if necessary */
                                     if(vl_data)
diff --git a/tools/h5repack/h5repack_refs.c b/tools/h5repack/h5repack_refs.c
index 091133e..c6753c1 100644
--- a/tools/h5repack/h5repack_refs.c
+++ b/tools/h5repack/h5repack_refs.c
@@ -27,6 +27,8 @@
 static const char* MapIdToName(hid_t refobj_id,trav_table_t *travt);
 static int copy_refs_attr(hid_t loc_in, hid_t loc_out, pack_opt_t *options,
                           trav_table_t *travt, hid_t fidout);
+static herr_t update_ref_value(hid_t obj_id, H5R_type_t ref_type, void *ref_in,
+		hid_t fid_out, void *ref_out, trav_table_t *travt);
 
 /*-------------------------------------------------------------------------
  * Function: do_copy_refobjs
@@ -229,7 +231,7 @@ int do_copy_refobjs(hid_t fidin,
                     * dataset region references
                     *-------------------------------------------------------------------------
                     */
-                    else if(H5Tequal(mtype_id, H5T_STD_REF_DSETREG)) 
+                    else if(H5Tequal(mtype_id, H5T_STD_REF_DSETREG))
                     {
                         hid_t            refobj_id;
                         hdset_reg_ref_t  *refbuf = NULL; /* input buffer for region references */
@@ -390,7 +392,7 @@ int do_copy_refobjs(hid_t fidin,
         } /* end switch */
     } /* end for */
 
-    /* Finalize (link) the stack of named datatypes (if any) 
+    /* Finalize (link) the stack of named datatypes (if any)
      * This function is paired with copy_named_datatype() which is called
      * in copy_attr(), so need to free.
      */
@@ -429,6 +431,15 @@ error:
  *
  * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
  *
+ * Modifier: xcao at hdfgroup.org, 9/12/2011
+ * 	         Update values of references(object and region) for the following types:
+ *               1) References,
+ *               2) ARRAY of reference,
+ *               3) VLEN of references.
+ *               4) COMPOUND of references.
+ *          This function does not handle references in other complicated structures,
+ *		    such as references in nested compound datatypes.
+ *
  * Date: October, 28, 2003
  *
  *-------------------------------------------------------------------------
@@ -448,34 +459,95 @@ static int copy_refs_attr(hid_t loc_in,
     hid_t      mtype_id = -1;     /* memory data type ID */
     size_t     msize;             /* memory size of type */
     hsize_t    nelmts;            /* number of elements in dataset */
-    int        rank;              /* rank of dataset */
     hsize_t    dims[H5S_MAX_RANK];/* dimensions of dataset */
     char       name[255];
     H5O_info_t oinfo;           /* Object info */
-    int        j;
-    unsigned   u;
+    unsigned   u, i, j;
+    int        rank;
+    H5T_class_t type_class = -1;
+    hbool_t    is_ref=0, is_ref_vlen=0, is_ref_array=0, is_ref_comp=0;
+    void  *refbuf = NULL;
+    void  *buf = NULL;
+    const char* refname;
+    int   *ref_comp_index = NULL;
+    size_t *ref_comp_size = NULL;
+    int    ref_comp_field_n = 0;
+
 
     if(H5Oget_info(loc_in, &oinfo) < 0)
         goto error;
 
     for(u = 0; u < (unsigned)oinfo.num_attrs; u++)
     {
-        /*-------------------------------------------------------------------------
-        * open
-        *-------------------------------------------------------------------------
-        */
+    	is_ref = is_ref_vlen = is_ref_array = is_ref_comp = 0;
+
         /* open attribute */
         if((attr_id = H5Aopen_by_idx(loc_in, ".", H5_INDEX_CRT_ORDER, H5_ITER_INC, (hsize_t)u, H5P_DEFAULT, H5P_DEFAULT)) < 0)
             goto error;
 
-        /* get name */
-        if(H5Aget_name(attr_id, 255, name) < 0)
-            goto error;
-
         /* get the file datatype  */
         if((ftype_id = H5Aget_type(attr_id)) < 0)
             goto error;
 
+        type_class = H5Tget_class(ftype_id);
+
+        if((mtype_id = h5tools_get_native_type(ftype_id)) < 0)
+            goto error;
+
+        if((msize = H5Tget_size(mtype_id)) == 0)
+            goto error;
+
+        is_ref = (type_class == H5T_REFERENCE);
+
+        if (type_class == H5T_VLEN ) {
+        	hid_t base_type = -1;
+        	base_type = H5Tget_super(ftype_id);
+        	is_ref_vlen = (H5Tget_class(base_type)==H5T_REFERENCE);
+        	msize = H5Tget_size(base_type);
+        	H5Tclose(base_type);
+        }
+
+        if (type_class == H5T_ARRAY ) {
+        	hid_t base_type = -1;
+        	base_type = H5Tget_super(ftype_id);
+        	is_ref_array = (H5Tget_class(base_type)==H5T_REFERENCE);
+        	msize = H5Tget_size(base_type);
+        	H5Tclose(base_type);
+        }
+
+        if (type_class == H5T_COMPOUND) {
+        	int nmembers = H5Tget_nmembers(ftype_id) ;
+        	if (nmembers < 1)
+        		goto error;
+
+            ref_comp_index = (int *)HDmalloc(nmembers*sizeof (int));
+            ref_comp_size = (size_t *)HDmalloc(nmembers*sizeof(ref_comp_size));
+            ref_comp_field_n = 0;
+
+        	for (i=0; i<(unsigned)nmembers; i++) {
+        		hid_t mtid = H5Tget_member_type( ftype_id, i );
+        		if ((H5Tget_class(mtid)==H5T_REFERENCE)) {
+        			ref_comp_index[ref_comp_field_n] = i;
+        			ref_comp_size[ref_comp_field_n] = H5Tget_size(mtid);
+        			ref_comp_field_n++;
+        		}
+        		H5Tclose(mtid);
+        	}
+        }
+
+        is_ref_comp = (ref_comp_field_n > 0);
+
+        if (!(is_ref || is_ref_vlen || is_ref_array || is_ref_comp)) {
+        	H5Tclose(mtype_id);
+           	H5Tclose(ftype_id);
+        	H5Aclose(attr_id);
+        	continue;
+        }
+
+        /* get name */
+        if(H5Aget_name(attr_id, 255, name) < 0)
+            goto error;
+
         /* get the dataspace handle  */
         if((space_id = H5Aget_space(attr_id)) < 0)
             goto error;
@@ -490,35 +562,32 @@ static int copy_refs_attr(hid_t loc_in,
         *-------------------------------------------------------------------------
         */
         nelmts = 1;
-        for(j = 0; j < rank; j++)
+        for(j = 0; j < (unsigned)rank; j++)
             nelmts *= dims[j];
 
-        if((mtype_id = h5tools_get_native_type(ftype_id)) < 0)
-            goto error;
-
-        if((msize = H5Tget_size(mtype_id)) == 0)
+        if (is_ref_array) {
+        	unsigned        array_rank = 0;
+        	hsize_t    array_size = 1;
+        	hsize_t array_dims[H5S_MAX_RANK];
+        	hid_t base_type = -1;
+        	base_type = H5Tget_super(ftype_id);
+        	msize = H5Tget_size(base_type);
+           	H5Tclose(base_type);
+
+        	array_rank = H5Tget_array_ndims(mtype_id);
+        	H5Tget_array_dims2(mtype_id, array_dims);
+            for(j = 0; j <array_rank; j++)
+            	array_size *= array_dims[j];
+            nelmts *= array_size;
+         }
+
+        if((attr_out = H5Acreate2(loc_out, name, ftype_id, space_id, H5P_DEFAULT, H5P_DEFAULT)) < 0)
             goto error;
 
-
-        /*-------------------------------------------------------------------------
-        * object references are a special case
-        * we cannot just copy the buffers, but instead we recreate the reference
-        *-------------------------------------------------------------------------
-        */
-        if(H5Tequal(mtype_id, H5T_STD_REF_OBJ))
+        if (nelmts>0)
         {
-            hid_t       refobj_id;
-            hobj_ref_t  *refbuf = NULL;
-            unsigned    k;
-            const char* refname;
-            hobj_ref_t  *buf = NULL;
-
-            /*-------------------------------------------------------------------------
-            * read input to memory
-            *-------------------------------------------------------------------------
-            */
-
-            if (nelmts)
+            /* handle object references */
+            if((is_ref || is_ref_array) && (H5R_OBJ_REF_BUF_SIZE==msize))
             {
                 buf = (hobj_ref_t *)HDmalloc((unsigned)(nelmts * msize));
                 if(buf == NULL)
@@ -536,65 +605,16 @@ static int copy_refs_attr(hid_t loc_in,
                     goto error;
                 } /* end if */
 
-                for(k = 0; k < nelmts; k++)
+                for(i = 0; i < (unsigned)nelmts; i++)
                 {
-                    H5E_BEGIN_TRY
-                    {
-                        if((refobj_id = H5Rdereference(attr_id, H5R_OBJECT, &buf[k])) < 0)
-                            goto error;
-                    } H5E_END_TRY;
-
-                    /* get the name. a valid name could only occur in the
-                     * second traversal of the file
-                     */
-                    if((refname = MapIdToName(refobj_id, travt)) != NULL)
-                    {
-                        /* create the reference */
-                        if(H5Rcreate(&refbuf[k], fidout, refname, H5R_OBJECT, -1) < 0)
-                            goto error;
-                        if(options->verbose)
-                            printf("object <%s> reference created to <%s>\n", name, refname);
-                    }
-                    H5Oclose(refobj_id);
+                    if (update_ref_value(attr_id, H5R_OBJECT, &((hobj_ref_t *)buf)[i], fidout, &((hobj_ref_t *)refbuf)[i], travt)<0)
+                		continue;
+                    if(options->verbose)
+                        printf("object <%s> reference created to <%s>\n", name, refname);
                 } /* k */
-            } /*nelmts*/
-
-            /*-------------------------------------------------------------------------
-            * copy
-            *-------------------------------------------------------------------------
-            */
-            if((attr_out = H5Acreate2(loc_out, name, ftype_id, space_id, H5P_DEFAULT, H5P_DEFAULT)) < 0)
-                goto error;
-            if(nelmts)
-                if(H5Awrite(attr_out, mtype_id, refbuf) < 0)
-                    goto error;
-
-            if(H5Aclose(attr_out) < 0)
-                goto error;
-
-            if(refbuf)
-                HDfree(refbuf);
-            if(buf)
-                HDfree(buf);
-        }/*H5T_STD_REF_OBJ*/
-
-        /*-------------------------------------------------------------------------
-        * dataset region references
-        *-------------------------------------------------------------------------
-        */
-        else if(H5Tequal(mtype_id, H5T_STD_REF_DSETREG))
-        {
-            hid_t            refobj_id;
-            hdset_reg_ref_t  *refbuf = NULL; /* input buffer for region references */
-            hdset_reg_ref_t  *buf = NULL;    /* output buffer */
-            const char*      refname;
-            unsigned         k;
-
-            /*-------------------------------------------------------------------------
-            * read input to memory
-            *-------------------------------------------------------------------------
-            */
-            if(nelmts)
+            }/*H5T_STD_REF_OBJ*/
+            /* handle region references */
+            else if((is_ref || is_ref_array) && (H5R_DSET_REG_REF_BUF_SIZE == msize))
             {
                 buf = (hdset_reg_ref_t *)HDmalloc((unsigned)(nelmts * msize));
                 if(buf == NULL)
@@ -616,56 +636,119 @@ static int copy_refs_attr(hid_t loc_in,
                     goto error;
                 } /* end if */
 
-                for(k = 0; k < nelmts; k++)
+                for(i = 0; i < (unsigned)nelmts; i++)
                 {
-                    H5E_BEGIN_TRY
-                    {
-                        if((refobj_id = H5Rdereference(attr_id, H5R_DATASET_REGION, &buf[k])) < 0)
-                            continue;
-                    } H5E_END_TRY;
-
-                    /* get the name. a valid name could only occur in the
-                     * second traversal of the file
-                     */
-                    if((refname = MapIdToName(refobj_id, travt)) != NULL)
-                    {
-                        hid_t region_id;    /* region id of the referenced dataset */
+                    if (update_ref_value(attr_id, H5R_DATASET_REGION, &((hdset_reg_ref_t *)buf)[i], fidout, &((hdset_reg_ref_t *)refbuf)[i], travt)<0)
+                		continue;
+                    if(options->verbose)
+                        printf("object <%s> region reference created to <%s>\n", name, refname);
+                }
+            } /* H5T_STD_REF_DSETREG */
+            else if (is_ref_vlen) {
+            	/* handle VLEN of references */
+
+                buf = (hvl_t *)HDmalloc((unsigned)(nelmts * sizeof(hvl_t)));
+                refbuf = buf; /* reuse the read buffer for write */
 
-                        if((region_id = H5Rget_region(attr_id, H5R_DATASET_REGION, &buf[k])) < 0)
-                            goto error;
+                if(buf == NULL)
+                {
+                    printf( "cannot read into memory\n" );
+                    goto error;
+                } /* end if */
 
-                        /* create the reference, we need the space_id */
-                        if(H5Rcreate(&refbuf[k], fidout, refname, H5R_DATASET_REGION, region_id) < 0)
-                            goto error;
-                        if(H5Sclose(region_id) < 0)
-                            goto error;
-                        if(options->verbose)
-                            printf("object <%s> region reference created to <%s>\n", name, refname);
-                    } /* end if */
-                    H5Oclose(refobj_id);
-                } /* k */
-            } /*nelmts */
+                if(H5Aread(attr_id, mtype_id, buf) < 0)
+                    goto error;
 
-            /*-------------------------------------------------------------------------
-            * copy
-            *-------------------------------------------------------------------------
-            */
-            if((attr_out = H5Acreate2(loc_out, name, ftype_id, space_id, H5P_DEFAULT, H5P_DEFAULT)) < 0)
-                goto error;
-            if(nelmts)
-            {
-                if(H5Awrite(attr_out, mtype_id, refbuf) < 0)
+ 				if (H5R_OBJ_REF_BUF_SIZE==msize) {
+					hobj_ref_t ref_out;
+					for (i=0; i<(unsigned)nelmts; i++) {
+						hobj_ref_t *ptr = (hobj_ref_t *)((hvl_t *)buf)[i].p;
+						for (j=0; j<((hvl_t *)buf)[i].len; j++ ) {
+							if (update_ref_value(attr_id, H5R_OBJECT, &(ptr[j]), fidout, &ref_out, travt)<0)
+								continue;
+							HDmemcpy(&(ptr[j]), &ref_out, msize);
+						}
+					}  /* for (i=0; i<nelems; i++) */
+				} else if (H5R_DSET_REG_REF_BUF_SIZE == msize) {
+
+					hdset_reg_ref_t ref_out;
+					for (i=0; i<(unsigned)nelmts; i++) {
+						hdset_reg_ref_t *ptr = (hdset_reg_ref_t *)((hvl_t *)buf)[i].p;
+						for (j=0; j<((hvl_t *)buf)[i].len; j++ ) {
+							if (update_ref_value(attr_id, H5R_DATASET_REGION, &(ptr[j]), fidout, &ref_out, travt)<0)
+								continue;
+							HDmemcpy(&(ptr[j]), &ref_out, msize);
+						}
+					}  /* for (i=0; i<nelems; i++) */
+				}
+            } /* else if (is_ref_vlen) */
+            else if (is_ref_comp) {
+            	/* handle ref fields in a compound */
+
+                buf = HDmalloc((unsigned)(nelmts * msize));
+                refbuf = buf; /* reuse the read buffer for write */
+
+                if(buf == NULL)
+                {
+                    printf( "cannot read into memory\n" );
                     goto error;
-            }
+                } /* end if */
 
-            if(H5Aclose(attr_out) < 0)
-                goto error;
+                if(H5Aread(attr_id, mtype_id, buf) < 0)
+                    goto error;
 
-            if(refbuf)
-                HDfree(refbuf);
-            if(buf)
-                HDfree(buf);
-        } /* H5T_STD_REF_DSETREG */
+                for (i=0; i<(unsigned)nelmts; i++) {
+                	for (j=0; j<(unsigned)ref_comp_field_n; j++) {
+                		if (ref_comp_size[j] == H5R_OBJ_REF_BUF_SIZE) {
+                			int idx = i*msize+H5Tget_member_offset( mtype_id, (unsigned)ref_comp_index[j]);
+                			hobj_ref_t ref_out;
+                			if (update_ref_value(attr_id, H5R_OBJECT, (hobj_ref_t *)(((char *)buf)+idx), fidout, &ref_out, travt)<0)
+                				continue;
+                			HDmemcpy(((char *)buf)+idx, &ref_out, ref_comp_size[j]);
+                 		} /* if */
+                		else if (ref_comp_size[j] == H5R_DSET_REG_REF_BUF_SIZE) {
+                			int idx = i*msize+H5Tget_member_offset( mtype_id, (unsigned)ref_comp_index[j]);
+                			hdset_reg_ref_t ref_out;
+                			if (update_ref_value(attr_id, H5R_DATASET_REGION, (hdset_reg_ref_t *)(((char *)buf)+idx), fidout, &ref_out, travt)<0)
+                				continue;
+                			HDmemcpy(((char *)buf)+idx, &ref_out, ref_comp_size[j]);
+                 		} /* else if */
+                	} /* j */
+                } /* i */
+            } /* else if (is_ref_comp) */
+
+            if(H5Awrite(attr_out, mtype_id, refbuf) < 0)
+                 goto error;
+
+            if (is_ref_vlen && buf)
+            	H5Dvlen_reclaim (mtype_id, space_id, H5P_DEFAULT, buf);
+        } /* if (nelmts) */
+
+        if (refbuf == buf)
+        	refbuf = NULL; /* set it to NULL to avoid double free since buf and refbuf are the same. */
+
+        if(buf) {
+            HDfree(buf);
+            buf = NULL;
+        }
+
+        if(refbuf) {
+            HDfree(refbuf);
+            refbuf = NULL;
+        }
+
+        if (ref_comp_index) {
+        	HDfree(ref_comp_index);
+        	ref_comp_index = NULL;
+        }
+
+        if (ref_comp_size) {
+        	HDfree(ref_comp_size);
+        	ref_comp_size = NULL;
+        }
+
+        if(H5Aclose(attr_out) < 0)
+            goto error;
 
         /*-------------------------------------------------------------------------
         * close
@@ -679,11 +762,22 @@ static int copy_refs_attr(hid_t loc_in,
             goto error;
         if(H5Aclose(attr_id) < 0)
             goto error;
-    } /* u */
+    } /* for(u = 0; u < (unsigned)oinfo.num_attrs; u++) */
 
     return 0;
 
 error:
+	if(refbuf)
+		HDfree(refbuf);
+	if(buf)
+		HDfree(buf);
+
+    if (ref_comp_index)
+    	HDfree(ref_comp_index);
+
+    if (ref_comp_size)
+    	HDfree(ref_comp_size);
+
     H5E_BEGIN_TRY {
         H5Tclose(ftype_id);
         H5Tclose(mtype_id);
@@ -710,7 +804,7 @@ MapIdToName(hid_t refobj_id, trav_table_t *travt)
 
     /* linear search */
     for(u = 0; u < travt->nobjs; u++) {
-        if(travt->objs[u].type == H5O_TYPE_DATASET || 
+        if(travt->objs[u].type == H5O_TYPE_DATASET ||
                 travt->objs[u].type == H5O_TYPE_GROUP ||
                 travt->objs[u].type == H5O_TYPE_NAMED_DATATYPE) {
             H5O_info_t   ref_oinfo;     /* Stat for the refobj id */
@@ -730,3 +824,49 @@ out:
     return ret;
 }
 
+/*-------------------------------------------------------------------------
+ * Function:	Update_Ref_value
+ *
+ * Purpose:	Update a reference value
+ *
+ * Programmer: xcao at hdfgroup.org 9/12/2011
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t update_ref_value(hid_t obj_id, H5R_type_t ref_type, void *ref_in,
+		hid_t fid_out, void *ref_out, trav_table_t *travt)
+{
+	herr_t ret = -1;
+	const char* ref_obj_name;
+	hid_t space_id=-1, ref_obj_id=-1;
+
+    ref_obj_id = H5Rdereference(obj_id, ref_type, ref_in);
+	if (ref_obj_id<0)
+		goto done;
+
+	ref_obj_name = MapIdToName(ref_obj_id, travt);
+	if (ref_obj_name == NULL)
+		goto done;
+
+	if (ref_type == H5R_DATASET_REGION) {
+		space_id = H5Rget_region(obj_id, H5R_DATASET_REGION, ref_in);
+		if (space_id < 0)
+			goto done;
+	}
+
+    ret = H5Rcreate(ref_out, fid_out, ref_obj_name, ref_type, space_id);
+
+    if (ret < 0)
+    	goto done;
+
+	ret = 0;
+
+done:
+    H5E_BEGIN_TRY {
+    	H5Sclose(space_id);
+    	H5Oclose(ref_obj_id);
+    } H5E_END_TRY;
+
+	return ret;
+}
+
diff --git a/tools/h5repack/h5repacktst.c b/tools/h5repack/h5repacktst.c
index 8eddeca..cac2654 100644
--- a/tools/h5repack/h5repacktst.c
+++ b/tools/h5repack/h5repacktst.c
@@ -3399,7 +3399,7 @@ int write_dset_in(hid_t loc_id,
     /* create 1D attributes with dimension [2], 2 elements */
     hsize_t    dims[1]={2};
     hsize_t    dims1r[1]={2};
-    char       buf1[2][2]= {"ab","de"};        /* string */
+    char       buf1[2][3]= {"ab","de"};        /* string */
     char       buf2[2]= {1,2};                 /* bitfield, opaque */
     s_t        buf3[2]= {{1,2},{3,4}};         /* compound */
     hobj_ref_t buf4[2];                        /* reference */
@@ -3413,7 +3413,7 @@ int write_dset_in(hid_t loc_id,
     /* create 2D attributes with dimension [3][2], 6 elements */
     hsize_t    dims2[2]={3,2};
     hsize_t    dims2r[2]={1,1};
-    char       buf12[6][2]= {"ab","cd","ef","gh","ij","kl"};         /* string */
+    char       buf12[6][3]= {"ab","cd","ef","gh","ij","kl"};         /* string */
     char       buf22[3][2]= {{1,2},{3,4},{5,6}};                     /* bitfield, opaque */
     s_t        buf32[6]= {{1,2},{3,4},{5,6},{7,8},{9,10},{11,12}};   /* compound */
     hobj_ref_t buf42[1][1];                                          /* reference */
@@ -3425,7 +3425,7 @@ int write_dset_in(hid_t loc_id,
     /* create 3D attributes with dimension [4][3][2], 24 elements */
     hsize_t    dims3[3]={4,3,2};
     hsize_t    dims3r[3]={1,1,1};
-    char       buf13[24][2]= {"ab","cd","ef","gh","ij","kl","mn","pq",
+    char       buf13[24][3]= {"ab","cd","ef","gh","ij","kl","mn","pq",
         "rs","tu","vw","xz","AB","CD","EF","GH",
         "IJ","KL","MN","PQ","RS","TU","VW","XZ"};  /* string */
     char       buf23[4][3][2];    /* bitfield, opaque */
@@ -4272,7 +4272,7 @@ int write_attr_in(hid_t loc_id,
 
     /* create 1D attributes with dimension [2], 2 elements */
     hsize_t    dims[1]={2};
-    char       buf1[2][2]= {"ab","de"};        /* string */
+    char       buf1[2][3]= {"ab","de"};        /* string */
     char       buf2[2]= {1,2};                 /* bitfield, opaque */
     s_t        buf3[2]= {{1,2},{3,4}};         /* compound */
     hobj_ref_t buf4[2];                        /* reference */
@@ -4285,7 +4285,7 @@ int write_attr_in(hid_t loc_id,
 
     /* create 2D attributes with dimension [3][2], 6 elements */
     hsize_t    dims2[2]={3,2};
-    char       buf12[6][2]= {"ab","cd","ef","gh","ij","kl"};         /* string */
+    char       buf12[6][3]= {"ab","cd","ef","gh","ij","kl"};         /* string */
     char       buf22[3][2]= {{1,2},{3,4},{5,6}};                     /* bitfield, opaque */
     s_t        buf32[6]= {{1,2},{3,4},{5,6},{7,8},{9,10},{11,12}};   /* compound */
     hobj_ref_t buf42[3][2];                                          /* reference */
@@ -4297,7 +4297,7 @@ int write_attr_in(hid_t loc_id,
 
     /* create 3D attributes with dimension [4][3][2], 24 elements */
     hsize_t    dims3[3]={4,3,2};
-    char       buf13[24][2]= {"ab","cd","ef","gh","ij","kl","mn","pq",
+    char       buf13[24][3]= {"ab","cd","ef","gh","ij","kl","mn","pq",
         "rs","tu","vw","xz","AB","CD","EF","GH",
         "IJ","KL","MN","PQ","RS","TU","VW","XZ"};  /* string */
     char       buf23[4][3][2];    /* bitfield, opaque */
diff --git a/tools/h5repack/testfiles/h5repack_attr_refs.h5 b/tools/h5repack/testfiles/h5repack_attr_refs.h5
new file mode 100644
index 0000000..56974a3
Binary files /dev/null and b/tools/h5repack/testfiles/h5repack_attr_refs.h5 differ
diff --git a/tools/h5repack/testfiles/h5repack_layout.h5 b/tools/h5repack/testfiles/h5repack_layout.h5
index 5772a31..2cc44b1 100644
Binary files a/tools/h5repack/testfiles/h5repack_layout.h5 and b/tools/h5repack/testfiles/h5repack_layout.h5 differ
diff --git a/tools/h5stat/CMakeLists.txt b/tools/h5stat/CMakeLists.txt
index 86ad3ad..a4b06a6 100644
--- a/tools/h5stat/CMakeLists.txt
+++ b/tools/h5stat/CMakeLists.txt
@@ -91,8 +91,17 @@ IF (BUILD_TESTING)
     # If using memchecker add tests without using scripts
     IF (HDF5_ENABLE_USING_MEMCHECKER)
       ADD_TEST (NAME H5STAT-${resultfile} COMMAND $<TARGET_FILE:h5stat> ${ARGN})
+      IF (NOT "${last_test}" STREQUAL "")
+        SET_TESTS_PROPERTIES (H5STAT-${resultfile} PROPERTIES DEPENDS ${last_test})
+      ENDIF (NOT "${last_test}" STREQUAL "")
+    SET (last_test "H5STAT-${resultfile}")
     ELSE (HDF5_ENABLE_USING_MEMCHECKER)
       ADD_TEST (
+          NAME H5STAT-clear-${resultfile}-objects
+          COMMAND    ${CMAKE_COMMAND}
+              -E remove ${resultfile}.out ${resultfile}.out.err
+      )
+      ADD_TEST (
           NAME H5STAT-${resultfile}
           COMMAND "${CMAKE_COMMAND}"
               -D "TEST_PROGRAM=$<TARGET_FILE:h5stat>"
@@ -103,11 +112,8 @@ IF (BUILD_TESTING)
               -D "TEST_REFERENCE=${resultfile}.ddl"
               -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
       )
+      SET_TESTS_PROPERTIES (H5STAT-${resultfile} PROPERTIES DEPENDS "H5STAT-clear-${resultfile}-objects")
     ENDIF (HDF5_ENABLE_USING_MEMCHECKER)
-    IF (NOT "${last_test}" STREQUAL "")
-      SET_TESTS_PROPERTIES (H5STAT-${resultfile} PROPERTIES DEPENDS ${last_test})
-    ENDIF (NOT "${last_test}" STREQUAL "")
-    SET (last_test "H5STAT-${resultfile}")
   ENDMACRO (ADD_H5_TEST file)
 
 ##############################################################################
@@ -116,8 +122,9 @@ IF (BUILD_TESTING)
 ##############################################################################
 ##############################################################################
 
-  # Remove any output file left over from previous test run
-  ADD_TEST (
+  IF (HDF5_ENABLE_USING_MEMCHECKER)
+    # Remove any output file left over from previous test run
+    ADD_TEST (
       NAME H5STAT-clearall-objects
       COMMAND    ${CMAKE_COMMAND}
           -E remove 
@@ -149,16 +156,11 @@ IF (BUILD_TESTING)
           h5stat_newgrat-UG.out.err
           h5stat_newgrat-UA.out
           h5stat_newgrat-UA.out.err
-  )
-  IF (NOT "${last_test}" STREQUAL "")
-    SET_TESTS_PROPERTIES (H5STAT-clearall-objects PROPERTIES DEPENDS ${last_test})
-  ENDIF (NOT "${last_test}" STREQUAL "")
-  SET (last_test "H5STAT-clearall-objects")
-
-  # If using memchecker add tests without using scripts
-  IF (HDF5_ENABLE_USING_MEMCHECKER)
-    ADD_TEST (NAME H5STAT-help COMMAND h5stat -h)
-    ADD_TEST (NAME H5STAT-filters COMMAND h5stat h5stat_filters.h5)
+    )
+    IF (NOT "${last_test}" STREQUAL "")
+      SET_TESTS_PROPERTIES (H5STAT-clearall-objects PROPERTIES DEPENDS ${last_test})
+    ENDIF (NOT "${last_test}" STREQUAL "")
+    SET (last_test "H5STAT-clearall-objects")
   ENDIF (HDF5_ENABLE_USING_MEMCHECKER)
 
 # Test for help flag
diff --git a/tools/h5stat/Makefile.in b/tools/h5stat/Makefile.in
index 25ea377..403446c 100644
--- a/tools/h5stat/Makefile.in
+++ b/tools/h5stat/Makefile.in
@@ -204,6 +204,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -224,10 +225,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -271,7 +274,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/tools/h5stat/h5stat.c b/tools/h5stat/h5stat.c
index 57b1ce0..708821e 100644
--- a/tools/h5stat/h5stat.c
+++ b/tools/h5stat/h5stat.c
@@ -15,7 +15,7 @@
 
 #include <stdlib.h>
 #include <string.h>
-#include "H5private.h"		/* Generic Functions			*/
+#include "H5private.h"    /* Generic Functions      */
 #include "h5tools.h"
 #include "h5tools_utils.h"
 #include "h5tools_ref.h"
@@ -27,7 +27,7 @@
 
 /* Parameters to control statistics gathered */
 #define SIZE_SMALL_GROUPS       10
-#define SIZE_SMALL_ATTRS	10
+#define SIZE_SMALL_ATTRS  10
 #define SIZE_SMALL_DSETS        10
 
 #define  H5_NFILTERS_IMPL        8     /* Number of currently implemented filters + one to
@@ -65,7 +65,7 @@ typedef struct iter_t {
     unsigned long *group_bins;          /* Pointer to array of bins for group counts */
     ohdr_info_t group_ohdr_info;        /* Object header information for groups */
 
-    hsize_t  max_attrs;                 		/* Maximum attributes from a group */
+    hsize_t  max_attrs;                     /* Maximum attributes from a group */
     unsigned long num_small_attrs[SIZE_SMALL_ATTRS];    /* Size of small attributes tracked */
     unsigned attr_nbins;                /* Number of bins for attribute counts */
     unsigned long *attr_bins;           /* Pointer to array of bins for attribute counts */
@@ -90,8 +90,8 @@ typedef struct iter_t {
     hsize_t attrs_heap_storage_size;    /* fractal heap size for attributes (1.8) */
     hsize_t SM_hdr_storage_size;        /* header size for SOHM table (1.8) */
     hsize_t SM_index_storage_size;      /* index (btree & list) size for SOHM table (1.8) */
-    hsize_t SM_heap_storage_size;	/* fractal heap size for SOHM table (1.8) */
-    hsize_t super_ext_size;	   	/* superblock extension size */
+    hsize_t SM_heap_storage_size;  /* fractal heap size for SOHM table (1.8) */
+    hsize_t super_ext_size;       /* superblock extension size */
     hsize_t ublk_size;                  /* user block size (if exists) */
     hsize_t datasets_index_storage_size;/* meta size for chunked dataset's indexing type */
     hsize_t datasets_heap_storage_size; /* heap size for dataset with external storage */
@@ -268,7 +268,7 @@ ceil_log10(unsigned long x)
 static herr_t
 attribute_stats(iter_t *iter, const H5O_info_t *oi)
 {
-    unsigned 		bin;               /* "bin" the number of objects falls in */
+    unsigned     bin;               /* "bin" the number of objects falls in */
 
     /* Update dataset & attribute metadata info */
     iter->attrs_btree_storage_size += oi->meta_size.attr.index_size;
@@ -283,12 +283,12 @@ attribute_stats(iter_t *iter, const H5O_info_t *oi)
     /* Add attribute count to proper bin */
     bin = ceil_log10((unsigned long)oi->num_attrs);
     if((bin + 1) > iter->attr_nbins) {
-	iter->attr_bins = (unsigned long *)realloc(iter->attr_bins, (bin + 1) * sizeof(unsigned long));
+  iter->attr_bins = (unsigned long *)realloc(iter->attr_bins, (bin + 1) * sizeof(unsigned long));
         assert(iter->attr_bins);
 
-	/* Initialize counts for intermediate bins */
+  /* Initialize counts for intermediate bins */
         while(iter->attr_nbins < bin)
-	    iter->attr_bins[iter->attr_nbins++] = 0;
+      iter->attr_bins[iter->attr_nbins++] = 0;
         iter->attr_nbins++;
 
         /* Initialize count for new bin */
@@ -316,23 +316,23 @@ attribute_stats(iter_t *iter, const H5O_info_t *oi)
  * Modifications: Refactored code from the walk_function
  *                EIP, Wednesday, August 16, 2006
  *
- *		  Vailin Choi 12 July 2007
- *		  1. Gathered storage info for btree and heap
- *		     (groups and attributes)
- *		  2. Gathered info for attributes
+ *      Vailin Choi 12 July 2007
+ *      1. Gathered storage info for btree and heap
+ *         (groups and attributes)
+ *      2. Gathered info for attributes
  *
- *		  Vailin Choi 14 July 2007
- *		  Cast "num_objs" and "num_attrs" to size_t
- *		  Due to the -Mbounds problem for the pgi-32 bit compiler on indexing
+ *      Vailin Choi 14 July 2007
+ *      Cast "num_objs" and "num_attrs" to size_t
+ *      Due to the -Mbounds problem for the pgi-32 bit compiler on indexing
  *
  *-------------------------------------------------------------------------
  */
 static herr_t
 group_stats(iter_t *iter, const char *name, const H5O_info_t *oi)
 {
-    H5G_info_t 		ginfo;                  /* Group information */
-    unsigned 		bin;                   	/* "bin" the number of objects falls in */
-    herr_t 		ret;
+    H5G_info_t     ginfo;                  /* Group information */
+    unsigned     bin;                     /* "bin" the number of objects falls in */
+    herr_t     ret;
 
     /* Gather statistics about this type of object */
     iter->uniq_groups++;
@@ -358,7 +358,7 @@ group_stats(iter_t *iter, const char *name, const H5O_info_t *oi)
         iter->group_bins = (unsigned long *)realloc(iter->group_bins, (bin + 1) * sizeof(unsigned long));
         assert(iter->group_bins);
 
-	/* Initialize counts for intermediate bins */
+  /* Initialize counts for intermediate bins */
         while(iter->group_nbins < bin)
             iter->group_bins[iter->group_nbins++] = 0;
         iter->group_nbins++;
@@ -402,22 +402,22 @@ group_stats(iter_t *iter, const char *name, const H5O_info_t *oi)
 static herr_t
 dataset_stats(iter_t *iter, const char *name, const H5O_info_t *oi)
 {
-    unsigned 		bin;               /* "bin" the number of objects falls in */
-    hid_t 		did;               /* Dataset ID */
-    hid_t 		sid;               /* Dataspace ID */
-    hid_t 		tid;               /* Datatype ID */
-    hid_t 		dcpl;              /* Dataset creation property list ID */
-    hsize_t 		dims[H5S_MAX_RANK];/* Dimensions of dataset */
-    H5D_layout_t 	lout;              /* Layout of dataset */
-    unsigned 		type_found;        /* Whether the dataset's datatype was */
-                                    	   /* already found */
-    int 		ndims;             /* Number of dimensions of dataset */
-    hsize_t 		storage;           /* Size of dataset storage */
-    unsigned 		u;                 /* Local index variable */
-    int 		num_ext;           /* Number of external files for a dataset */
-    int 		nfltr;             /* Number of filters for a dataset */
-    H5Z_filter_t	fltr;              /* Filter identifier */
-    herr_t 		ret;
+    unsigned     bin;               /* "bin" the number of objects falls in */
+    hid_t     did;               /* Dataset ID */
+    hid_t     sid;               /* Dataspace ID */
+    hid_t     tid;               /* Datatype ID */
+    hid_t     dcpl;              /* Dataset creation property list ID */
+    hsize_t     dims[H5S_MAX_RANK];/* Dimensions of dataset */
+    H5D_layout_t   lout;              /* Layout of dataset */
+    unsigned     type_found;        /* Whether the dataset's datatype was */
+                                         /* already found */
+    int     ndims;             /* Number of dimensions of dataset */
+    hsize_t     storage;           /* Size of dataset storage */
+    unsigned     u;                 /* Local index variable */
+    int     num_ext;           /* Number of external files for a dataset */
+    int     nfltr;             /* Number of filters for a dataset */
+    H5Z_filter_t  fltr;              /* Filter identifier */
+    herr_t     ret;
 
     /* Gather statistics about this type of object */
     iter->uniq_dsets++;
@@ -615,7 +615,7 @@ datatype_stats(iter_t *iter, const H5O_info_t *oi)
  * Purpose: Gather statistics about an object
  *
  * Return: Success: 0
- *  	   Failure: -1
+ *       Failure: -1
  *
  * Programmer: Quincey Koziol
  *             Tuesday, November 6, 2007
@@ -644,7 +644,7 @@ obj_stats(const char *path, const H5O_info_t *oi, const char *already_visited,
                 break;
 
             case H5O_TYPE_NAMED_DATATYPE:
-		datatype_stats(iter, oi);
+    datatype_stats(iter, oi);
                 break;
 
             default:
@@ -716,21 +716,47 @@ static struct handler_t *
 parse_command_line(int argc, const char *argv[])
 {
     int                opt, i;
-    struct handler_t   *hand;
+    struct handler_t   *hand = NULL;
 
     /* Allocate space to hold the command line info */
-    hand = (struct handler_t *)calloc((size_t)argc, sizeof(struct handler_t));
+    if((hand = (struct handler_t *)calloc((size_t)argc, sizeof(struct handler_t)))==NULL) {
+        error_msg("unable to parse command line arguments \n");
+        goto error;
+    }
 
     /* parse command line options */
     while ((opt = get_option(argc, argv, s_opts, l_opts)) != EOF) {
         switch ((char)opt) {
             case 'h':
                 usage(h5tools_getprogname());
-                leave(EXIT_SUCCESS);
+            h5tools_setstatus(EXIT_SUCCESS);
+            if (hand) {
+                for (i = 0; i < argc; i++)
+                    if(hand[i].obj) {
+                        free(hand[i].obj);
+                        hand[i].obj=NULL;
+                    }
+
+                free(hand);
+                hand = NULL;
+            }
+            goto done;
+            break;
 
             case 'V':
                 print_version(h5tools_getprogname());
-                leave(EXIT_SUCCESS);
+            h5tools_setstatus(EXIT_SUCCESS);
+            if (hand) {
+                for (i = 0; i < argc; i++)
+                    if(hand[i].obj) {
+                        free(hand[i].obj);
+                        hand[i].obj=NULL;
+                    }
+
+                free(hand);
+                hand = NULL;
+            }
+            goto done;
                 break;
 
             case 'F':
@@ -745,7 +771,7 @@ parse_command_line(int argc, const char *argv[])
 
             case 'G':
                 display_all = FALSE;
-	        display_group_metadata = TRUE;
+          display_group_metadata = TRUE;
                 break;
 
             case 'g':
@@ -755,7 +781,7 @@ parse_command_line(int argc, const char *argv[])
 
             case 'D':
                 display_all = FALSE;
-		display_dset_metadata = TRUE;
+    display_dset_metadata = TRUE;
                 break;
 
             case 'd':
@@ -765,7 +791,7 @@ parse_command_line(int argc, const char *argv[])
 
             case 'T':
                 display_all = FALSE;
-		display_dset_dtype_meta = TRUE;
+    display_dset_dtype_meta = TRUE;
                 break;
 
             case 'A':
@@ -784,7 +810,8 @@ parse_command_line(int argc, const char *argv[])
 
             default:
                 usage(h5tools_getprogname());
-                leave(EXIT_FAILURE);
+            h5tools_setstatus(EXIT_FAILURE);
+            goto error;
         } /* end switch */
     } /* end while */
 
@@ -792,11 +819,28 @@ parse_command_line(int argc, const char *argv[])
     if (argc <= opt_ind) {
         error_msg("missing file name\n");
         usage(h5tools_getprogname());
-        leave(EXIT_FAILURE);
+        h5tools_setstatus(EXIT_FAILURE);
+        goto error;
     } /* end if */
 
+done:
+    return hand;
+
+error:
+    if (hand) {
+        for (i = 0; i < argc; i++)
+            if(hand[i].obj) {
+                free(hand[i].obj);
+                hand[i].obj=NULL;
+            }
+
+        free(hand);
+        hand = NULL;
+    }
+    h5tools_setstatus(EXIT_FAILURE);
+
     return hand;
-} /* parse_command_line() */
+}
 
 
 /*-------------------------------------------------------------------------
@@ -827,6 +871,41 @@ iter_init(iter_t *iter, hid_t fid)
 
 
 /*-------------------------------------------------------------------------
+ * Function: free_iter
+ *
+ * Purpose: Freee iter structure
+ *
+ * Return: Success: 0
+ *
+ * Failure: Never fails
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+iter_free(iter_t *iter)
+{
+    /* Clear array of bins for group counts */
+    if(iter->group_bins)
+        free(iter->group_bins);
+    iter->group_bins = NULL;
+    /* Clear array of bins for attribute counts */
+    if(iter->attr_bins)
+        free(iter->attr_bins);
+    iter->attr_bins = NULL;
+    /* Clear dataset datatype information found */
+    if(iter->dset_type_info)
+        free(iter->dset_type_info);
+    iter->dset_type_info = NULL;
+    /* Clear array of bins for dataset dimensions */
+    if(iter->dset_dim_bins)
+        free(iter->dset_dim_bins);
+    iter->dset_dim_bins = NULL;
+
+    return 0;
+}
+
+
+/*-------------------------------------------------------------------------
  * Function: print_file_info
  *
  * Purpose: Prints information about file
@@ -887,13 +966,13 @@ print_file_metadata(const iter_t *iter)
     HDfprintf(stdout, "\tObject headers: (total/unused)\n");
     HDfprintf(stdout, "\t\tGroups: %Hu/%Hu\n",
                 iter->group_ohdr_info.total_size,
-		iter->group_ohdr_info.free_size);
+    iter->group_ohdr_info.free_size);
     HDfprintf(stdout, "\t\tDatasets(exclude compact data): %Hu/%Hu\n",
-		iter->dset_ohdr_info.total_size,
-		iter->dset_ohdr_info.free_size);
+    iter->dset_ohdr_info.total_size,
+    iter->dset_ohdr_info.free_size);
     HDfprintf(stdout, "\t\tDatatypes: %Hu/%Hu\n",
                 iter->dtype_ohdr_info.total_size,
-		iter->dtype_ohdr_info.free_size);
+    iter->dtype_ohdr_info.free_size);
 
     HDfprintf(stdout, "\tGroups:\n");
     HDfprintf(stdout, "\t\tB-tree/List: %Hu\n", iter->groups_btree_storage_size);
@@ -931,9 +1010,9 @@ print_file_metadata(const iter_t *iter)
  *             Saturday, August 12, 2006
  *
  * Modifications:
- *	bug #1253; Oct 6th 2008; Vailin Choi
- *	Fixed segmentation fault: print iter->group_bins[0] when
- *	there is iter->group_nbins
+ *  bug #1253; Oct 6th 2008; Vailin Choi
+ *  Fixed segmentation fault: print iter->group_bins[0] when
+ *  there is iter->group_nbins
  *
  *-------------------------------------------------------------------------
  */
@@ -1071,7 +1150,7 @@ print_dataset_info(const iter_t *iter)
 
         printf("Dataset storage information:\n");
         HDfprintf(stdout, "\tTotal raw data size: %Hu\n", iter->dset_storage_size);
-	HDfprintf(stdout, "\tTotal external raw data size: %Hu\n", iter->dset_external_storage_size);
+  HDfprintf(stdout, "\tTotal external raw data size: %Hu\n", iter->dset_external_storage_size);
 
         printf("Dataset layout information:\n");
         for(u = 0; u < H5D_NLAYOUTS; u++)
@@ -1323,12 +1402,13 @@ print_statistics(const char *name, const iter_t *iter)
 int
 main(int argc, const char *argv[])
 {
-    iter_t          	iter;
-    const char     	*fname = NULL;
-    hid_t           	fid;
-    hid_t             	fcpl;   /* file creation property id */
-    struct handler_t   *hand;
-    H5F_info_t      	finfo;
+    iter_t            iter;
+    const char       *fname = NULL;
+    hid_t             fid;
+    hid_t               fcpl;
+    struct handler_t   *hand = NULL;
+    H5F_info_t        finfo;
+    int                 i;
 
     h5tools_setprogname(PROGRAMNAME);
     h5tools_setstatus(EXIT_SUCCESS);
@@ -1338,11 +1418,9 @@ main(int argc, const char *argv[])
 
     /* Initialize h5tools lib */
     h5tools_init();
-    hand = parse_command_line (argc, argv);
-    if(!hand) {
-        error_msg("unable to parse command line arguments \n");
-        leave(EXIT_FAILURE);
-    } /* end if */
+    if((hand = parse_command_line(argc, argv))==NULL) {
+        goto done;
+    }
 
     fname = argv[opt_ind];
 
@@ -1351,7 +1429,8 @@ main(int argc, const char *argv[])
     fid = H5Fopen(fname, H5F_ACC_RDONLY, H5P_DEFAULT);
     if(fid < 0) {
         error_msg("unable to open file \"%s\"\n", fname);
-        leave(EXIT_FAILURE);
+        h5tools_setstatus(EXIT_FAILURE);
+        goto done;
     } /* end if */
 
     /* Initialize iter structure */
@@ -1359,12 +1438,12 @@ main(int argc, const char *argv[])
 
     /* Get storge info for SOHM's btree/list/heap and superblock extension */
     if(H5Fget_info(fid, &finfo) < 0)
-	warn_msg("Unable to retrieve SOHM info\n");
+    warn_msg("Unable to retrieve SOHM info\n");
     else {
-	iter.super_ext_size = finfo.super_ext_size;
-	iter.SM_hdr_storage_size = finfo.sohm.hdr_size;
-	iter.SM_index_storage_size = finfo.sohm.msgs_info.index_size;
-	iter.SM_heap_storage_size = finfo.sohm.msgs_info.heap_size;
+    iter.super_ext_size = finfo.super_ext_size;
+    iter.SM_hdr_storage_size = finfo.sohm.hdr_size;
+    iter.SM_index_storage_size = finfo.sohm.msgs_info.index_size;
+    iter.SM_heap_storage_size = finfo.sohm.msgs_info.heap_size;
     } /* end else */
 
     if((fcpl = H5Fget_create_plist(fid)) < 0)
@@ -1380,26 +1459,39 @@ main(int argc, const char *argv[])
         u = 0;
         while(hand[u].obj) {
             if (h5trav_visit(fid, hand[u].obj, TRUE, TRUE, obj_stats, lnk_stats, &iter) < 0)
-		warn_msg("Unable to traverse object \"%s\"\n", hand[u].obj);
-	    else
-		print_statistics(hand[u].obj, &iter);
+    warn_msg("Unable to traverse object \"%s\"\n", hand[u].obj);
+      else
+    print_statistics(hand[u].obj, &iter);
             u++;
         } /* end while */
     } /* end if */
     else {
         if (h5trav_visit(fid, "/", TRUE, TRUE, obj_stats, lnk_stats, &iter) < 0)
-	    warn_msg("Unable to traverse objects/links in file \"%s\"\n", fname);
-	else
-	    print_statistics("/", &iter);
+      warn_msg("Unable to traverse objects/links in file \"%s\"\n", fname);
+  else
+      print_statistics("/", &iter);
     } /* end else */
 
-    if (hand) free(hand);
+done:
+    if(hand) {
+        for (i = 0; i < argc; i++)
+            if(hand[i].obj) {
+                free(hand[i].obj);
+                hand[i].obj=NULL;
+            }
+
+        free(hand);
+        hand = NULL;
 
+        /* Free iter structure */
+        iter_free(&iter);
+    
     if(H5Fclose(fid) < 0) {
         error_msg("unable to close file \"%s\"\n", fname);
-        leave(EXIT_FAILURE);
+            h5tools_setstatus(EXIT_FAILURE);
+        }
     }
 
-    leave(EXIT_SUCCESS);
-} /* main() */
+    leave(h5tools_getstatus());
+}
 
diff --git a/tools/h5stat/testh5stat.sh.in b/tools/h5stat/testh5stat.sh.in
index 96673ef..f47ec83 100644
--- a/tools/h5stat/testh5stat.sh.in
+++ b/tools/h5stat/testh5stat.sh.in
@@ -32,6 +32,7 @@ STAT_BIN=`pwd`/$STAT    # The path of the tool binary
 
 CMP='cmp -s'
 DIFF='diff -c'
+CP='cp'
 
 nerrors=0
 verbose=yes
@@ -41,7 +42,79 @@ if test -z "$srcdir"; then
    srcdir=.
 fi
 
-test -d ./testfiles || mkdir ./testfiles
+# source dirs
+SRC_TOOLS="$srcdir/.."
+SRC_TOOLS_TESTFILES="$SRC_TOOLS/testfiles"
+
+# testfiles source dirs for tools
+SRC_H5LS_TESTFILES="$SRC_TOOLS_TESTFILES"
+SRC_H5DUMP_TESTFILES="$SRC_TOOLS_TESTFILES"
+SRC_H5DIFF_TESTFILES="$SRC_TOOLS/h5diff/testfiles"
+SRC_H5COPY_TESTFILES="$SRC_TOOLS/h5copy/testfiles"
+SRC_H5REPACK_TESTFILES="$SRC_TOOLS/h5repack/testfiles"
+SRC_H5JAM_TESTFILES="$SRC_TOOLS/h5jam/testfiles"
+SRC_H5STAT_TESTFILES="$SRC_TOOLS/h5stat/testfiles"
+SRC_H5IMPORT_TESTFILES="$SRC_TOOLS/h5import/testfiles"
+
+TESTDIR=./testfiles
+test -d $TESTDIR || mkdir $TESTDIR
+
+######################################################################
+# test files
+# --------------------------------------------------------------------
+# All the test files copy from source directory to test directory
+# NOTE: Keep this framework to add/remove test files.
+#       Any test files from other tools can be used in this framework.
+#       This list are also used for checking exist.
+#       Comment '#' without space can be used.
+# --------------------------------------------------------------------
+LIST_HDF5_TEST_FILES="
+$SRC_H5STAT_TESTFILES/h5stat_filters.h5
+$SRC_H5STAT_TESTFILES/h5stat_tsohm.h5
+$SRC_H5STAT_TESTFILES/h5stat_newgrat.h5
+"
+
+LIST_OTHER_TEST_FILES="
+$SRC_H5STAT_TESTFILES/h5stat_help1.ddl
+$SRC_H5STAT_TESTFILES/h5stat_help2.ddl
+$SRC_H5STAT_TESTFILES/h5stat_filters.ddl
+$SRC_H5STAT_TESTFILES/h5stat_filters-file.ddl
+$SRC_H5STAT_TESTFILES/h5stat_filters-F.ddl
+$SRC_H5STAT_TESTFILES/h5stat_filters-d.ddl
+$SRC_H5STAT_TESTFILES/h5stat_filters-g.ddl
+$SRC_H5STAT_TESTFILES/h5stat_filters-dT.ddl
+$SRC_H5STAT_TESTFILES/h5stat_filters-UD.ddl
+$SRC_H5STAT_TESTFILES/h5stat_filters-UT.ddl
+$SRC_H5STAT_TESTFILES/h5stat_tsohm.ddl
+$SRC_H5STAT_TESTFILES/h5stat_newgrat.ddl
+$SRC_H5STAT_TESTFILES/h5stat_newgrat-UG.ddl
+$SRC_H5STAT_TESTFILES/h5stat_newgrat-UA.ddl
+"
+
+#
+# copy test files and expected output files from source dirs to test dir
+#
+COPY_TESTFILES="$LIST_HDF5_TEST_FILES $LIST_OTHER_TEST_FILES"
+
+COPY_TESTFILES_TO_TESTDIR()
+{
+    # copy test files. Used -f to make sure get a new copy
+    for tstfile in $COPY_TESTFILES
+    do
+        # ignore '#' comment
+        echo $tstfile | tr -d ' ' | grep '^#' > /dev/null
+        RET=$?
+        if [ $RET -eq 1 ]; then
+            if [ -a $tstfile ]; then
+                $CP -f $tstfile $TESTDIR
+            else
+                echo "Error: FAILED to copy $tstfile"
+                echo "       $tstfile doesn't exist!"
+                exit $EXIT_FAILURE
+            fi
+        fi
+    done
+}
 
 # Print a line-line message left justified in a field of 70 characters
 # beginning with the word "Testing".
@@ -60,9 +133,9 @@ TESTING() {
 # non-zero value.
 #
 TOOLTEST() {
-   expect="$srcdir/testfiles/$1"
-   actual="./testfiles/`basename $1 .ddl`.out"
-   actual_err="./testfiles/`basename $1 .ddl`.err"
+   expect="$TESTDIR/$1"
+   actual="$TESTDIR/`basename $1 .ddl`.out"
+   actual_err="$TESTDIR/`basename $1 .ddl`.err"
    shift
 
    # Run test.
@@ -71,7 +144,7 @@ TOOLTEST() {
       echo "#############################"
       echo "Expected output for '$STAT $@'" 
       echo "#############################"
-      cd $srcdir/testfiles
+      cd $TESTDIR
       $RUNSERIAL $STAT_BIN $@
    ) >$actual 2>$actual_err
    cat $actual_err >> $actual
@@ -110,6 +183,8 @@ SKIP() {
 ###			  T H E   T E S T S                                ###
 ##############################################################################
 ##############################################################################
+# prepare for test
+COPY_TESTFILES_TO_TESTDIR
 
 # Test for help flag
 TOOLTEST h5stat_help1.ddl -h
@@ -125,6 +200,7 @@ TOOLTEST h5stat_filters-g.ddl  -g   h5stat_filters.h5
 TOOLTEST h5stat_filters-dT.ddl -dT  h5stat_filters.h5
 TOOLTEST h5stat_filters-UD.ddl -D h5stat_filters.h5
 TOOLTEST h5stat_filters-UT.ddl -T h5stat_filters.h5
+#
 # h5stat_tsohm.h5 is a copy of ../../../test/tsohm.h5 generated by tsohm.c 
 # as of release 1.8.7-snap0 (on a 64-bit machine)
 TOOLTEST h5stat_tsohm.ddl h5stat_tsohm.h5
diff --git a/tools/lib/CMakeLists.txt b/tools/lib/CMakeLists.txt
index c3662f6..1e8afa1 100644
--- a/tools/lib/CMakeLists.txt
+++ b/tools/lib/CMakeLists.txt
@@ -38,7 +38,7 @@ H5_SET_LIB_OPTIONS (
     ${HDF5_TOOLS_LIB_TARGET} ${HDF5_TOOLS_LIB_NAME}
     ${LIB_TYPE}
     HDF5_TOOLS_LIB_NAME_RELEASE
-	HDF5_TOOLS_LIB_NAME_DEBUG
+  HDF5_TOOLS_LIB_NAME_DEBUG
 )
 
 ##############################################################################
@@ -54,7 +54,7 @@ INSTALL (
     FILES
         ${H5_TOOLS_LIB_HDRS}
     DESTINATION
-        ${HDF5_INSTALL_INCLUDE_DIR}/tools
+        ${HDF5_INSTALL_INCLUDE_DIR}
     COMPONENT
         toolsheaders
 )
@@ -68,7 +68,7 @@ IF (APPLE)
     IF (HDF5_BUILD_WITH_INSTALL_NAME)
       SET_TARGET_PROPERTIES(${HDF5_TOOLS_LIB_TARGET} PROPERTIES
       LINK_FLAGS "-current_version ${HDF5_PACKAGE_VERSION} -compatibility_version ${HDF5_PACKAGE_VERSION}"
-      INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib/tools"
+      INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib"
       BUILD_WITH_INSTALL_RPATH ${HDF5_BUILD_WITH_INSTALL_NAME}
       )
     ENDIF (HDF5_BUILD_WITH_INSTALL_NAME)
@@ -83,8 +83,8 @@ IF (HDF5_EXPORTED_TARGETS)
           ${HDF5_TOOLS_LIB_TARGET}
       EXPORT
           ${HDF5_EXPORTED_TARGETS}
-      LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR}/tools COMPONENT toolslibraries
-      ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR}/tools COMPONENT toolslibraries
-      RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR}/tools COMPONENT toolslibraries
+      LIBRARY DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT toolslibraries
+      ARCHIVE DESTINATION ${HDF5_INSTALL_LIB_DIR} COMPONENT toolslibraries
+      RUNTIME DESTINATION ${HDF5_INSTALL_BIN_DIR} COMPONENT toolslibraries
   )
 ENDIF (HDF5_EXPORTED_TARGETS)
diff --git a/tools/lib/Makefile.in b/tools/lib/Makefile.in
index d7e4a01..0ecf276 100644
--- a/tools/lib/Makefile.in
+++ b/tools/lib/Makefile.in
@@ -174,6 +174,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -194,10 +195,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -241,7 +244,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/tools/lib/h5diff.c b/tools/lib/h5diff.c
index a4d8469..6e9fee8 100644
--- a/tools/lib/h5diff.c
+++ b/tools/lib/h5diff.c
@@ -366,6 +366,7 @@ static void build_match_list (const char *objname1, trav_info_t *info1, const ch
     int path2_offset = 0;
     int cmp;
     trav_table_t *table;
+    size_t  idx;
 
     /* init */
     trav_table_init( &table );
@@ -403,6 +404,14 @@ static void build_match_list (const char *objname1, trav_info_t *info1, const ch
                 infile[0] = 1;
                 infile[1] = 1;
                 trav_table_addflags(infile, path1_lp, info1->paths[curr1].type, table);
+                /* if the two point to the same target object,
+                 * mark that in table */
+                if (info1->paths[curr1].fileno == info2->paths[curr2].fileno &&
+                    info1->paths[curr1].objno == info2->paths[curr2].objno )
+                {
+                    idx = table->nobjs - 1;
+                    table->objs[idx].is_same_trgobj = 1;
+                }
             }
             curr1++;
             curr2++;
@@ -673,6 +682,8 @@ hsize_t h5diff(const char *fname1,
     if(!is_valid_options(options))
         goto out;
 
+    options->cmn_objs = 1; /* eliminate warning */
+
     /*-------------------------------------------------------------------------
     * open the files first; if they are not valid, no point in continuing
     *-------------------------------------------------------------------------
@@ -850,7 +861,17 @@ hsize_t h5diff(const char *fname1,
         HDstrcat(obj2fullname, "/");
     }
 
-    options->cmn_objs = 1; /* eliminate warning */
+   /* 
+    * If verbose options is used, need to traverse thorugh the list of objects 
+    * in the group to print out objects information.
+    * Use h5tools_is_obj_same() to improve performance by skipping 
+    * comparing details of same objects. 
+    */
+    if(!(options->m_verbose || options->m_report))
+    {
+        if (h5tools_is_obj_same(file1_id,obj1fullname,file2_id,obj2fullname)!=0)
+            goto out;
+    }
 
     /*---------------------------------------------
      * check for following symlinks 
@@ -932,6 +953,7 @@ hsize_t h5diff(const char *fname1,
     /* if both obj1 and obj2 are group */
     if (obj1type == H5TRAV_TYPE_GROUP && obj2type == H5TRAV_TYPE_GROUP)
     {
+
         /* 
          * traverse group1 
          */
@@ -1079,6 +1101,8 @@ hsize_t diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
     char * grp2_path = "";
     char * obj1_fullpath = NULL;
     char * obj2_fullpath = NULL;
+    h5trav_type_t objtype;
+    diff_args_t argdata;
 
 
     /* 
@@ -1140,7 +1164,7 @@ hsize_t diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
     int n;
     int busyTasks = 0;
     struct diffs_found nFoundbyWorker;
-    struct diff_args args;
+    struct diff_mpi_args args;
     int havePrintToken = 1;
     MPI_Status Status;
 
@@ -1152,6 +1176,7 @@ hsize_t diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
     {
         if( table->objs[i].flags[0] && table->objs[i].flags[1])
         {
+            objtype = table->objs[i].type;
             /* make full path for obj1 */
             obj1_fullpath = (char*)HDcalloc (strlen(grp1_path) + strlen (table->objs[i].name) + 1, sizeof (char));
             HDstrcpy(obj1_fullpath, grp1_path);
@@ -1162,12 +1187,16 @@ hsize_t diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
             HDstrcpy(obj2_fullpath, grp2_path);
             HDstrcat(obj2_fullpath, table->objs[i].name);
 
+            /* Set argdata to pass other args into diff() */
+            argdata.type = objtype;
+            argdata.is_same_trgobj = table->objs[i].is_same_trgobj;
+
             options->cmn_objs = 1;
             if(!g_Parallel)
             {
                 nfound += diff(file1_id, obj1_fullpath,
                                file2_id, obj2_fullpath, 
-                               options, table->objs[i].type);
+                               options, &argdata);
             } /* end if */
 #ifdef H5_HAVE_PARALLEL
             else
@@ -1191,10 +1220,12 @@ hsize_t diff_match(hid_t file1_id, const char *grp1, trav_info_t *info1,
                     MPI_Abort(MPI_COMM_WORLD, 0);
                 } /* end if */
 
+                /* set args struct to pass */
                 HDstrcpy(args.name1, obj1_fullpath);
                 HDstrcpy(args.name2, obj2_fullpath);
                 args.options = *options;
-                args.type = table->objs[i].type;
+                args.argdata.type = objtype;
+                args.argdata.is_same_trgobj = table->objs[i].is_same_trgobj;
 
                 h5diffdebug2("busyTasks=%d\n", busyTasks);
                 /* if there are any outstanding print requests, let's handle one. */
@@ -1487,6 +1518,7 @@ hsize_t diff_compare(hid_t file1_id,
     int is_dangle_link2 = 0;
     const char *obj1name = obj1_name;
     const char *obj2name = obj2_name;
+    diff_args_t argdata;
 
     /* local variables for diff() */
     h5trav_type_t obj1type, obj2type;
@@ -1694,9 +1726,13 @@ hsize_t diff_compare(hid_t file1_id,
         goto out;
     }
 
+    /* Set argdata to pass other args into diff() */
+    argdata.type = obj1type;
+    argdata.is_same_trgobj = 0;
+
     nfound = diff(file1_id, obj1name,
                   file2_id, obj2name,
-                  options, obj1type);
+                  options, &argdata);
 
 out:
     /*-------------------------------
@@ -1751,11 +1787,16 @@ out:
  *
  * Return: Number of differences found
  *
- * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
- * Date: May 9, 2003
- *
  * Programmer: Jonathan Kim
  *  - add following links feature (Feb 11,2010)
+ *  - Change to use diff_args_t to pass the rest of args.
+ *    Passing through it instead of individual args provides smoother
+ *    extensibility through its members along with MPI code update for ph5diff
+ *    as it doesn't require interface change.
+ *    (May 6,2011)
+ *
+ * Programmer: Pedro Vicente, pvn at ncsa.uiuc.edu
+ * Date: May 9, 2003
  *-------------------------------------------------------------------------
  */
 
@@ -1764,7 +1805,7 @@ hsize_t diff(hid_t file1_id,
               hid_t file2_id,
               const char *path2,
               diff_opt_t * options,
-              h5trav_type_t type)
+              diff_args_t *argdata)
 {
     hid_t   type1_id = (-1);
     hid_t   type2_id = (-1);
@@ -1773,6 +1814,7 @@ hsize_t diff(hid_t file1_id,
     int     ret;
     int     is_dangle_link1 = 0;
     int     is_dangle_link2 = 0;
+    int     is_hard_link = 0;
     hsize_t nfound = 0;
 
 
@@ -1834,8 +1876,60 @@ hsize_t diff(hid_t file1_id,
     /* found dangling link */
     if (is_dangle_link1 || is_dangle_link2)
         goto out2;
+  
+    /* 
+     * If both points to the same target object, skip comparing details inside
+     * of the objects to improve performance.
+     * Always check for the hard links, otherwise if follow symlink option is 
+     * specified.
+     *
+     * Perform this to match the outputs as bypassing.
+     */
+     is_hard_link = (argdata->type == H5TRAV_TYPE_DATASET ||
+                     argdata->type == H5TRAV_TYPE_NAMED_DATATYPE ||
+                     argdata->type == H5TRAV_TYPE_GROUP);
+     if (options->follow_links || is_hard_link)
+     {
+        if (argdata->is_same_trgobj)
+        {
+            /* print information is only verbose option is used */
+            if(options->m_verbose || options->m_report)
+            {
+                switch(argdata->type)
+                {
+                case H5TRAV_TYPE_DATASET:
+                    do_print_objname("dataset", path1, path2, options);
+                    break; 
+                case H5TRAV_TYPE_NAMED_DATATYPE:
+                    do_print_objname("datatype", path1, path2, options);
+                    break;
+                case H5TRAV_TYPE_GROUP:
+                    do_print_objname("group", path1, path2, options);
+                    break;
+                case H5TRAV_TYPE_LINK:
+                    do_print_objname("link", path1, path2, options);
+                    break;
+                case H5TRAV_TYPE_UDLINK:
+                    if(linkinfo1.linfo.type == H5L_TYPE_EXTERNAL && linkinfo2.linfo.type == H5L_TYPE_EXTERNAL)
+                        do_print_objname("external link", path1, path2, options);
+                    else
+                        do_print_objname ("user defined link", path1, path2, options);
+                    break; 
+                default:
+                    parallel_print("Comparison not supported: <%s> and <%s> are of type %s\n",
+                        path1, path2, get_type(argdata->type) );
+                    options->not_cmp = 1;
+                    break;
+                } /* switch(type)*/
+
+                print_found(nfound);
+            } /* if(options->m_verbose || options->m_report) */
+
+            goto out2;
+        }
+    }
 
-    switch(type)
+    switch(argdata->type)
     {
        /*----------------------------------------------------------------------
         * H5TRAV_TYPE_DATASET
@@ -1858,8 +1952,8 @@ hsize_t diff(hid_t file1_id,
             else
             {
                 nfound = diff_dataset(file1_id, file2_id, path1, path2, options);
-                /* print info if compatible and difference found  */
-                if (!options->not_cmp && nfound)
+                /* print info if difference found  */
+                if (nfound)
                 {
                     do_print_objname("dataset", path1, path2, options);
                     print_found(nfound);	
@@ -1965,10 +2059,15 @@ hsize_t diff(hid_t file1_id,
                     goto out;
                 }
 
+                /* Renew type in argdata to pass into diff(). 
+                 * For recursive call, argdata.is_same_trgobj is already
+                 * set from initial call, so don't reset here */
+                argdata->type = linkinfo1.trg_type;
+
                 /* call self to compare target object */
                 nfound += diff(file1_id, path1, 
                                file2_id, path2, 
-                               options, linkinfo1.trg_type);
+                               options, argdata);
             }
 
             /* always print the number of differences found in verbose mode */
@@ -2017,9 +2116,14 @@ hsize_t diff(hid_t file1_id,
                         goto out;
                     }
 
+                    /* Renew type in argdata to pass into diff(). 
+                     * For recursive call, argdata.is_same_trgobj is already
+                     * set from initial call, so don't reset here */
+                    argdata->type = linkinfo1.trg_type;
+
                     nfound = diff(file1_id, path1,  
                                   file2_id, path2, 
-                                  options, linkinfo1.trg_type);
+                                  options, argdata);
                 } 
             } /* end if */
             else 
@@ -2050,7 +2154,7 @@ hsize_t diff(hid_t file1_id,
         default:
             if(options->m_verbose)
                 parallel_print("Comparison not supported: <%s> and <%s> are of type %s\n",
-                    path1, path2, get_type(type) );
+                    path1, path2, get_type(argdata->type) );
             options->not_cmp = 1;
             break;
      }
diff --git a/tools/lib/h5diff.h b/tools/lib/h5diff.h
index 19d5ed5..1ff4402 100644
--- a/tools/lib/h5diff.h
+++ b/tools/lib/h5diff.h
@@ -22,6 +22,16 @@
 #define MAX_FILENAME 1024
 
 /*-------------------------------------------------------------------------
+ * This is used to pass multiple args into diff().
+ * Passing this instead of several each arg provides smoother extensibility 
+ * through its members along with MPI code for ph5diff
+ * as it doesn't require interface change.
+ *------------------------------------------------------------------------*/
+typedef struct {
+    h5trav_type_t   type;
+    hbool_t is_same_trgobj;
+} diff_args_t;
+/*-------------------------------------------------------------------------
  * command line options
  *-------------------------------------------------------------------------
  */
@@ -72,6 +82,13 @@ H5TOOLS_DLL hsize_t  h5diff(const char *fname1,
                 const char *objname2,
                 diff_opt_t *options);
 
+H5TOOLS_DLL hsize_t diff( hid_t      file1_id,
+              const char *path1,
+              hid_t      file2_id,
+              const char *path2,
+              diff_opt_t *options,
+              diff_args_t *argdata);
+
 #ifdef H5_HAVE_PARALLEL
 H5TOOLS_DLL void phdiff_dismiss_workers(void);
 H5TOOLS_DLL void print_manager_output(void);
@@ -101,13 +118,6 @@ hsize_t diff_datasetid( hid_t dset1_id,
                         const char *obj2_name,
                         diff_opt_t *options);
 
-hsize_t diff( hid_t      file1_id,
-              const char *path1,
-              hid_t      file2_id,
-              const char *path2,
-              diff_opt_t *options,
-              h5trav_type_t  type );
-
 hsize_t diff_compare( hid_t file1_id,
                       const char *file1_name,
                       const char *obj1_name,
diff --git a/tools/lib/h5diff_array.c b/tools/lib/h5diff_array.c
index c4c8dbf..e6a9d05 100644
--- a/tools/lib/h5diff_array.c
+++ b/tools/lib/h5diff_array.c
@@ -186,8 +186,8 @@ static int my_isnan(dtype_t type, void *val);
  * XCAO, 11/10/2010
  * added to improve performance for compound datasets
  */
-static void set_comp_members(hid_t tid, mcomp_t *members);
-static void free_comp_members(mcomp_t *members);
+static void get_member_types(hid_t tid, mcomp_t *members);
+static void close_member_types(mcomp_t *members);
 
 
 
@@ -234,11 +234,11 @@ hsize_t diff_array( void *_mem1,
     size = H5Tget_size( m_type );
     type_class = H5Tget_class(m_type);
 
-    /* Fast comparison first for atomic type by memcmp(). 
+    /* Fast comparison first for atomic type by memcmp().
      * It is OK not to list non-atomic type here because it will not be caught
-     * by the confition, but it gives more clarity for code planning 
+     * by the condition, but it gives more clarity for code planning
      */
-    if (type_class != H5T_REFERENCE && 
+    if (type_class != H5T_REFERENCE &&
         type_class != H5T_COMPOUND &&
         type_class != H5T_STRING &&
         type_class != H5T_VLEN &&
@@ -269,7 +269,6 @@ hsize_t diff_array( void *_mem1,
     */
 
     case H5T_FLOAT:
-
         if (H5Tequal(m_type, H5T_NATIVE_FLOAT))
             nfound=diff_float(mem1,mem2,nelmts,hyper_start,rank,dims,acc,pos,options,name1,name2,&ph);
         else if (H5Tequal(m_type, H5T_NATIVE_DOUBLE))
@@ -319,7 +318,7 @@ hsize_t diff_array( void *_mem1,
     case H5T_VLEN:
     case H5T_REFERENCE:
         HDmemset(&members, 0, sizeof (mcomp_t));
-        set_comp_members(m_type, &members);
+        get_member_types(m_type, &members);
         for ( i = 0; i < nelmts; i++)
         {
             nfound+=diff_datum(
@@ -339,11 +338,11 @@ hsize_t diff_array( void *_mem1,
                 &ph, &members);
             if (options->n && nfound>=options->count)
             {
-                free_comp_members(&members);
+                close_member_types(&members);
                 return nfound;
             }
         } /* i */
-        free_comp_members(&members);
+        close_member_types(&members);
     } /* switch */
 
     return nfound;
@@ -427,11 +426,11 @@ hsize_t diff_datum(void       *_mem1,
     type_size = H5Tget_size( m_type );
     type_class = H5Tget_class(m_type);
 
-    /* Fast comparison first for atomic type by memcmp(). 
+    /* Fast comparison first for atomic type by memcmp().
      * It is OK not to list non-atomic type here because it will not be caught
-     * by the confition, but it gives more clarity for code planning 
+     * by the confition, but it gives more clarity for code planning
      */
-    if (type_class != H5T_REFERENCE && 
+    if (type_class != H5T_REFERENCE &&
         type_class != H5T_COMPOUND &&
         type_class != H5T_STRING &&
         type_class != H5T_VLEN &&
@@ -513,10 +512,10 @@ hsize_t diff_datum(void       *_mem1,
                 size2 = H5Tget_size(m_type);
             }
 
-            /* 
+            /*
              * compare for shorter string
-             * TODO: this code need to be improved to handle the difference 
-             *       of length of strings. 
+             * TODO: this code need to be improved to handle the difference
+             *       of length of strings.
              *       For now mimic the previous way.
              */
             if(size1 < size2)
@@ -621,12 +620,43 @@ hsize_t diff_datum(void       *_mem1,
             char enum_name1[1024];
             char enum_name2[1024];
 
+            herr_t err1;
+            herr_t err2;
+
             /* disable error reporting */
             H5E_BEGIN_TRY {
 
-                if ((H5Tenum_nameof(m_type, mem1, enum_name1, sizeof enum_name1) >= 0) &&
-                    (H5Tenum_nameof(m_type, mem2, enum_name2, sizeof enum_name2) >= 0))
+                /* If the enum value cannot be converted to a string
+                 * it is set to an error string for later output.
+                 */
+                err1 = H5Tenum_nameof(m_type, mem1, enum_name1, sizeof enum_name1);
+                if(err1 < 0)
+                    strcpy(enum_name1, "**INVALID VALUE**");
+
+                err2 = H5Tenum_nameof(m_type, mem2, enum_name2, sizeof enum_name2);
+                if(err2 < 0)
+                    strcpy(enum_name2, "**INVALID VALUE**");
+
+                if(err1 < 0 || err2 < 0)
                 {
+                    /* One or more bad enum values */
+
+                    /* If the two values cannot be converted to a string
+                     * (probably due to them being invalid enum values),
+                     * don't attempt to convert them - just report errors.
+                     */
+                    nfound += 1;
+                    if ( print_data(options) )
+                    {
+                        print_pos(ph,0,i,acc,pos,rank,dims,obj1,obj2);
+                        parallel_print(SPACES);
+                        parallel_print(S_FORMAT,enum_name1,enum_name2);
+                    }
+                }
+                else
+                {
+                    /* Both enum values were valid */
+
                     if (HDstrcmp(enum_name1,enum_name2)!=0)
                     {
                         nfound=1;
@@ -696,7 +726,7 @@ hsize_t diff_datum(void       *_mem1,
                    obj2,
                    container1_id,
                    container2_id,
-                   ph, NULL);
+                   ph, members);
            }
             H5Tclose(memb_type);
         }
@@ -843,7 +873,7 @@ hsize_t diff_datum(void       *_mem1,
             obj2,
             container1_id,
             container2_id,
-            ph, NULL);
+            ph, members);
 
         H5Tclose(memb_type);
 
@@ -1915,8 +1945,8 @@ hsize_t diff_datum(void       *_mem1,
                     }
 
                 }
-                /* one is NaN, assume difference */
-                else if ( isnan1==1 || isnan2==1)
+                /* only one is NaN, assume difference */
+                else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
                 {
                     if ( print_data(options) )
                     {
@@ -1978,8 +2008,8 @@ hsize_t diff_datum(void       *_mem1,
                         }
 
                 }
-                /* one is NaN, assume difference */
-                else if ( isnan1==1 || isnan2==1)
+                /* only one is NaN, assume difference */
+                else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
                 {
                     if ( print_data(options) )
                     {
@@ -2044,8 +2074,8 @@ hsize_t diff_datum(void       *_mem1,
                         }
 
                 }
-                /* one is NaN, assume difference */
-                else if ( isnan1==1 || isnan2==1)
+                /* only one is NaN, assume difference */
+                else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
                 {
                     if ( print_data(options) )
                     {
@@ -2100,7 +2130,6 @@ hsize_t diff_datum(void       *_mem1,
             */
             if (options->d && !options->p)
             {
-
                /*-------------------------------------------------------------------------
                 * detect NaNs
                 *-------------------------------------------------------------------------
@@ -2127,8 +2156,8 @@ hsize_t diff_datum(void       *_mem1,
                     }
 
                 }
-                /* one is NaN, assume difference */
-                else if ( isnan1==1 || isnan2==1)
+                /* only one is NaN, assume difference */
+                else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
                 {
                     if ( print_data(options) )
                     {
@@ -2192,8 +2221,8 @@ hsize_t diff_datum(void       *_mem1,
                         }
 
                 }
-                /* one is NaN, assume difference */
-                else if ( isnan1==1 || isnan2==1)
+                /* only one is NaN, assume difference */
+                else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
                 {
                     if ( print_data(options) )
                     {
@@ -2258,8 +2287,8 @@ hsize_t diff_datum(void       *_mem1,
                         }
 
                 }
-                /* one is NaN, assume difference */
-                else if ( isnan1==1 || isnan2==1)
+                /* only one is NaN, assume difference */
+                else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
                 {
                     if ( print_data(options) )
                     {
@@ -2268,7 +2297,6 @@ hsize_t diff_datum(void       *_mem1,
                         parallel_print(F_FORMAT,temp1_double,temp2_double,ABS(temp1_double-temp2_double));
                     }
                     nfound++;
-
                 }
             }
 
@@ -2342,8 +2370,18 @@ hsize_t diff_datum(void       *_mem1,
                         }
                         nfound++;
                     }
-
                 } /* NaN */
+                /* only one is NaN, assume difference */
+                else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
+                {
+                    if ( print_data(options) )
+                    {
+                        print_pos(ph,0,i,acc,pos,rank,dims,obj1,obj2);
+                        parallel_print(SPACES);
+                        parallel_print(F_FORMAT,temp1_double,temp2_double,ABS(temp1_double-temp2_double));
+                    }
+                    nfound++;
+                }
             }
 
            /*-------------------------------------------------------------------------
@@ -2397,7 +2435,18 @@ hsize_t diff_datum(void       *_mem1,
                         }
 
                 } /* NaN */
-            }
+                /* only one is NaN, assume difference */
+                else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
+                {
+                    if ( print_data(options) )
+                    {
+                        print_pos(ph,0,i,acc,pos,rank,dims,obj1,obj2);
+                        parallel_print(SPACES);
+                        parallel_print(F_FORMAT,temp1_double,temp2_double,ABS(temp1_double-temp2_double));
+                    }
+                    nfound++;
+                }
+           }
 
            /*-------------------------------------------------------------------------
             * -d and -p
@@ -2451,6 +2500,17 @@ hsize_t diff_datum(void       *_mem1,
                         }
 
                 } /* NaN */
+                /* only one is NaN, assume difference */
+                else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
+                {
+                    if ( print_data(options) )
+                    {
+                        print_pos(ph,0,i,acc,pos,rank,dims,obj1,obj2);
+                        parallel_print(SPACES);
+                        parallel_print(F_FORMAT,temp1_double,temp2_double,ABS(temp1_double-temp2_double));
+                    }
+                    nfound++;
+                }
             }
 
            /*-------------------------------------------------------------------------
@@ -2942,8 +3002,8 @@ hsize_t diff_float(unsigned char *mem1,
                     nfound++;
                 }
             }
-            /* one is NaN, assume difference */
-            else if ( isnan1==1 || isnan2==1)
+            /* only one is NaN, assume difference */
+            else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
             {
                 if ( print_data(options) )
                 {
@@ -3014,8 +3074,8 @@ hsize_t diff_float(unsigned char *mem1,
                         nfound++;
                     }
             }
-            /* one is NaN, assume difference */
-            else if ( isnan1==1 || isnan2==1)
+            /* only one is NaN, assume difference */
+            else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
             {
                 if ( print_data(options) )
                 {
@@ -3089,8 +3149,8 @@ hsize_t diff_float(unsigned char *mem1,
                     }
 
             }
-            /* one is NaN, assume difference */
-            else if ( isnan1==1 || isnan2==1)
+            /* only one is NaN, assume difference */
+            else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
             {
                 if ( print_data(options) )
                 {
@@ -3179,7 +3239,6 @@ hsize_t diff_double(unsigned char *mem1,
     int         isnan1=0;
     int         isnan2=0;
 
-
  /*-------------------------------------------------------------------------
   * -d and !-p
   *-------------------------------------------------------------------------
@@ -3216,8 +3275,8 @@ hsize_t diff_double(unsigned char *mem1,
                     nfound++;
                 }
             }
-            /* one is NaN, assume difference */
-            else if ( isnan1==1 || isnan2==1)
+            /* only one is NaN, assume difference */
+            else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
             {
                 if ( print_data(options) )
                 {
@@ -3288,8 +3347,8 @@ hsize_t diff_double(unsigned char *mem1,
                         nfound++;
                     }
             }
-            /* one is NaN, assume difference */
-            else if ( isnan1==1 || isnan2==1)
+            /* only one is NaN, assume difference */
+            else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
             {
                 if ( print_data(options) )
                 {
@@ -3363,8 +3422,8 @@ hsize_t diff_double(unsigned char *mem1,
                     }
 
             }
-            /* one is NaN, assume difference */
-            else if ( isnan1==1 || isnan2==1)
+            /* only one is NaN, assume difference */
+            else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
             {
                 if ( print_data(options) )
                 {
@@ -3499,8 +3558,8 @@ hsize_t diff_ldouble(unsigned char *mem1,
                     nfound++;
                 }
             }
-            /* one is NaN, assume difference */
-            else if ( isnan1==1 || isnan2==1)
+            /* only one is NaN, assume difference */
+            else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
             {
                 if ( print_data(options) )
                 {
@@ -3571,8 +3630,8 @@ hsize_t diff_ldouble(unsigned char *mem1,
                         nfound++;
                     }
             }
-            /* one is NaN, assume difference */
-            else if ( isnan1==1 || isnan2==1)
+            /* only one is NaN, assume difference */
+            else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
             {
                 if ( print_data(options) )
                 {
@@ -3646,8 +3705,8 @@ hsize_t diff_ldouble(unsigned char *mem1,
                     }
 
             }
-            /* one is NaN, assume difference */
-            else if ( isnan1==1 || isnan2==1)
+            /* only one is NaN, assume difference */
+            else if (isnan1==1 && isnan2==0  || isnan1==0 && isnan2==1)
             {
                 if ( print_data(options) )
                 {
@@ -6058,36 +6117,46 @@ static void h5diff_print_char(char ch)
  * added to improve performance for compound datasets
  * set up compound datatype structures.
  */
-static void set_comp_members(hid_t tid, mcomp_t *members)
+static void get_member_types(hid_t tid, mcomp_t *members)
 {
     int i;
+    int tclass;
 
     if (tid <=0 || !members)
         return;
 
-    if (H5Tget_class(tid) != H5T_COMPOUND)
-        return;
+    tclass = H5Tget_class(tid);
+    if (tclass == H5T_ARRAY || tclass == H5T_VLEN)
+    {
+        hid_t base_tid = H5Tget_super(tid);
+        get_member_types(base_tid, members);
+        H5Tclose(base_tid);
+    } 
+    else if (tclass == H5T_COMPOUND) 
+    {
+        members->n = H5Tget_nmembers( tid );
+        if (members->n <=0)
+            return;
 
-    members->n = H5Tget_nmembers( tid );
-    if (members->n <=0)
-        return;
+        members->ids = HDcalloc(members->n, sizeof(hid_t));
+        members->flags = HDcalloc(members->n, sizeof(unsigned char));
+        members->offsets = HDcalloc(members->n, sizeof(size_t));
+        members->m = HDcalloc(members->n, sizeof(mcomp_t *));
 
-    members->ids = HDcalloc(members->n, sizeof(hid_t));
-    members->flags = HDcalloc(members->n, sizeof(unsigned char));
-    members->offsets = HDcalloc(members->n, sizeof(size_t));
-    members->m = HDcalloc(members->n, sizeof(mcomp_t *));
-   
-    for (i=0; i< members->n; i++) 
-    {
-         members->ids[i] = H5Tget_member_type( tid, i );
-         members->flags[i] = H5Tis_variable_str( members->ids[i] );
-         members->offsets[i] = H5Tget_member_offset( tid, i );
-         if (H5Tget_class( members->ids[i])==H5T_COMPOUND) 
-         {
-              members->m[i] = (mcomp_t *)HDmalloc(sizeof(mcomp_t));
-              set_comp_members(members->ids[i], members->m[i]);
-         }
+        for (i=0; i< members->n; i++)
+        {
+             members->ids[i] = H5Tget_member_type( tid, i );
+             members->flags[i] = H5Tis_variable_str( members->ids[i] );
+             members->offsets[i] = H5Tget_member_offset( tid, i );
+             members->m[i] = (mcomp_t *)HDmalloc(sizeof(mcomp_t));
+             HDmemset(members->m[i], 0, sizeof(mcomp_t));
+             get_member_types(members->ids[i], members->m[i]);
+        }  
     }
+     
+   return;
+
+
 }
 
 /*-------------------------------------------------------------------------
@@ -6095,18 +6164,18 @@ static void set_comp_members(hid_t tid, mcomp_t *members)
  * added to improve performance for compound datasets
  * clean and close compound members.
  */
-static void free_comp_members(mcomp_t *members) 
+static void close_member_types(mcomp_t *members)
 {
     int i;
 
     if (!members || members->n<=0 || !members->ids)
         return;
 
-    for (i=0; i<members->n; i++) 
+    for (i=0; i<members->n; i++)
     {
-        if (members->m[i]) 
+        if (members->m[i])
         {
-            free_comp_members(members->m[i]);
+            close_member_types(members->m[i]);
             HDfree(members->m[i]);
         }
         H5Tclose(members->ids[i]);
diff --git a/tools/lib/h5diff_attr.c b/tools/lib/h5diff_attr.c
index e5c5965..85cd01f 100644
--- a/tools/lib/h5diff_attr.c
+++ b/tools/lib/h5diff_attr.c
@@ -380,9 +380,10 @@ hsize_t diff_attr(hid_t loc1_id,
         *----------------------------------------------------------------------
         */
 
-        if(msize1 != msize2 ||
-                diff_can_type(ftype1_id, ftype2_id, rank1, rank2, dims1,
-                    dims2, NULL, NULL, name1, name2, options, 0) != 1)
+        /* pass dims1 and dims2 for maxdims as well since attribute's maxdims
+         * are always same */
+        if( diff_can_type(ftype1_id, ftype2_id, rank1, rank2, dims1, dims2,
+                          dims1, dims2, name1, name2, options, 0) != 1 )
         {
             if(H5Tclose(ftype1_id) < 0)
                 goto error;
@@ -452,8 +453,8 @@ hsize_t diff_attr(hid_t loc1_id,
             nfound = diff_array(buf1, buf2, nelmts1, (hsize_t)0, rank1, dims1,
                 options, np1, np2, mtype1_id, attr1_id, attr2_id);
 
-                /* not comparable, no display the different number */
-                if(!options->not_cmp && nfound) {
+                /* print info if compatible and difference found */
+                if(nfound) {
                     do_print_attrname("attribute", np1, np2);
                     print_found(nfound);
                 } /* end if */
diff --git a/tools/lib/h5diff_dset.c b/tools/lib/h5diff_dset.c
index 230e7bb..03ec067 100644
--- a/tools/lib/h5diff_dset.c
+++ b/tools/lib/h5diff_dset.c
@@ -313,36 +313,38 @@ hsize_t diff_datasetid( hid_t did1,
     * check for different signed/unsigned types
     *-------------------------------------------------------------------------
     */
-
-    sign1=H5Tget_sign(m_tid1);
-    sign2=H5Tget_sign(m_tid2);
-    if ( sign1 != sign2 )
+    if (can_compare)
     {
-        if ((options->m_verbose||options->m_list_not_cmp) && obj1_name && obj2_name)
+        sign1=H5Tget_sign(m_tid1);
+        sign2=H5Tget_sign(m_tid2);
+        if ( sign1 != sign2 )
         {
-            parallel_print("Not comparable: <%s> has sign %s ", obj1_name, get_sign(sign1));
-            parallel_print("and <%s> has sign %s\n", obj2_name, get_sign(sign2));
+            if ((options->m_verbose||options->m_list_not_cmp) && obj1_name && obj2_name)
+            {
+                parallel_print("Not comparable: <%s> has sign %s ", obj1_name, get_sign(sign1));
+                parallel_print("and <%s> has sign %s\n", obj2_name, get_sign(sign2));
+            }
+    
+            can_compare=0;
+            options->not_cmp=1;
         }
-
-        can_compare=0;
-        options->not_cmp=1;
     }
-    
+
     /* Check if type is either VLEN-data or VLEN-string to reclaim any
      * VLEN memory buffer later */
     if( TRUE == h5tools_detect_vlen(m_tid1) )
         vl_data = TRUE;
 
-    /*-------------------------------------------------------------------------
+    /*------------------------------------------------------------------------
     * only attempt to compare if possible
     *-------------------------------------------------------------------------
     */
     if(can_compare) /* it is possible to compare */
     {
 
-        /*-------------------------------------------------------------------------
+        /*-----------------------------------------------------------------
         * get number of elements
-        *-------------------------------------------------------------------------
+        *------------------------------------------------------------------
         */
         nelmts1 = 1;
         for(i = 0; i < rank1; i++)
@@ -354,9 +356,9 @@ hsize_t diff_datasetid( hid_t did1,
 
         HDassert(nelmts1 == nelmts2);
 
-        /*-------------------------------------------------------------------------
+        /*-----------------------------------------------------------------
         * "upgrade" the smaller memory size
-        *-------------------------------------------------------------------------
+        *------------------------------------------------------------------
         */
 
         if(m_size1 != m_size2) {
@@ -386,11 +388,10 @@ hsize_t diff_datasetid( hid_t did1,
             name2 = diff_basename(obj2_name);
 
 
-        /*-------------------------------------------------------------------------
+        /*----------------------------------------------------------------
         * read/compare
-        *-------------------------------------------------------------------------
+        *-----------------------------------------------------------------
         */
-
         need = (size_t)(nelmts1 * m_size1);  /* bytes needed */
         if(need < H5TOOLS_MALLOCSIZE) {
             buf1 = HDmalloc(need);
@@ -562,7 +563,7 @@ error:
     if (buf1!=NULL)
     {
         /* reclaim any VL memory, if necessary */
-        if(vl_data) 
+        if(vl_data)
             H5Dvlen_reclaim(m_tid1, sid1, H5P_DEFAULT, buf1);
         free(buf1);
         buf1=NULL;
@@ -570,7 +571,7 @@ error:
     if (buf2!=NULL)
     {
         /* reclaim any VL memory, if necessary */
-        if(vl_data) 
+        if(vl_data)
             H5Dvlen_reclaim(m_tid2, sid2, H5P_DEFAULT, buf2);
         free(buf2);
         buf2=NULL;
diff --git a/tools/lib/h5diff_util.c b/tools/lib/h5diff_util.c
index 6d340d9..dfdc8b3 100644
--- a/tools/lib/h5diff_util.c
+++ b/tools/lib/h5diff_util.c
@@ -35,24 +35,27 @@ print_dimensions (int rank, hsize_t *dims)
 {
     int  i;
 
-    if ( rank > 0 )
-    {
-
-        parallel_print("[" );
-        for ( i = 0; i < rank-1; i++)
-        {
-            parallel_print(HSIZE_T_FORMAT, dims[i]);
-            parallel_print("x");
-        }
-
-        parallel_print(HSIZE_T_FORMAT,  dims[rank-1]);
-        parallel_print("]" );
-    }
-    else
+    if ( rank <= 0 ) 
     {
         parallel_print("H5S_SCALAR" );
     }
+    else 
+    {
+        if (!dims)
+            parallel_print("dimension is NULL");
+        else 
+        {
+            parallel_print("[");
+            for ( i = 0; i < rank-1; i++)
+            {
+                parallel_print(HSIZE_T_FORMAT, dims[i]);
+                parallel_print("x");
+            }
 
+            parallel_print(HSIZE_T_FORMAT,  dims[rank-1]);
+            parallel_print("]" );
+        }
+    }
 }
 
 
diff --git a/tools/lib/h5tools.c b/tools/lib/h5tools.c
index 3cce2e5..db81496 100644
--- a/tools/lib/h5tools.c
+++ b/tools/lib/h5tools.c
@@ -42,11 +42,9 @@ FILE       *rawdatastream; /* should initialize to stdout but gcc moans about it
 int         bin_output;    /* binary output */
 int         bin_form;      /* binary form */
 int         region_output; /* region output */
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
 int         packed_bits_num; /* number of packed bits to display */
 int         packed_data_offset; /* offset of packed bits to display */
 unsigned long long packed_data_mask;  /* mask in which packed bits to display */
-#endif
 
 static h5tool_format_t h5tools_dataformat = {
 0, /*raw */
@@ -54,7 +52,11 @@ static h5tool_format_t h5tools_dataformat = {
 "", /*fmt_raw */
 "%d", /*fmt_int */
 "%u", /*fmt_uint */
-"%hhd", /*fmt_schar */
+#ifdef H5_VMS
+"%hd",/*fmt_schar */
+#else
+"%hhd",/*fmt_schar */
+#endif
 "%u", /*fmt_uchar */
 "%d", /*fmt_short */
 "%u", /*fmt_ushort */
@@ -228,7 +230,7 @@ hbool_t h5tools_render_region_element(FILE *stream, const h5tool_format_t *info,
                 hsize_t elmt_counter);
 
 static int h5tools_print_region_data_blocks(hid_t region_id,
-        FILE *stream, const h5tool_format_t *info, h5tools_context_t ctx,
+        FILE *stream, const h5tool_format_t *info, h5tools_context_t *cur_ctx,
         h5tools_str_t *buffer/*string into which to render */, size_t ncols,
         int ndims, hid_t type_id, hssize_t nblocks, hsize_t *ptdata);
 
@@ -241,7 +243,7 @@ hbool_t h5tools_dump_region_data_points(hid_t region_space, hid_t region_id,
                 hsize_t elmt_counter);
 
 int h5tools_print_region_data_points(hid_t region_space, hid_t region_id,
-        FILE *stream, const h5tool_format_t *info, h5tools_context_t ctx,
+        FILE *stream, const h5tool_format_t *info, h5tools_context_t *cur_ctx,
         h5tools_str_t *buffer, size_t ncols,
         int ndims, hid_t type_id, hssize_t npoints, hsize_t *ptdata);
 
@@ -313,7 +315,7 @@ h5tools_init(void)
 
     if (!h5tools_init_g) {
         /* register the error class */
-        sprintf(lib_str, "%d.%d.%d",H5_VERS_MAJOR, H5_VERS_MINOR, H5_VERS_RELEASE);
+        HDsnprintf(lib_str, sizeof(lib_str), "%d.%d.%d",H5_VERS_MAJOR, H5_VERS_MINOR, H5_VERS_RELEASE);
 
         H5TOOLS_INIT_ERROR()
 
@@ -631,11 +633,11 @@ h5tools_ncols(const char *s)
  *
  * Purpose: Recursive check for any variable length data in given type.
  *
- * Return: 
+ * Return:
  *    TRUE : type conatains any variable length data
  *    FALSE : type doesn't contain any variable length data
  *    Negative value: error occur
- * 
+ *
  * Programmer: Jonathan Kim  March 18, 2011
  *-------------------------------------------------------------------------
  */
@@ -663,7 +665,7 @@ done:
  *
  * Purpose: Recursive check for variable length string of a datatype.
  *
- * Return: 
+ * Return:
  *    TRUE : type conatains any variable length string
  *    FALSE : type doesn't contain any variable length string
  *    Negative value: error occur
@@ -853,8 +855,7 @@ h5tools_region_simple_prefix(FILE *stream, const h5tool_format_t *info,
     }
 
     /* Calculate new prefix */
-    h5tools_str_region_prefix(&prefix, info, elmtno, ptdata, ctx->ndims, 
-            ctx->p_max_idx, ctx);
+    h5tools_str_region_prefix(&prefix, info, elmtno, ptdata, ctx->ndims, ctx->p_max_idx, ctx);
 
     /* Write new prefix to output */
     if (ctx->indent_level >= 0) {
@@ -1390,7 +1391,7 @@ h5tools_render_region_element(FILE *stream, const h5tool_format_t *info,
  */
 static int
 h5tools_print_region_data_blocks(hid_t region_id,
-        FILE *stream, const h5tool_format_t *info, h5tools_context_t ctx,
+        FILE *stream, const h5tool_format_t *info, h5tools_context_t *cur_ctx,
         h5tools_str_t *buffer/*string into which to render */, size_t ncols,
         int ndims, hid_t type_id, hssize_t nblocks, hsize_t *ptdata)
 {
@@ -1403,15 +1404,22 @@ h5tools_print_region_data_blocks(hid_t region_id,
     hsize_t      elmtno; /* elemnt index  */
     unsigned int region_flags; /* buffer extent flags */
     hsize_t      curr_pos;
-    int          jndx;
-    size_t       indx;
+    size_t       jndx;
+    int          indx;
     int          type_size;
     hid_t        mem_space = -1;
     void        *region_buf = NULL;
-    int          blkndx;
+    hsize_t      blkndx;
     hid_t        sid1 = -1;
     int          ret_value = SUCCEED;
+    h5tools_context_t ctx;
+
+    assert(info);
+    assert(cur_ctx);
+    assert(buffer);
+    assert(ptdata);
 
+    memset(&ctx, 0, sizeof(ctx));
     /* Get the dataspace of the dataset */
     if((sid1 = H5Dget_space(region_id)) < 0)
         HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Dget_space failed");
@@ -1446,13 +1454,16 @@ h5tools_print_region_data_blocks(hid_t region_id,
         HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for count");
 
     curr_pos = 0;
+    ctx.indent_level = cur_ctx->indent_level;
+    ctx.cur_column = cur_ctx->cur_column;
+    ctx.prev_multiline = cur_ctx->prev_multiline;
+    ctx.ndims = ndims;
     for (blkndx = 0; blkndx < nblocks; blkndx++) {
-        ctx.ndims = ndims;
         ctx.need_prefix = TRUE;
         ctx.cur_elmt = 0;
-        for (jndx = 0; jndx < ndims; jndx++) {
-            start[jndx] = ptdata[jndx + blkndx * ndims * 2];
-            count[jndx] = dims1[jndx];
+        for (indx = 0; indx < ndims; indx++) {
+            start[indx] = ptdata[indx + blkndx * ndims * 2];
+            count[indx] = dims1[indx];
         }
 
         if(H5Sselect_hyperslab(sid1, H5S_SELECT_SET, start, NULL, count, NULL) < 0)
@@ -1485,24 +1496,24 @@ h5tools_print_region_data_blocks(hid_t region_id,
         h5tools_region_simple_prefix(stream, info, &ctx, curr_pos, ptdata, 0);
 
         elmtno = 0;
-        for (indx = 0; indx < numelem; indx++, elmtno++, ctx.cur_elmt++) {
+        for (jndx = 0; jndx < numelem; jndx++, elmtno++, ctx.cur_elmt++) {
             /* Render the region data element begin */
             h5tools_str_reset(buffer);
 
-            h5tools_str_append(buffer, "%s", indx ? OPTIONAL_LINE_BREAK "" : "");
+            h5tools_str_append(buffer, "%s", jndx ? OPTIONAL_LINE_BREAK "" : "");
             h5tools_str_sprint(buffer, info, region_id, type_id,
-                                ((char*)region_buf + indx * type_size), &ctx);
+                                ((char*)region_buf + jndx * type_size), &ctx);
 
-            if (indx + 1 < numelem || (region_flags & END_OF_DATA) == 0)
+            if (jndx + 1 < numelem || (region_flags & END_OF_DATA) == 0)
                 h5tools_str_append(buffer, "%s", OPT(info->elmt_suf1, ","));
 
             dimension_break = h5tools_render_region_element(stream, info, &ctx, buffer, &curr_pos,
-                                                                    ncols, ptdata, indx, elmtno);
+                                                                    ncols, ptdata, jndx, elmtno);
             /* Render the region data element end */
 
             if(FALSE == dimension_break)
                 elmtno = 0;
-        } /* end for (indx = 0; indx < numelem; indx++, region_elmtno++, ctx.cur_elmt++) */
+        } /* end for (jndx = 0; jndx < numelem; jndx++, region_elmtno++, ctx.cur_elmt++) */
 
         ctx.indent_level--;
     } /* end for (blkndx = 0; blkndx < nblocks; blkndx++) */
@@ -1563,6 +1574,10 @@ h5tools_dump_region_data_blocks(hid_t region_space, hid_t region_id,
     hid_t        type_id;
     int          i;
 
+    assert(info);
+    assert(ctx);
+    assert(buffer);
+
     if((nblocks = H5Sget_select_hyper_nblocks(region_space)) <= 0)
         H5E_THROW(dimension_break, H5E_tools_min_id_g, "H5Sget_select_hyper_nblocks failed");
 
@@ -1675,7 +1690,7 @@ h5tools_dump_region_data_blocks(hid_t region_space, hid_t region_id,
 
     ctx->need_prefix = TRUE;
 
-    h5tools_print_region_data_blocks(region_id, rawdatastream, info, *ctx,
+    h5tools_print_region_data_blocks(region_id, rawdatastream, info, ctx,
         buffer, ncols, ndims, type_id, nblocks, ptdata);
 
  done:
@@ -1734,7 +1749,7 @@ h5tools_dump_region_data_blocks(hid_t region_space, hid_t region_id,
  */
 int
 h5tools_print_region_data_points(hid_t region_space, hid_t region_id,
-        FILE *stream, const h5tool_format_t *info, h5tools_context_t ctx,
+        FILE *stream, const h5tool_format_t *info, h5tools_context_t *cur_ctx,
         h5tools_str_t *buffer, size_t ncols,
         int ndims, hid_t type_id, hssize_t npoints, hsize_t *ptdata)
 {
@@ -1743,82 +1758,96 @@ h5tools_print_region_data_points(hid_t region_space, hid_t region_id,
     hsize_t  elmtno; /* elemnt index  */
     unsigned int region_flags; /* buffer extent flags */
     hsize_t  curr_pos;
-    size_t   indx;
-    int      jndx;
+    hsize_t  total_size[H5S_MAX_RANK];
+    int      indx;
+    size_t   jndx;
     int      type_size;
     hid_t    mem_space = -1;
     void    *region_buf = NULL;
     int      ret_value = SUCCEED;
+    h5tools_context_t ctx;
 
-    if((type_size = H5Tget_size(type_id)) == 0)
-        HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Tget_size failed");
-
-    if((region_buf = HDmalloc(type_size * npoints)) == NULL)
-        HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for region");
+    assert(info);
+    assert(cur_ctx);
+    assert(buffer);
+    assert(ptdata);
 
+    memset(&ctx, 0, sizeof(ctx));
     /* Allocate space for the dimension array */
     if((dims1 = (hsize_t *) HDmalloc(sizeof(hsize_t) * ndims)) == NULL)
         HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for dims");
 
     dims1[0] = npoints;
+    
+    /* Create dataspace for reading buffer */
     if((mem_space = H5Screate_simple(1, dims1, NULL)) < 0)
         HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Screate_simple failed");
 
+    if((type_size = H5Tget_size(type_id)) == 0)
+        HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Tget_size failed");
+
+    if((region_buf = HDmalloc(type_size * npoints)) == NULL)
+        HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "Could not allocate buffer for region");
+
+    curr_pos = 0;
+    ctx.indent_level = cur_ctx->indent_level;
+    ctx.cur_column = cur_ctx->cur_column;
+    ctx.prev_multiline = cur_ctx->prev_multiline;
+    ctx.ndims = ndims;
+
     if(H5Dread(region_id, type_id, mem_space, region_space, H5P_DEFAULT, region_buf) < 0)
         HGOTO_ERROR(FAIL, H5E_tools_min_id_g, "H5Dread failed");
 
     elmtno = 0;
-    curr_pos = 0;
     for (jndx = 0; jndx < npoints; jndx++, elmtno++) {
-        ctx.ndims = ndims;
         ctx.need_prefix = TRUE;
         ctx.cur_elmt = 0;    /* points are always 0 */
 
-        /* Render the point element begin */
-        h5tools_str_reset(buffer);
-
         ctx.indent_level++;
+        if(H5Sget_simple_extent_dims(mem_space, total_size, NULL) < 0)
+            HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Sget_simple_extent_dims failed");
 
         /* assume entire data space to be printed */
         for (indx = 0; indx < (size_t) ctx.ndims; indx++)
             ctx.p_min_idx[indx] = 0;
-        if(H5Sget_simple_extent_dims(region_space, ctx.p_max_idx, NULL) < 0)
-            HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Sget_simple_extent_dims failed");
-
-        if (ctx.ndims > 0) {
-            ctx.size_last_dim = (int) (ctx.p_max_idx[ctx.ndims - 1]);
-        }
-        else
-            ctx.size_last_dim = 0;
-
-        if (ctx.ndims > 0)
-            init_acc_pos(&ctx, ctx.p_max_idx);
+        init_acc_pos(&ctx, total_size);
 
         /* print the data */
         region_flags = START_OF_DATA;
         if (jndx == npoints - 1)
             region_flags |= END_OF_DATA;
 
-        curr_pos = 0;    /* points requires constant 0 */
+        for (indx = 0; indx < (size_t)ctx.ndims; indx++)
+            ctx.p_max_idx[indx] = cur_ctx->p_max_idx[indx];
+
         ctx.sm_pos = jndx * ndims;
+        if (ctx.ndims > 0) {
+            ctx.size_last_dim = (int) (ctx.p_max_idx[ctx.ndims - 1]);
+        }
+        else
+            ctx.size_last_dim = 0;
 
+        curr_pos = 0;    /* points requires constant 0 */
         h5tools_region_simple_prefix(stream, info, &ctx, curr_pos, ptdata, 0);
 
+        /* Render the point element begin */
+        h5tools_str_reset(buffer);
+
+        h5tools_str_append(buffer, "%s", jndx ? OPTIONAL_LINE_BREAK "" : "");
         h5tools_str_sprint(buffer, info, region_id, type_id,
                                ((char*)region_buf + jndx * type_size), &ctx);
 
         if (jndx + 1 < npoints || (region_flags & END_OF_DATA) == 0)
             h5tools_str_append(buffer, "%s", OPT(info->elmt_suf1, ","));
 
-        dimension_break =
-                h5tools_render_region_element(stream, info, &ctx, buffer, &curr_pos,
-                                                ncols, ptdata, (hsize_t)0, elmtno);
+        dimension_break = h5tools_render_region_element(stream, info, &ctx, buffer, &curr_pos,
+                                                                ncols, ptdata, (hsize_t)0, elmtno);
         /* Render the point element end */
-
-        ctx.indent_level--;
         if(FALSE == dimension_break)
             elmtno = 0;
-    } /* end for (jndx = 0; jndx < npoints; jndx++, region_elmtno++) */
+
+        ctx.indent_level--;
+    } /* end for (jndx = 0; jndx < npoints; jndx++, elmtno++) */
 
  done:
     HDfree(region_buf);
@@ -1868,6 +1897,10 @@ h5tools_dump_region_data_points(hid_t region_space, hid_t region_id,
     hid_t    dtype;
     hid_t    type_id;
 
+    assert(info);
+    assert(ctx);
+    assert(buffer);
+
     if((npoints = H5Sget_select_elem_npoints(region_space)) <= 0)
         H5E_THROW(dimension_break, H5E_tools_min_id_g, "H5Sget_select_elem_npoints failed");
 
@@ -1977,7 +2010,7 @@ h5tools_dump_region_data_points(hid_t region_space, hid_t region_id,
     ctx->need_prefix = TRUE;
 
     h5tools_print_region_data_points(region_space, region_id,
-            rawdatastream, info, *ctx, buffer, ncols, ndims, type_id, npoints, ptdata);
+            rawdatastream, info, ctx, buffer, ncols, ndims, type_id, npoints, ptdata);
 
  done:
     free(ptdata);
@@ -2424,7 +2457,7 @@ h5tools_dump_simple_subset(FILE *stream, const h5tool_format_t *info, hid_t dset
     /* Terminate the output */
     if (ctx.cur_column) {
         fputs(OPT(info->line_suf, ""), stdout);
-        putc('\n', stdout); 
+        putc('\n', stdout);
         fputs(OPT(info->line_sep, ""), stdout);
     }
 
@@ -2532,7 +2565,7 @@ h5tools_dump_simple_dset(FILE *stream, const h5tool_format_t *info,
         vl_data = TRUE;
     if (H5Tdetect_class(p_type, H5T_VLEN) == TRUE)
         vl_data = TRUE;
- 
+
     /*
      * Determine the strip mine size and allocate a buffer. The strip mine is
      * a hyperslab whose size is manageable.
@@ -2550,6 +2583,9 @@ h5tools_dump_simple_dset(FILE *stream, const h5tool_format_t *info,
         }
     }
 
+    if(!sm_nbytes)
+        goto done;
+
     assert(sm_nbytes == (hsize_t)((size_t)sm_nbytes)); /*check for overflow*/
     sm_buf = (unsigned char *)HDmalloc((size_t)sm_nbytes);
 
@@ -2624,11 +2660,12 @@ h5tools_dump_simple_dset(FILE *stream, const h5tool_format_t *info,
         fputs(OPT(info->line_sep, ""), stream);
     }
 
+    HDfree(sm_buf);
+
+done:
     H5Sclose(sm_space);
     H5Sclose(f_space);
 
-    HDfree(sm_buf);
-
     return SUCCEED;
 }
 
@@ -3189,7 +3226,12 @@ h5tools_print_datatype(h5tools_str_t *buffer, const h5tool_format_t *info,
     case H5T_OPAQUE:
         h5tools_str_append(buffer, "\n");
         h5tools_str_append(buffer, "H5T_OPAQUE;\n");
-        h5tools_str_append(buffer, "OPAQUE_TAG \"%s\";\n", H5Tget_tag(type));
+        {
+           char *ttag = H5Tget_tag(type);
+           h5tools_str_append(buffer, "OPAQUE_TAG \"%s\";\n", ttag);
+           if (ttag)
+              HDfree(ttag);
+        } 
         break;
 
     case H5T_COMPOUND:
@@ -4226,8 +4268,7 @@ render_bin_output_region_data_points(hid_t region_space, hid_t region_id,
         if(H5Sget_simple_extent_dims(region_space, dims1, NULL) < 0)
             HERROR(H5E_tools_g, H5E_tools_min_id_g, "H5Sget_simple_extent_dims failed");
 
-        render_bin_output(stream, container, type_id,
-                               ((char*)region_buf + jndx * type_size));
+        render_bin_output(stream, container, type_id, ((char*)region_buf + jndx * type_size));
     } /* end for (jndx = 0; jndx < npoints; jndx++) */
 
  done:
@@ -4324,3 +4365,45 @@ hbool_t h5tools_is_zero(const void *_mem, size_t size)
     return TRUE;
 }
 
+/*-------------------------------------------------------------------------
+ * Function:    h5tools_is_obj_same
+ *
+ * Purpose: Check if two given object IDs or link names point to the same object.
+ *
+ * Parameters:
+ *             hid_t loc_id1: location of the first object
+ *             char *name1:   link name of the first object.
+ *                             Use "." or NULL if loc_id1 is the object to be compared.
+ *             hid_t loc_id2: location of the second object
+ *             char *name1:   link name of the first object.
+ *                             Use "." or NULL if loc_id2 is the object to be compared.
+ *
+ * Return:  TRUE if it is the same object; FALSE otherwise.
+ *
+ * Programmer: Peter Cao
+ *             4/27/2011
+  *
+ *-------------------------------------------------------------------------
+ */
+hbool_t h5tools_is_obj_same(hid_t loc_id1, const char *name1,
+                        hid_t loc_id2, const char *name2)
+{
+    H5O_info_t oinfo1,  oinfo2;
+    hbool_t ret_val = 0;
+
+    if ( name1 && strcmp(name1, "."))
+      H5Oget_info_by_name(loc_id1, name1, &oinfo1, H5P_DEFAULT);
+    else
+      H5Oget_info(loc_id1, &oinfo1);
+
+    if ( name2 && strcmp(name2, "."))
+      H5Oget_info_by_name(loc_id2, name2, &oinfo2, H5P_DEFAULT);
+    else
+      H5Oget_info(loc_id2, &oinfo2);
+
+    if (oinfo1.fileno == oinfo2.fileno && oinfo1.addr==oinfo2.addr)
+      ret_val = 1;
+
+    return ret_val;
+}
+
diff --git a/tools/lib/h5tools.h b/tools/lib/h5tools.h
index fcfebc0..1b2014a 100644
--- a/tools/lib/h5tools.h
+++ b/tools/lib/h5tools.h
@@ -529,13 +529,10 @@ struct subset_t {
 #ifdef __cplusplus
 extern "C" {
 #endif
-    
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
+
 H5TOOLS_DLLVAR int     packed_bits_num;       /* number of packed bits to display */
 H5TOOLS_DLLVAR int     packed_data_offset;    /* offset of packed bits to display */
 H5TOOLS_DLLVAR unsigned long long packed_data_mask;  /* mask in which packed bits to display */
-#endif
-
 H5TOOLS_DLLVAR FILE   *rawdatastream;       /* output stream for raw data */
 H5TOOLS_DLLVAR int     bin_output;          /* binary output */
 H5TOOLS_DLLVAR int     bin_form;            /* binary form */
@@ -561,6 +558,7 @@ H5TOOLS_DLL hid_t    h5tools_get_big_endian_type(hid_t type);
 
 H5TOOLS_DLL htri_t   h5tools_detect_vlen(hid_t tid);
 H5TOOLS_DLL htri_t   h5tools_detect_vlen_str(hid_t tid);
+H5TOOLS_DLL hbool_t   h5tools_is_obj_same(hid_t loc_id1, const char *name1, hid_t loc_id2, const char *name2);
 
 H5TOOLS_DLL void     h5tools_dump_simple_data(FILE *stream, const h5tool_format_t *info, hid_t container,
                          h5tools_context_t *ctx/*in,out*/, unsigned flags,
diff --git a/tools/lib/h5tools_str.c b/tools/lib/h5tools_str.c
index 7630e9a..e7d920c 100644
--- a/tools/lib/h5tools_str.c
+++ b/tools/lib/h5tools_str.c
@@ -281,12 +281,14 @@ h5tools_str_fmt(h5tools_str_t *str/*in,out*/, size_t start, const char *fmt)
      * don't bother because we don't need a temporary copy.
      */
     if (strchr(fmt, '%')) {
-        if (str->len - start + 1 > sizeof(_temp)) {
-            temp = malloc(str->len - start + 1);
+        size_t n = sizeof(_temp);
+        if (str->len - start + 1 > n) {
+            n = str->len - start + 1; 
+            temp = malloc(n);
             assert(temp);
         }
 
-        strcpy(temp, str->s + start);
+        HDstrncpy(temp, str->s + start, n);
     }
 
     /* Reset the output string and append a formatted version */
@@ -388,8 +390,12 @@ h5tools_str_region_prefix(h5tools_str_t *str, const h5tool_format_t *info,
             p_prod[i - 1] = (max_idx[i]) * p_prod[i];
 
         for (i = 0; i < (size_t) ndims; i++) {
-            ctx->pos[i] = curr_pos / p_prod[i];
-            curr_pos -= p_prod[i] * ctx->pos[i];
+            if(curr_pos > 0) {
+                ctx->pos[i] = curr_pos / p_prod[i];
+                curr_pos -= p_prod[i] * ctx->pos[i];
+            }
+            else
+                ctx->pos[i] = 0;
             ctx->pos[i] += (unsigned long) ptdata[ctx->sm_pos+i];
         }
 
@@ -641,6 +647,14 @@ h5tools_print_char(h5tools_str_t *str, const h5tool_format_t *info, char ch)
  *
  *  PVN, 28 March 2006
  *  added H5T_NATIVE_LDOUBLE case
+ * 
+ *  Raymond Lu, 2011-09-01
+ *  CLANG compiler complained about the line (about 800):
+ *  	tempint = (tempint >> packed_data_offset) & packed_data_mask;
+ *  The right shift may cause undefined behavior if PACKED_DATA_OFFSET is 
+ *  32-bit or more. For every kind of native integers, I changed the code 
+ *  to make it zero if PACKED_DATA_OFFSET is greater than or equal to the
+ *  size of integer.
  *-------------------------------------------------------------------------
  */
 char *
@@ -669,8 +683,8 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
 
     /* Build default formats for long long types */
     if (!fmt_llong[0]) {
-        sprintf(fmt_llong, "%%%sd", H5_PRINTF_LL_WIDTH);
-        sprintf(fmt_ullong, "%%%su", H5_PRINTF_LL_WIDTH);
+        HDsnprintf(fmt_llong, sizeof(fmt_llong), "%%%sd", H5_PRINTF_LL_WIDTH);
+        HDsnprintf(fmt_ullong, sizeof(fmt_ullong), "%%%su", H5_PRINTF_LL_WIDTH);
     }
 
     /* Append value depending on data type */
@@ -795,98 +809,112 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
     }
     else if (H5Tequal(type, H5T_NATIVE_INT)) {
         HDmemcpy(&tempint, vp, sizeof(int));
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
         if(packed_bits_num) {
-            tempint = (tempint >> packed_data_offset) & packed_data_mask;
+            if(packed_data_offset >= 8*sizeof(int))
+                tempint = 0;
+            else
+                tempint = (tempint >> packed_data_offset) & packed_data_mask;
         }
-#endif
         h5tools_str_append(str, OPT(info->fmt_int, "%d"), tempint);
     }
     else if (H5Tequal(type, H5T_NATIVE_UINT)) {
         HDmemcpy(&tempuint, vp, sizeof(unsigned int));
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
         if(packed_bits_num) {
-            tempuint = (tempuint >> packed_data_offset) & packed_data_mask;
+            if(packed_data_offset >= 8*sizeof(unsigned int))
+                tempuint = 0;
+            else
+                tempuint = (tempuint >> packed_data_offset) & packed_data_mask;
         }
-#endif
         h5tools_str_append(str, OPT(info->fmt_uint, "%u"), tempuint);
     }
     else if (H5Tequal(type, H5T_NATIVE_SCHAR)) {
-        char               tempchar;
+        signed char        tempchar;
         HDmemcpy(&tempchar, cp_vp, sizeof(char));
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
         if(packed_bits_num) {
-            tempchar = (tempchar >> packed_data_offset) & packed_data_mask;
+            if(packed_data_offset >= 8*sizeof(char))
+                tempchar = 0;
+            else
+                tempchar = (tempchar >> packed_data_offset) & packed_data_mask;
         }
-#endif
+#ifdef H5_VMS
+        h5tools_str_append(str, OPT(info->fmt_schar, "%hd"), tempchar);
+#else
         h5tools_str_append(str, OPT(info->fmt_schar, "%hhd"), tempchar);
+#endif
     }
     else if (H5Tequal(type, H5T_NATIVE_UCHAR)) {
         unsigned char      tempuchar;
         HDmemcpy(&tempuchar, ucp_vp, sizeof(unsigned char));
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
         if(packed_bits_num) {
-            tempuchar = (tempuchar >> packed_data_offset) & packed_data_mask;
+            if(packed_data_offset >= 8*sizeof(unsigned char))
+                tempuchar = 0;
+            else
+                tempuchar = (tempuchar >> packed_data_offset) & packed_data_mask;
         }
-#endif
         h5tools_str_append(str, OPT(info->fmt_uchar, "%u"), tempuchar);
     }
     else if (H5Tequal(type, H5T_NATIVE_SHORT)) {
         short tempshort;
 
         HDmemcpy(&tempshort, vp, sizeof(short));
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
         if(packed_bits_num) {
-            tempshort = (tempshort >> packed_data_offset) & packed_data_mask;
+            if(packed_data_offset >= 8*sizeof(short))
+                tempshort = 0;
+            else
+                tempshort = (tempshort >> packed_data_offset) & packed_data_mask;
         }
-#endif
         h5tools_str_append(str, OPT(info->fmt_short, "%d"), tempshort);
     }
     else if (H5Tequal(type, H5T_NATIVE_USHORT)) {
         unsigned short tempushort;
 
         HDmemcpy(&tempushort, vp, sizeof(unsigned short));
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
         if(packed_bits_num) {
-            tempushort = (tempushort >> packed_data_offset) & packed_data_mask;
+            if(packed_data_offset >= 8*sizeof(unsigned short))
+                tempushort = 0;
+            else
+                tempushort = (tempushort >> packed_data_offset) & packed_data_mask;
         }
-#endif
         h5tools_str_append(str, OPT(info->fmt_ushort, "%u"), tempushort);
     }
     else if (H5Tequal(type, H5T_NATIVE_LONG)) {
         HDmemcpy(&templong, vp, sizeof(long));
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
         if(packed_bits_num) {
-            templong = (templong >> packed_data_offset) & packed_data_mask;
+            if(packed_data_offset >= 8*sizeof(long))
+                templong = 0;
+            else
+                templong = (templong >> packed_data_offset) & packed_data_mask;
         }
-#endif
         h5tools_str_append(str, OPT(info->fmt_long, "%ld"), templong);
     }
     else if (H5Tequal(type, H5T_NATIVE_ULONG)) {
         HDmemcpy(&tempulong, vp, sizeof(unsigned long));
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
         if(packed_bits_num) {
-            tempulong = (tempulong >> packed_data_offset) & packed_data_mask;
+            if(packed_data_offset >= 8*sizeof(unsigned long))
+                tempulong = 0;
+            else
+                tempulong = (tempulong >> packed_data_offset) & packed_data_mask;
         }
-#endif
         h5tools_str_append(str, OPT(info->fmt_ulong, "%lu"), tempulong);
     }
     else if (H5Tequal(type, H5T_NATIVE_LLONG)) {
         HDmemcpy(&templlong, vp, sizeof(long long));
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
         if(packed_bits_num) {
-            templlong = (templlong >> packed_data_offset) & packed_data_mask;
+            if(packed_data_offset >= 8*sizeof(long long))
+                templlong = 0;
+            else
+                templlong = (templlong >> packed_data_offset) & packed_data_mask;
         }
-#endif
         h5tools_str_append(str, OPT(info->fmt_llong, fmt_llong), templlong);
     }
     else if (H5Tequal(type, H5T_NATIVE_ULLONG)) {
         HDmemcpy(&tempullong, vp, sizeof(unsigned long long));
-#ifdef H5_HAVE_H5DUMP_PACKED_BITS
         if(packed_bits_num) {
-            tempullong = (tempullong >> packed_data_offset) & packed_data_mask;
+            if(packed_data_offset >= 8*sizeof(unsigned long long))
+                tempullong = 0;
+            else
+                tempullong = (tempullong >> packed_data_offset) & packed_data_mask;
         }
-#endif
         h5tools_str_append(str, OPT(info->fmt_ullong, fmt_ullong), tempullong);
     }
     else if (H5Tequal(type, H5T_NATIVE_HSSIZE)) {
@@ -1056,6 +1084,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
     else if (H5Tget_class(type) == H5T_ARRAY) {
         int k, ndims;
         hsize_t i, dims[H5S_MAX_RANK], temp_nelmts;
+        static int is_next_arry_elmt=0;
 
         /* Get the array's base datatype for each element */
         memb = H5Tget_super(type);
@@ -1091,12 +1120,31 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
                 for (x = 0; x < ctx->indent_level + 1; x++)
                     h5tools_str_append(str, "%s", OPT(info->line_indent, ""));
             } /* end if */
-            else if (i && info->arr_sep)
-                h5tools_str_append(str, " ");
+            else if (i && info->arr_sep) {
+                /* if next element begin, add next line with indent */
+                if (is_next_arry_elmt) {
+                    int x;
+                    is_next_arry_elmt = 0;
+
+                    h5tools_str_append(str, "%s", "\n ");
+
+                    if (ctx->indent_level >= 0)
+                        if (!info->pindex)
+                            h5tools_str_append(str, "%s", OPT(info->line_pre, ""));
+
+                    for (x = 0; x < ctx->indent_level + 1; x++)
+                        h5tools_str_append(str, "%s", OPT(info->line_indent, ""));
+                }
+                /* otherwise just add space */
+                else
+                    h5tools_str_append(str, " ");
+                
+            } /* end else if */
 
             ctx->indent_level++;
 
-            /* Dump the array element */
+            /* Dump values in an array element */
+            is_next_arry_elmt = 0; /* dump all values in the array element, so turn it off */
             h5tools_str_sprint(str, info, container, memb, cp_vp + i * size, ctx);
 
             ctx->indent_level--;
@@ -1104,6 +1152,7 @@ h5tools_str_sprint(h5tools_str_t *str, const h5tool_format_t *info, hid_t contai
 
         /* Print the closing bracket */
         h5tools_str_append(str, "%s", OPT(info->arr_suf, "]"));
+        is_next_arry_elmt = 1; /* set for begining of next array element */
         H5Tclose(memb);
     }
     else if (H5Tget_class(type) == H5T_VLEN) {
@@ -1272,7 +1321,7 @@ h5tools_escape(char *s/*in,out*/, size_t size)
             break;
         default:
             if (!isprint(s[i])) {
-                sprintf(octal, "\\%03o", (unsigned char) s[i]);
+                HDsnprintf(octal, sizeof(octal), "\\%03o", (unsigned char) s[i]);
                 escape = octal;
             }
             else {
diff --git a/tools/lib/h5tools_utils.c b/tools/lib/h5tools_utils.c
index b1df66e..ab8536f 100644
--- a/tools/lib/h5tools_utils.c
+++ b/tools/lib/h5tools_utils.c
@@ -178,6 +178,24 @@ warn_msg(const char *fmt, ...)
     va_end(ap);
 }
 
+/*-------------------------------------------------------------------------
+ * Function:  help_ref_msg
+ *
+ * Purpose: Print a message to refer help page 
+ *
+ * Return:  Nothing
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+void
+help_ref_msg(FILE *output)
+{
+    HDfprintf(output, "Try '-h' or '--help' for more information or ");
+    HDfprintf(output, "see the <%s> entry in the 'HDF5 Reference Manual'.\n",h5tools_getprogname());
+}
+
 
 /*-------------------------------------------------------------------------
  * Function:    get_option
@@ -785,10 +803,12 @@ H5tools_get_symlink_info(hid_t file_id, const char * linkpath, h5tool_link_info_
      * follow object in other file
      */
     if(link_info->linfo.type == H5L_TYPE_EXTERNAL) {
-        fapl = H5Pcreate(H5P_FILE_ACCESS);
+        if((fapl = H5Pcreate(H5P_FILE_ACCESS)) < 0)
+            goto out;
         if(H5Pset_fapl_sec2(fapl) < 0)
             goto out;
-        lapl = H5Pcreate(H5P_LINK_ACCESS);
+        if((lapl = H5Pcreate(H5P_LINK_ACCESS)) < 0)
+            goto out;
         if(H5Pset_elink_fapl(lapl, fapl) < 0)
             goto out;
     } /* end if */
diff --git a/tools/lib/h5tools_utils.h b/tools/lib/h5tools_utils.h
index 88ab7ea..4d356c7 100644
--- a/tools/lib/h5tools_utils.h
+++ b/tools/lib/h5tools_utils.h
@@ -29,8 +29,14 @@ extern "C" {
 #endif
 
 /* ``parallel_print'' information */
-#define PRINT_DATA_MAX_SIZE 	512
-#define OUTBUFF_SIZE 		(PRINT_DATA_MAX_SIZE*4)
+#define PRINT_DATA_MAX_SIZE   512
+#define OUTBUFF_SIZE     (PRINT_DATA_MAX_SIZE*4)
+
+H5TOOLS_DLLVAR int  g_nTasks;
+H5TOOLS_DLLVAR unsigned char g_Parallel;
+H5TOOLS_DLLVAR char    outBuff[];
+H5TOOLS_DLLVAR int  outBuffOffset;
+H5TOOLS_DLLVAR FILE *   overflow_file;
 
 /*
  * begin get_option section
@@ -41,7 +47,7 @@ H5TOOLS_DLLVAR const char *opt_arg;     /* flag argument (or value)
 
 enum {
     no_arg = 0,         /* doesn't take an argument     */
-    require_arg,        /* requires an argument	        */
+    require_arg,        /* requires an argument          */
     optional_arg        /* argument is optional         */
 };
 
@@ -52,23 +58,23 @@ enum {
  * the option. The long options are specified in the following way:
  *
  * struct long_options foo[] = {
- * 	{ "filename", require_arg, 'f' },
- * 	{ "append", no_arg, 'a' },
- * 	{ "width", require_arg, 'w' },
- * 	{ NULL, 0, 0 }
+ *   { "filename", require_arg, 'f' },
+ *   { "append", no_arg, 'a' },
+ *   { "width", require_arg, 'w' },
+ *   { NULL, 0, 0 }
  * };
  *
  * Long named options can have arguments specified as either:
  *
- * 	``--param=arg'' or ``--param arg''
+ *   ``--param=arg'' or ``--param arg''
  *
  * Short named options can have arguments specified as either:
  *
- * 	``-w80'' or ``-w 80''
+ *   ``-w80'' or ``-w 80''
  *
  * and can have more than one short named option specified at one time:
  *
- * 	-aw80
+ *   -aw80
  *
  * in which case those options which expect an argument need to come at the
  * end.
@@ -117,6 +123,7 @@ H5TOOLS_DLL void     print_version(const char *progname);
 H5TOOLS_DLL void     parallel_print(const char* format, ... );
 H5TOOLS_DLL void     error_msg(const char *fmt, ...);
 H5TOOLS_DLL void     warn_msg(const char *fmt, ...);
+H5TOOLS_DLL void     help_ref_msg(FILE *output);
 H5TOOLS_DLL void     free_table(table_t *table);
 #ifdef H5DUMP_DEBUG
 H5TOOLS_DLL void     dump_tables(find_objs_t *info)
@@ -125,7 +132,7 @@ H5TOOLS_DLL herr_t init_objs(hid_t fid, find_objs_t *info, table_t **group_table
     table_t **dset_table, table_t **type_table);
 H5TOOLS_DLL obj_t   *search_obj(table_t *temp, haddr_t objno);
 #ifndef H5_HAVE_TMPFILE
-H5TOOLS_DLL FILE *	tmpfile(void);
+H5TOOLS_DLL FILE *  tmpfile(void);
 #endif
 
 /*************************************************************
@@ -167,4 +174,4 @@ H5TOOLS_DLL void     h5tools_setstatus(int d_status);
 }
 #endif
 
-#endif	/* H5TOOLS_UTILS_H__ */
+#endif  /* H5TOOLS_UTILS_H__ */
diff --git a/tools/lib/h5trav.c b/tools/lib/h5trav.c
index 5195261..c3cfddf 100644
--- a/tools/lib/h5trav.c
+++ b/tools/lib/h5trav.c
@@ -307,6 +307,8 @@ trav_info_add(trav_info_t *info, const char *path, h5trav_type_t obj_type)
     idx = info->nused++;
     info->paths[idx].path = HDstrdup(path);
     info->paths[idx].type = obj_type;
+    info->paths[idx].fileno = 0;
+    info->paths[idx].objno = HADDR_UNDEF;
 } /* end trav_info_add() */
 
 
@@ -327,10 +329,18 @@ int
 trav_info_visit_obj(const char *path, const H5O_info_t *oinfo,
     const char UNUSED *already_visited, void *udata)
 {
+    size_t idx;
+    trav_info_t *info_p;
     /* Add the object to the 'info' struct */
     /* (object types map directly to "traversal" types) */
     trav_info_add((trav_info_t *)udata, path, (h5trav_type_t)oinfo->type);
 
+    /* set object addr and fileno. These are for checking same object */
+    info_p = (trav_info_t *) udata;
+    idx = info_p->nused - 1;
+    info_p->paths[idx].objno = oinfo->addr;
+    info_p->paths[idx].fileno = oinfo->fileno;
+
     return(0);
 } /* end trav_info_visit_obj() */
 
@@ -656,6 +666,7 @@ trav_table_add(trav_table_t *table,
     new = table->nobjs++;
     table->objs[new].objno = oinfo ? oinfo->addr : HADDR_UNDEF;
     table->objs[new].flags[0] = table->objs[new].flags[1] = 0;
+    table->objs[new].is_same_trgobj = 0;
     table->objs[new].name = (char *)HDstrdup(path);
     table->objs[new].type = oinfo ? (h5trav_type_t)oinfo->type : H5TRAV_TYPE_LINK;
     table->objs[new].nlinks = 0;
@@ -739,6 +750,7 @@ void trav_table_addflags(unsigned *flags,
     table->objs[new].objno = 0;
     table->objs[new].flags[0] = flags[0];
     table->objs[new].flags[1] = flags[1];
+    table->objs[new].is_same_trgobj = 0;
     table->objs[new].name = (char *)HDstrdup(name);
     table->objs[new].type = type;
     table->objs[new].nlinks = 0;
diff --git a/tools/lib/h5trav.h b/tools/lib/h5trav.h
index 8eb93fa..da8dc69 100644
--- a/tools/lib/h5trav.h
+++ b/tools/lib/h5trav.h
@@ -65,6 +65,8 @@ typedef struct symlink_trav_t {
 typedef struct trav_path_t {
     char      *path;
     h5trav_type_t type;
+    haddr_t     objno;     /* object address */
+    unsigned long 	fileno; /* File number that object is located in */
 } trav_path_t;
 
 typedef struct trav_info_t {
@@ -95,6 +97,7 @@ typedef struct trav_link_t {
 typedef struct trav_obj_t {
     haddr_t     objno;     /* object address */
     unsigned    flags[2];  /* h5diff.object is present or not in both files*/
+    hbool_t     is_same_trgobj; /* same target object? no need to compare */
     char        *name;     /* name */
     h5trav_type_t type;    /* type of object */
     trav_link_t *links;    /* array of possible link names */
diff --git a/tools/lib/ph5diff.h b/tools/lib/ph5diff.h
index eb15f12..becbd6c 100644
--- a/tools/lib/ph5diff.h
+++ b/tools/lib/ph5diff.h
@@ -17,37 +17,31 @@
 #define _PH5DIFF_H__
 
 /* Send from manager to workers */
-#define MPI_TAG_ARGS		1
-#define MPI_TAG_PRINT_TOK	2
+#define MPI_TAG_ARGS    1
+#define MPI_TAG_PRINT_TOK  2
 
 /*Sent from workers to manager */
-#define MPI_TAG_TOK_REQUEST	3
-#define MPI_TAG_DONE		4
-#define MPI_TAG_TOK_RETURN	5
-#define MPI_TAG_PRINT_DATA	6
+#define MPI_TAG_TOK_REQUEST  3
+#define MPI_TAG_DONE    4
+#define MPI_TAG_TOK_RETURN  5
+#define MPI_TAG_PRINT_DATA  6
 
 /* Operational tags used to init and complete diff */
-#define MPI_TAG_END		7
-#define MPI_TAG_PARALLEL	8
+#define MPI_TAG_END    7
+#define MPI_TAG_PARALLEL  8
 
-H5TOOLS_DLLVAR int	g_nTasks;
-H5TOOLS_DLLVAR unsigned char g_Parallel;
-H5TOOLS_DLLVAR char    outBuff[];
-H5TOOLS_DLLVAR int	outBuffOffset;
-H5TOOLS_DLLVAR FILE *	overflow_file;
-
-struct diff_args
+struct diff_mpi_args
 {
-    char	name1[256];
-    char	name2[256];
-    h5trav_type_t   type;
-    diff_opt_t	options;
+    char  name1[256];
+    char  name2[256];
+    diff_opt_t  options;
+    diff_args_t argdata;  /* rest args */
 };
 
 struct diffs_found
 {
     hsize_t nfound;
-    int	    not_cmp;
+    int      not_cmp;
 };
 
 #ifdef H5_HAVE_PARALLEL
diff --git a/tools/misc/CMakeLists.txt b/tools/misc/CMakeLists.txt
index b4e7078..3e9fe69 100644
--- a/tools/misc/CMakeLists.txt
+++ b/tools/misc/CMakeLists.txt
@@ -134,14 +134,18 @@ IF (BUILD_TESTING)
                   ${PROJECT_BINARY_DIR}/${resultfile}.out
                   ${PROJECT_BINARY_DIR}/${resultfile}.out.err
       )
+      IF (NOT "${last_test}" STREQUAL "")
+        SET_TESTS_PROPERTIES (H5MKGRP-clear-${resultfile}${resultoption} PROPERTIES DEPENDS ${last_test})
+      ENDIF (NOT "${last_test}" STREQUAL "")
       ADD_TEST (
           NAME H5MKGRP-${resultfile}${resultoption}
           COMMAND $<TARGET_FILE:h5mkgrp> ${resultoption} ${PROJECT_BINARY_DIR}/../testfiles/${resultfile}.h5 ${ARGN}
       )
       SET_TESTS_PROPERTIES (H5MKGRP-${resultfile}${resultoption} PROPERTIES DEPENDS H5MKGRP-clear-${resultfile}${resultoption})
+      SET (last_test "H5MKGRP-${resultfile}${resultoption}")
       IF (NOT HDF5_ENABLE_USING_MEMCHECKER)
         ADD_TEST (
-            NAME H5MKGRP-H5LS-${resultfile}${resultoption}
+            NAME H5MKGRP-h5ls-${resultfile}${resultoption}
             COMMAND "${CMAKE_COMMAND}"
                 -D "TEST_PROGRAM=$<TARGET_FILE:h5ls>"
                 -D "TEST_ARGS:STRING=-v;-r;../testfiles/${resultfile}.h5"
@@ -152,7 +156,8 @@ IF (BUILD_TESTING)
                 -D "TEST_REFERENCE=${resultfile}.ls"
                 -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
         )
-        SET_TESTS_PROPERTIES (H5MKGRP-H5LS-${resultfile}${resultoption} PROPERTIES DEPENDS H5MKGRP-${resultfile}${resultoption})
+        SET_TESTS_PROPERTIES (H5MKGRP-h5ls-${resultfile}${resultoption} PROPERTIES DEPENDS H5MKGRP-${resultfile}${resultoption})
+        SET (last_test "H5MKGRP-h5ls-${resultfile}${resultoption}")
       ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER)
     ELSE (NOT ${resultoption} STREQUAL " ")
       ADD_TEST (
@@ -163,14 +168,18 @@ IF (BUILD_TESTING)
                   ${PROJECT_BINARY_DIR}/${resultfile}.out
                   ${PROJECT_BINARY_DIR}/${resultfile}.out.err
       )
+      IF (NOT "${last_test}" STREQUAL "")
+        SET_TESTS_PROPERTIES (H5MKGRP-clear-${resultfile} PROPERTIES DEPENDS ${last_test})
+      ENDIF (NOT "${last_test}" STREQUAL "")
       ADD_TEST (
           NAME H5MKGRP-${resultfile}
           COMMAND $<TARGET_FILE:h5mkgrp> ${PROJECT_BINARY_DIR}/../testfiles/${resultfile}.h5 ${ARGN}
       )
       SET_TESTS_PROPERTIES (H5MKGRP-${resultfile} PROPERTIES DEPENDS H5MKGRP-clear-${resultfile})
+      SET (last_test "H5MKGRP-${resultfile}")
       IF (NOT HDF5_ENABLE_USING_MEMCHECKER)
         ADD_TEST (
-            NAME H5MKGRP-H5LS-${resultfile}
+            NAME H5MKGRP-h5ls-${resultfile}
             COMMAND "${CMAKE_COMMAND}"
                 -D "TEST_PROGRAM=$<TARGET_FILE:h5ls>"
                 -D "TEST_ARGS:STRING=-v;-r;../testfiles/${resultfile}.h5"
@@ -181,7 +190,8 @@ IF (BUILD_TESTING)
                 -D "TEST_REFERENCE=${resultfile}.ls"
                 -P "${HDF5_RESOURCES_DIR}/runTest.cmake"
         )
-        SET_TESTS_PROPERTIES (H5MKGRP-H5LS-${resultfile} PROPERTIES DEPENDS H5MKGRP-${resultfile})
+        SET_TESTS_PROPERTIES (H5MKGRP-h5ls-${resultfile} PROPERTIES DEPENDS H5MKGRP-${resultfile})
+        SET (last_test "H5MKGRP-h5ls-${resultfile}")
       ENDIF (NOT HDF5_ENABLE_USING_MEMCHECKER)
     ENDIF (NOT ${resultoption} STREQUAL " ")
   ENDMACRO (ADD_H5_TEST resultfile resultcode resultoption)
diff --git a/tools/misc/Makefile.in b/tools/misc/Makefile.in
index 067ddc8..ce8e991 100644
--- a/tools/misc/Makefile.in
+++ b/tools/misc/Makefile.in
@@ -229,6 +229,7 @@ F9XMODEXT = @F9XMODEXT@
 F9XMODFLAG = @F9XMODFLAG@
 F9XSUFFIXFLAG = @F9XSUFFIXFLAG@
 FC = @FC@
+FC2003 = @FC2003@
 FCFLAGS = @FCFLAGS@
 FCFLAGS_f90 = @FCFLAGS_f90@
 FCLIBS = @FCLIBS@
@@ -249,10 +250,12 @@ H5_LONE_COLON = @H5_LONE_COLON@
 H5_VERSION = @H5_VERSION@
 HADDR_T = @HADDR_T@
 HAVE_DMALLOC = @HAVE_DMALLOC@
+HAVE_FORTRAN_2003 = @HAVE_FORTRAN_2003@
 HDF5_HL = @HDF5_HL@
 HDF5_INTERFACES = @HDF5_INTERFACES@
 HDF_CXX = @HDF_CXX@
 HDF_FORTRAN = @HDF_FORTRAN@
+HDF_FORTRAN2003 = @HDF_FORTRAN2003@
 HID_T = @HID_T@
 HL = @HL@
 HL_FOR = @HL_FOR@
@@ -296,7 +299,6 @@ PACKAGE_STRING = @PACKAGE_STRING@
 PACKAGE_TARNAME = @PACKAGE_TARNAME@
 PACKAGE_URL = @PACKAGE_URL@
 PACKAGE_VERSION = @PACKAGE_VERSION@
-PACKED_BITS = @PACKED_BITS@
 PARALLEL = @PARALLEL@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PERL = @PERL@
diff --git a/tools/misc/testh5mkgrp.sh b/tools/misc/testh5mkgrp.sh
index 46264c2..7bb98cb 100644
--- a/tools/misc/testh5mkgrp.sh
+++ b/tools/misc/testh5mkgrp.sh
@@ -51,6 +51,9 @@ TESTING()
     echo "Testing $* $SPACES" |cut -c1-70 |tr -d '\012'
 }
 
+# Source in the output filter function definitions.
+. $srcdir/../../bin/output_filter.sh 
+
 # Print a line-line message left justified in a field of 70 characters
 # beginning with the word "Verifying".
 #
@@ -97,6 +100,7 @@ H5LSTEST()
 {
     expect="$INDIR/`basename $1 .h5`.ls"
     actual="$OUTDIR/`basename $1 .h5`.out"
+    actual_sav=${actual}-sav
 
     # Stderr is included in stdout so that the diff can detect
     # any unexpected output from that stream too.
@@ -108,6 +112,10 @@ H5LSTEST()
       $RUNSERIAL $H5LS_BIN $H5LS_ARGS $@
     ) 2>&1 |sed 's/Modified:.*/Modified:  XXXX-XX-XX XX:XX:XX XXX/' >$actual
 
+    # save actual in case it is needed later.
+    cp $actual $actual_sav
+    STDOUT_FILTER $actual
+    STDERR_FILTER $actual
 
    if [ ! -f $expect ]; then
     # Create the expect file if it doesn't yet exist.
@@ -124,7 +132,7 @@ H5LSTEST()
 
    # Clean up output file
    if test -z "$HDF5_NOCLEANUP"; then
-      rm -f $actual $actual_err
+      rm -f $actual $actual_sav
    fi
 }
 
diff --git a/tools/testfiles/filter_fail.ddl b/tools/testfiles/filter_fail.ddl
index 354ac0f..1bb65ba 100644
--- a/tools/testfiles/filter_fail.ddl
+++ b/tools/testfiles/filter_fail.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump --enable-error-stack filter_fail.h5'
-#############################
 HDF5 "filter_fail.h5" {
 GROUP "/" {
    DATASET "dset_fail" {
@@ -24,7 +21,7 @@ HDF5-DIAG: Error detected in HDF5 (version (number)) thread (IDs):
   #003: (file name) line (number) in H5D_chunk_lock(): data pipeline read failed
     major: Data filters
     minor: Filter operation failed
-  #004: (file name) line (number) in H5Z_pipeline(): required filter is not registered
+  #004: (file name) line (number) in H5Z_pipeline(): required filter 'filter_fail_test' is not registered
     major: Data filters
     minor: Read failed
 h5dump error: unable to print data
diff --git a/tools/testfiles/h5dump-help.txt b/tools/testfiles/h5dump-help.txt
new file mode 100644
index 0000000..9083782
--- /dev/null
+++ b/tools/testfiles/h5dump-help.txt
@@ -0,0 +1,94 @@
+usage: h5dump [OPTIONS] file
+  OPTIONS
+     -h, --help           Print a usage message and exit
+     -n, --contents       Print a list of the file contents and exit
+     -B, --superblock     Print the content of the super block
+     -H, --header         Print the header only; no data is displayed
+     -A, --onlyattr       Print the header and value of attributes
+     -i, --object-ids     Print the object ids
+     -r, --string         Print 1-byte integer datasets as ASCII
+     -e, --escape         Escape non printing characters
+     -V, --version        Print version number and exit
+     -a P, --attribute=P  Print the specified attribute
+     -d P, --dataset=P    Print the specified dataset
+     -y, --noindex        Do not print array indices with the data
+     -p, --properties     Print dataset filters, storage layout and fill value
+     -f D, --filedriver=D Specify which driver to open the file with
+     -g P, --group=P      Print the specified group and all members
+     -l P, --soft-link=P  Print the value(s) of the specified soft link
+     -o F, --output=F     Output raw data into file F
+     -b B, --binary=B     Binary file output, of form B
+     -t P, --datatype=P   Print the specified named datatype
+     -w N, --width=N      Set the number of columns of output. A value of 0 (zero)
+                          sets the number of columns to the maximum (65535).
+                          Default width is 80 columns.
+     -m T, --format=T     Set the floating point output format
+     -q Q, --sort_by=Q    Sort groups and attributes by index Q
+     -z Z, --sort_order=Z Sort groups and attributes by order Z
+     -M L, --packedbits=L Print packed bits as unsigned integers, using mask
+                          format L for an integer dataset specified with
+                          option -d. L is a list of offset,length values,
+                          separated by commas. Offset is the beginning bit in
+                          the data value and length is the number of bits of
+                          the mask.
+     -R, --region         Print dataset pointed by region references
+     -x, --xml            Output in XML using Schema
+     -u, --use-dtd        Output in XML using DTD
+     -D U, --xml-dtd=U    Use the DTD or schema at U
+     -X S, --xml-ns=S      (XML Schema) Use qualified names n the XML
+                          ":": no namespace, default: "hdf5:"
+                          E.g., to dump a file called `-f', use h5dump -- -f
+     --enable-error-stack Prints messages from the HDF5 error stack as they
+                          occur.
+
+ Subsetting is available by using the following options with a dataset
+ attribute. Subsetting is done by selecting a hyperslab from the data.
+ Thus, the options mirror those for performing a hyperslab selection.
+ One of the START, COUNT, STRIDE, or BLOCK parameters are mandatory if you do subsetting.
+ The STRIDE, COUNT, and BLOCK parameters are optional and will default to 1 in
+ each dimension. START is optional and will default to 0 in each dimension.
+
+      -s START,  --start=START    Offset of start of subsetting selection
+      -S STRIDE, --stride=STRIDE  Hyperslab stride
+      -c COUNT,  --count=COUNT    Number of blocks to include in selection
+      -k BLOCK,  --block=BLOCK    Size of block in hyperslab
+  START, COUNT, STRIDE, and BLOCK - is a list of integers the number of which are equal to the
+        number of dimensions in the dataspace being queried
+
+  D - is the file driver to use in opening the file. Acceptable values
+        are "sec2", "family", "split", "multi", "direct", and "stream". Without
+        the file driver flag, the file will be opened with each driver in
+        turn and in the order specified above until one driver succeeds
+        in opening the file.
+  F - is a filename.
+  P - is the full path from the root group to the object.
+  N - is an integer greater than 1.
+  T - is a string containing the floating point format, e.g '%.3f'
+  U - is a URI reference (as defined in [IETF RFC 2396],
+        updated by [IETF RFC 2732])
+  B - is the form of binary output: NATIVE for a memory type, FILE for the
+        file type, LE or BE for pre-existing little or big endian types.
+        Must be used with -o (output file) and it is recommended that
+        -d (dataset) is used. B is an optional argument, defaults to NATIVE
+  Q - is the sort index type. It can be "creation_order" or "name" (default)
+  Z - is the sort order type. It can be "descending" or "ascending" (default)
+
+  Examples:
+
+  1) Attribute foo of the group /bar_none in file quux.h5
+
+      h5dump -a /bar_none/foo quux.h5
+
+  2) Selecting a subset from dataset /foo in file quux.h5
+
+      h5dump -d /foo -s "0,1" -S "1,1" -c "2,3" -k "2,2" quux.h5
+
+  3) Saving dataset 'dset' in file quux.h5 to binary file 'out.bin'
+        using a little-endian type
+
+      h5dump -d /dset -b LE -o out.bin quux.h5
+
+  4) Display two packed bits (bits 0-1 and bits 4-6) in the dataset /dset
+
+      h5dump -d /dset -M 0,1,4,3 quux.h5
+
diff --git a/tools/testfiles/help-1.ls b/tools/testfiles/help-1.ls
index e15a88b..aaba608 100644
--- a/tools/testfiles/help-1.ls
+++ b/tools/testfiles/help-1.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -h'
-#############################
 usage: h5ls [OPTIONS] [OBJECTS...]
   OPTIONS
    -h, -?, --help  Print a usage message and exit
diff --git a/tools/testfiles/help-2.ls b/tools/testfiles/help-2.ls
index 7d035c0..aaba608 100644
--- a/tools/testfiles/help-2.ls
+++ b/tools/testfiles/help-2.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -help'
-#############################
 usage: h5ls [OPTIONS] [OBJECTS...]
   OPTIONS
    -h, -?, --help  Print a usage message and exit
diff --git a/tools/testfiles/help-3.ls b/tools/testfiles/help-3.ls
index 8de1003..aaba608 100644
--- a/tools/testfiles/help-3.ls
+++ b/tools/testfiles/help-3.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -?'
-#############################
 usage: h5ls [OPTIONS] [OBJECTS...]
   OPTIONS
    -h, -?, --help  Print a usage message and exit
diff --git a/tools/testfiles/nosuchfile.ls b/tools/testfiles/nosuchfile.ls
index 8d5855e..8c4ee42 100644
--- a/tools/testfiles/nosuchfile.ls
+++ b/tools/testfiles/nosuchfile.ls
@@ -1,4 +1 @@
-#############################
- output for 'h5ls nosuchfile.h5'
-#############################
 nosuchfile.h5: unable to open file
diff --git a/tools/testfiles/packedbits.ddl b/tools/testfiles/packedbits.ddl
index 91bd63b..1bca459 100644
--- a/tools/testfiles/packedbits.ddl
+++ b/tools/testfiles/packedbits.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 GROUP "/" {
    DATASET "DS08BITS" {
diff --git a/tools/testfiles/tall-1.ddl b/tools/testfiles/tall-1.ddl
index 9a72484..ae375c4 100644
--- a/tools/testfiles/tall-1.ddl
+++ b/tools/testfiles/tall-1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tall.h5'
-#############################
 HDF5 "tall.h5" {
 GROUP "/" {
    ATTRIBUTE "attr1" {
diff --git a/tools/testfiles/tall-1.ls b/tools/testfiles/tall-1.ls
index 6bdb7e7..91b89e6 100644
--- a/tools/testfiles/tall-1.ls
+++ b/tools/testfiles/tall-1.ls
@@ -1,5 +1,2 @@
-#############################
- output for 'h5ls -w80 tall.h5'
-#############################
 g1                       Group
 g2                       Group
diff --git a/tools/testfiles/tall-2.ddl b/tools/testfiles/tall-2.ddl
index 50844df..d669639 100644
--- a/tools/testfiles/tall-2.ddl
+++ b/tools/testfiles/tall-2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump --header -g /g1/g1.1 -a attr2 tall.h5'
-#############################
 HDF5 "tall.h5" {
 GROUP "/g1/g1.1" {
    DATASET "dset1.1.1" {
diff --git a/tools/testfiles/tall-2.ls b/tools/testfiles/tall-2.ls
index 61b8cfb..2d3d66b 100644
--- a/tools/testfiles/tall-2.ls
+++ b/tools/testfiles/tall-2.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -r -d tall.h5'
-#############################
 /                        Group
 /g1                      Group
 /g1/g1.1                 Group
diff --git a/tools/testfiles/tall-2A.ddl b/tools/testfiles/tall-2A.ddl
index c6ff136..0ae5210 100644
--- a/tools/testfiles/tall-2A.ddl
+++ b/tools/testfiles/tall-2A.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -A tall.h5'
-#############################
 HDF5 "tall.h5" {
 GROUP "/" {
    ATTRIBUTE "attr1" {
diff --git a/tools/testfiles/tall-2A.h5.xml b/tools/testfiles/tall-2A.h5.xml
index ce9df3a..a2da338 100644
--- a/tools/testfiles/tall-2A.h5.xml
+++ b/tools/testfiles/tall-2A.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml -A tall.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_96" H5Path="/">
    <hdf5:Attribute Name="attr1">
       <hdf5:Dataspace>
diff --git a/tools/testfiles/tall-2B.ddl b/tools/testfiles/tall-2B.ddl
index 5642d2c..c9313b7 100644
--- a/tools/testfiles/tall-2B.ddl
+++ b/tools/testfiles/tall-2B.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -A -r tall.h5'
-#############################
 HDF5 "tall.h5" {
 GROUP "/" {
    ATTRIBUTE "attr1" {
diff --git a/tools/testfiles/tall-3.ddl b/tools/testfiles/tall-3.ddl
index 7d8e432..1c54e6d 100644
--- a/tools/testfiles/tall-3.ddl
+++ b/tools/testfiles/tall-3.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /g2/dset2.1 -l /g1/g1.2/g1.2.1/slink tall.h5'
-#############################
 HDF5 "tall.h5" {
 DATASET "/g2/dset2.1" {
    DATATYPE  H5T_IEEE_F32BE
diff --git a/tools/testfiles/tall-4s.ddl b/tools/testfiles/tall-4s.ddl
index 71675bc..36cb659 100644
--- a/tools/testfiles/tall-4s.ddl
+++ b/tools/testfiles/tall-4s.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump --dataset=/g1/g1.1/dset1.1.1 --start=1,1 --stride=2,3 --count=3,2 --block=1,1 tall.h5'
-#############################
 HDF5 "tall.h5" {
 DATASET "/g1/g1.1/dset1.1.1" {
    DATATYPE  H5T_STD_I32BE
diff --git a/tools/testfiles/tall-5s.ddl b/tools/testfiles/tall-5s.ddl
index 95e4d63..b35be18 100644
--- a/tools/testfiles/tall-5s.ddl
+++ b/tools/testfiles/tall-5s.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /g1/g1.1/dset1.1.2[0;2;10;] tall.h5'
-#############################
 HDF5 "tall.h5" {
 DATASET "/g1/g1.1/dset1.1.2" {
    DATATYPE  H5T_STD_I32BE
diff --git a/tools/testfiles/tall.h5.xml b/tools/testfiles/tall.h5.xml
index e8d39a4..0ab7e29 100644
--- a/tools/testfiles/tall.h5.xml
+++ b/tools/testfiles/tall.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tall.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_96" H5Path="/">
    <hdf5:Attribute Name="attr1">
       <hdf5:Dataspace>
diff --git a/tools/testfiles/tallfilters.ddl b/tools/testfiles/tallfilters.ddl
index 16405b7..c8e7b5f 100644
--- a/tools/testfiles/tallfilters.ddl
+++ b/tools/testfiles/tallfilters.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H -p -d all tfilters.h5'
-#############################
 HDF5 "tfilters.h5" {
 DATASET "all" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/tarray1.ddl b/tools/testfiles/tarray1.ddl
index 849bc67..8ff01e1 100644
--- a/tools/testfiles/tarray1.ddl
+++ b/tools/testfiles/tarray1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tarray1.h5'
-#############################
 HDF5 "tarray1.h5" {
 GROUP "/" {
    DATASET "Dataset1" {
diff --git a/tools/testfiles/tarray1.h5.xml b/tools/testfiles/tarray1.h5.xml
index cff79e3..01aeb3c 100644
--- a/tools/testfiles/tarray1.h5.xml
+++ b/tools/testfiles/tarray1.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tarray1.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_928" H5Path="/">
    <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_976" H5Path= "/Dataset1" Parents="xid_928" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tarray1.ls b/tools/testfiles/tarray1.ls
index 60c002d..973a4e2 100644
--- a/tools/testfiles/tarray1.ls
+++ b/tools/testfiles/tarray1.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -r -d tarray1.h5'
-#############################
 /                        Group
 /Dataset1                Dataset {4}
     Data:
diff --git a/tools/testfiles/tarray1_big.ddl b/tools/testfiles/tarray1_big.ddl
index a19a7c3..bb06df2 100644
--- a/tools/testfiles/tarray1_big.ddl
+++ b/tools/testfiles/tarray1_big.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -R tarray1_big.h5'
-#############################
 HDF5 "tarray1_big.h5" {
 GROUP "/" {
    DATASET "Dataset1" {
diff --git a/tools/testfiles/tarray2.ddl b/tools/testfiles/tarray2.ddl
index df1e0b8..5a8460a 100644
--- a/tools/testfiles/tarray2.ddl
+++ b/tools/testfiles/tarray2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tarray2.h5'
-#############################
 HDF5 "tarray2.h5" {
 GROUP "/" {
    DATASET "Dataset1" {
diff --git a/tools/testfiles/tarray2.h5.xml b/tools/testfiles/tarray2.h5.xml
index f851c18..ca253ae 100644
--- a/tools/testfiles/tarray2.h5.xml
+++ b/tools/testfiles/tarray2.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tarray2.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_928" H5Path="/">
    <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_976" H5Path= "/Dataset1" Parents="xid_928" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tarray3.ddl b/tools/testfiles/tarray3.ddl
index 17ceba6..63f6d32 100644
--- a/tools/testfiles/tarray3.ddl
+++ b/tools/testfiles/tarray3.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tarray3.h5'
-#############################
 HDF5 "tarray3.h5" {
 GROUP "/" {
    DATASET "Dataset1" {
@@ -12,17 +9,20 @@ GROUP "/" {
                20, 21, 22,
                30, 31, 32,
                40, 41, 42,
-               50, 51, 52 ], [ 100, 101, 102,
+               50, 51, 52 ],
+             [ 100, 101, 102,
                110, 111, 112,
                120, 121, 122,
                130, 131, 132,
                140, 141, 142,
-               150, 151, 152 ], [ 200, 201, 202,
+               150, 151, 152 ],
+             [ 200, 201, 202,
                210, 211, 212,
                220, 221, 222,
                230, 231, 232,
                240, 241, 242,
-               250, 251, 252 ], [ 300, 301, 302,
+               250, 251, 252 ],
+             [ 300, 301, 302,
                310, 311, 312,
                320, 321, 322,
                330, 331, 332,
@@ -33,17 +33,20 @@ GROUP "/" {
                1020, 1021, 1022,
                1030, 1031, 1032,
                1040, 1041, 1042,
-               1050, 1051, 1052 ], [ 1100, 1101, 1102,
+               1050, 1051, 1052 ],
+             [ 1100, 1101, 1102,
                1110, 1111, 1112,
                1120, 1121, 1122,
                1130, 1131, 1132,
                1140, 1141, 1142,
-               1150, 1151, 1152 ], [ 1200, 1201, 1202,
+               1150, 1151, 1152 ],
+             [ 1200, 1201, 1202,
                1210, 1211, 1212,
                1220, 1221, 1222,
                1230, 1231, 1232,
                1240, 1241, 1242,
-               1250, 1251, 1252 ], [ 1300, 1301, 1302,
+               1250, 1251, 1252 ],
+             [ 1300, 1301, 1302,
                1310, 1311, 1312,
                1320, 1321, 1322,
                1330, 1331, 1332,
@@ -54,17 +57,20 @@ GROUP "/" {
                2020, 2021, 2022,
                2030, 2031, 2032,
                2040, 2041, 2042,
-               2050, 2051, 2052 ], [ 2100, 2101, 2102,
+               2050, 2051, 2052 ],
+             [ 2100, 2101, 2102,
                2110, 2111, 2112,
                2120, 2121, 2122,
                2130, 2131, 2132,
                2140, 2141, 2142,
-               2150, 2151, 2152 ], [ 2200, 2201, 2202,
+               2150, 2151, 2152 ],
+             [ 2200, 2201, 2202,
                2210, 2211, 2212,
                2220, 2221, 2222,
                2230, 2231, 2232,
                2240, 2241, 2242,
-               2250, 2251, 2252 ], [ 2300, 2301, 2302,
+               2250, 2251, 2252 ],
+             [ 2300, 2301, 2302,
                2310, 2311, 2312,
                2320, 2321, 2322,
                2330, 2331, 2332,
@@ -75,17 +81,20 @@ GROUP "/" {
                3020, 3021, 3022,
                3030, 3031, 3032,
                3040, 3041, 3042,
-               3050, 3051, 3052 ], [ 3100, 3101, 3102,
+               3050, 3051, 3052 ],
+             [ 3100, 3101, 3102,
                3110, 3111, 3112,
                3120, 3121, 3122,
                3130, 3131, 3132,
                3140, 3141, 3142,
-               3150, 3151, 3152 ], [ 3200, 3201, 3202,
+               3150, 3151, 3152 ],
+             [ 3200, 3201, 3202,
                3210, 3211, 3212,
                3220, 3221, 3222,
                3230, 3231, 3232,
                3240, 3241, 3242,
-               3250, 3251, 3252 ], [ 3300, 3301, 3302,
+               3250, 3251, 3252 ],
+             [ 3300, 3301, 3302,
                3310, 3311, 3312,
                3320, 3321, 3322,
                3330, 3331, 3332,
diff --git a/tools/testfiles/tarray3.h5.xml b/tools/testfiles/tarray3.h5.xml
index a620a5e..fb1ed07 100644
--- a/tools/testfiles/tarray3.h5.xml
+++ b/tools/testfiles/tarray3.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tarray3.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_928" H5Path="/">
    <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_976" H5Path= "/Dataset1" Parents="xid_928" H5ParentPaths="/">
       <hdf5:StorageLayout>
@@ -41,17 +38,20 @@ Expected output for 'h5dump --xml tarray3.h5'
                20 21 22
                30 31 32
                40 41 42
-               50 51 52  100 101 102
+               50 51 52
+              100 101 102
                110 111 112
                120 121 122
                130 131 132
                140 141 142
-               150 151 152  200 201 202
+               150 151 152
+              200 201 202
                210 211 212
                220 221 222
                230 231 232
                240 241 242
-               250 251 252  300 301 302
+               250 251 252
+              300 301 302
                310 311 312
                320 321 322
                330 331 332
@@ -62,17 +62,20 @@ Expected output for 'h5dump --xml tarray3.h5'
                1020 1021 1022
                1030 1031 1032
                1040 1041 1042
-               1050 1051 1052  1100 1101 1102
+               1050 1051 1052
+              1100 1101 1102
                1110 1111 1112
                1120 1121 1122
                1130 1131 1132
                1140 1141 1142
-               1150 1151 1152  1200 1201 1202
+               1150 1151 1152
+              1200 1201 1202
                1210 1211 1212
                1220 1221 1222
                1230 1231 1232
                1240 1241 1242
-               1250 1251 1252  1300 1301 1302
+               1250 1251 1252
+              1300 1301 1302
                1310 1311 1312
                1320 1321 1322
                1330 1331 1332
@@ -83,17 +86,20 @@ Expected output for 'h5dump --xml tarray3.h5'
                2020 2021 2022
                2030 2031 2032
                2040 2041 2042
-               2050 2051 2052  2100 2101 2102
+               2050 2051 2052
+              2100 2101 2102
                2110 2111 2112
                2120 2121 2122
                2130 2131 2132
                2140 2141 2142
-               2150 2151 2152  2200 2201 2202
+               2150 2151 2152
+              2200 2201 2202
                2210 2211 2212
                2220 2221 2222
                2230 2231 2232
                2240 2241 2242
-               2250 2251 2252  2300 2301 2302
+               2250 2251 2252
+              2300 2301 2302
                2310 2311 2312
                2320 2321 2322
                2330 2331 2332
@@ -104,17 +110,20 @@ Expected output for 'h5dump --xml tarray3.h5'
                3020 3021 3022
                3030 3031 3032
                3040 3041 3042
-               3050 3051 3052  3100 3101 3102
+               3050 3051 3052
+              3100 3101 3102
                3110 3111 3112
                3120 3121 3122
                3130 3131 3132
                3140 3141 3142
-               3150 3151 3152  3200 3201 3202
+               3150 3151 3152
+              3200 3201 3202
                3210 3211 3212
                3220 3221 3222
                3230 3231 3232
                3240 3241 3242
-               3250 3251 3252  3300 3301 3302
+               3250 3251 3252
+              3300 3301 3302
                3310 3311 3312
                3320 3321 3322
                3330 3331 3332
diff --git a/tools/testfiles/tarray4.ddl b/tools/testfiles/tarray4.ddl
index ebc265f..7fb310b 100644
--- a/tools/testfiles/tarray4.ddl
+++ b/tools/testfiles/tarray4.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tarray4.h5'
-#############################
 HDF5 "tarray4.h5" {
 GROUP "/" {
    DATASET "Dataset1" {
diff --git a/tools/testfiles/tarray5.ddl b/tools/testfiles/tarray5.ddl
index 49eda3e..883ee09 100644
--- a/tools/testfiles/tarray5.ddl
+++ b/tools/testfiles/tarray5.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tarray5.h5'
-#############################
 HDF5 "tarray5.h5" {
 GROUP "/" {
    DATASET "Dataset1" {
@@ -13,52 +10,64 @@ GROUP "/" {
       (0): [ {
                0,
                [ 0, 1, 2, 3 ]
-            }, {
+            },
+             {
                1,
                [ 2.5, 3.5, 4.5, 5.5 ]
-            }, {
+            },
+             {
                2,
                [ 5, 6, 7, 8 ]
-            }, {
+            },
+             {
                3,
                [ 7.5, 8.5, 9.5, 10.5 ]
             } ],
       (1): [ {
                10,
                [ 10, 11, 12, 13 ]
-            }, {
+            },
+             {
                11,
                [ 12.5, 13.5, 14.5, 15.5 ]
-            }, {
+            },
+             {
                12,
                [ 15, 16, 17, 18 ]
-            }, {
+            },
+             {
                13,
                [ 17.5, 18.5, 19.5, 20.5 ]
             } ],
       (2): [ {
                20,
                [ 20, 21, 22, 23 ]
-            }, {
+            },
+             {
                21,
                [ 22.5, 23.5, 24.5, 25.5 ]
-            }, {
+            },
+             {
                22,
                [ 25, 26, 27, 28 ]
-            }, {
+            },
+             {
                23,
                [ 27.5, 28.5, 29.5, 30.5 ]
             } ],
       (3): [ {
                30,
                [ 30, 31, 32, 33 ]
-            }, {
+            },
+             {
                31,
                [ 32.5, 33.5, 34.5, 35.5 ]
-            }, {
+            },
+             {
                32,
                [ 35, 36, 37, 38 ]
-            }, {
+            },
+             {
                33,
                [ 37.5, 38.5, 39.5, 40.5 ]
             } ]
diff --git a/tools/testfiles/tarray6.ddl b/tools/testfiles/tarray6.ddl
index b2f95ab..5c49b0f 100644
--- a/tools/testfiles/tarray6.ddl
+++ b/tools/testfiles/tarray6.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tarray6.h5'
-#############################
 HDF5 "tarray6.h5" {
 GROUP "/" {
    DATASET "Dataset1" {
diff --git a/tools/testfiles/tarray6.h5.xml b/tools/testfiles/tarray6.h5.xml
index 5be8371..96fc69e 100644
--- a/tools/testfiles/tarray6.h5.xml
+++ b/tools/testfiles/tarray6.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tarray6.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_928" H5Path="/">
    <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_976" H5Path= "/Dataset1" Parents="xid_928" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tarray7.ddl b/tools/testfiles/tarray7.ddl
index a205875..229d719 100644
--- a/tools/testfiles/tarray7.ddl
+++ b/tools/testfiles/tarray7.ddl
@@ -1,16 +1,25 @@
-#############################
-Expected output for 'h5dump tarray7.h5'
-#############################
 HDF5 "tarray7.h5" {
 GROUP "/" {
    DATASET "Dataset1" {
       DATATYPE  H5T_ARRAY { [4] H5T_VLEN { H5T_ARRAY { [4] H5T_STD_U32LE }} }
       DATASPACE  SIMPLE { ( 4 ) / ( 4 ) }
       DATA {
-      (0): [ ([ 0, 1, 2, 3 ]), ([ 100, 101, 102, 103 ], [ 110, 111, 112, 113 ]), ([ 200, 201, 202, 203 ], [ 210, 211, 212, 213 ], [ 220, 221, 222, 223 ]), ([ 300, 301, 302, 303 ], [ 310, 311, 312, 313 ], [ 320, 321, 322, 323 ], [ 330, 331, 332, 333 ]) ],
-      (1): [ ([ 1000, 1001, 1002, 1003 ], [ 1010, 1011, 1012, 1013 ]), ([ 1100, 1101, 1102, 1103 ], [ 1110, 1111, 1112, 1113 ], [ 1120, 1121, 1122, 1123 ]), ([ 1200, 1201, 1202, 1203 ], [ 1210, 1211, 1212, 1213 ], [ 1220, 1221, 1222, 1223 ], [ 1230, 1231, 1232, 1233 ]), ([ 1300, 1301, 1302, 1303 ], [ 1310, 1311, 1312, 1313 ], [ 1320, 1321, 1322, 1323 ], [ 1330, 1331, 1332, 1333 ], [ 1340, 1341, 1342, 1343 ]) ],
-      (2): [ ([ 2000, 2001, 2002, 2003 ], [ 2010, 2011, 2012, 2013 ], [ 2020, 2021, 2022, 2023 ]), ([ 2100, 2101, 2102, 2103 ], [ 2110, 2111, 2112, 2113 ], [ 2120, 2121, 2122, 2123 ], [ 2130, 2131, 2132, 2133 ]), ([ 2200, 2201, 2202, 2203 ], [ 2210, 2211, 2212, 2213 ], [ 2220, 2221, 2222, 2223 ], [ 2230, 2231, 2232, 2233 ], [ 2240, 2241, 2242, 2243 ]), ([ 2300, 2301, 2302, 2303 ], [ 2310, 2311, 2312, 2313 ], [ 2320, 2321, 2322, 2323 ], [ 2330, 2331, 2332, 2333 ], [ 2340, 2341, 2342, 2343 ], [ 2350, 2351, 2352, 2353 ]) ],
-      (3): [ ([ 3000, 3001, 3002, 3003 ], [ 3010, 3011, 3012, 3013 ], [ 3020, 3021, 3022, 3023 ], [ 3030, 3031, 3032, 3033 ]), ([ 3100, 3101, 3102, 3103 ], [ 3110, 3111, 3112, 3113 ], [ 3120, 3121, 3122, 3123 ], [ 3130, 3131, 3132, 3133 ], [ 3140, 3141, 3142, 3143 ]), ([ 3200, 3201, 3202, 3203 ], [ 3210, 3211, 3212, 3213 ], [ 3220, 3221, 3222, 3223 ], [ 3230, 3231, 3232, 3233 ], [ 3240, 3241, 3242, 3243 ], [ 3250, 3251, 3252, 3253 ]), ([ 3300, 3301, 3302, 3303 ], [ 3310, 3311, 3312, 3313 ], [ 3320, 3321, 3322, 3323 ], [ 3330, 3331, 3332, 3333 ], [ 3340, 3341, 3342, 3343 ], [ 3350, 3351, 3352, 3353 ], [ 3360, 3361, 3362, 3363 ]) ]
+      (0): [ ([ 0, 1, 2, 3 ]),
+             ([ 100, 101, 102, 103 ], [ 110, 111, 112, 113 ]),
+             ([ 200, 201, 202, 203 ], [ 210, 211, 212, 213 ], [ 220, 221, 222, 223 ]),
+             ([ 300, 301, 302, 303 ], [ 310, 311, 312, 313 ], [ 320, 321, 322, 323 ], [ 330, 331, 332, 333 ]) ],
+      (1): [ ([ 1000, 1001, 1002, 1003 ], [ 1010, 1011, 1012, 1013 ]),
+             ([ 1100, 1101, 1102, 1103 ], [ 1110, 1111, 1112, 1113 ], [ 1120, 1121, 1122, 1123 ]),
+             ([ 1200, 1201, 1202, 1203 ], [ 1210, 1211, 1212, 1213 ], [ 1220, 1221, 1222, 1223 ], [ 1230, 1231, 1232, 1233 ]),
+             ([ 1300, 1301, 1302, 1303 ], [ 1310, 1311, 1312, 1313 ], [ 1320, 1321, 1322, 1323 ], [ 1330, 1331, 1332, 1333 ], [ 1340, 1341, 1342, 1343 ]) ],
+      (2): [ ([ 2000, 2001, 2002, 2003 ], [ 2010, 2011, 2012, 2013 ], [ 2020, 2021, 2022, 2023 ]),
+             ([ 2100, 2101, 2102, 2103 ], [ 2110, 2111, 2112, 2113 ], [ 2120, 2121, 2122, 2123 ], [ 2130, 2131, 2132, 2133 ]),
+             ([ 2200, 2201, 2202, 2203 ], [ 2210, 2211, 2212, 2213 ], [ 2220, 2221, 2222, 2223 ], [ 2230, 2231, 2232, 2233 ], [ 2240, 2241, 2242, 2243 ]),
+             ([ 2300, 2301, 2302, 2303 ], [ 2310, 2311, 2312, 2313 ], [ 2320, 2321, 2322, 2323 ], [ 2330, 2331, 2332, 2333 ], [ 2340, 2341, 2342, 2343 ], [ 2350, 2351, 2352, 2353 ]) ],
+      (3): [ ([ 3000, 3001, 3002, 3003 ], [ 3010, 3011, 3012, 3013 ], [ 3020, 3021, 3022, 3023 ], [ 3030, 3031, 3032, 3033 ]),
+             ([ 3100, 3101, 3102, 3103 ], [ 3110, 3111, 3112, 3113 ], [ 3120, 3121, 3122, 3123 ], [ 3130, 3131, 3132, 3133 ], [ 3140, 3141, 3142, 3143 ]),
+             ([ 3200, 3201, 3202, 3203 ], [ 3210, 3211, 3212, 3213 ], [ 3220, 3221, 3222, 3223 ], [ 3230, 3231, 3232, 3233 ], [ 3240, 3241, 3242, 3243 ], [ 3250, 3251, 3252, 3253 ]),
+             ([ 3300, 3301, 3302, 3303 ], [ 3310, 3311, 3312, 3313 ], [ 3320, 3321, 3322, 3323 ], [ 3330, 3331, 3332, 3333 ], [ 3340, 3341, 3342, 3343 ], [ 3350, 3351, 3352, 3353 ], [ 3360, 3361, 3362, 3363 ]) ]
       }
    }
 }
diff --git a/tools/testfiles/tarray7.h5.xml b/tools/testfiles/tarray7.h5.xml
index 4fb02c4..6a0558c 100644
--- a/tools/testfiles/tarray7.h5.xml
+++ b/tools/testfiles/tarray7.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tarray7.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_928" H5Path="/">
    <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_976" H5Path= "/Dataset1" Parents="xid_928" H5ParentPaths="/">
       <hdf5:StorageLayout>
@@ -39,10 +36,22 @@ Expected output for 'h5dump --xml tarray7.h5'
       </hdf5:DataType>
       <hdf5:Data>
          <hdf5:DataFromFile>
-            0 1 2 3   100 101 102 103  110 111 112 113   200 201 202 203  210 211 212 213  220 221 222 223   300 301 302 303  310 311 312 313  320 321 322 323  330 331 332 333
-            1000 1001 1002 1003  1010 1011 1012 1013   1100 1101 1102 1103  1110 1111 1112 1113  1120 1121 1122 1123   1200 1201 1202 1203  1210 1211 1212 1213  1220 1221 1222 1223  1230 1231 1232 1233   1300 1301 1302 1303  1310 1311 1312 1313  1320 1321 1322 1323  1330 1331 1332 1333  1340 1341 1342 1343
-            2000 2001 2002 2003  2010 2011 2012 2013  2020 2021 2022 2023   2100 2101 2102 2103  2110 2111 2112 2113  2120 2121 2122 2123  2130 2131 2132 2133   2200 2201 2202 2203  2210 2211 2212 2213  2220 2221 2222 2223  2230 2231 2232 2233  2240 2241 2242 2243   2300 2301 2302 2303  2310 2311 2312 2313  2320 2321 2322 2323  2330 2331 2332 2333  2340 2341 2342 2343  2350 2351 2352 2353
-            3000 3001 3002 3003  3010 3011 3012 3013  3020 3021 3022 3023  3030 3031 3032 3033   3100 3101 3102 3103  3110 3111 3112 3113  3120 3121 3122 3123  3130 3131 3132 3133  3140 3141 3142 3143   3200 3201 3202 3203  3210 3211 3212 3213  3220 3221 3222 3223  3230 3231 3232 3233  3240 3241 3242 3243  3250 3251 3252 3253   3300 3301 3302 3303  3310 3311 3312 3313  3320 3321 3322 3323  3330 3331 3332 3333  3340 3341 3342 3343  3350 3351 3352 3353  3360 3361 3362 3363
+            0 1 2 3
+               100 101 102 103  110 111 112 113
+               200 201 202 203  210 211 212 213  220 221 222 223
+               300 301 302 303  310 311 312 313  320 321 322 323  330 331 332 333
+            1000 1001 1002 1003  1010 1011 1012 1013
+               1100 1101 1102 1103  1110 1111 1112 1113  1120 1121 1122 1123
+               1200 1201 1202 1203  1210 1211 1212 1213  1220 1221 1222 1223  1230 1231 1232 1233
+               1300 1301 1302 1303  1310 1311 1312 1313  1320 1321 1322 1323  1330 1331 1332 1333  1340 1341 1342 1343
+            2000 2001 2002 2003  2010 2011 2012 2013  2020 2021 2022 2023
+               2100 2101 2102 2103  2110 2111 2112 2113  2120 2121 2122 2123  2130 2131 2132 2133
+               2200 2201 2202 2203  2210 2211 2212 2213  2220 2221 2222 2223  2230 2231 2232 2233  2240 2241 2242 2243
+               2300 2301 2302 2303  2310 2311 2312 2313  2320 2321 2322 2323  2330 2331 2332 2333  2340 2341 2342 2343  2350 2351 2352 2353
+            3000 3001 3002 3003  3010 3011 3012 3013  3020 3021 3022 3023  3030 3031 3032 3033
+               3100 3101 3102 3103  3110 3111 3112 3113  3120 3121 3122 3123  3130 3131 3132 3133  3140 3141 3142 3143
+               3200 3201 3202 3203  3210 3211 3212 3213  3220 3221 3222 3223  3230 3231 3232 3233  3240 3241 3242 3243  3250 3251 3252 3253
+               3300 3301 3302 3303  3310 3311 3312 3313  3320 3321 3322 3323  3330 3331 3332 3333  3340 3341 3342 3343  3350 3351 3352 3353  3360 3361 3362 3363
          </hdf5:DataFromFile>
       </hdf5:Data>
    </hdf5:Dataset>
diff --git a/tools/testfiles/tarray8.ddl b/tools/testfiles/tarray8.ddl
index cf9ebc3..f482901 100644
--- a/tools/testfiles/tarray8.ddl
+++ b/tools/testfiles/tarray8.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tarray8.h5'
-#############################
 HDF5 "tarray8.h5" {
 GROUP "/" {
    DATASET "DS1" {
diff --git a/tools/testfiles/tattr-1.ddl b/tools/testfiles/tattr-1.ddl
index 2337fa3..540c973 100644
--- a/tools/testfiles/tattr-1.ddl
+++ b/tools/testfiles/tattr-1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tattr.h5'
-#############################
 HDF5 "tattr.h5" {
 GROUP "/" {
    ATTRIBUTE "attr1" {
diff --git a/tools/testfiles/tattr-2.ddl b/tools/testfiles/tattr-2.ddl
index 195b9ab..e4d40bd 100644
--- a/tools/testfiles/tattr-2.ddl
+++ b/tools/testfiles/tattr-2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -a /attr1 --attribute /attr4 --attribute=/attr5 tattr.h5'
-#############################
 HDF5 "tattr.h5" {
 ATTRIBUTE "/attr1" {
    DATATYPE  H5T_STD_I8BE
diff --git a/tools/testfiles/tattr-3.ddl b/tools/testfiles/tattr-3.ddl
index 98896eb..a44be10 100644
--- a/tools/testfiles/tattr-3.ddl
+++ b/tools/testfiles/tattr-3.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump --header -a /attr2 --attribute=/attr tattr.h5'
-#############################
 HDF5 "tattr.h5" {
 ATTRIBUTE "/attr2" {
    DATATYPE  H5T_STD_I32BE
diff --git a/tools/testfiles/tattr.h5.xml b/tools/testfiles/tattr.h5.xml
index bfde477..2d6a6fd 100644
--- a/tools/testfiles/tattr.h5.xml
+++ b/tools/testfiles/tattr.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tattr.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_928" H5Path="/">
    <hdf5:Attribute Name="attr1">
       <hdf5:Dataspace>
diff --git a/tools/testfiles/tattr2.ls b/tools/testfiles/tattr2.ls
index 0448868..eb7c739 100644
--- a/tools/testfiles/tattr2.ls
+++ b/tools/testfiles/tattr2.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -v -S tattr2.h5'
-#############################
 Opened "tattr2.h5" with sec2 driver.
 dset                     Dataset {2/2}
     Attribute: array     {2}
diff --git a/tools/testfiles/tattrreg.ddl b/tools/testfiles/tattrreg.ddl
index 989daf7..b47ab63 100644
--- a/tools/testfiles/tattrreg.ddl
+++ b/tools/testfiles/tattrreg.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tattrreg.h5'
-#############################
 HDF5 "tattrreg.h5" {
 GROUP "/" {
    DATASET "Dataset1" {
diff --git a/tools/testfiles/tattrregR.ddl b/tools/testfiles/tattrregR.ddl
index 6e399c0..9e6b421 100644
--- a/tools/testfiles/tattrregR.ddl
+++ b/tools/testfiles/tattrregR.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -R tattrreg.h5'
-#############################
 HDF5 "tattrreg.h5" {
 GROUP "/" {
    DATASET "Dataset1" {
diff --git a/tools/testfiles/tbigdims.ddl b/tools/testfiles/tbigdims.ddl
index 21e2a43..13f2052 100644
--- a/tools/testfiles/tbigdims.ddl
+++ b/tools/testfiles/tbigdims.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d dset4gb -s 4294967284 -c 22 tbigdims.h5'
-#############################
 HDF5 "tbigdims.h5" {
 DATASET "dset4gb" {
    DATATYPE  H5T_STD_I8LE
diff --git a/tools/testfiles/tbitfields.h5.xml b/tools/testfiles/tbitfields.h5.xml
index 28da284..62efbce 100644
--- a/tools/testfiles/tbitfields.h5.xml
+++ b/tools/testfiles/tbitfields.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tbitfields.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Group Name="typetests" OBJ-XID="xid_1344" H5Path="/typetests" Parents="xid_696" H5ParentPaths="/" >
       <hdf5:Dataset Name="bitfield_1" OBJ-XID="xid_1720" H5Path= "/typetests/bitfield_1" Parents="xid_1344" H5ParentPaths="/typetests">
diff --git a/tools/testfiles/tboot1.ddl b/tools/testfiles/tboot1.ddl
index 9a7cafc..d4c8f4c 100644
--- a/tools/testfiles/tboot1.ddl
+++ b/tools/testfiles/tboot1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H -B -d dset tfcontents1.h5'
-#############################
 HDF5 "tfcontents1.h5" {
 SUPER_BLOCK {
    SUPERBLOCK_VERSION 0
diff --git a/tools/testfiles/tboot2.ddl b/tools/testfiles/tboot2.ddl
index d1484ca..774215e 100644
--- a/tools/testfiles/tboot2.ddl
+++ b/tools/testfiles/tboot2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -B tfcontents2.h5'
-#############################
 HDF5 "tfcontents2.h5" {
 SUPER_BLOCK {
    SUPERBLOCK_VERSION 0
diff --git a/tools/testfiles/tchar1.ddl b/tools/testfiles/tchar1.ddl
index cc2d838..a84906f 100644
--- a/tools/testfiles/tchar1.ddl
+++ b/tools/testfiles/tchar1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -r tchar.h5'
-#############################
 HDF5 "tchar.h5" {
 GROUP "/" {
    DATASET "Dataset1" {
diff --git a/tools/testfiles/tchunked.ddl b/tools/testfiles/tchunked.ddl
index ba18776..2af1c0c 100644
--- a/tools/testfiles/tchunked.ddl
+++ b/tools/testfiles/tchunked.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H -p -d chunked tfilters.h5'
-#############################
 HDF5 "tfilters.h5" {
 DATASET "chunked" {
 COMMENT "This is a dataset with chunked storage"
diff --git a/tools/testfiles/tcomp-1.ddl b/tools/testfiles/tcomp-1.ddl
index 0c24dc9..f86ed16 100644
--- a/tools/testfiles/tcomp-1.ddl
+++ b/tools/testfiles/tcomp-1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tcompound.h5'
-#############################
 HDF5 "tcompound.h5" {
 GROUP "/" {
    DATATYPE "#6632" H5T_COMPOUND {
diff --git a/tools/testfiles/tcomp-1.ls b/tools/testfiles/tcomp-1.ls
index 9cfb47d..a3969bd 100644
--- a/tools/testfiles/tcomp-1.ls
+++ b/tools/testfiles/tcomp-1.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -r -d tcompound.h5'
-#############################
 /                        Group
 /dset1                   Dataset {5}
     Data:
diff --git a/tools/testfiles/tcomp-2.ddl b/tools/testfiles/tcomp-2.ddl
index 824c753..a733a3c 100644
--- a/tools/testfiles/tcomp-2.ddl
+++ b/tools/testfiles/tcomp-2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -t /type1 --datatype /type2 --datatype=/group1/type3 tcompound.h5'
-#############################
 HDF5 "tcompound.h5" {
 DATATYPE "/type1" H5T_COMPOUND {
    H5T_STD_I32BE "int_name";
diff --git a/tools/testfiles/tcomp-3.ddl b/tools/testfiles/tcomp-3.ddl
index 538aa08..0294220 100644
--- a/tools/testfiles/tcomp-3.ddl
+++ b/tools/testfiles/tcomp-3.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -t /#6632 -g /group2 tcompound.h5'
-#############################
 HDF5 "tcompound.h5" {
 DATATYPE "/#6632" H5T_COMPOUND {
    H5T_STD_I32BE "int";
diff --git a/tools/testfiles/tcomp-4.ddl b/tools/testfiles/tcomp-4.ddl
index 32212f0..4ab5191 100644
--- a/tools/testfiles/tcomp-4.ddl
+++ b/tools/testfiles/tcomp-4.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tcompound_complex.h5'
-#############################
 HDF5 "tcompound_complex.h5" {
 GROUP "/" {
    DATASET "CompoundComplex" {
diff --git a/tools/testfiles/tcompact.ddl b/tools/testfiles/tcompact.ddl
index f970ce5..c9066a8 100644
--- a/tools/testfiles/tcompact.ddl
+++ b/tools/testfiles/tcompact.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H -p -d compact tfilters.h5'
-#############################
 HDF5 "tfilters.h5" {
 DATASET "compact" {
 COMMENT "This is a dataset with compact storage"
diff --git a/tools/testfiles/tcompound.h5.xml b/tools/testfiles/tcompound.h5.xml
index ed255e7..6d7d7c8 100644
--- a/tools/testfiles/tcompound.h5.xml
+++ b/tools/testfiles/tcompound.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tcompound.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:NamedDataType Name="#6632" OBJ-XID="xid_18446744073709551614" Parents="xid_696" H5ParentPaths="/">
       <hdf5:DataType>
diff --git a/tools/testfiles/tcompound2.h5.xml b/tools/testfiles/tcompound2.h5.xml
index 53e9312..6db1785 100644
--- a/tools/testfiles/tcompound2.h5.xml
+++ b/tools/testfiles/tcompound2.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tcompound2.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:NamedDataType Name="#9560" OBJ-XID="xid_18446744073709551614" Parents="xid_696" H5ParentPaths="/">
       <hdf5:DataType>
diff --git a/tools/testfiles/tcompound_complex.h5.xml b/tools/testfiles/tcompound_complex.h5.xml
index 99c1bff..bda8c94 100644
--- a/tools/testfiles/tcompound_complex.h5.xml
+++ b/tools/testfiles/tcompound_complex.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tcompound_complex.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_928" H5Path="/">
    <hdf5:Dataset Name="CompoundComplex" OBJ-XID="xid_976" H5Path= "/CompoundComplex" Parents="xid_928" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tcontents.ddl b/tools/testfiles/tcontents.ddl
index 2bb59b9..14e12d6 100644
--- a/tools/testfiles/tcontents.ddl
+++ b/tools/testfiles/tcontents.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -n tfcontents1.h5'
-#############################
 HDF5 "tfcontents1.h5" {
 FILE_CONTENTS {
  datatype   /#5616
diff --git a/tools/testfiles/tcontiguos.ddl b/tools/testfiles/tcontiguos.ddl
index 2828f8c..8800617 100644
--- a/tools/testfiles/tcontiguos.ddl
+++ b/tools/testfiles/tcontiguos.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H -p -d contiguous tfilters.h5'
-#############################
 HDF5 "tfilters.h5" {
 DATASET "contiguous" {
 COMMENT "This is a dataset with contiguous storage"
diff --git a/tools/testfiles/tdatareg.ddl b/tools/testfiles/tdatareg.ddl
index d68401f..a3831f1 100644
--- a/tools/testfiles/tdatareg.ddl
+++ b/tools/testfiles/tdatareg.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tdatareg.h5'
-#############################
 HDF5 "tdatareg.h5" {
 GROUP "/" {
    DATASET "Dataset1" {
diff --git a/tools/testfiles/tdatareg.h5.xml b/tools/testfiles/tdatareg.h5.xml
index d7dfad8..03188b8 100644
--- a/tools/testfiles/tdatareg.h5.xml
+++ b/tools/testfiles/tdatareg.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tdatareg.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_1284" H5Path= "/Dataset1" Parents="xid_696" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tdataregR.ddl b/tools/testfiles/tdataregR.ddl
index 2d962ed..0f613dc 100644
--- a/tools/testfiles/tdataregR.ddl
+++ b/tools/testfiles/tdataregR.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -R tdatareg.h5'
-#############################
 HDF5 "tdatareg.h5" {
 GROUP "/" {
    DATASET "Dataset1" {
diff --git a/tools/testfiles/tdataregbe.ls b/tools/testfiles/tdataregbe.ls
index 47b6994..b9dd8f2 100644
--- a/tools/testfiles/tdataregbe.ls
+++ b/tools/testfiles/tdataregbe.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -v tdatareg.h5'
-#############################
 Opened "tdatareg.h5" with sec2 driver.
 Dataset1                 Dataset {4/4}
     Location:  1:1284
diff --git a/tools/testfiles/tdataregle.ls b/tools/testfiles/tdataregle.ls
index b07b274..915f371 100644
--- a/tools/testfiles/tdataregle.ls
+++ b/tools/testfiles/tdataregle.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -v tdatareg.h5'
-#############################
 Opened "tdatareg.h5" with sec2 driver.
 Dataset1                 Dataset {4/4}
     Location:  1:1284
diff --git a/tools/testfiles/tdeflate.ddl b/tools/testfiles/tdeflate.ddl
index 7f658e7..e59d392 100644
--- a/tools/testfiles/tdeflate.ddl
+++ b/tools/testfiles/tdeflate.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H -p -d deflate tfilters.h5'
-#############################
 HDF5 "tfilters.h5" {
 DATASET "deflate" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/tdset-1.ddl b/tools/testfiles/tdset-1.ddl
index 55d2a44..6b9b608 100644
--- a/tools/testfiles/tdset-1.ddl
+++ b/tools/testfiles/tdset-1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tdset.h5'
-#############################
 HDF5 "tdset.h5" {
 GROUP "/" {
    DATASET "dset1" {
diff --git a/tools/testfiles/tdset-1.ls b/tools/testfiles/tdset-1.ls
index b6e4671..130c3ef 100644
--- a/tools/testfiles/tdset-1.ls
+++ b/tools/testfiles/tdset-1.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -r -d tdset.h5'
-#############################
 /                        Group
 /dset1                   Dataset {10, 20}
     Data:
diff --git a/tools/testfiles/tdset-2.ddl b/tools/testfiles/tdset-2.ddl
index 93c961c..def68c3 100644
--- a/tools/testfiles/tdset-2.ddl
+++ b/tools/testfiles/tdset-2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H -d dset1 -d /dset2 --dataset=dset3 tdset.h5'
-#############################
 HDF5 "tdset.h5" {
 DATASET "dset1" {
    DATATYPE  H5T_STD_I32BE
diff --git a/tools/testfiles/tdset-3s.ddl b/tools/testfiles/tdset-3s.ddl
index 5963e90..93bdac8 100644
--- a/tools/testfiles/tdset-3s.ddl
+++ b/tools/testfiles/tdset-3s.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /dset1[1,1;;;] tdset.h5'
-#############################
 HDF5 "tdset.h5" {
 DATASET "/dset1" {
    DATATYPE  H5T_STD_I32BE
diff --git a/tools/testfiles/tdset.h5.xml b/tools/testfiles/tdset.h5.xml
index 7aedaf5..59719d3 100644
--- a/tools/testfiles/tdset.h5.xml
+++ b/tools/testfiles/tdset.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tdset.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_928" H5Path="/">
    <hdf5:Dataset Name="dset1" OBJ-XID="xid_976" H5Path= "/dset1" Parents="xid_928" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tdset2.h5.xml b/tools/testfiles/tdset2.h5.xml
index 3bcaef0..a407ae8 100644
--- a/tools/testfiles/tdset2.h5.xml
+++ b/tools/testfiles/tdset2.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tdset2.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Dataset Name="dset1" OBJ-XID="xid_744" H5Path= "/dset1" Parents="xid_696" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tempty-dtd-2.h5.xml b/tools/testfiles/tempty-dtd-2.h5.xml
index bf5a5d2..cff16fd 100644
--- a/tools/testfiles/tempty-dtd-2.h5.xml
+++ b/tools/testfiles/tempty-dtd-2.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml -u tempty.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE HDF5-File PUBLIC "HDF5-File.dtd" "http://www.hdfgroup.org/DTDs/HDF5-File.dtd">
+<!DOCTYPE HDF5-File PUBLIC "HDF5-File.dtd" "http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.dtd">
 <HDF5-File>
 <RootGroup OBJ-XID="xid_928" H5Path="/">
    <Dataset Name="Dataset1.0" OBJ-XID="xid_976" H5Path= "/Dataset1.0" Parents="xid_928" H5ParentPaths="/">
diff --git a/tools/testfiles/tempty-dtd-uri.h5.xml b/tools/testfiles/tempty-dtd-uri.h5.xml
index 29c63bd..76beb0f 100644
--- a/tools/testfiles/tempty-dtd-uri.h5.xml
+++ b/tools/testfiles/tempty-dtd-uri.h5.xml
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump --xml --use-dtd --xml-dtd=http://somewhere.net tempty.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE HDF5-File PUBLIC "HDF5-File.dtd" "http://somewhere.net">
 <HDF5-File>
diff --git a/tools/testfiles/tempty-dtd.h5.xml b/tools/testfiles/tempty-dtd.h5.xml
index 8d15505..cff16fd 100644
--- a/tools/testfiles/tempty-dtd.h5.xml
+++ b/tools/testfiles/tempty-dtd.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml --use-dtd tempty.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE HDF5-File PUBLIC "HDF5-File.dtd" "http://www.hdfgroup.org/DTDs/HDF5-File.dtd">
+<!DOCTYPE HDF5-File PUBLIC "HDF5-File.dtd" "http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.dtd">
 <HDF5-File>
 <RootGroup OBJ-XID="xid_928" H5Path="/">
    <Dataset Name="Dataset1.0" OBJ-XID="xid_976" H5Path= "/Dataset1.0" Parents="xid_928" H5ParentPaths="/">
diff --git a/tools/testfiles/tempty-nons-2.h5.xml b/tools/testfiles/tempty-nons-2.h5.xml
index c9dc971..c43c163 100644
--- a/tools/testfiles/tempty-nons-2.h5.xml
+++ b/tools/testfiles/tempty-nons-2.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml --xml-ns=: tempty.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<HDF5-File xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<HDF5-File xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <RootGroup OBJ-XID="xid_928" H5Path="/">
    <Dataset Name="Dataset1.0" OBJ-XID="xid_976" H5Path= "/Dataset1.0" Parents="xid_928" H5ParentPaths="/">
       <StorageLayout>
diff --git a/tools/testfiles/tempty-nons-uri.h5.xml b/tools/testfiles/tempty-nons-uri.h5.xml
index 05471e1..28df2e6 100644
--- a/tools/testfiles/tempty-nons-uri.h5.xml
+++ b/tools/testfiles/tempty-nons-uri.h5.xml
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump --xml --xml-ns=: --xml-dtd=http://somewhere.net tempty.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
 <HDF5-File xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://somewhere.net">
 <RootGroup OBJ-XID="xid_928" H5Path="/">
diff --git a/tools/testfiles/tempty-nons.h5.xml b/tools/testfiles/tempty-nons.h5.xml
index 25536d9..c43c163 100644
--- a/tools/testfiles/tempty-nons.h5.xml
+++ b/tools/testfiles/tempty-nons.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml -X : tempty.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<HDF5-File xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<HDF5-File xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <RootGroup OBJ-XID="xid_928" H5Path="/">
    <Dataset Name="Dataset1.0" OBJ-XID="xid_976" H5Path= "/Dataset1.0" Parents="xid_928" H5ParentPaths="/">
       <StorageLayout>
diff --git a/tools/testfiles/tempty-ns-2.h5.xml b/tools/testfiles/tempty-ns-2.h5.xml
index 4851e5c..4504115 100644
--- a/tools/testfiles/tempty-ns-2.h5.xml
+++ b/tools/testfiles/tempty-ns-2.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml --xml-ns=thing: tempty.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<thing:HDF5-File xmlns:thing="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<thing:HDF5-File xmlns:thing="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <thing:RootGroup OBJ-XID="xid_928" H5Path="/">
    <thing:Dataset Name="Dataset1.0" OBJ-XID="xid_976" H5Path= "/Dataset1.0" Parents="xid_928" H5ParentPaths="/">
       <thing:StorageLayout>
diff --git a/tools/testfiles/tempty-ns.h5.xml b/tools/testfiles/tempty-ns.h5.xml
index 01ae896..4504115 100644
--- a/tools/testfiles/tempty-ns.h5.xml
+++ b/tools/testfiles/tempty-ns.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml -X thing: tempty.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<thing:HDF5-File xmlns:thing="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<thing:HDF5-File xmlns:thing="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <thing:RootGroup OBJ-XID="xid_928" H5Path="/">
    <thing:Dataset Name="Dataset1.0" OBJ-XID="xid_976" H5Path= "/Dataset1.0" Parents="xid_928" H5ParentPaths="/">
       <thing:StorageLayout>
diff --git a/tools/testfiles/tempty.ddl b/tools/testfiles/tempty.ddl
index d6eadd2..0c24334 100644
--- a/tools/testfiles/tempty.ddl
+++ b/tools/testfiles/tempty.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tempty.h5'
-#############################
 HDF5 "tempty.h5" {
 GROUP "/" {
    DATASET "Dataset1.0" {
diff --git a/tools/testfiles/tempty.h5.xml b/tools/testfiles/tempty.h5.xml
index 4ff8c95..e6981a5 100644
--- a/tools/testfiles/tempty.h5.xml
+++ b/tools/testfiles/tempty.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tempty.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_928" H5Path="/">
    <hdf5:Dataset Name="Dataset1.0" OBJ-XID="xid_976" H5Path= "/Dataset1.0" Parents="xid_928" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tempty.ls b/tools/testfiles/tempty.ls
index 96ea64a..38ecb55 100644
--- a/tools/testfiles/tempty.ls
+++ b/tools/testfiles/tempty.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -d tempty.h5'
-#############################
 Dataset1.0               Dataset {4}
     Data:
         (0) (), (), (), ()
diff --git a/tools/testfiles/tenum.h5.xml b/tools/testfiles/tenum.h5.xml
index d8adc1b..93cbfc8 100644
--- a/tools/testfiles/tenum.h5.xml
+++ b/tools/testfiles/tenum.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tenum.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_928" H5Path="/">
    <hdf5:NamedDataType Name="enum normal" OBJ-XID="xid_976" H5Path="/enum normal" Parents="xid_928" H5ParentPaths="/">
       <hdf5:DataType>
diff --git a/tools/testfiles/texternal.ddl b/tools/testfiles/texternal.ddl
index 21b3b7a..7f7b69a 100644
--- a/tools/testfiles/texternal.ddl
+++ b/tools/testfiles/texternal.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H -p -d external tfilters.h5'
-#############################
 HDF5 "tfilters.h5" {
 DATASET "external" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/textlink-1.ls b/tools/testfiles/textlink-1.ls
index c159483..a49001f 100644
--- a/tools/testfiles/textlink-1.ls
+++ b/tools/testfiles/textlink-1.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -r textlink.h5'
-#############################
 /                        Group
 /extlink1                External Link {filename//objname}
 /extlink2                External Link {anotherfile//anotherobj}
diff --git a/tools/testfiles/textlink.ddl b/tools/testfiles/textlink.ddl
index 0a43c47..5459b30 100644
--- a/tools/testfiles/textlink.ddl
+++ b/tools/testfiles/textlink.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump textlink.h5'
-#############################
 HDF5 "textlink.h5" {
 GROUP "/" {
    EXTERNAL_LINK "extlink1" {
diff --git a/tools/testfiles/textlink.h5.xml b/tools/testfiles/textlink.h5.xml
index f6666a8..f6c7ff6 100644
--- a/tools/testfiles/textlink.h5.xml
+++ b/tools/testfiles/textlink.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml textlink.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_96" H5Path="/">
    <hdf5:ExternalLink LinkName="extlink1" OBJ-XID="xid_18446744073709551614" H5SourcePath="/extlink1" TargetFilename="filename"  TargetPath="objname"  Parents="xid_96" H5ParentPaths="/" />
    <hdf5:ExternalLink LinkName="extlink2" OBJ-XID="xid_18446744073709551613" H5SourcePath="/extlink2" TargetFilename="anotherfile"  TargetPath="anotherobj"  Parents="xid_96" H5ParentPaths="/" />
diff --git a/tools/testfiles/textlinkfar.ddl b/tools/testfiles/textlinkfar.ddl
index 4151710..45f2145 100644
--- a/tools/testfiles/textlinkfar.ddl
+++ b/tools/testfiles/textlinkfar.ddl
@@ -1,12 +1,27 @@
-#############################
-Expected output for 'h5dump textlinkfar.h5'
-#############################
 HDF5 "textlinkfar.h5" {
 GROUP "/" {
    EXTERNAL_LINK "src_file" {
       TARGETFILE "textlinksrc.h5"
       TARGETPATH "/"
          GROUP "/" {
+            EXTERNAL_LINK "ext2soft_link1" {
+               TARGETFILE "tsoftlinks.h5"
+               TARGETPATH "/soft_dset1"
+                  DATASET "/soft_dset1" {
+                     DATATYPE  H5T_STD_I32BE
+                     DATASPACE  SIMPLE { ( 4, 2 ) / ( 4, 2 ) }
+                     DATA {
+                     (0,0): 0, 0,
+                     (1,0): 1, 1,
+                     (2,0): 2, 2,
+                     (3,0): 3, 3
+                     }
+                  }
+            }
+            EXTERNAL_LINK "ext2softdangle_link1" {
+               TARGETFILE "tsoftlinks.h5"
+               TARGETPATH "/soft_dangle"
+            }
             EXTERNAL_LINK "ext_link1" {
                TARGETFILE "textlinktar.h5"
                TARGETPATH "group"
diff --git a/tools/testfiles/textlinksrc-1-old.ls b/tools/testfiles/textlinksrc-1-old.ls
index 5e81dec..ef26cc4 100644
--- a/tools/testfiles/textlinksrc-1-old.ls
+++ b/tools/testfiles/textlinksrc-1-old.ls
@@ -1,10 +1,11 @@
-#############################
- output for 'h5ls -w80 -Er textlinksrc.h5'
-#############################
 /                        Group
+/ext2soft_link1          External Link {tsoftlinks.h5//soft_dset1} {Dataset {4, 2}}
+/ext2softdangle_link1    External Link {tsoftlinks.h5//soft_dangle} {**NOT FOUND**}
 /ext_link1               External Link {textlinktar.h5//group} {Group}
 /ext_link1/dset          Dataset {6}
 /ext_link1/elink_t1      External Link {textlinksrc.h5//} {Group}
+/ext_link1/elink_t1/ext2soft_link1 External Link {tsoftlinks.h5//soft_dset1} {Already Visited}
+/ext_link1/elink_t1/ext2softdangle_link1 External Link {tsoftlinks.h5//soft_dangle} {Already Visited}
 /ext_link1/elink_t1/ext_link1 External Link {textlinktar.h5//group} {Already Visited}
 /ext_link1/elink_t1/ext_link2 External Link {textlinktar.h5//dset} {Dataset {6}}
 /ext_link1/elink_t1/ext_link3 External Link {textlinktar.h5//type} {Type}
diff --git a/tools/testfiles/textlinksrc-1.ls b/tools/testfiles/textlinksrc-1.ls
index f39eec9..ef26cc4 100644
--- a/tools/testfiles/textlinksrc-1.ls
+++ b/tools/testfiles/textlinksrc-1.ls
@@ -1,10 +1,11 @@
-#############################
- output for 'h5ls -w80 --follow-symlinks -r textlinksrc.h5'
-#############################
 /                        Group
+/ext2soft_link1          External Link {tsoftlinks.h5//soft_dset1} {Dataset {4, 2}}
+/ext2softdangle_link1    External Link {tsoftlinks.h5//soft_dangle} {**NOT FOUND**}
 /ext_link1               External Link {textlinktar.h5//group} {Group}
 /ext_link1/dset          Dataset {6}
 /ext_link1/elink_t1      External Link {textlinksrc.h5//} {Group}
+/ext_link1/elink_t1/ext2soft_link1 External Link {tsoftlinks.h5//soft_dset1} {Already Visited}
+/ext_link1/elink_t1/ext2softdangle_link1 External Link {tsoftlinks.h5//soft_dangle} {Already Visited}
 /ext_link1/elink_t1/ext_link1 External Link {textlinktar.h5//group} {Already Visited}
 /ext_link1/elink_t1/ext_link2 External Link {textlinktar.h5//dset} {Dataset {6}}
 /ext_link1/elink_t1/ext_link3 External Link {textlinktar.h5//type} {Type}
diff --git a/tools/testfiles/textlinksrc-2-old.ls b/tools/testfiles/textlinksrc-2-old.ls
index 403a1d2..a3044dd 100644
--- a/tools/testfiles/textlinksrc-2-old.ls
+++ b/tools/testfiles/textlinksrc-2-old.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -Erv textlinksrc.h5/ext_link5'
-#############################
 Opened "textlinksrc.h5" with sec2 driver.
 ext_link5                External Link {textlinktar.h5//empty_group} {Group
     Location:  5:1832
diff --git a/tools/testfiles/textlinksrc-2.ls b/tools/testfiles/textlinksrc-2.ls
index 1e92f59..a3044dd 100644
--- a/tools/testfiles/textlinksrc-2.ls
+++ b/tools/testfiles/textlinksrc-2.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 --follow-symlinks -rv textlinksrc.h5/ext_link5'
-#############################
 Opened "textlinksrc.h5" with sec2 driver.
 ext_link5                External Link {textlinktar.h5//empty_group} {Group
     Location:  5:1832
diff --git a/tools/testfiles/textlinksrc-3-old.ls b/tools/testfiles/textlinksrc-3-old.ls
index a86ca32..75f3421 100644
--- a/tools/testfiles/textlinksrc-3-old.ls
+++ b/tools/testfiles/textlinksrc-3-old.ls
@@ -1,9 +1,8 @@
-#############################
- output for 'h5ls -w80 -Er textlinksrc.h5/ext_link1'
-#############################
 ext_link1                External Link {textlinktar.h5//group} {Group}
 /dset                    Dataset {6}
 /elink_t1                External Link {textlinksrc.h5//} {Group}
+/elink_t1/ext2soft_link1 External Link {tsoftlinks.h5//soft_dset1} {Dataset {4, 2}}
+/elink_t1/ext2softdangle_link1 External Link {tsoftlinks.h5//soft_dangle} {**NOT FOUND**}
 /elink_t1/ext_link1      External Link {textlinktar.h5//group} {Already Visited}
 /elink_t1/ext_link2      External Link {textlinktar.h5//dset} {Dataset {6}}
 /elink_t1/ext_link3      External Link {textlinktar.h5//type} {Type}
diff --git a/tools/testfiles/textlinksrc-3.ls b/tools/testfiles/textlinksrc-3.ls
index bd173f3..75f3421 100644
--- a/tools/testfiles/textlinksrc-3.ls
+++ b/tools/testfiles/textlinksrc-3.ls
@@ -1,9 +1,8 @@
-#############################
- output for 'h5ls -w80 --follow-symlinks -r textlinksrc.h5/ext_link1'
-#############################
 ext_link1                External Link {textlinktar.h5//group} {Group}
 /dset                    Dataset {6}
 /elink_t1                External Link {textlinksrc.h5//} {Group}
+/elink_t1/ext2soft_link1 External Link {tsoftlinks.h5//soft_dset1} {Dataset {4, 2}}
+/elink_t1/ext2softdangle_link1 External Link {tsoftlinks.h5//soft_dangle} {**NOT FOUND**}
 /elink_t1/ext_link1      External Link {textlinktar.h5//group} {Already Visited}
 /elink_t1/ext_link2      External Link {textlinktar.h5//dset} {Dataset {6}}
 /elink_t1/ext_link3      External Link {textlinktar.h5//type} {Type}
diff --git a/tools/testfiles/textlinksrc-4.ls b/tools/testfiles/textlinksrc-4.ls
index f440d9c..449830f 100644
--- a/tools/testfiles/textlinksrc-4.ls
+++ b/tools/testfiles/textlinksrc-4.ls
@@ -1,7 +1,6 @@
-#############################
- output for 'h5ls -w80 -r textlinksrc.h5'
-#############################
 /                        Group
+/ext2soft_link1          External Link {tsoftlinks.h5//soft_dset1}
+/ext2softdangle_link1    External Link {tsoftlinks.h5//soft_dangle}
 /ext_link1               External Link {textlinktar.h5//group}
 /ext_link2               External Link {textlinktar.h5//dset}
 /ext_link3               External Link {textlinktar.h5//type}
diff --git a/tools/testfiles/textlinksrc-5.ls b/tools/testfiles/textlinksrc-5.ls
index a1d61d7..8cba586 100644
--- a/tools/testfiles/textlinksrc-5.ls
+++ b/tools/testfiles/textlinksrc-5.ls
@@ -1,4 +1 @@
-#############################
- output for 'h5ls -w80 -r textlinksrc.h5/ext_link1'
-#############################
 ext_link1                External Link {textlinktar.h5//group}
diff --git a/tools/testfiles/textlinksrc-6-old.ls b/tools/testfiles/textlinksrc-6-old.ls
index e1b8b74..ae70721 100644
--- a/tools/testfiles/textlinksrc-6-old.ls
+++ b/tools/testfiles/textlinksrc-6-old.ls
@@ -1,6 +1,5 @@
-#############################
- output for 'h5ls -w80 -E textlinksrc.h5'
-#############################
+ext2soft_link1           External Link {tsoftlinks.h5//soft_dset1} {Dataset {4, 2}}
+ext2softdangle_link1     External Link {tsoftlinks.h5//soft_dangle} {**NOT FOUND**}
 ext_link1                External Link {textlinktar.h5//group} {Group}
 ext_link2                External Link {textlinktar.h5//dset} {Dataset {6}}
 ext_link3                External Link {textlinktar.h5//type} {Type}
diff --git a/tools/testfiles/textlinksrc-6.ls b/tools/testfiles/textlinksrc-6.ls
index 6cda888..ae70721 100644
--- a/tools/testfiles/textlinksrc-6.ls
+++ b/tools/testfiles/textlinksrc-6.ls
@@ -1,6 +1,5 @@
-#############################
- output for 'h5ls -w80 --follow-symlinks textlinksrc.h5'
-#############################
+ext2soft_link1           External Link {tsoftlinks.h5//soft_dset1} {Dataset {4, 2}}
+ext2softdangle_link1     External Link {tsoftlinks.h5//soft_dangle} {**NOT FOUND**}
 ext_link1                External Link {textlinktar.h5//group} {Group}
 ext_link2                External Link {textlinktar.h5//dset} {Dataset {6}}
 ext_link3                External Link {textlinktar.h5//type} {Type}
diff --git a/tools/testfiles/textlinksrc-7-old.ls b/tools/testfiles/textlinksrc-7-old.ls
index 9249d0c..e9a5a03 100644
--- a/tools/testfiles/textlinksrc-7-old.ls
+++ b/tools/testfiles/textlinksrc-7-old.ls
@@ -1,4 +1 @@
-#############################
- output for 'h5ls -w80 -E textlinksrc.h5/ext_link1'
-#############################
 ext_link1                External Link {textlinktar.h5//group} {Group}
diff --git a/tools/testfiles/textlinksrc-7.ls b/tools/testfiles/textlinksrc-7.ls
index 528c4c5..e9a5a03 100644
--- a/tools/testfiles/textlinksrc-7.ls
+++ b/tools/testfiles/textlinksrc-7.ls
@@ -1,4 +1 @@
-#############################
- output for 'h5ls -w80 --follow-symlinks textlinksrc.h5/ext_link1'
-#############################
 ext_link1                External Link {textlinktar.h5//group} {Group}
diff --git a/tools/testfiles/textlinksrc-nodangle-1.ls b/tools/testfiles/textlinksrc-nodangle-1.ls
index 9240761..7427e1c 100644
--- a/tools/testfiles/textlinksrc-nodangle-1.ls
+++ b/tools/testfiles/textlinksrc-nodangle-1.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 --no-dangling-links textlinksrc.h5'
-#############################
 Error: --no-dangling-links must be used along with --follow-symlinks option!
 
 usage: h5ls [OPTIONS] [OBJECTS...]
diff --git a/tools/testfiles/textlinksrc-nodangle-2.ls b/tools/testfiles/textlinksrc-nodangle-2.ls
index 4713849..ae70721 100644
--- a/tools/testfiles/textlinksrc-nodangle-2.ls
+++ b/tools/testfiles/textlinksrc-nodangle-2.ls
@@ -1,6 +1,5 @@
-#############################
- output for 'h5ls -w80 --follow-symlinks --no-dangling-links textlinksrc.h5'
-#############################
+ext2soft_link1           External Link {tsoftlinks.h5//soft_dset1} {Dataset {4, 2}}
+ext2softdangle_link1     External Link {tsoftlinks.h5//soft_dangle} {**NOT FOUND**}
 ext_link1                External Link {textlinktar.h5//group} {Group}
 ext_link2                External Link {textlinktar.h5//dset} {Dataset {6}}
 ext_link3                External Link {textlinktar.h5//type} {Type}
diff --git a/tools/testfiles/textlinksrc.ddl b/tools/testfiles/textlinksrc.ddl
index b806c56..942477e 100644
--- a/tools/testfiles/textlinksrc.ddl
+++ b/tools/testfiles/textlinksrc.ddl
@@ -1,8 +1,23 @@
-#############################
-Expected output for 'h5dump textlinksrc.h5'
-#############################
 HDF5 "textlinksrc.h5" {
 GROUP "/" {
+   EXTERNAL_LINK "ext2soft_link1" {
+      TARGETFILE "tsoftlinks.h5"
+      TARGETPATH "/soft_dset1"
+         DATASET "/soft_dset1" {
+            DATATYPE  H5T_STD_I32BE
+            DATASPACE  SIMPLE { ( 4, 2 ) / ( 4, 2 ) }
+            DATA {
+            (0,0): 0, 0,
+            (1,0): 1, 1,
+            (2,0): 2, 2,
+            (3,0): 3, 3
+            }
+         }
+   }
+   EXTERNAL_LINK "ext2softdangle_link1" {
+      TARGETFILE "tsoftlinks.h5"
+      TARGETPATH "/soft_dangle"
+   }
    EXTERNAL_LINK "ext_link1" {
       TARGETFILE "textlinktar.h5"
       TARGETPATH "group"
diff --git a/tools/testfiles/textlinksrc.h5 b/tools/testfiles/textlinksrc.h5
index 062acbe..4db1cc4 100644
Binary files a/tools/testfiles/textlinksrc.h5 and b/tools/testfiles/textlinksrc.h5 differ
diff --git a/tools/testfiles/tfamily.ddl b/tools/testfiles/tfamily.ddl
index 14e46ef..489d8a8 100644
--- a/tools/testfiles/tfamily.ddl
+++ b/tools/testfiles/tfamily.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump --filedriver=family tfamily%05d.h5'
-#############################
 HDF5 "tfamily%05d.h5" {
 GROUP "/" {
    DATASET "dset1" {
diff --git a/tools/testfiles/tfill.ddl b/tools/testfiles/tfill.ddl
index 14a01f3..87f9ae5 100644
--- a/tools/testfiles/tfill.ddl
+++ b/tools/testfiles/tfill.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -p tfvalues.h5'
-#############################
 HDF5 "tfvalues.h5" {
 GROUP "/" {
    DATASET "fill_array" {
diff --git a/tools/testfiles/tfletcher32.ddl b/tools/testfiles/tfletcher32.ddl
index 9395f4a..0b7b1b8 100644
--- a/tools/testfiles/tfletcher32.ddl
+++ b/tools/testfiles/tfletcher32.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H -p -d fletcher32 tfilters.h5'
-#############################
 HDF5 "tfilters.h5" {
 DATASET "fletcher32" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/tfpformat.ddl b/tools/testfiles/tfpformat.ddl
index 2336822..6f0281b 100644
--- a/tools/testfiles/tfpformat.ddl
+++ b/tools/testfiles/tfpformat.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -m %.7f tfpformat.h5'
-#############################
 HDF5 "tfpformat.h5" {
 GROUP "/" {
    DATASET "double" {
diff --git a/tools/testfiles/tfpformat.h5.xml b/tools/testfiles/tfpformat.h5.xml
index 939d7b3..34af79a 100644
--- a/tools/testfiles/tfpformat.h5.xml
+++ b/tools/testfiles/tfpformat.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump -u -m %.7f tfpformat.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE HDF5-File PUBLIC "HDF5-File.dtd" "http://www.hdfgroup.org/DTDs/HDF5-File.dtd">
+<!DOCTYPE HDF5-File PUBLIC "HDF5-File.dtd" "http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.dtd">
 <HDF5-File>
 <RootGroup OBJ-XID="xid_96" H5Path="/">
    <Dataset Name="double" OBJ-XID="xid_800" H5Path= "/double" Parents="xid_96" H5ParentPaths="/">
diff --git a/tools/testfiles/tgroup-1.ddl b/tools/testfiles/tgroup-1.ddl
index d5f5eb4..4407eae 100644
--- a/tools/testfiles/tgroup-1.ddl
+++ b/tools/testfiles/tgroup-1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tgroup.h5'
-#############################
 HDF5 "tgroup.h5" {
 GROUP "/" {
    GROUP "g1" {
diff --git a/tools/testfiles/tgroup-1.ls b/tools/testfiles/tgroup-1.ls
index 04066ca..effaf5a 100644
--- a/tools/testfiles/tgroup-1.ls
+++ b/tools/testfiles/tgroup-1.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -r -g tgroup.h5'
-#############################
 Error: 'recursive' option not compatible with 'group info' option!
 
 usage: h5ls [OPTIONS] [OBJECTS...]
diff --git a/tools/testfiles/tgroup-2.ddl b/tools/testfiles/tgroup-2.ddl
index e993d35..c4af7bb 100644
--- a/tools/testfiles/tgroup-2.ddl
+++ b/tools/testfiles/tgroup-2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump --group=/g2 --group / -g /y tgroup.h5'
-#############################
 HDF5 "tgroup.h5" {
 GROUP "/g2" {
    GROUP "g2.1" {
diff --git a/tools/testfiles/tgroup-2.ls b/tools/testfiles/tgroup-2.ls
index 0817d93..464d4d7 100644
--- a/tools/testfiles/tgroup-2.ls
+++ b/tools/testfiles/tgroup-2.ls
@@ -1,4 +1 @@
-#############################
- output for 'h5ls -w80 -g tgroup.h5/g1'
-#############################
 g1                       Group
diff --git a/tools/testfiles/tgroup-3.ls b/tools/testfiles/tgroup-3.ls
index cfb479a..959415f 100644
--- a/tools/testfiles/tgroup-3.ls
+++ b/tools/testfiles/tgroup-3.ls
@@ -1,5 +1,2 @@
-#############################
- output for 'h5ls -w80 tgroup.h5/g1'
-#############################
 g1.1                     Group
 g1.2                     Group
diff --git a/tools/testfiles/tgroup.h5.xml b/tools/testfiles/tgroup.h5.xml
index 00f5a0b..8065165 100644
--- a/tools/testfiles/tgroup.h5.xml
+++ b/tools/testfiles/tgroup.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tgroup.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Group Name="g1" OBJ-XID="xid_1344" H5Path="/g1" Parents="xid_696" H5ParentPaths="/" >
       <hdf5:Group Name="g1.1" OBJ-XID="xid_3616" H5Path="/g1/g1.1" Parents="xid_1344" H5ParentPaths="/g1" >
diff --git a/tools/testfiles/tgroup.ls b/tools/testfiles/tgroup.ls
index 5e4b66d..549b166 100644
--- a/tools/testfiles/tgroup.ls
+++ b/tools/testfiles/tgroup.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 tgroup.h5'
-#############################
 g1                       Group
 g2                       Group
 g3                       Group
diff --git a/tools/testfiles/tgrp_comments.ddl b/tools/testfiles/tgrp_comments.ddl
index 460a9f0..e33f3c2 100644
--- a/tools/testfiles/tgrp_comments.ddl
+++ b/tools/testfiles/tgrp_comments.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tgrp_comments.h5'
-#############################
 HDF5 "tgrp_comments.h5" {
 GROUP "/" {
    GROUP "g1" {
diff --git a/tools/testfiles/tgrp_comments.ls b/tools/testfiles/tgrp_comments.ls
index e4c7d42..c36a819 100644
--- a/tools/testfiles/tgrp_comments.ls
+++ b/tools/testfiles/tgrp_comments.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -v -g tgrp_comments.h5/glongcomment'
-#############################
 Opened "tgrp_comments.h5" with sec2 driver.
 glongcomment             Group
     Location:  1:12424
diff --git a/tools/testfiles/thlink-1.ddl b/tools/testfiles/thlink-1.ddl
index c913201..61ac6c2 100644
--- a/tools/testfiles/thlink-1.ddl
+++ b/tools/testfiles/thlink-1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump thlink.h5'
-#############################
 HDF5 "thlink.h5" {
 GROUP "/" {
    DATASET "dset1" {
diff --git a/tools/testfiles/thlink-1.ls b/tools/testfiles/thlink-1.ls
index 01839bf..adcd38a 100644
--- a/tools/testfiles/thlink-1.ls
+++ b/tools/testfiles/thlink-1.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 thlink.h5'
-#############################
 dset1                    Dataset {5}
 g1                       Group
 g2                       Group
diff --git a/tools/testfiles/thlink-2.ddl b/tools/testfiles/thlink-2.ddl
index 829dbd6..c1c6367 100644
--- a/tools/testfiles/thlink-2.ddl
+++ b/tools/testfiles/thlink-2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /g1/dset2 --dataset /dset1 --dataset=/g1/g1.1/dset3 thlink.h5'
-#############################
 HDF5 "thlink.h5" {
 DATASET "/g1/dset2" {
    DATATYPE  H5T_STD_I32BE
diff --git a/tools/testfiles/thlink-3.ddl b/tools/testfiles/thlink-3.ddl
index d4b9d39..625cf3c 100644
--- a/tools/testfiles/thlink-3.ddl
+++ b/tools/testfiles/thlink-3.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /g1/g1.1/dset3 --dataset /g1/dset2 --dataset=/dset1 thlink.h5'
-#############################
 HDF5 "thlink.h5" {
 DATASET "/g1/g1.1/dset3" {
    DATATYPE  H5T_STD_I32BE
diff --git a/tools/testfiles/thlink-4.ddl b/tools/testfiles/thlink-4.ddl
index 4a06500..026f412 100644
--- a/tools/testfiles/thlink-4.ddl
+++ b/tools/testfiles/thlink-4.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -g /g1 thlink.h5'
-#############################
 HDF5 "thlink.h5" {
 GROUP "/g1" {
    DATASET "dset2" {
diff --git a/tools/testfiles/thlink-5.ddl b/tools/testfiles/thlink-5.ddl
index b5dd8ee..058e863 100644
--- a/tools/testfiles/thlink-5.ddl
+++ b/tools/testfiles/thlink-5.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /dset1 -g /g2 -d /g1/dset2 thlink.h5'
-#############################
 HDF5 "thlink.h5" {
 DATASET "/dset1" {
    DATATYPE  H5T_STD_I32BE
diff --git a/tools/testfiles/thlink.h5.xml b/tools/testfiles/thlink.h5.xml
index 19bc816..b726087 100644
--- a/tools/testfiles/thlink.h5.xml
+++ b/tools/testfiles/thlink.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml thlink.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_96" H5Path="/">
    <hdf5:Dataset Name="dset1" OBJ-XID="xid_808" H5Path= "/dset1" Parents="xid_96" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/thlinks-nodangle-1.ls b/tools/testfiles/thlinks-nodangle-1.ls
index 37ba6b0..adcd38a 100644
--- a/tools/testfiles/thlinks-nodangle-1.ls
+++ b/tools/testfiles/thlinks-nodangle-1.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 --follow-symlinks --no-dangling-links thlink.h5'
-#############################
 dset1                    Dataset {5}
 g1                       Group
 g2                       Group
diff --git a/tools/testfiles/thyperslab.ddl b/tools/testfiles/thyperslab.ddl
index 733c456..cfebd14 100644
--- a/tools/testfiles/thyperslab.ddl
+++ b/tools/testfiles/thyperslab.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump thyperslab.h5'
-#############################
 HDF5 "thyperslab.h5" {
 GROUP "/" {
    DATASET "stripmine" {
diff --git a/tools/testfiles/tindicesno.ddl b/tools/testfiles/tindicesno.ddl
index a7ff3b0..a7b726e 100644
--- a/tools/testfiles/tindicesno.ddl
+++ b/tools/testfiles/tindicesno.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -y taindices.h5'
-#############################
 HDF5 "taindices.h5" {
 GROUP "/" {
    DATASET "1d" {
diff --git a/tools/testfiles/tindicessub1.ddl b/tools/testfiles/tindicessub1.ddl
index 0173fb5..5cf4058 100644
--- a/tools/testfiles/tindicessub1.ddl
+++ b/tools/testfiles/tindicessub1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d 1d -s 1 -S 10 -c 2 -k 3 taindices.h5'
-#############################
 HDF5 "taindices.h5" {
 DATASET "1d" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/tindicessub2.ddl b/tools/testfiles/tindicessub2.ddl
index 0f8f720..5103b49 100644
--- a/tools/testfiles/tindicessub2.ddl
+++ b/tools/testfiles/tindicessub2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d 2d -s 1,2 -S 3,3 -c 3,2 -k 2,2 taindices.h5'
-#############################
 HDF5 "taindices.h5" {
 DATASET "2d" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/tindicessub3.ddl b/tools/testfiles/tindicessub3.ddl
index 1ffc016..f7fb81c 100644
--- a/tools/testfiles/tindicessub3.ddl
+++ b/tools/testfiles/tindicessub3.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d 3d -s 0,1,2 -S 1,3,3 -c 2,2,2 -k 1,2,2 taindices.h5'
-#############################
 HDF5 "taindices.h5" {
 DATASET "3d" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/tindicessub4.ddl b/tools/testfiles/tindicessub4.ddl
index 273e396..7829875 100644
--- a/tools/testfiles/tindicessub4.ddl
+++ b/tools/testfiles/tindicessub4.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d 4d -s 0,0,1,2 -c 2,2,3,2 -S 1,1,3,3 -k 1,1,2,2 taindices.h5'
-#############################
 HDF5 "taindices.h5" {
 DATASET "4d" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/tindicesyes.ddl b/tools/testfiles/tindicesyes.ddl
index 4a07072..9440c54 100644
--- a/tools/testfiles/tindicesyes.ddl
+++ b/tools/testfiles/tindicesyes.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump taindices.h5'
-#############################
 HDF5 "taindices.h5" {
 GROUP "/" {
    DATASET "1d" {
diff --git a/tools/testfiles/tlarge_objname.ddl b/tools/testfiles/tlarge_objname.ddl
index d3f0fbe..0facc43 100644
--- a/tools/testfiles/tlarge_objname.ddl
+++ b/tools/testfiles/tlarge_objname.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -w157 tlarge_objname.h5'
-#############################
 HDF5 "tlarge_objname.h5" {
 GROUP "/" {
    GROUP "this_is_a_large_group_name" {
diff --git a/tools/testfiles/tlonglinks.ddl b/tools/testfiles/tlonglinks.ddl
index 9842e4d..0e57b3d 100644
--- a/tools/testfiles/tlonglinks.ddl
+++ b/tools/testfiles/tlonglinks.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tlonglinks.h5'
-#############################
 HDF5 "tlonglinks.h5" {
 GROUP "/" {
    GROUP "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" {
diff --git a/tools/testfiles/tloop-1.ddl b/tools/testfiles/tloop-1.ddl
index 8313887..1f3a2fb 100644
--- a/tools/testfiles/tloop-1.ddl
+++ b/tools/testfiles/tloop-1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tloop.h5'
-#############################
 HDF5 "tloop.h5" {
 GROUP "/" {
    GROUP "g1" {
diff --git a/tools/testfiles/tloop-1.ls b/tools/testfiles/tloop-1.ls
index 22cb6c7..a68bd3b 100644
--- a/tools/testfiles/tloop-1.ls
+++ b/tools/testfiles/tloop-1.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -r -d tloop.h5'
-#############################
 /                        Group
 /g1                      Group
 /g1/g1.1                 Group
diff --git a/tools/testfiles/tloop.h5.xml b/tools/testfiles/tloop.h5.xml
index d8a5080..4be3290 100644
--- a/tools/testfiles/tloop.h5.xml
+++ b/tools/testfiles/tloop.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tloop.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Group Name="g1" OBJ-XID="xid_1344" H5Path="/g1" Parents="xid_696" H5ParentPaths="/" >
       <hdf5:Group Name="g1.1" OBJ-XID="xid_2320" H5Path="/g1/g1.1" Parents="xid_1344" H5ParentPaths="/g1" >
diff --git a/tools/testfiles/tloop2.h5.xml b/tools/testfiles/tloop2.h5.xml
index 73ac4e0..ffaf089 100644
--- a/tools/testfiles/tloop2.h5.xml
+++ b/tools/testfiles/tloop2.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tloop2.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Group Name="g1" OBJ-XID="xid_1344" H5Path="/g1" Parents="xid_696" H5ParentPaths="/" >
       <hdf5:Group Name="g1.1" OBJ-XID="xid_2320" H5Path="/g1/g1.1" Parents="xid_1344" H5ParentPaths="/g1" >
diff --git a/tools/testfiles/tmany.h5.xml b/tools/testfiles/tmany.h5.xml
index 59b856f..8fc5e59 100644
--- a/tools/testfiles/tmany.h5.xml
+++ b/tools/testfiles/tmany.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tmany.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_96" H5Path="/">
    <hdf5:Group Name="g1" OBJ-XID="xid_800" H5Path="/g1" Parents="xid_96" H5ParentPaths="/" >
       <hdf5:Group Name="g1.1" OBJ-XID="xid_1832" H5Path="/g1/g1.1" Parents="xid_800" H5ParentPaths="/g1" >
diff --git a/tools/testfiles/tmulti.ddl b/tools/testfiles/tmulti.ddl
index 128513a..b6bf35e 100644
--- a/tools/testfiles/tmulti.ddl
+++ b/tools/testfiles/tmulti.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump --filedriver=multi tmulti'
-#############################
 HDF5 "tmulti" {
 GROUP "/" {
    DATASET "dset1" {
diff --git a/tools/testfiles/tname-amp.h5.xml b/tools/testfiles/tname-amp.h5.xml
index b443f22..0893511 100644
--- a/tools/testfiles/tname-amp.h5.xml
+++ b/tools/testfiles/tname-amp.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tname-amp.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Attribute Name="attr1&withamp">
       <hdf5:Dataspace>
diff --git a/tools/testfiles/tname-apos.h5.xml b/tools/testfiles/tname-apos.h5.xml
index f60fa48..47f55a2 100644
--- a/tools/testfiles/tname-apos.h5.xml
+++ b/tools/testfiles/tname-apos.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tname-apos.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Attribute Name="attr1'withapos">
       <hdf5:Dataspace>
diff --git a/tools/testfiles/tname-gt.h5.xml b/tools/testfiles/tname-gt.h5.xml
index 43d9a50..e21909e 100644
--- a/tools/testfiles/tname-gt.h5.xml
+++ b/tools/testfiles/tname-gt.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tname-gt.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Attribute Name="attr1>withgt">
       <hdf5:Dataspace>
diff --git a/tools/testfiles/tname-lt.h5.xml b/tools/testfiles/tname-lt.h5.xml
index 4e948c9..3738de9 100644
--- a/tools/testfiles/tname-lt.h5.xml
+++ b/tools/testfiles/tname-lt.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tname-lt.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Attribute Name="attr1<withlt">
       <hdf5:Dataspace>
diff --git a/tools/testfiles/tname-quot.h5.xml b/tools/testfiles/tname-quot.h5.xml
index e148630..9da93c5 100644
--- a/tools/testfiles/tname-quot.h5.xml
+++ b/tools/testfiles/tname-quot.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tname-quot.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Attribute Name="attr1"withquot">
       <hdf5:Dataspace>
diff --git a/tools/testfiles/tname-sp.h5.xml b/tools/testfiles/tname-sp.h5.xml
index 231d0d5..3bdc6a8 100644
--- a/tools/testfiles/tname-sp.h5.xml
+++ b/tools/testfiles/tname-sp.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tname-sp.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Attribute Name="attr1 withspace">
       <hdf5:Dataspace>
diff --git a/tools/testfiles/tnamed_dtype_attr.ddl b/tools/testfiles/tnamed_dtype_attr.ddl
index 4ef3158..48afaf8 100644
--- a/tools/testfiles/tnamed_dtype_attr.ddl
+++ b/tools/testfiles/tnamed_dtype_attr.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tnamed_dtype_attr.h5'
-#############################
 HDF5 "tnamed_dtype_attr.h5" {
 GROUP "/" {
    DATASET "Dataset" {
diff --git a/tools/testfiles/tnamed_dtype_attr.h5.xml b/tools/testfiles/tnamed_dtype_attr.h5.xml
index ebba88b..aee7915 100644
--- a/tools/testfiles/tnamed_dtype_attr.h5.xml
+++ b/tools/testfiles/tnamed_dtype_attr.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tnamed_dtype_attr.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_96" H5Path="/">
    <hdf5:Dataset Name="Dataset" OBJ-XID="xid_1256" H5Path= "/Dataset" Parents="xid_96" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tnbit.ddl b/tools/testfiles/tnbit.ddl
index c310592..85a0d9a 100644
--- a/tools/testfiles/tnbit.ddl
+++ b/tools/testfiles/tnbit.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H -p -d nbit tfilters.h5'
-#############################
 HDF5 "tfilters.h5" {
 DATASET "nbit" {
    DATATYPE  32-bit little-endian integer
diff --git a/tools/testfiles/tnestcomp-1.ddl b/tools/testfiles/tnestcomp-1.ddl
index e68e22d..fda9c7c 100644
--- a/tools/testfiles/tnestcomp-1.ddl
+++ b/tools/testfiles/tnestcomp-1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tnestedcomp.h5'
-#############################
 HDF5 "tnestedcomp.h5" {
 GROUP "/" {
    DATASET "ArrayOfStructures" {
diff --git a/tools/testfiles/tnestcomp-1.ls b/tools/testfiles/tnestcomp-1.ls
index 9dc193d..425d92f 100644
--- a/tools/testfiles/tnestcomp-1.ls
+++ b/tools/testfiles/tnestcomp-1.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -r -d tnestedcomp.h5'
-#############################
 /                        Group
 /ArrayOfStructures       Dataset {10}
     Data:
diff --git a/tools/testfiles/tnestcomp-2.ls b/tools/testfiles/tnestcomp-2.ls
index be60e8d..64be630 100644
--- a/tools/testfiles/tnestcomp-2.ls
+++ b/tools/testfiles/tnestcomp-2.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -r -d -S tnestedcomp.h5'
-#############################
 /                        Group
 /ArrayOfStructures       Dataset {10}
     Data:
diff --git a/tools/testfiles/tnestcomp-3.ls b/tools/testfiles/tnestcomp-3.ls
index 98eca8e..0a230cc 100644
--- a/tools/testfiles/tnestcomp-3.ls
+++ b/tools/testfiles/tnestcomp-3.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -r -d -l tnestedcomp.h5'
-#############################
 /                        Group
 /ArrayOfStructures       Dataset {10}
     Data:
diff --git a/tools/testfiles/tnestcomp-4.ls b/tools/testfiles/tnestcomp-4.ls
index 6618597..d937e86 100644
--- a/tools/testfiles/tnestcomp-4.ls
+++ b/tools/testfiles/tnestcomp-4.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -r -d -l -S tnestedcomp.h5'
-#############################
 /                        Group
 /ArrayOfStructures       Dataset {10}
     Data:
diff --git a/tools/testfiles/tnestedcomp.h5.xml b/tools/testfiles/tnestedcomp.h5.xml
index a2f928b..f5f9fea 100644
--- a/tools/testfiles/tnestedcomp.h5.xml
+++ b/tools/testfiles/tnestedcomp.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tnestedcomp.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Dataset Name="ArrayOfStructures" OBJ-XID="xid_744" H5Path= "/ArrayOfStructures" Parents="xid_696" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tnodata.h5.xml b/tools/testfiles/tnodata.h5.xml
index 762475e..dc48c7a 100644
--- a/tools/testfiles/tnodata.h5.xml
+++ b/tools/testfiles/tnodata.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tnodata.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Dataset Name="dset1" OBJ-XID="xid_744" H5Path= "/dset1" Parents="xid_696" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tnofilename-with-packed-bits.ddl b/tools/testfiles/tnofilename-with-packed-bits.ddl
deleted file mode 100644
index 310327e..0000000
--- a/tools/testfiles/tnofilename-with-packed-bits.ddl
+++ /dev/null
@@ -1,97 +0,0 @@
-#############################
-Expected output for 'h5dump '
-#############################
-usage: h5dump [OPTIONS] file
-  OPTIONS
-     -h, --help           Print a usage message and exit
-     -n, --contents       Print a list of the file contents and exit
-     -B, --superblock     Print the content of the super block
-     -H, --header         Print the header only; no data is displayed
-     -A, --onlyattr       Print the header and value of attributes
-     -i, --object-ids     Print the object ids
-     -r, --string         Print 1-byte integer datasets as ASCII
-     -e, --escape         Escape non printing characters
-     -V, --version        Print version number and exit
-     -a P, --attribute=P  Print the specified attribute
-     -d P, --dataset=P    Print the specified dataset
-     -y, --noindex        Do not print array indices with the data
-     -p, --properties     Print dataset filters, storage layout and fill value
-     -f D, --filedriver=D Specify which driver to open the file with
-     -g P, --group=P      Print the specified group and all members
-     -l P, --soft-link=P  Print the value(s) of the specified soft link
-     -o F, --output=F     Output raw data into file F
-     -b B, --binary=B     Binary file output, of form B
-     -t P, --datatype=P   Print the specified named datatype
-     -w N, --width=N      Set the number of columns of output. A value of 0 (zero)
-                          sets the number of columns to the maximum (65535).
-                          Default width is 80 columns.
-     -m T, --format=T     Set the floating point output format
-     -q Q, --sort_by=Q    Sort groups and attributes by index Q
-     -z Z, --sort_order=Z Sort groups and attributes by order Z
-     -M L, --packedbits=L Print packed bits as unsigned integers, using mask
-                          format L for an integer dataset specified with
-                          option -d. L is a list of offset,length values,
-                          separated by commas. Offset is the beginning bit in
-                          the data value and length is the number of bits of
-                          the mask.
-     -R, --region         Print dataset pointed by region references
-     -x, --xml            Output in XML using Schema
-     -u, --use-dtd        Output in XML using DTD
-     -D U, --xml-dtd=U    Use the DTD or schema at U
-     -X S, --xml-ns=S      (XML Schema) Use qualified names n the XML
-                          ":": no namespace, default: "hdf5:"
-                          E.g., to dump a file called `-f', use h5dump -- -f
-     --enable-error-stack Prints messages from the HDF5 error stack as they
-                          occur.
-
- Subsetting is available by using the following options with a dataset
- attribute. Subsetting is done by selecting a hyperslab from the data.
- Thus, the options mirror those for performing a hyperslab selection.
- One of the START, COUNT, STRIDE, or BLOCK parameters are mandatory if you do subsetting.
- The STRIDE, COUNT, and BLOCK parameters are optional and will default to 1 in
- each dimension. START is optional and will default to 0 in each dimension.
-
-      -s START,  --start=START    Offset of start of subsetting selection
-      -S STRIDE, --stride=STRIDE  Hyperslab stride
-      -c COUNT,  --count=COUNT    Number of blocks to include in selection
-      -k BLOCK,  --block=BLOCK    Size of block in hyperslab
-  START, COUNT, STRIDE, and BLOCK - is a list of integers the number of which are equal to the
-        number of dimensions in the dataspace being queried
-
-  D - is the file driver to use in opening the file. Acceptable values
-        are "sec2", "family", "split", "multi", "direct", and "stream". Without
-        the file driver flag, the file will be opened with each driver in
-        turn and in the order specified above until one driver succeeds
-        in opening the file.
-  F - is a filename.
-  P - is the full path from the root group to the object.
-  N - is an integer greater than 1.
-  T - is a string containing the floating point format, e.g '%.3f'
-  U - is a URI reference (as defined in [IETF RFC 2396],
-        updated by [IETF RFC 2732])
-  B - is the form of binary output: NATIVE for a memory type, FILE for the
-        file type, LE or BE for pre-existing little or big endian types.
-        Must be used with -o (output file) and it is recommended that
-        -d (dataset) is used. B is an optional argument, defaults to NATIVE
-  Q - is the sort index type. It can be "creation_order" or "name" (default)
-  Z - is the sort order type. It can be "descending" or "ascending" (default)
-
-  Examples:
-
-  1) Attribute foo of the group /bar_none in file quux.h5
-
-     	h5dump -a /bar_none/foo quux.h5
-
-  2) Selecting a subset from dataset /foo in file quux.h5
-
-      h5dump -d /foo -s "0,1" -S "1,1" -c "2,3" -k "2,2" quux.h5
-
-  3) Saving dataset 'dset' in file quux.h5 to binary file 'out.bin'
-        using a little-endian type
-
-      h5dump -d /dset -b LE -o out.bin quux.h5
-
-  4) Display two packed bits (bits 0-1 and bits 4-6) in the dataset /dset
-
-      h5dump -d /dset -M 0,1,4,3 quux.h5
-
diff --git a/tools/testfiles/tnofilename.ddl b/tools/testfiles/tnofilename.ddl
index 0e78217..9083782 100644
--- a/tools/testfiles/tnofilename.ddl
+++ b/tools/testfiles/tnofilename.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump '
-#############################
 usage: h5dump [OPTIONS] file
   OPTIONS
      -h, --help           Print a usage message and exit
@@ -28,6 +25,12 @@ usage: h5dump [OPTIONS] file
      -m T, --format=T     Set the floating point output format
      -q Q, --sort_by=Q    Sort groups and attributes by index Q
      -z Z, --sort_order=Z Sort groups and attributes by order Z
+     -M L, --packedbits=L Print packed bits as unsigned integers, using mask
+                          format L for an integer dataset specified with
+                          option -d. L is a list of offset,length values,
+                          separated by commas. Offset is the beginning bit in
+                          the data value and length is the number of bits of
+                          the mask.
      -R, --region         Print dataset pointed by region references
      -x, --xml            Output in XML using Schema
      -u, --use-dtd        Output in XML using DTD
@@ -74,7 +77,7 @@ usage: h5dump [OPTIONS] file
 
   1) Attribute foo of the group /bar_none in file quux.h5
 
-     	h5dump -a /bar_none/foo quux.h5
+      h5dump -a /bar_none/foo quux.h5
 
   2) Selecting a subset from dataset /foo in file quux.h5
 
@@ -85,3 +88,7 @@ usage: h5dump [OPTIONS] file
 
       h5dump -d /dset -b LE -o out.bin quux.h5
 
+  4) Display two packed bits (bits 0-1 and bits 4-6) in the dataset /dset
+
+      h5dump -d /dset -M 0,1,4,3 quux.h5
+
diff --git a/tools/testfiles/tnullspace.ddl b/tools/testfiles/tnullspace.ddl
index 5507b08..32e208f 100644
--- a/tools/testfiles/tnullspace.ddl
+++ b/tools/testfiles/tnullspace.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tnullspace.h5'
-#############################
 HDF5 "tnullspace.h5" {
 GROUP "/" {
    ATTRIBUTE "attr" {
diff --git a/tools/testfiles/tobjref.h5.xml b/tools/testfiles/tobjref.h5.xml
index 825cb27..b8c7fc5 100644
--- a/tools/testfiles/tobjref.h5.xml
+++ b/tools/testfiles/tobjref.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tobjref.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Dataset Name="Dataset3" OBJ-XID="xid_2348" H5Path= "/Dataset3" Parents="xid_696" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/topaque.h5.xml b/tools/testfiles/topaque.h5.xml
index 3f44ace..1e20336 100644
--- a/tools/testfiles/topaque.h5.xml
+++ b/tools/testfiles/topaque.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml topaque.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Dataset Name="opaque test" OBJ-XID="xid_744" H5Path= "/opaque test" Parents="xid_696" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/torderattr1.ddl b/tools/testfiles/torderattr1.ddl
index de3b72b..f46354b 100644
--- a/tools/testfiles/torderattr1.ddl
+++ b/tools/testfiles/torderattr1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H --sort_by=name --sort_order=ascending torderattr.h5'
-#############################
 HDF5 "torderattr.h5" {
 GROUP "/" {
    ATTRIBUTE "a" {
diff --git a/tools/testfiles/torderattr1.h5.xml b/tools/testfiles/torderattr1.h5.xml
index 15481fc..bfba4d0 100644
--- a/tools/testfiles/torderattr1.h5.xml
+++ b/tools/testfiles/torderattr1.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml -H --sort_by=name --sort_order=ascending torderattr.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_96" H5Path="/">
    <hdf5:Attribute Name="a">
       <hdf5:Dataspace>
diff --git a/tools/testfiles/torderattr2.ddl b/tools/testfiles/torderattr2.ddl
index 3686984..6cc1d41 100644
--- a/tools/testfiles/torderattr2.ddl
+++ b/tools/testfiles/torderattr2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H --sort_by=name --sort_order=descending torderattr.h5'
-#############################
 HDF5 "torderattr.h5" {
 GROUP "/" {
    ATTRIBUTE "c" {
diff --git a/tools/testfiles/torderattr2.h5.xml b/tools/testfiles/torderattr2.h5.xml
index ef28140..11f2266 100644
--- a/tools/testfiles/torderattr2.h5.xml
+++ b/tools/testfiles/torderattr2.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml -H --sort_by=name --sort_order=descending torderattr.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_96" H5Path="/">
    <hdf5:Attribute Name="c">
       <hdf5:Dataspace>
diff --git a/tools/testfiles/torderattr3.ddl b/tools/testfiles/torderattr3.ddl
index 9dc027a..2956886 100644
--- a/tools/testfiles/torderattr3.ddl
+++ b/tools/testfiles/torderattr3.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H --sort_by=creation_order --sort_order=ascending torderattr.h5'
-#############################
 HDF5 "torderattr.h5" {
 GROUP "/" {
    ATTRIBUTE "a" {
diff --git a/tools/testfiles/torderattr3.h5.xml b/tools/testfiles/torderattr3.h5.xml
index e9e131a..10ea95e 100644
--- a/tools/testfiles/torderattr3.h5.xml
+++ b/tools/testfiles/torderattr3.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml -H --sort_by=creation_order --sort_order=ascending torderattr.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_96" H5Path="/">
    <hdf5:Attribute Name="a">
       <hdf5:Dataspace>
diff --git a/tools/testfiles/torderattr4.ddl b/tools/testfiles/torderattr4.ddl
index 38af25d..090b44b 100644
--- a/tools/testfiles/torderattr4.ddl
+++ b/tools/testfiles/torderattr4.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H --sort_by=creation_order --sort_order=descending torderattr.h5'
-#############################
 HDF5 "torderattr.h5" {
 GROUP "/" {
    ATTRIBUTE "c" {
diff --git a/tools/testfiles/torderattr4.h5.xml b/tools/testfiles/torderattr4.h5.xml
index 2f4a2ed..2546b30 100644
--- a/tools/testfiles/torderattr4.h5.xml
+++ b/tools/testfiles/torderattr4.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml -H --sort_by=creation_order --sort_order=descending torderattr.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_96" H5Path="/">
    <hdf5:Attribute Name="c">
       <hdf5:Dataspace>
diff --git a/tools/testfiles/tordergr1.ddl b/tools/testfiles/tordergr1.ddl
index a78fc0f..0fa74d9 100644
--- a/tools/testfiles/tordergr1.ddl
+++ b/tools/testfiles/tordergr1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump --group=1 --sort_by=creation_order --sort_order=ascending tordergr.h5'
-#############################
 HDF5 "tordergr.h5" {
 GROUP "1" {
    GROUP "c" {
diff --git a/tools/testfiles/tordergr2.ddl b/tools/testfiles/tordergr2.ddl
index 4a39d22..500d99c 100644
--- a/tools/testfiles/tordergr2.ddl
+++ b/tools/testfiles/tordergr2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump --group=1 --sort_by=creation_order --sort_order=descending tordergr.h5'
-#############################
 HDF5 "tordergr.h5" {
 GROUP "1" {
    GROUP "a" {
diff --git a/tools/testfiles/tordergr3.ddl b/tools/testfiles/tordergr3.ddl
index c948ccb..99e9a6b 100644
--- a/tools/testfiles/tordergr3.ddl
+++ b/tools/testfiles/tordergr3.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -g 2 -q name -z ascending tordergr.h5'
-#############################
 HDF5 "tordergr.h5" {
 GROUP "2" {
    GROUP "a" {
diff --git a/tools/testfiles/tordergr4.ddl b/tools/testfiles/tordergr4.ddl
index 5f5c454..1613d9d 100644
--- a/tools/testfiles/tordergr4.ddl
+++ b/tools/testfiles/tordergr4.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -g 2 -q name -z descending tordergr.h5'
-#############################
 HDF5 "tordergr.h5" {
 GROUP "2" {
    GROUP "c" {
diff --git a/tools/testfiles/tordergr5.ddl b/tools/testfiles/tordergr5.ddl
index e7854bd..0ede967 100644
--- a/tools/testfiles/tordergr5.ddl
+++ b/tools/testfiles/tordergr5.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -q creation_order tordergr.h5'
-#############################
 HDF5 "tordergr.h5" {
 GROUP "/" {
    GROUP "2" {
diff --git a/tools/testfiles/tpbitsArray.ddl b/tools/testfiles/tpbitsArray.ddl
index a20cbb2..125abb8 100644
--- a/tools/testfiles/tpbitsArray.ddl
+++ b/tools/testfiles/tpbitsArray.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /Dataset1 -M 0,1,1,1 tarray1.h5'
-#############################
 HDF5 "tarray1.h5" {
 DATASET "/Dataset1" {
    DATATYPE  H5T_ARRAY { [4] H5T_STD_I32LE }
diff --git a/tools/testfiles/tpbitsCharLengthExceeded.ddl b/tools/testfiles/tpbitsCharLengthExceeded.ddl
index 6a72590..b0683a7 100644
--- a/tools/testfiles/tpbitsCharLengthExceeded.ddl
+++ b/tools/testfiles/tpbitsCharLengthExceeded.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS08BITS -M 2,7 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS08BITS" {
    DATATYPE  H5T_STD_I8LE
diff --git a/tools/testfiles/tpbitsCharOffsetExceeded.ddl b/tools/testfiles/tpbitsCharOffsetExceeded.ddl
index 6543345..530fa05 100644
--- a/tools/testfiles/tpbitsCharOffsetExceeded.ddl
+++ b/tools/testfiles/tpbitsCharOffsetExceeded.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS08BITS -M 8,1 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS08BITS" {
    DATATYPE  H5T_STD_I8LE
diff --git a/tools/testfiles/tpbitsCompound.ddl b/tools/testfiles/tpbitsCompound.ddl
index 87df46f..c84272a 100644
--- a/tools/testfiles/tpbitsCompound.ddl
+++ b/tools/testfiles/tpbitsCompound.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /dset1 -M 0,1,1,1 tcompound.h5'
-#############################
 HDF5 "tcompound.h5" {
 DATASET "/dset1" {
    DATATYPE  H5T_COMPOUND {
diff --git a/tools/testfiles/tpbitsIncomplete.ddl b/tools/testfiles/tpbitsIncomplete.ddl
index fca66e5..4307bed 100644
--- a/tools/testfiles/tpbitsIncomplete.ddl
+++ b/tools/testfiles/tpbitsIncomplete.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS08BITS -M 0,2,2,1,0,2,2, packedbits.h5'
-#############################
 usage: h5dump [OPTIONS] file
   OPTIONS
      -h, --help           Print a usage message and exit
@@ -80,7 +77,7 @@ usage: h5dump [OPTIONS] file
 
   1) Attribute foo of the group /bar_none in file quux.h5
 
-     	h5dump -a /bar_none/foo quux.h5
+      h5dump -a /bar_none/foo quux.h5
 
   2) Selecting a subset from dataset /foo in file quux.h5
 
diff --git a/tools/testfiles/tpbitsIntLengthExceeded.ddl b/tools/testfiles/tpbitsIntLengthExceeded.ddl
index 0b74575..1c919cd 100644
--- a/tools/testfiles/tpbitsIntLengthExceeded.ddl
+++ b/tools/testfiles/tpbitsIntLengthExceeded.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS16BITS -M 10,7 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS16BITS" {
    DATATYPE  H5T_STD_I16LE
diff --git a/tools/testfiles/tpbitsIntOffsetExceeded.ddl b/tools/testfiles/tpbitsIntOffsetExceeded.ddl
index fa41c21..f3b2a8c 100644
--- a/tools/testfiles/tpbitsIntOffsetExceeded.ddl
+++ b/tools/testfiles/tpbitsIntOffsetExceeded.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS16BITS -M 16,1 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS16BITS" {
    DATATYPE  H5T_STD_I16LE
diff --git a/tools/testfiles/tpbitsLengthExceeded.ddl b/tools/testfiles/tpbitsLengthExceeded.ddl
index f9a4413..4b50e70 100644
--- a/tools/testfiles/tpbitsLengthExceeded.ddl
+++ b/tools/testfiles/tpbitsLengthExceeded.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS08BITS -M 37,28 packedbits.h5'
-#############################
 usage: h5dump [OPTIONS] file
   OPTIONS
      -h, --help           Print a usage message and exit
@@ -80,7 +77,7 @@ usage: h5dump [OPTIONS] file
 
   1) Attribute foo of the group /bar_none in file quux.h5
 
-     	h5dump -a /bar_none/foo quux.h5
+      h5dump -a /bar_none/foo quux.h5
 
   2) Selecting a subset from dataset /foo in file quux.h5
 
diff --git a/tools/testfiles/tpbitsLengthPositive.ddl b/tools/testfiles/tpbitsLengthPositive.ddl
index ee9916b..c648c02 100644
--- a/tools/testfiles/tpbitsLengthPositive.ddl
+++ b/tools/testfiles/tpbitsLengthPositive.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS08BITS -M 4,0 packedbits.h5'
-#############################
 usage: h5dump [OPTIONS] file
   OPTIONS
      -h, --help           Print a usage message and exit
@@ -80,7 +77,7 @@ usage: h5dump [OPTIONS] file
 
   1) Attribute foo of the group /bar_none in file quux.h5
 
-     	h5dump -a /bar_none/foo quux.h5
+      h5dump -a /bar_none/foo quux.h5
 
   2) Selecting a subset from dataset /foo in file quux.h5
 
diff --git a/tools/testfiles/tpbitsLongLengthExceeded.ddl b/tools/testfiles/tpbitsLongLengthExceeded.ddl
index edb4aa7..812c300 100644
--- a/tools/testfiles/tpbitsLongLengthExceeded.ddl
+++ b/tools/testfiles/tpbitsLongLengthExceeded.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS32BITS -M 26,7 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS32BITS" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/tpbitsLongOffsetExceeded.ddl b/tools/testfiles/tpbitsLongOffsetExceeded.ddl
index c556644..cbea722 100644
--- a/tools/testfiles/tpbitsLongOffsetExceeded.ddl
+++ b/tools/testfiles/tpbitsLongOffsetExceeded.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS32BITS -M 32,1 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS32BITS" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/tpbitsMax.ddl b/tools/testfiles/tpbitsMax.ddl
index a4528ff..e569488 100644
--- a/tools/testfiles/tpbitsMax.ddl
+++ b/tools/testfiles/tpbitsMax.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS08BITS -M 0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS08BITS" {
    DATATYPE  H5T_STD_I8LE
diff --git a/tools/testfiles/tpbitsMaxExceeded.ddl b/tools/testfiles/tpbitsMaxExceeded.ddl
index 7a1c0fe..8c6e8e1 100644
--- a/tools/testfiles/tpbitsMaxExceeded.ddl
+++ b/tools/testfiles/tpbitsMaxExceeded.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS08BITS -M 0,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5'
-#############################
 usage: h5dump [OPTIONS] file
   OPTIONS
      -h, --help           Print a usage message and exit
@@ -80,7 +77,7 @@ usage: h5dump [OPTIONS] file
 
   1) Attribute foo of the group /bar_none in file quux.h5
 
-     	h5dump -a /bar_none/foo quux.h5
+      h5dump -a /bar_none/foo quux.h5
 
   2) Selecting a subset from dataset /foo in file quux.h5
 
diff --git a/tools/testfiles/tpbitsOffsetExceeded.ddl b/tools/testfiles/tpbitsOffsetExceeded.ddl
index 3d7bb56..e594d27 100644
--- a/tools/testfiles/tpbitsOffsetExceeded.ddl
+++ b/tools/testfiles/tpbitsOffsetExceeded.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS08BITS -M 64,1 packedbits.h5'
-#############################
 usage: h5dump [OPTIONS] file
   OPTIONS
      -h, --help           Print a usage message and exit
@@ -80,7 +77,7 @@ usage: h5dump [OPTIONS] file
 
   1) Attribute foo of the group /bar_none in file quux.h5
 
-     	h5dump -a /bar_none/foo quux.h5
+      h5dump -a /bar_none/foo quux.h5
 
   2) Selecting a subset from dataset /foo in file quux.h5
 
diff --git a/tools/testfiles/tpbitsOffsetNegative.ddl b/tools/testfiles/tpbitsOffsetNegative.ddl
index a4fc444..833e47a 100644
--- a/tools/testfiles/tpbitsOffsetNegative.ddl
+++ b/tools/testfiles/tpbitsOffsetNegative.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS08BITS -M -1,1 packedbits.h5'
-#############################
 usage: h5dump [OPTIONS] file
   OPTIONS
      -h, --help           Print a usage message and exit
@@ -80,7 +77,7 @@ usage: h5dump [OPTIONS] file
 
   1) Attribute foo of the group /bar_none in file quux.h5
 
-     	h5dump -a /bar_none/foo quux.h5
+      h5dump -a /bar_none/foo quux.h5
 
   2) Selecting a subset from dataset /foo in file quux.h5
 
diff --git a/tools/testfiles/tpbitsOverlapped.ddl b/tools/testfiles/tpbitsOverlapped.ddl
index 2814c4b..9dcc9d2 100644
--- a/tools/testfiles/tpbitsOverlapped.ddl
+++ b/tools/testfiles/tpbitsOverlapped.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS08BITS -M 0,1,1,1,2,1,0,3 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS08BITS" {
    DATATYPE  H5T_STD_I8LE
diff --git a/tools/testfiles/tpbitsSigned.ddl b/tools/testfiles/tpbitsSigned.ddl
index 7db3b32..b843388 100644
--- a/tools/testfiles/tpbitsSigned.ddl
+++ b/tools/testfiles/tpbitsSigned.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS08BITS -M 0,2,2,6 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS08BITS" {
    DATATYPE  H5T_STD_I8LE
diff --git a/tools/testfiles/tpbitsSigned2.ddl b/tools/testfiles/tpbitsSigned2.ddl
index 60981e7..932b5fd 100644
--- a/tools/testfiles/tpbitsSigned2.ddl
+++ b/tools/testfiles/tpbitsSigned2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS08BITS" {
    DATATYPE  H5T_STD_I8LE
diff --git a/tools/testfiles/tpbitsSigned4.ddl b/tools/testfiles/tpbitsSigned4.ddl
index 70038ff..9eacd83 100644
--- a/tools/testfiles/tpbitsSigned4.ddl
+++ b/tools/testfiles/tpbitsSigned4.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS08BITS -M 0,4,4,4 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS08BITS" {
    DATATYPE  H5T_STD_I8LE
diff --git a/tools/testfiles/tpbitsSignedInt.ddl b/tools/testfiles/tpbitsSignedInt.ddl
index 05e5e6d..5c37e77 100644
--- a/tools/testfiles/tpbitsSignedInt.ddl
+++ b/tools/testfiles/tpbitsSignedInt.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS16BITS -M 0,2,10,6 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS16BITS" {
    DATATYPE  H5T_STD_I16LE
diff --git a/tools/testfiles/tpbitsSignedInt4.ddl b/tools/testfiles/tpbitsSignedInt4.ddl
index 11270ff..4e9f0f6 100644
--- a/tools/testfiles/tpbitsSignedInt4.ddl
+++ b/tools/testfiles/tpbitsSignedInt4.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS16BITS" {
    DATATYPE  H5T_STD_I16LE
diff --git a/tools/testfiles/tpbitsSignedInt8.ddl b/tools/testfiles/tpbitsSignedInt8.ddl
index e7cf0f3..f2d6069 100644
--- a/tools/testfiles/tpbitsSignedInt8.ddl
+++ b/tools/testfiles/tpbitsSignedInt8.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS16BITS -M 0,8,8,8 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS16BITS" {
    DATATYPE  H5T_STD_I16LE
diff --git a/tools/testfiles/tpbitsSignedIntWhole.ddl b/tools/testfiles/tpbitsSignedIntWhole.ddl
index 589452e..598c446 100644
--- a/tools/testfiles/tpbitsSignedIntWhole.ddl
+++ b/tools/testfiles/tpbitsSignedIntWhole.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS16BITS -M 0,16 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS16BITS" {
    DATATYPE  H5T_STD_I16LE
diff --git a/tools/testfiles/tpbitsSignedLong.ddl b/tools/testfiles/tpbitsSignedLong.ddl
index fe95ec5..b3eba61 100644
--- a/tools/testfiles/tpbitsSignedLong.ddl
+++ b/tools/testfiles/tpbitsSignedLong.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS32BITS -M 0,2,26,6 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS32BITS" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/tpbitsSignedLong16.ddl b/tools/testfiles/tpbitsSignedLong16.ddl
index 0d4ff6b..83fa889 100644
--- a/tools/testfiles/tpbitsSignedLong16.ddl
+++ b/tools/testfiles/tpbitsSignedLong16.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS32BITS -M 0,16,16,16 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS32BITS" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/tpbitsSignedLong8.ddl b/tools/testfiles/tpbitsSignedLong8.ddl
index 53039d8..e99b1d0 100644
--- a/tools/testfiles/tpbitsSignedLong8.ddl
+++ b/tools/testfiles/tpbitsSignedLong8.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS32BITS" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/tpbitsSignedLongLong.ddl b/tools/testfiles/tpbitsSignedLongLong.ddl
index b66791b..2be8a55 100644
--- a/tools/testfiles/tpbitsSignedLongLong.ddl
+++ b/tools/testfiles/tpbitsSignedLongLong.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS64BITS -M 0,2,58,6 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS64BITS" {
    DATATYPE  H5T_STD_I64LE
diff --git a/tools/testfiles/tpbitsSignedLongLong16.ddl b/tools/testfiles/tpbitsSignedLongLong16.ddl
index 8d8c125..44e336d 100644
--- a/tools/testfiles/tpbitsSignedLongLong16.ddl
+++ b/tools/testfiles/tpbitsSignedLongLong16.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS64BITS" {
    DATATYPE  H5T_STD_I64LE
diff --git a/tools/testfiles/tpbitsSignedLongLong32.ddl b/tools/testfiles/tpbitsSignedLongLong32.ddl
index d88a6ed..6ab4ac4 100644
--- a/tools/testfiles/tpbitsSignedLongLong32.ddl
+++ b/tools/testfiles/tpbitsSignedLongLong32.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS64BITS -M 0,32,32,32 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS64BITS" {
    DATATYPE  H5T_STD_I64LE
diff --git a/tools/testfiles/tpbitsSignedLongLongWhole.ddl b/tools/testfiles/tpbitsSignedLongLongWhole.ddl
index 51732c2..134f3be 100644
--- a/tools/testfiles/tpbitsSignedLongLongWhole.ddl
+++ b/tools/testfiles/tpbitsSignedLongLongWhole.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS64BITS -M 0,64 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS64BITS" {
    DATATYPE  H5T_STD_I64LE
diff --git a/tools/testfiles/tpbitsSignedLongLongWhole1.ddl b/tools/testfiles/tpbitsSignedLongLongWhole1.ddl
index 4a32153..7431670 100644
--- a/tools/testfiles/tpbitsSignedLongLongWhole1.ddl
+++ b/tools/testfiles/tpbitsSignedLongLongWhole1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS64BITS -M 1,63 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS64BITS" {
    DATATYPE  H5T_STD_I64LE
diff --git a/tools/testfiles/tpbitsSignedLongLongWhole63.ddl b/tools/testfiles/tpbitsSignedLongLongWhole63.ddl
index 6dcad25..c7cc65f 100644
--- a/tools/testfiles/tpbitsSignedLongLongWhole63.ddl
+++ b/tools/testfiles/tpbitsSignedLongLongWhole63.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS64BITS -M 0,63 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS64BITS" {
    DATATYPE  H5T_STD_I64LE
diff --git a/tools/testfiles/tpbitsSignedLongWhole.ddl b/tools/testfiles/tpbitsSignedLongWhole.ddl
index 5ae5300..e583f1d 100644
--- a/tools/testfiles/tpbitsSignedLongWhole.ddl
+++ b/tools/testfiles/tpbitsSignedLongWhole.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS32BITS -M 0,32 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS32BITS" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/tpbitsSignedWhole.ddl b/tools/testfiles/tpbitsSignedWhole.ddl
index 706f270..f044e23 100644
--- a/tools/testfiles/tpbitsSignedWhole.ddl
+++ b/tools/testfiles/tpbitsSignedWhole.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DS08BITS -M 0,8 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DS08BITS" {
    DATATYPE  H5T_STD_I8LE
diff --git a/tools/testfiles/tpbitsUnsigned.ddl b/tools/testfiles/tpbitsUnsigned.ddl
index 0aaf40a..9e7ac50 100644
--- a/tools/testfiles/tpbitsUnsigned.ddl
+++ b/tools/testfiles/tpbitsUnsigned.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU08BITS -M 0,2,2,6 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU08BITS" {
    DATATYPE  H5T_STD_U8LE
diff --git a/tools/testfiles/tpbitsUnsigned2.ddl b/tools/testfiles/tpbitsUnsigned2.ddl
index d8581b2..b7e6f79 100644
--- a/tools/testfiles/tpbitsUnsigned2.ddl
+++ b/tools/testfiles/tpbitsUnsigned2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU08BITS" {
    DATATYPE  H5T_STD_U8LE
diff --git a/tools/testfiles/tpbitsUnsigned4.ddl b/tools/testfiles/tpbitsUnsigned4.ddl
index b320386..d25d838 100644
--- a/tools/testfiles/tpbitsUnsigned4.ddl
+++ b/tools/testfiles/tpbitsUnsigned4.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU08BITS -M 0,4,4,4 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU08BITS" {
    DATATYPE  H5T_STD_U8LE
diff --git a/tools/testfiles/tpbitsUnsignedInt.ddl b/tools/testfiles/tpbitsUnsignedInt.ddl
index 1908f31..5e0fefe 100644
--- a/tools/testfiles/tpbitsUnsignedInt.ddl
+++ b/tools/testfiles/tpbitsUnsignedInt.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU16BITS -M 0,2,10,6 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU16BITS" {
    DATATYPE  H5T_STD_U16LE
diff --git a/tools/testfiles/tpbitsUnsignedInt4.ddl b/tools/testfiles/tpbitsUnsignedInt4.ddl
index 9ff49cc..0d3e38f 100644
--- a/tools/testfiles/tpbitsUnsignedInt4.ddl
+++ b/tools/testfiles/tpbitsUnsignedInt4.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU16BITS" {
    DATATYPE  H5T_STD_U16LE
diff --git a/tools/testfiles/tpbitsUnsignedInt8.ddl b/tools/testfiles/tpbitsUnsignedInt8.ddl
index 7813172..861ed3e 100644
--- a/tools/testfiles/tpbitsUnsignedInt8.ddl
+++ b/tools/testfiles/tpbitsUnsignedInt8.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU16BITS -M 0,8,8,8 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU16BITS" {
    DATATYPE  H5T_STD_U16LE
diff --git a/tools/testfiles/tpbitsUnsignedIntWhole.ddl b/tools/testfiles/tpbitsUnsignedIntWhole.ddl
index d0052b9..c054011 100644
--- a/tools/testfiles/tpbitsUnsignedIntWhole.ddl
+++ b/tools/testfiles/tpbitsUnsignedIntWhole.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU16BITS -M 0,16 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU16BITS" {
    DATATYPE  H5T_STD_U16LE
diff --git a/tools/testfiles/tpbitsUnsignedLong.ddl b/tools/testfiles/tpbitsUnsignedLong.ddl
index 1f64904..9f8bcb4 100644
--- a/tools/testfiles/tpbitsUnsignedLong.ddl
+++ b/tools/testfiles/tpbitsUnsignedLong.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU32BITS -M 0,2,26,6 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU32BITS" {
    DATATYPE  H5T_STD_U32LE
diff --git a/tools/testfiles/tpbitsUnsignedLong16.ddl b/tools/testfiles/tpbitsUnsignedLong16.ddl
index 9414351..7a1984f 100644
--- a/tools/testfiles/tpbitsUnsignedLong16.ddl
+++ b/tools/testfiles/tpbitsUnsignedLong16.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU32BITS -M 0,16,16,16 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU32BITS" {
    DATATYPE  H5T_STD_U32LE
diff --git a/tools/testfiles/tpbitsUnsignedLong8.ddl b/tools/testfiles/tpbitsUnsignedLong8.ddl
index 5480555..17b896c 100644
--- a/tools/testfiles/tpbitsUnsignedLong8.ddl
+++ b/tools/testfiles/tpbitsUnsignedLong8.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU32BITS" {
    DATATYPE  H5T_STD_U32LE
diff --git a/tools/testfiles/tpbitsUnsignedLongLong.ddl b/tools/testfiles/tpbitsUnsignedLongLong.ddl
index a2b326c..1cd9a6c 100644
--- a/tools/testfiles/tpbitsUnsignedLongLong.ddl
+++ b/tools/testfiles/tpbitsUnsignedLongLong.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU64BITS -M 0,2,58,6 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU64BITS" {
    DATATYPE  H5T_STD_U64LE
diff --git a/tools/testfiles/tpbitsUnsignedLongLong16.ddl b/tools/testfiles/tpbitsUnsignedLongLong16.ddl
index 1f6bb67..f8b0189 100644
--- a/tools/testfiles/tpbitsUnsignedLongLong16.ddl
+++ b/tools/testfiles/tpbitsUnsignedLongLong16.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU64BITS" {
    DATATYPE  H5T_STD_U64LE
diff --git a/tools/testfiles/tpbitsUnsignedLongLong32.ddl b/tools/testfiles/tpbitsUnsignedLongLong32.ddl
index 19b9258..befaf5b 100644
--- a/tools/testfiles/tpbitsUnsignedLongLong32.ddl
+++ b/tools/testfiles/tpbitsUnsignedLongLong32.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU64BITS -M 0,32,32,32 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU64BITS" {
    DATATYPE  H5T_STD_U64LE
diff --git a/tools/testfiles/tpbitsUnsignedLongLongWhole.ddl b/tools/testfiles/tpbitsUnsignedLongLongWhole.ddl
index 93cb1f8..27c8879 100644
--- a/tools/testfiles/tpbitsUnsignedLongLongWhole.ddl
+++ b/tools/testfiles/tpbitsUnsignedLongLongWhole.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU64BITS -M 0,64 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU64BITS" {
    DATATYPE  H5T_STD_U64LE
diff --git a/tools/testfiles/tpbitsUnsignedLongLongWhole1.ddl b/tools/testfiles/tpbitsUnsignedLongLongWhole1.ddl
index 896eff3..0302105 100644
--- a/tools/testfiles/tpbitsUnsignedLongLongWhole1.ddl
+++ b/tools/testfiles/tpbitsUnsignedLongLongWhole1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU64BITS -M 1,63 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU64BITS" {
    DATATYPE  H5T_STD_U64LE
diff --git a/tools/testfiles/tpbitsUnsignedLongLongWhole63.ddl b/tools/testfiles/tpbitsUnsignedLongLongWhole63.ddl
index aff94a3..6a9b503 100644
--- a/tools/testfiles/tpbitsUnsignedLongLongWhole63.ddl
+++ b/tools/testfiles/tpbitsUnsignedLongLongWhole63.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU64BITS -M 0,63 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU64BITS" {
    DATATYPE  H5T_STD_U64LE
diff --git a/tools/testfiles/tpbitsUnsignedLongWhole.ddl b/tools/testfiles/tpbitsUnsignedLongWhole.ddl
index f41655f..50ad02f 100644
--- a/tools/testfiles/tpbitsUnsignedLongWhole.ddl
+++ b/tools/testfiles/tpbitsUnsignedLongWhole.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU32BITS -M 0,32 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU32BITS" {
    DATATYPE  H5T_STD_U32LE
diff --git a/tools/testfiles/tpbitsUnsignedWhole.ddl b/tools/testfiles/tpbitsUnsignedWhole.ddl
index cae97b0..7c9e736 100644
--- a/tools/testfiles/tpbitsUnsignedWhole.ddl
+++ b/tools/testfiles/tpbitsUnsignedWhole.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -d /DU08BITS -M 0,8 packedbits.h5'
-#############################
 HDF5 "packedbits.h5" {
 DATASET "/DU08BITS" {
    DATATYPE  H5T_STD_U8LE
diff --git a/tools/testfiles/tperror.ddl b/tools/testfiles/tperror.ddl
index c7ee79d..76988c8 100644
--- a/tools/testfiles/tperror.ddl
+++ b/tools/testfiles/tperror.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -p -d bogus tfcontents1.h5'
-#############################
 HDF5 "tfcontents1.h5" {
 DATASET "bogus" {
    }
diff --git a/tools/testfiles/tref-escapes-at.h5.xml b/tools/testfiles/tref-escapes-at.h5.xml
index 6d683f1..a136651 100644
--- a/tools/testfiles/tref-escapes-at.h5.xml
+++ b/tools/testfiles/tref-escapes-at.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tref-escapes-at.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Group Name="Group1" OBJ-XID="xid_1344" H5Path="/Group1" Parents="xid_696" H5ParentPaths="/" >
       <hdf5:Dataset Name="Dataset space" OBJ-XID="xid_3716" H5Path= "/Group1/Dataset space" Parents="xid_1344" H5ParentPaths="/Group1">
diff --git a/tools/testfiles/tref-escapes.h5.xml b/tools/testfiles/tref-escapes.h5.xml
index 6d43069..c70793f 100644
--- a/tools/testfiles/tref-escapes.h5.xml
+++ b/tools/testfiles/tref-escapes.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tref-escapes.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Group Name="Group1" OBJ-XID="xid_1344" H5Path="/Group1" Parents="xid_696" H5ParentPaths="/" >
       <hdf5:Dataset Name="Dataset space" OBJ-XID="xid_1720" H5Path= "/Group1/Dataset space" Parents="xid_1344" H5ParentPaths="/Group1">
diff --git a/tools/testfiles/tref.h5.xml b/tools/testfiles/tref.h5.xml
index 8a39acf..e70e0c2 100644
--- a/tools/testfiles/tref.h5.xml
+++ b/tools/testfiles/tref.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tref.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Group Name="Group1" OBJ-XID="xid_1344" H5Path="/Group1" Parents="xid_696" H5ParentPaths="/" >
       <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_1720" H5Path= "/Group1/Dataset1" Parents="xid_1344" H5ParentPaths="/Group1">
diff --git a/tools/testfiles/treference.ddl b/tools/testfiles/treference.ddl
index b94802f..d99dc6f 100644
--- a/tools/testfiles/treference.ddl
+++ b/tools/testfiles/treference.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tattr2.h5'
-#############################
 HDF5 "tattr2.h5" {
 GROUP "/" {
    ATTRIBUTE "array" {
diff --git a/tools/testfiles/tsaf.ddl b/tools/testfiles/tsaf.ddl
index 3825bda..fe9f864 100644
--- a/tools/testfiles/tsaf.ddl
+++ b/tools/testfiles/tsaf.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tsaf.h5'
-#############################
 HDF5 "tsaf.h5" {
 GROUP "/" {
    DATASET ".DSL_METADATA" {
diff --git a/tools/testfiles/tsaf.h5.xml b/tools/testfiles/tsaf.h5.xml
index 11808e3..6b7f5c5 100644
--- a/tools/testfiles/tsaf.h5.xml
+++ b/tools/testfiles/tsaf.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tsaf.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Dataset Name=".DSL_METADATA" OBJ-XID="xid_744" H5Path= "/.DSL_METADATA" Parents="xid_696" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tsaf.ls b/tools/testfiles/tsaf.ls
index 96d4811..c950d7d 100644
--- a/tools/testfiles/tsaf.ls
+++ b/tools/testfiles/tsaf.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -r -d tsaf.h5'
-#############################
 /                        Group
 /.DSL_METADATA           Dataset {5919/Inf}
     Data:
diff --git a/tools/testfiles/tscaleoffset.ddl b/tools/testfiles/tscaleoffset.ddl
index 3428bfa..8000ef3 100644
--- a/tools/testfiles/tscaleoffset.ddl
+++ b/tools/testfiles/tscaleoffset.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H -p -d scaleoffset tfilters.h5'
-#############################
 HDF5 "tfilters.h5" {
 DATASET "scaleoffset" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/tshuffle.ddl b/tools/testfiles/tshuffle.ddl
index 00f8e4a..4f9559b 100644
--- a/tools/testfiles/tshuffle.ddl
+++ b/tools/testfiles/tshuffle.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H -p -d shuffle tfilters.h5'
-#############################
 HDF5 "tfilters.h5" {
 DATASET "shuffle" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/tslink-1.ddl b/tools/testfiles/tslink-1.ddl
index e0f24e0..d9df572 100644
--- a/tools/testfiles/tslink-1.ddl
+++ b/tools/testfiles/tslink-1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tslink.h5'
-#############################
 HDF5 "tslink.h5" {
 GROUP "/" {
    SOFTLINK "slink1" {
diff --git a/tools/testfiles/tslink-1.ls b/tools/testfiles/tslink-1.ls
index 6c3467a..7afc8a5 100644
--- a/tools/testfiles/tslink-1.ls
+++ b/tools/testfiles/tslink-1.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -r tslink.h5'
-#############################
 /                        Group
 /slink1                  Soft Link {somevalue}
 /slink2                  Soft Link {linkvalue}
diff --git a/tools/testfiles/tslink-2.ddl b/tools/testfiles/tslink-2.ddl
index 0672707..853c093 100644
--- a/tools/testfiles/tslink-2.ddl
+++ b/tools/testfiles/tslink-2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -l slink2 tslink.h5'
-#############################
 HDF5 "tslink.h5" {
 SOFTLINK "slink2" {
    LINKTARGET "linkvalue"
diff --git a/tools/testfiles/tslink.h5.xml b/tools/testfiles/tslink.h5.xml
index f31f425..9d8040e 100644
--- a/tools/testfiles/tslink.h5.xml
+++ b/tools/testfiles/tslink.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tslink.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:SoftLink LinkName="slink1" OBJ-XID="xid_18446744073709551614" H5SourcePath="/slink1" TargetPath="somevalue"  Parents="xid_696" H5ParentPaths="/" />
    <hdf5:SoftLink LinkName="slink2" OBJ-XID="xid_18446744073709551613" H5SourcePath="/slink2" TargetPath="linkvalue"  Parents="xid_696" H5ParentPaths="/" />
diff --git a/tools/testfiles/tsoftlinks-1.ls b/tools/testfiles/tsoftlinks-1.ls
index fc57da9..d7d98a3 100644
--- a/tools/testfiles/tsoftlinks-1.ls
+++ b/tools/testfiles/tsoftlinks-1.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls --follow-symlinks tsoftlinks.h5'
-#############################
 dset1                    Dataset {4, 2}
 dset2                    Dataset {4, 2}
 dtype                    Type
diff --git a/tools/testfiles/tsoftlinks-2.ls b/tools/testfiles/tsoftlinks-2.ls
index 3566f70..52c5265 100644
--- a/tools/testfiles/tsoftlinks-2.ls
+++ b/tools/testfiles/tsoftlinks-2.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls --follow-symlinks -r tsoftlinks.h5'
-#############################
 /                        Group
 /dset1                   Dataset {4, 2}
 /dset2                   Dataset {4, 2}
diff --git a/tools/testfiles/tsoftlinks-3.ls b/tools/testfiles/tsoftlinks-3.ls
index 2face70..6b958ac 100644
--- a/tools/testfiles/tsoftlinks-3.ls
+++ b/tools/testfiles/tsoftlinks-3.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls --follow-symlinks tsoftlinks.h5/group1'
-#############################
 soft_dangle              Soft Link {not_yet} {**NOT FOUND**}
 soft_dset1               Soft Link {/dset1} {Dataset {4, 2}}
 soft_dset2               Soft Link {/dset2} {Dataset {4, 2}}
diff --git a/tools/testfiles/tsoftlinks-4.ls b/tools/testfiles/tsoftlinks-4.ls
index c1f4568..092d8a5 100644
--- a/tools/testfiles/tsoftlinks-4.ls
+++ b/tools/testfiles/tsoftlinks-4.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls --follow-symlinks -r tsoftlinks.h5/group1'
-#############################
 /soft_dangle             Soft Link {not_yet} {**NOT FOUND**}
 /soft_dset1              Soft Link {/dset1} {Dataset {4, 2}}
 /soft_dset2              Soft Link {/dset2} {Dataset {4, 2}}
diff --git a/tools/testfiles/tsoftlinks-5.ls b/tools/testfiles/tsoftlinks-5.ls
index 6e915e1..cc1f130 100644
--- a/tools/testfiles/tsoftlinks-5.ls
+++ b/tools/testfiles/tsoftlinks-5.ls
@@ -1,4 +1 @@
-#############################
- output for 'h5ls --follow-symlinks tsoftlinks.h5/soft_dset1'
-#############################
 soft_dset1               Soft Link {/dset1} {Dataset {4, 2}}
diff --git a/tools/testfiles/tsoftlinks-nodangle-1.ls b/tools/testfiles/tsoftlinks-nodangle-1.ls
index 6d639b7..d7d98a3 100644
--- a/tools/testfiles/tsoftlinks-nodangle-1.ls
+++ b/tools/testfiles/tsoftlinks-nodangle-1.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 --follow-symlinks --no-dangling-links tsoftlinks.h5'
-#############################
 dset1                    Dataset {4, 2}
 dset2                    Dataset {4, 2}
 dtype                    Type
diff --git a/tools/testfiles/tsplit_file.ddl b/tools/testfiles/tsplit_file.ddl
index 691790c..7e1c812 100644
--- a/tools/testfiles/tsplit_file.ddl
+++ b/tools/testfiles/tsplit_file.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump --filedriver=split tsplit_file'
-#############################
 HDF5 "tsplit_file" {
 GROUP "/" {
    ATTRIBUTE "Metadata" {
diff --git a/tools/testfiles/tstr-1.ddl b/tools/testfiles/tstr-1.ddl
index 099b291..4d1905b 100644
--- a/tools/testfiles/tstr-1.ddl
+++ b/tools/testfiles/tstr-1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tstr.h5'
-#############################
 HDF5 "tstr.h5" {
 GROUP "/" {
    DATASET "comp1" {
diff --git a/tools/testfiles/tstr-1.ls b/tools/testfiles/tstr-1.ls
index 8a223cc..1ae4ecd 100644
--- a/tools/testfiles/tstr-1.ls
+++ b/tools/testfiles/tstr-1.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -r -d tstr.h5'
-#############################
 /                        Group
 /comp1                   Dataset {3, 6}
     Data:
diff --git a/tools/testfiles/tstr-2.ddl b/tools/testfiles/tstr-2.ddl
index ab7cb42..e887581 100644
--- a/tools/testfiles/tstr-2.ddl
+++ b/tools/testfiles/tstr-2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tstr2.h5'
-#############################
 HDF5 "tstr2.h5" {
 GROUP "/" {
    GROUP "g1" {
diff --git a/tools/testfiles/tstr.h5.xml b/tools/testfiles/tstr.h5.xml
index aa429a8..ac9e268 100644
--- a/tools/testfiles/tstr.h5.xml
+++ b/tools/testfiles/tstr.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tstr.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Dataset Name="comp1" OBJ-XID="xid_2520" H5Path= "/comp1" Parents="xid_696" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tstr2.h5.xml b/tools/testfiles/tstr2.h5.xml
index 62283be..3f691aa 100644
--- a/tools/testfiles/tstr2.h5.xml
+++ b/tools/testfiles/tstr2.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tstr2.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Group Name="g1" OBJ-XID="xid_1344" H5Path="/g1" Parents="xid_696" H5ParentPaths="/" >
       <hdf5:Dataset Name="dset1" OBJ-XID="xid_1720" H5Path= "/g1/dset1" Parents="xid_1344" H5ParentPaths="/g1">
diff --git a/tools/testfiles/tstring-at.h5.xml b/tools/testfiles/tstring-at.h5.xml
index 29e2b90..b2bc39d 100644
--- a/tools/testfiles/tstring-at.h5.xml
+++ b/tools/testfiles/tstring-at.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tstring-at.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_696" H5Path="/">
    <hdf5:Dataset Name="dset1" OBJ-XID="xid_744" H5Path= "/dset1" Parents="xid_696" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tstring.ddl b/tools/testfiles/tstring.ddl
index 843d2aa..3469de7 100644
--- a/tools/testfiles/tstring.ddl
+++ b/tools/testfiles/tstring.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tstr3.h5'
-#############################
 HDF5 "tstr3.h5" {
 GROUP "/" {
    DATASET "str1" {
diff --git a/tools/testfiles/tstring.h5.xml b/tools/testfiles/tstring.h5.xml
index d83ea0e..4f9d7b5 100644
--- a/tools/testfiles/tstring.h5.xml
+++ b/tools/testfiles/tstring.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tstring.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_928" H5Path="/">
    <hdf5:Dataset Name="dset1" OBJ-XID="xid_976" H5Path= "/dset1" Parents="xid_928" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tstring2.ddl b/tools/testfiles/tstring2.ddl
index c3e9844..88996fd 100644
--- a/tools/testfiles/tstring2.ddl
+++ b/tools/testfiles/tstring2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -r -d str4 tstr3.h5'
-#############################
 HDF5 "tstr3.h5" {
 DATASET "str4" {
    DATATYPE  H5T_STD_I8LE
diff --git a/tools/testfiles/tstringe.ddl b/tools/testfiles/tstringe.ddl
index 1d96dbd..f7efcbf 100644
--- a/tools/testfiles/tstringe.ddl
+++ b/tools/testfiles/tstringe.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -e tstr3.h5'
-#############################
 HDF5 "tstr3.h5" {
 GROUP "/" {
    DATASET "str1" {
diff --git a/tools/testfiles/tszip.ddl b/tools/testfiles/tszip.ddl
index b9f80ca..08b714b 100644
--- a/tools/testfiles/tszip.ddl
+++ b/tools/testfiles/tszip.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H -p -d szip tfilters.h5'
-#############################
 HDF5 "tfilters.h5" {
 DATASET "szip" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/tudlink-1.ddl b/tools/testfiles/tudlink-1.ddl
index 5f76c40..53edf6b 100644
--- a/tools/testfiles/tudlink-1.ddl
+++ b/tools/testfiles/tudlink-1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tudlink.h5'
-#############################
 HDF5 "tudlink.h5" {
 GROUP "/" {
    USERDEFINED_LINK "udlink1" {
diff --git a/tools/testfiles/tudlink-1.ls b/tools/testfiles/tudlink-1.ls
index d34ef4d..487e4bc 100644
--- a/tools/testfiles/tudlink-1.ls
+++ b/tools/testfiles/tudlink-1.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -r tudlink.h5'
-#############################
 /                        Group
 /udlink1                 UD Link {cannot follow UD links}
 /udlink2                 UD Link {cannot follow UD links}
diff --git a/tools/testfiles/tudlink-2.ddl b/tools/testfiles/tudlink-2.ddl
index 9ae3a54..7f4281a 100644
--- a/tools/testfiles/tudlink-2.ddl
+++ b/tools/testfiles/tudlink-2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -l udlink2 tudlink.h5'
-#############################
 HDF5 "tudlink.h5" {
 USERDEFINED_LINK "udlink2" {
    USERDEFINED_LINK "udlink2" {
diff --git a/tools/testfiles/tudlink.h5.xml b/tools/testfiles/tudlink.h5.xml
index bc55a83..7e57dd8 100644
--- a/tools/testfiles/tudlink.h5.xml
+++ b/tools/testfiles/tudlink.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tudlink.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_96" H5Path="/">
    <hdf5:UserDefined LinkName="udlink1" OBJ-XID="xid_18446744073709551614" H5SourcePath="/udlink1" LinkClass="187"  Parents="xid_96" H5ParentPaths="/" />
    <hdf5:UserDefined LinkName="udlink2" OBJ-XID="xid_18446744073709551613" H5SourcePath="/udlink2" LinkClass="187"  Parents="xid_96" H5ParentPaths="/" />
diff --git a/tools/testfiles/tuserfilter.ddl b/tools/testfiles/tuserfilter.ddl
index 5549741..29660a7 100644
--- a/tools/testfiles/tuserfilter.ddl
+++ b/tools/testfiles/tuserfilter.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump -H -p -d myfilter tfilters.h5'
-#############################
 HDF5 "tfilters.h5" {
 DATASET "myfilter" {
    DATATYPE  H5T_STD_I32LE
diff --git a/tools/testfiles/tvldtypes1.ddl b/tools/testfiles/tvldtypes1.ddl
index e798d09..1ebb915 100644
--- a/tools/testfiles/tvldtypes1.ddl
+++ b/tools/testfiles/tvldtypes1.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tvldtypes1.h5'
-#############################
 HDF5 "tvldtypes1.h5" {
 GROUP "/" {
    DATASET "Dataset1.0" {
diff --git a/tools/testfiles/tvldtypes1.h5.xml b/tools/testfiles/tvldtypes1.h5.xml
index 34eb276..3ccd3b4 100644
--- a/tools/testfiles/tvldtypes1.h5.xml
+++ b/tools/testfiles/tvldtypes1.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tvldtypes1.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_928" H5Path="/">
    <hdf5:Dataset Name="Dataset1.0" OBJ-XID="xid_976" H5Path= "/Dataset1.0" Parents="xid_928" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tvldtypes1.ls b/tools/testfiles/tvldtypes1.ls
index 4c4c162..feb1ac6 100644
--- a/tools/testfiles/tvldtypes1.ls
+++ b/tools/testfiles/tvldtypes1.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -w80 -r -d tvldtypes1.h5'
-#############################
 /                        Group
 /Dataset1.0              Dataset {4}
     Data:
diff --git a/tools/testfiles/tvldtypes2.ddl b/tools/testfiles/tvldtypes2.ddl
index 855b5cd..93be862 100644
--- a/tools/testfiles/tvldtypes2.ddl
+++ b/tools/testfiles/tvldtypes2.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tvldtypes2.h5'
-#############################
 HDF5 "tvldtypes2.h5" {
 GROUP "/" {
    DATASET "Dataset1" {
diff --git a/tools/testfiles/tvldtypes2.h5.xml b/tools/testfiles/tvldtypes2.h5.xml
index d7e644c..e0b44f3 100644
--- a/tools/testfiles/tvldtypes2.h5.xml
+++ b/tools/testfiles/tvldtypes2.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tvldtypes2.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_928" H5Path="/">
    <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_976" H5Path= "/Dataset1" Parents="xid_928" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tvldtypes2be.ls b/tools/testfiles/tvldtypes2be.ls
index ee84185..2f7def3 100644
--- a/tools/testfiles/tvldtypes2be.ls
+++ b/tools/testfiles/tvldtypes2be.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -v tvldtypes1.h5'
-#############################
 Opened "tvldtypes1.h5" with sec2 driver.
 Dataset1.0               Dataset {4/4}
     Location:  1:976
diff --git a/tools/testfiles/tvldtypes2le.ls b/tools/testfiles/tvldtypes2le.ls
index 62dfa61..f99ad18 100644
--- a/tools/testfiles/tvldtypes2le.ls
+++ b/tools/testfiles/tvldtypes2le.ls
@@ -1,6 +1,3 @@
-#############################
- output for 'h5ls -v tvldtypes1.h5'
-#############################
 Opened "tvldtypes1.h5" with sec2 driver.
 Dataset1.0               Dataset {4/4}
     Location:  1:976
diff --git a/tools/testfiles/tvldtypes3.ddl b/tools/testfiles/tvldtypes3.ddl
index 692f485..3af9268 100644
--- a/tools/testfiles/tvldtypes3.ddl
+++ b/tools/testfiles/tvldtypes3.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tvldtypes3.h5'
-#############################
 HDF5 "tvldtypes3.h5" {
 GROUP "/" {
    DATASET "Dataset1" {
diff --git a/tools/testfiles/tvldtypes3.h5.xml b/tools/testfiles/tvldtypes3.h5.xml
index 627b2ca..902de03 100644
--- a/tools/testfiles/tvldtypes3.h5.xml
+++ b/tools/testfiles/tvldtypes3.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tvldtypes3.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_928" H5Path="/">
    <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_976" H5Path= "/Dataset1" Parents="xid_928" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tvldtypes4.ddl b/tools/testfiles/tvldtypes4.ddl
index 50ae28b..b1ca394 100644
--- a/tools/testfiles/tvldtypes4.ddl
+++ b/tools/testfiles/tvldtypes4.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tvldtypes4.h5'
-#############################
 HDF5 "tvldtypes4.h5" {
 GROUP "/" {
    DATASET "Dataset1" {
diff --git a/tools/testfiles/tvldtypes4.h5.xml b/tools/testfiles/tvldtypes4.h5.xml
index de2a476..34cd2be 100644
--- a/tools/testfiles/tvldtypes4.h5.xml
+++ b/tools/testfiles/tvldtypes4.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tvldtypes4.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_928" H5Path="/">
    <hdf5:Dataset Name="Dataset1" OBJ-XID="xid_976" H5Path= "/Dataset1" Parents="xid_928" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tvldtypes5.ddl b/tools/testfiles/tvldtypes5.ddl
index 57462d7..b4bf3db 100644
--- a/tools/testfiles/tvldtypes5.ddl
+++ b/tools/testfiles/tvldtypes5.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tvldtypes5.h5'
-#############################
 HDF5 "tvldtypes5.h5" {
 GROUP "/" {
    DATASET "Dataset" {
diff --git a/tools/testfiles/tvldtypes5.h5.xml b/tools/testfiles/tvldtypes5.h5.xml
index 92d5f0c..d2d2bf6 100644
--- a/tools/testfiles/tvldtypes5.h5.xml
+++ b/tools/testfiles/tvldtypes5.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tvldtypes5.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_928" H5Path="/">
    <hdf5:Dataset Name="Dataset" OBJ-XID="xid_976" H5Path= "/Dataset" Parents="xid_928" H5ParentPaths="/">
       <hdf5:StorageLayout>
diff --git a/tools/testfiles/tvlstr.ddl b/tools/testfiles/tvlstr.ddl
index eda8e00..2f1318c 100644
--- a/tools/testfiles/tvlstr.ddl
+++ b/tools/testfiles/tvlstr.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tvlstr.h5'
-#############################
 HDF5 "tvlstr.h5" {
 GROUP "/" {
    ATTRIBUTE "test_scalar" {
diff --git a/tools/testfiles/tvlstr.h5.xml b/tools/testfiles/tvlstr.h5.xml
index 507f0eb..697aad5 100644
--- a/tools/testfiles/tvlstr.h5.xml
+++ b/tools/testfiles/tvlstr.h5.xml
@@ -1,8 +1,5 @@
-#############################
-Expected output for 'h5dump --xml tvlstr.h5'
-#############################
 <?xml version="1.0" encoding="UTF-8"?>
-<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/DTDs/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/DTDs/HDF5-File http://www.hdfgroup.org/DTDs/HDF5-File.xsd">
+<hdf5:HDF5-File xmlns:hdf5="http://hdfgroup.org/HDF5/XML/schema/HDF5-File" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hdfgroup.org/HDF5/XML/schema/HDF5-File http://www.hdfgroup.org/HDF5/XML/schema/HDF5-File.xsd">
 <hdf5:RootGroup OBJ-XID="xid_96" H5Path="/">
    <hdf5:Attribute Name="test_scalar">
       <hdf5:Dataspace>
diff --git a/tools/testfiles/tvms.ddl b/tools/testfiles/tvms.ddl
index 077050b..49f3881 100644
--- a/tools/testfiles/tvms.ddl
+++ b/tools/testfiles/tvms.ddl
@@ -1,6 +1,3 @@
-#############################
-Expected output for 'h5dump tvms.h5'
-#############################
 HDF5 "tvms.h5" {
 GROUP "/" {
    DATASET "Array" {
diff --git a/tools/testfiles/zerodim.ddl b/tools/testfiles/zerodim.ddl
new file mode 100644
index 0000000..484e907
--- /dev/null
+++ b/tools/testfiles/zerodim.ddl
@@ -0,0 +1,16 @@
+HDF5 "zerodim.h5" {
+GROUP "/" {
+   ATTRIBUTE "attr of 0 dimension size" {
+      DATATYPE  H5T_STD_U32LE
+      DATASPACE  SIMPLE { ( 0, 0 ) / ( 0, 0 ) }
+      DATA {
+      }
+   }
+   DATASET "dset of 0 dimension size" {
+      DATATYPE  H5T_STD_I32BE
+      DATASPACE  SIMPLE { ( 0, 0 ) / ( 0, 0 ) }
+      DATA {
+      }
+   }
+}
+}
diff --git a/tools/testfiles/zerodim.h5 b/tools/testfiles/zerodim.h5
new file mode 100644
index 0000000..6939353
Binary files /dev/null and b/tools/testfiles/zerodim.h5 differ
diff --git a/vms/fortran/src/make.com b/vms/fortran/src/make.com
index 5ad89ff..4662fc4 100644
--- a/vms/fortran/src/make.com
+++ b/vms/fortran/src/make.com
@@ -54,22 +54,29 @@ $ type sys$input
 $!
 $ cobj="H5f90kit, H5_f, H5Af, H5Df, H5Ef, H5Ff, H5Gf, "+-
        "H5If, H5Lf, H5Of, H5Pf, H5Rf, H5Sf, H5Tf, H5Zf"
-$ ffiles= "H5_ff.f90, H5Aff.f90, H5Dff.f90, H5Eff.f90,"+-
+$! H5_ff_F90.f90 is needed to compile H5_ff.f90, therefore I have it on this line EIP 2011/10/04
+$ ffiles= "H5_ff_F90.f90, H5_ff.f90, H5Aff.f90, H5Dff.f90, H5Eff.f90,"+-
           "H5Lff.f90, H5Off.f90,"+-
           "H5Fff.f90, H5Gff.f90, H5Iff.f90, H5Pff.f90, H5Rff.f90, H5Sff.f90,"+-
           "H5Tff.f90, H5Zff.f90, H5_DBLE_InterfaceInclude.f90, HDF5.f90"
+$ ffiles_F90="H5Aff_F90.f90, H5Dff_F90.f90, H5Eff_F90.f90, H5Lff_F90.f90,"+-
+             "H5Off_F90.f90, H5Pff_F90.f90, H5Rff_F90.f90, H5Tff_F90.f90"
 $ fobj="H5f90global, "+-
-       "H5fortran_types, H5_ff, H5Aff, H5Dff, H5Eff,"+-
+       "H5fortran_types, H5_ff_F90, H5_ff, H5Aff, H5Dff, H5Eff,"+-
        "H5Fff, H5Gff, H5Iff, H5Lff, H5Off, H5Pff, H5Rff, H5Sff,"+-
        "H5Tff, H5Zff, H5_DBLE_InterfaceInclude, HDF5"
+$ fobj_F90="H5Aff_F90, H5Dff_F90, H5Eff_F90, H5Lff_F90,"+-
+           "H5Off_F90, H5Pff_F90, H5Rff_F90, H5Tff_F90"
 $!
 $ ccc 'cobj 
 $ fff H5fortran_types.f90
 $ fff H5f90global.f90
 $ 
+$ fff 'ffiles_F90
 $ fff 'ffiles
 $ library/create []hdf5_fortran  'cobj
 $ library/replace []hdf5_fortran  'fobj
+$ library/replace []hdf5_fortran  'fobj_F90
 $ type sys$input
        Done
 $ exit
diff --git a/vms/src/h5pubconf.h b/vms/src/h5pubconf.h
index 006623e..f40da6b 100644
--- a/vms/src/h5pubconf.h
+++ b/vms/src/h5pubconf.h
@@ -1,3 +1,17 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help at hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 /* src/H5config.h.  Generated from H5config.h.in by configure.  */
 /* src/H5config.h.in.  Generated from configure.in by autoheader.  */
 
@@ -33,10 +47,10 @@
 
 /* Define to a macro mangling the given C identifier (in lower and upper
    case), which must not contain underscores, for linking with Fortran. */
-/* #define H5_FC_FUNC(name,NAME) name ## _ */
+/* #undef H5_FC_FUNC */
 
 /* As FC_FUNC, but for C identifiers containing underscores. */
-/* #define H5_FC_FUNC_(name,NAME) name ## __ */
+/* #undef H5_FC_FUNC_ */
 
 /* Define if your system can handle overflow converting floating-point to
    integer values. */
@@ -51,13 +65,13 @@
 #define H5_FP_TO_ULLONG_RIGHT_MAXIMUM 1
 
 /* Define if gettimeofday() populates the tz pointer passed in */
-/* #define H5_GETTIMEOFDAY_GIVES_TZ 1 */
+/* #undef H5_GETTIMEOFDAY_GIVES_TZ */
 
 /* Define to 1 if you have the `alarm' function. */
 #define H5_HAVE_ALARM 1
 
 /* Define if the __attribute__(()) extension is present */
-/* #define H5_HAVE_ATTRIBUTE 1 */
+/* #undef H5_HAVE_ATTRIBUTE */
 
 /* Define to 1 if you have the `BSDgettimeofday' function. */
 /* #undef H5_HAVE_BSDGETTIMEOFDAY */
@@ -69,6 +83,9 @@
 /* Define if the compiler understands the __func__ keyword */
 #define H5_HAVE_C99_FUNC 1
 
+/* Define to 1 if you have the `clock_gettime' function. */
+#define H5_HAVE_CLOCK_GETTIME 1
+
 /* Define if the function stack tracing code is to be compiled in */
 /* #undef H5_HAVE_CODESTACK */
 
@@ -89,10 +106,10 @@
 /* #undef H5_HAVE_DMALLOC_H */
 
 /* Define if library information should be embedded in the executables */
-/* #unfine H5_HAVE_EMBEDDED_LIBINFO */
+/* #undef H5_HAVE_EMBEDDED_LIBINFO */
 
 /* Define to 1 if you have the <features.h> header file. */
-/* #define H5_HAVE_FEATURES_H 1 */
+/* #undef H5_HAVE_FEATURES_H */
 
 /* Define if support for deflate (zlib) filter is enabled */
 #define H5_HAVE_FILTER_DEFLATE 1
@@ -113,7 +130,7 @@
 /* #undef H5_HAVE_FILTER_SZIP */
 
 /* Define to 1 if you have the `fork' function. */
-/* #define H5_HAVE_FORK 1 */
+/* #undef H5_HAVE_FORK */
 
 /* Define to 1 if you have the `frexpf' function. */
 #define H5_HAVE_FREXPF 1
@@ -121,23 +138,23 @@
 /* Define to 1 if you have the `frexpl' function. */
 #define H5_HAVE_FREXPL 1
 
-/* Define to 1 if you have the `fseek64' function. */
-/* #undef H5_HAVE_FSEEK64 */
-
 /* Define to 1 if you have the `fseeko' function. */
 #define H5_HAVE_FSEEKO 1
 
+/* Define to 1 if you have the `fseek64' function. */
+/* #undef H5_HAVE_FSEEKO64 */
+
 /* Define to 1 if you have the `fstat64' function. */
-/* #define H5_HAVE_FSTAT64 1 */
+/* #undef H5_HAVE_FSTAT64 */
 
 /* Define to 1 if you have the `ftello' function. */
 #define H5_HAVE_FTELLO 1
 
 /* Define to 1 if you have the `ftruncate64' function. */
-/* #define H5_HAVE_FTRUNCATE64 1 */
+/* #undef H5_HAVE_FTRUNCATE64 */
 
-/* Define if the compiler understand the __FUNCTION__ keyword */
-/* #define H5_HAVE_FUNCTION 1 */
+/* Define if the compiler understands the __FUNCTION__ keyword */
+/* #undef H5_HAVE_FUNCTION */
 
 /* Define to 1 if you have the `GetConsoleScreenBufferInfo' function. */
 /* #undef H5_HAVE_GETCONSOLESCREENBUFFERINFO */
@@ -146,10 +163,10 @@
 #define H5_HAVE_GETHOSTNAME 1
 
 /* Define to 1 if you have the `getpwuid' function. */
-/* #define H5_HAVE_GETPWUID 1 */
+/* #undef H5_HAVE_GETPWUID */
 
 /* Define to 1 if you have the `getrusage' function. */
-/* #define H5_HAVE_GETRUSAGE 1 */
+/* #undef H5_HAVE_GETRUSAGE */
 
 /* Define to 1 if you have the `gettextinfo' function. */
 /* #undef H5_HAVE_GETTEXTINFO */
@@ -166,9 +183,6 @@
 /* Define to 1 if you have the <gpfs.h> header file. */
 /* #undef H5_HAVE_GPFS_H */
 
-/* Define if h5dump packed bits feature is enabled */
-#define H5_HAVE_H5DUMP_PACKED_BITS
-
 /* Define if library will contain instrumentation to detect correct
    optimization operation */
 #define H5_HAVE_INSTRUMENTED_LIBRARY 1
@@ -216,19 +230,22 @@
 /* #undef H5_HAVE_LIBSZ */
 
 /* Define to 1 if you have the `z' library (-lz). */
-/* #define H5_HAVE_LIBZ 1 */
+/* #undef H5_HAVE_LIBZ */
 
 /* Define to 1 if you have the `longjmp' function. */
 #define H5_HAVE_LONGJMP 1
 
 /* Define to 1 if you have the `lseek64' function. */
-/* #define H5_HAVE_LSEEK64 1 */
+/* #undef H5_HAVE_LSEEK64 */
 
 /* Define to 1 if you have the `lstat' function. */
-/* #define H5_HAVE_LSTAT 1 */
+/* #undef H5_HAVE_LSTAT */
+
+/* Define to 1 if you have the <mach/mach_time.h> header file. */
+/* #undef H5_HAVE_MACH_MACH_TIME_H */
 
 /* Define to 1 if you have the <memory.h> header file. */
-#define H5_HAVE_MEMORY_H 1
+/* #undef H5_HAVE_MEMORY_H */
 
 /* Define if we have MPE support */
 /* #undef H5_HAVE_MPE */
@@ -257,9 +274,6 @@
 /* Define to 1 if you have the `rand_r' function. */
 /* #define H5_HAVE_RAND_R 1 */
 
-/* Define to 1 if you have the `setjmp' function. */
-#define H5_HAVE_SETJMP 1
-
 /* Define to 1 if you have the <setjmp.h> header file. */
 #define H5_HAVE_SETJMP_H 1
 
@@ -273,10 +287,10 @@
 #define H5_HAVE_SIGNAL 1
 
 /* Define to 1 if you have the `sigprocmask' function. */
-#define H5_HAVE_SIGPROCMASK 1
+/* #undef H5_HAVE_SIGPROCMASK */
 
 /* Define to 1 if you have the `sigsetjmp' function. */
-#define H5_HAVE_SIGSETJMP 1
+/* #undef H5_HAVE_SIGSETJMP */
 
 /* Define to 1 if you have the `snprintf' function. */
 #define H5_HAVE_SNPRINTF 1
@@ -285,16 +299,16 @@
 #define H5_HAVE_SRANDOM 1
 
 /* Define to 1 if you have the `stat64' function. */
-/* #define H5_HAVE_STAT64 1 */
+/* #undef H5_HAVE_STAT64 */
 
 /* Define if `struct stat' has the `st_blocks' field */
-/* #define H5_HAVE_STAT_ST_BLOCKS 1 */
+/* #undef H5_HAVE_STAT_ST_BLOCKS */
 
 /* Define to 1 if you have the <stddef.h> header file. */
 #define H5_HAVE_STDDEF_H 1
 
 /* Define to 1 if you have the <stdint.h> header file. */
-/* #define H5_HAVE_STDINT_H 1 */
+/* #undef H5_HAVE_STDINT_H */
 
 /* Define to 1 if you have the <stdlib.h> header file. */
 #define H5_HAVE_STDLIB_H 1
@@ -312,7 +326,7 @@
 /* #undef H5_HAVE_STRUCT_TEXT_INFO */
 
 /* Define if `struct timezone' is defined */
-/* #define H5_HAVE_STRUCT_TIMEZONE 1 */
+/* #undef H5_HAVE_STRUCT_TIMEZONE */
 
 /* Define to 1 if `tm_zone' is member of `struct tm'. */
 #define H5_HAVE_STRUCT_TM_TM_ZONE 1
@@ -321,7 +335,7 @@
 /* #undef H5_HAVE_STRUCT_VIDEOCONFIG */
 
 /* Define to 1 if you have the `symlink' function. */
-/* #define H5_HAVE_SYMLINK 1 */
+/* #undef H5_HAVE_SYMLINK */
 
 /* Define to 1 if you have the `system' function. */
 #define H5_HAVE_SYSTEM 1
@@ -375,7 +389,7 @@
 #define H5_HAVE_TMPFILE 1
 
 /* Define if `tm_gmtoff' is a member of `struct tm' */
-/* #define H5_HAVE_TM_GMTOFF 1 */
+/* #undef H5_HAVE_TM_GMTOFF */
 
 /* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use
    `HAVE_STRUCT_TM_TM_ZONE' instead. */
@@ -389,7 +403,7 @@
 #define H5_HAVE_UNISTD_H 1
 
 /* Define to 1 if you have the `vasprintf' function. */
-/* #define H5_HAVE_VASPRINTF 1 */
+/* #undef H5_HAVE_VASPRINTF */
 
 /* Define to 1 if you have the `vsnprintf' function. */
 #define H5_HAVE_VSNPRINTF 1
@@ -397,12 +411,12 @@
 /* Define to 1 if you have the `waitpid' function. */
 #define H5_HAVE_WAITPID 1
 
-/* Define if your system has window style path name. */
-/* #undef H5_HAVE_WINDOW_PATH */
-
 /* Define if your system has OpenVMS path name. This macro is added by hand. */
 #define H5_HAVE_VMS_PATH 1
 
+/* Define if your system has window style path name. */
+/* #undef H5_HAVE_WINDOW_PATH */
+
 /* Define to 1 if you have the <winsock.h> header file. */
 /* #undef H5_HAVE_WINSOCK_H */
 
@@ -439,6 +453,10 @@
    values correctly. */
 #define H5_LDOUBLE_TO_LLONG_ACCURATE 1
 
+/* Define if your system converts long double to (unsigned) long values with
+   special algorithm. */
+/* #undef H5_LDOUBLE_TO_LONG_SPECIAL */
+
 /* Define if your system can convert long double to unsigned int values
    correctly. */
 #define H5_LDOUBLE_TO_UINT_ACCURATE 1
@@ -450,6 +468,10 @@
    values correctly. */
 #define H5_LLONG_TO_LDOUBLE_CORRECT 1
 
+/* Define if your system can convert (unsigned) long to long double values
+   with special algorithm. */
+/* #undef H5_LONG_TO_LDOUBLE_SPECIAL */
+
 /* Define to the sub-directory in which libtool stores uninstalled libraries.
    */
 #define H5_LT_OBJDIR ".libs/"
@@ -457,17 +479,10 @@
 /* Define if the metadata trace file code is to be compiled in */
 /* #undef H5_METADATA_TRACE_FILE */
 
-/* Define if your system can handle complicated MPI derived datatype
-   correctly. */
-/* #undef H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS */
-
 /* Define if your system's `MPI_File_set_size' function works for files over
    2GB. */
 /* #undef H5_MPI_FILE_SET_SIZE_BIG */
 
-/* Define if your system can handle special collective IO properly. */
-/* #undef H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS */
-
 /* Define if we can violate pointer alignment restrictions */
 #define H5_NO_ALIGNMENT_RESTRICTIONS 1
 
@@ -487,7 +502,7 @@
 #define H5_PACKAGE_NAME "HDF5"
 
 /* Define to the full name and version of this package. */
-#define H5_PACKAGE_STRING "HDF5 1.8.7"
+#define H5_PACKAGE_STRING "HDF5 1.8.8"
 
 /* Define to the one symbol short name of this package. */
 #define H5_PACKAGE_TARNAME "hdf5"
@@ -496,7 +511,7 @@
 #define H5_PACKAGE_URL ""
 
 /* Define to the version of this package. */
-#define H5_PACKAGE_VERSION "1.8.7"
+#define H5_PACKAGE_VERSION "1.8.8"
 
 /* Width for printf() for type `long long' or `__int64', use `ll' */
 #define H5_PRINTF_LL_WIDTH "ll"
@@ -526,28 +541,28 @@
 #define H5_SIZEOF_INT8_T 1
 
 /* The size of `int_fast16_t', as computed by sizeof. */
-/* #define H5_SIZEOF_INT_FAST16_T 4 */
+/* #define H5_SIZEOF_INT_FAST16_T 0 */
 
 /* The size of `int_fast32_t', as computed by sizeof. */
-/* #define H5_SIZEOF_INT_FAST32_T 4 */
+/* #define H5_SIZEOF_INT_FAST32_T 0 */
 
 /* The size of `int_fast64_t', as computed by sizeof. */
-/* #define H5_SIZEOF_INT_FAST64_T 8 */
+/* #define H5_SIZEOF_INT_FAST64_T 0 */
 
 /* The size of `int_fast8_t', as computed by sizeof. */
-/* #define H5_SIZEOF_INT_FAST8_T 1 */
+/* #define H5_SIZEOF_INT_FAST8_T 0 */
 
 /* The size of `int_least16_t', as computed by sizeof. */
-/* #define H5_SIZEOF_INT_LEAST16_T 2 */
+/* #define H5_SIZEOF_INT_LEAST16_T 0 */
 
 /* The size of `int_least32_t', as computed by sizeof. */
-/* #define H5_SIZEOF_INT_LEAST32_T 4 */
+/* #define H5_SIZEOF_INT_LEAST32_T 0 */
 
 /* The size of `int_least64_t', as computed by sizeof. */
-/* #define H5_SIZEOF_INT_LEAST64_T 8 */
+/* #define H5_SIZEOF_INT_LEAST64_T 0 */
 
 /* The size of `int_least8_t', as computed by sizeof. */
-/* #define H5_SIZEOF_INT_LEAST8_T 1 */
+/* #define H5_SIZEOF_INT_LEAST8_T 0 */
 
 /* The size of `long', as computed by sizeof. */
 #define H5_SIZEOF_LONG 4
@@ -559,11 +574,14 @@
 #define H5_SIZEOF_LONG_LONG 8
 
 /* The size of `off64_t', as computed by sizeof. */
-/* #define H5_SIZEOF_OFF64_T 8 */
+#define H5_SIZEOF_OFF64_T 0
 
 /* The size of `off_t', as computed by sizeof. */
 #define H5_SIZEOF_OFF_T 8
 
+/* The size of `ptrdiff_t', as computed by sizeof. */
+#define H5_SIZEOF_PTRDIFF_T 4
+
 /* The size of `short', as computed by sizeof. */
 #define H5_SIZEOF_SHORT 2
 
@@ -586,28 +604,31 @@
 #define H5_SIZEOF_UINT8_T 1
 
 /* The size of `uint_fast16_t', as computed by sizeof. */
-/* #define H5_SIZEOF_UINT_FAST16_T 4 */
+/* #define H5_SIZEOF_UINT_FAST16_T 0 */
 
 /* The size of `uint_fast32_t', as computed by sizeof. */
-/* #define H5_SIZEOF_UINT_FAST32_T 4 */
+/* #define H5_SIZEOF_UINT_FAST32_T 0 */
 
 /* The size of `uint_fast64_t', as computed by sizeof. */
-/* #define H5_SIZEOF_UINT_FAST64_T 8 */
+/* #define H5_SIZEOF_UINT_FAST64_T 0 */
 
 /* The size of `uint_fast8_t', as computed by sizeof. */
-/* #define H5_SIZEOF_UINT_FAST8_T 1 */
+/* #define H5_SIZEOF_UINT_FAST8_T 0 */
 
 /* The size of `uint_least16_t', as computed by sizeof. */
-/* #define H5_SIZEOF_UINT_LEAST16_T 2 */
+/* #define H5_SIZEOF_UINT_LEAST16_T 0 */
 
 /* The size of `uint_least32_t', as computed by sizeof. */
-/* #define H5_SIZEOF_UINT_LEAST32_T 4  */
+/* #define H5_SIZEOF_UINT_LEAST32_T 0 */
 
 /* The size of `uint_least64_t', as computed by sizeof. */
-/* #define H5_SIZEOF_UINT_LEAST64_T 8 */
+/* #define H5_SIZEOF_UINT_LEAST64_T 0 */
 
 /* The size of `uint_least8_t', as computed by sizeof. */
-/* #define H5_SIZEOF_UINT_LEAST8_T 1 */
+/* #define H5_SIZEOF_UINT_LEAST8_T 0 */
+
+/* The size of `unsigned', as computed by sizeof. */
+#define H5_SIZEOF_UNSIGNED 4
 
 /* The size of `__int64', as computed by sizeof. */
 #define H5_SIZEOF___INT64 0
@@ -636,12 +657,16 @@
    correct precision. */
 #define H5_ULLONG_TO_LDOUBLE_PRECISION 1
 
+/* Define if your system accurately converting unsigned long to float values.
+   */
+/* #undef H5_ULONG_TO_FLOAT_ACCURATE */
+
 /* Define if your system can accurately convert unsigned (long) long values to
    floating-point values. */
 #define H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE 1
 
 /* Define using v1.6 public API symbols by default */
-/* #undef H5_USE_16_API_DEFAULT */
+/* #define H5_USE_16_API_DEFAULT 1 */
 
 /* Define if a memory checking tool will be used on the library, to cause
    library to be very picky about memory operations and also disable the
@@ -649,7 +674,7 @@
 /* #undef H5_USING_MEMCHECKER */
 
 /* Version number of package */
-#define H5_VERSION "1.8.7"
+#define H5_VERSION "1.8.8"
 
 /* Define if vsnprintf() returns the correct value for formatted strings that
    don't fit into size allowed */
@@ -665,6 +690,12 @@
    first (like Motorola and SPARC, unlike Intel and VAX). */
 /* #undef H5_WORDS_BIGENDIAN */
 
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef H5__FILE_OFFSET_BITS */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef H5__LARGE_FILES */
+
 /* Define to empty if `const' does not conform to ANSI C. */
 /* #undef H5_const */
 
@@ -677,6 +708,9 @@
 /* Define to `long int' if <sys/types.h> does not define. */
 /* #undef H5_off_t */
 
+/* Define to `long' if <sys/types.h> does not define. */
+/* #undef H5_ptrdiff_t */
+
 /* Define to `unsigned long' if <sys/types.h> does not define. */
 /* #undef H5_size_t */
 
diff --git a/vms/src/make.com b/vms/src/make.com
index 558219f..39bc133 100644
--- a/vms/src/make.com
+++ b/vms/src/make.com
@@ -47,7 +47,7 @@ $ cobj= "H5, H5checksum, H5dbg, H5system, H5timer, H5trace,"+-
         "H5Dbtree, H5D, H5Dchunk, H5Dcompact, H5Dcontig, H5Ddbg, H5Ddeprec, H5Defl, H5Dfill,"+-
         "H5Dint, H5Dio, H5Dlayout, H5Dmpio, H5Doh, H5Dscatgath, H5Dselect, H5Dtest,"+-
         "H5E, H5Edeprec, H5Eint,"+-
-        "H5Faccum, H5F, H5Fdbg, H5FD, H5FDcore,"+-
+        "H5Faccum, H5F, H5Fcwfs, H5Fdbg, H5FD, H5FDcore,"+-
         "H5FDdirect, H5FDfamily, H5FDint, H5FDlog, H5FDmpi, H5FDmpio,"+-
         "H5FDmpiposix, H5FDmulti, H5FDsec2, H5FDspace, H5FDstdio,"+-
         "H5FDwindows, H5Fefc, H5Ffake, H5Fio, H5FL, H5Fmount, H5Fmpi, H5FO, H5Fquery, H5FS, "+-
@@ -56,7 +56,7 @@ $ cobj= "H5, H5checksum, H5dbg, H5system, H5timer, H5trace,"+-
         "H5Glink, H5Gloc, H5Gname, H5Gnode, H5Gobj, H5Goh, H5Groot, H5Gstab, H5Gtest, H5Gtraverse,"+-
         "H5HFbtree2, H5HF, H5HFcache, H5HFdbg, H5HFdblock, H5HFdtable, H5HFhdr, H5HFhuge,"+-
         "H5HFiblock, H5HFiter, H5HFman, H5HFsection, H5HFspace, H5HFstat, H5HFtest, H5HFtiny,"+-
-        "H5HG, H5HGcache, H5HGdbg, H5HL, H5HLcache, H5HLdbg, H5HLint, H5HP, H5I, H5Itest, H5L, H5Lexternal"
+        "H5HG, H5HGcache, H5HGdbg, H5HGquery, H5HL, H5HLcache, H5HLdbg, H5HLint, H5HP, H5I, H5Itest, H5L, H5Lexternal"
 $ cobj1= "H5MFaggr, H5MF, H5MFdbg, H5MFsection, H5MM, H5MP, H5MPtest,"+-
         "H5Oainfo, H5Oalloc, H5Oattr, H5Oattribute,"+-
         "H5Obogus, H5Obtreek, H5O, H5Ocache, H5Ochunk, H5Ocont, H5Ocopy, H5Odbg, H5Odrvinfo,"+-
diff --git a/vms/test/H5srcdir_str.h b/vms/test/H5srcdir_str.h
index 6e19146..9dfcf56 100644
--- a/vms/test/H5srcdir_str.h
+++ b/vms/test/H5srcdir_str.h
@@ -19,4 +19,4 @@
  */
 
 /* Set the 'srcdir' path from configure time */
-static const char *config_srcdir = "[...]";
+static const char *config_srcdir = "[-.test]";
diff --git a/vms/test/check.com b/vms/test/check.com
index 60064de..3ac5b44 100644
--- a/vms/test/check.com
+++ b/vms/test/check.com
@@ -95,10 +95,12 @@ $ type sys$input
 $ run  dtypes
 $ type sys$input
 
-$ type sys$input
--------			Running efc    		-------
-$ run  efc
-$ type sys$input
+$! Skip this test for now because it opens the same file many times.
+$! Please see Issue 7620 in Jira about it.
+$! type sys$input
+$! -------                 Running efc             -------
+$! run  efc
+$! type sys$input
 
 $ type sys$input
 -------			Running enum     	-------
@@ -175,11 +177,10 @@ $ type sys$input
 $ run  links
 $ type sys$input
 
-$! Skip it because it needs a script file to run
-$! type sys$input
-$!-------			Running links_env    	-------
-$! run  links_env
-$! type sys$input
+$ type sys$input
+-------			Running links_env    	-------
+$ run  links_env
+$ type sys$input
 
 $ type sys$input
 -------			Running mf    	-------
@@ -227,11 +228,6 @@ $ run  set_extent
 $ type sys$input
 
 $ type sys$input
--------			Running space_overflow 	-------
-$ run  space_overflow
-$ type sys$input
-
-$ type sys$input
 -------			Running stab    	-------
 $ run  stab
 $ type sys$input
diff --git a/vms/test/make.com b/vms/test/make.com
index e25c720..8748925 100644
--- a/vms/test/make.com
+++ b/vms/test/make.com
@@ -296,13 +296,6 @@ $ ccc  set_extent
 $ link set_extent, -
        libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
 $!
-$! a new test
-$ type sys$input
-       Creating space_overflow test
-$ ccc  space_overflow
-$ link space_overflow, -
-       libh5test.olb/lib,[-.src]hdf5.olb/lib,zlib_dir:libz.olb/lib
-$!
 $ type sys$input
        Creating stab test
 $ ccc  stab
diff --git a/vms/tools/h5diff/check_h5diff.com b/vms/tools/h5diff/check_h5diff.com
index 356947d..296a876 100644
--- a/vms/tools/h5diff/check_h5diff.com
+++ b/vms/tools/h5diff/check_h5diff.com
@@ -57,20 +57,29 @@ $!# 1.5 with -d
 $ CALL TOOLTEST h5diff_15.txt " --report --delta=5 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4"
 $!
 $!# 1.6.1 with -p (int)
-$ CALL TOOLTEST h5diff_16_1.txt "-v -p 0.02 h5diff_basic1.h5 h5diff_basic1.h5 g1/dset5 g1/dset6"
+$ CALL TOOLTEST h5diff_16_1.txt "-v -p """0.02""" h5diff_basic1.h5 h5diff_basic1.h5 g1/dset5 g1/dset6"
 $!
 $!# 1.6.2 with -p (unsigned long long)
 $ CALL TOOLTEST h5diff_16_2.txt "--verbose --relative=0.02 h5diff_basic1.h5 h5diff_basic1.h5 g1/dset7 g1/dset8"
 $!
-$!# 1.6.3 with -p (int)
-$ CALL TOOLTEST h5diff_16_3.txt "-v -p 0.02 h5diff_basic1.h5 h5diff_basic1.h5 g1/dset9 g1/dset10"
+$!# 1.6.3 with -p (double)
+$ CALL TOOLTEST h5diff_16_3.txt "-v -p """0.02""" h5diff_basic1.h5 h5diff_basic1.h5 g1/dset9 g1/dset10"
 $!
 $!# 1.7 verbose mode
 $ CALL TOOLTEST h5diff_17.txt "-v h5diff_basic1.h5 h5diff_basic2.h5"  
 $!
+$!# 1.7 test 32-bit INFINITY
+$ CALL TOOLTEST h5diff_171.txt "-v h5diff_basic1.h5 h5diff_basic1.h5 /g1/fp19 /g1/fp19_"""COPY""""
+$!    
+$!# 1.7 test 64-bit INFINITY
+$ CALL TOOLTEST h5diff_172.txt "-v h5diff_basic1.h5 h5diff_basic1.h5 /g1/fp20 /g1/fp20_"""COPY""""
+$!    
 $!# 1.8 quiet mode 
 $ CALL TOOLTEST h5diff_18.txt "-q h5diff_basic1.h5 h5diff_basic2.h5"
 $!
+$!# 1.8 -v and -q
+$ CALL TOOLTEST h5diff_18_1.txt "-v -q h5diff_basic1.h5 h5diff_basic2.h5"
+$!
 $!
 $!# ##############################################################################
 $!# # not comparable types
@@ -107,7 +116,12 @@ $!
 $!# 2.8
 $ CALL TOOLTEST h5diff_28.txt "-v h5diff_types.h5 h5diff_types.h5 l1 l2"
 $!
-$!
+$!# ##############################################################################
+$!# # Enum value tests (may become more comprehensive in the future)
+$!# ##############################################################################
+$!# 3.0
+$!# test enum types which may have invalid values
+$CALL TOOLTEST h5diff_30.txt "-v h5diff_enum_invalid_values.h5 h5diff_enum_invalid_values.h5 dset1 dset2"
 $!
 $!# ##############################################################################
 $!# # Dataset types
@@ -148,6 +162,9 @@ $!
 $!# 6.0: Check if the command line number of arguments is less than 3
 $ CALL TOOLTEST h5diff_600.txt "h5diff_basic1.h5" 
 $!
+$!# 6.1: Check if non-exist object name is specified 
+$ CALL TOOLTEST h5diff_601.txt "h5diff_basic1.h5 h5diff_basic1.h5 nono_obj"
+$!
 $!# ##############################################################################
 $!# # -d 
 $!# ##############################################################################
@@ -200,13 +217,13 @@ $!# 6.16: string
 $! CALL TOOLTEST h5diff_616.txt "-p """0.21""" h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4"
 $!
 $!# 6.17: repeated option
-$ CALL TOOLTEST h5diff_617.txt "-p 0.21 -p 0.22 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4"
+$ CALL TOOLTEST h5diff_617.txt "-p """0.21""" -p """0.22""" h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4"
 $!
 $!# 6.18: number larger than biggest difference
 $ CALL TOOLTEST h5diff_618.txt "-p 2 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4"
 $!
 $!# 6.19: number smaller than smallest difference
-$ CALL TOOLTEST h5diff_619.txt "-p 0.005 h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4"
+$ CALL TOOLTEST h5diff_619.txt "-p """0.005""" h5diff_basic1.h5 h5diff_basic2.h5 g1/dset3 g1/dset4"
 $!
 $!
 $!
@@ -247,11 +264,48 @@ $! Disable this test as C script does
 $! CALL TOOLTEST h5diff_629.txt "file1.h6 file2.h6"
 $!
 $!# ##############################################################################
+$!# # NaN
+$!# ##############################################################################
+$!# 6.30: test (NaN == NaN) must be true based on our documentation -- XCAO
+$ CALL TOOLTEST h5diff_630.txt "-v -d """0.0001""" h5diff_basic1.h5 h5diff_basic1.h5 g1/fp18 g1/fp18_"""COPY""""
+$ CALL TOOLTEST h5diff_631.txt "-v --use-system-epsilon h5diff_basic1.h5 h5diff_basic1.h5 g1/fp18 g1/fp18_"""COPY""""
+$!
+$!# ##############################################################################
 $!# 7.  attributes
 $!# ##############################################################################
 $!
 $ CALL TOOLTEST h5diff_70.txt "-v h5diff_attr1.h5 h5diff_attr2.h5"
 $!
+$!# ##################################################
+$!#  attrs with verbose option level
+$!# ##################################################
+$!
+$ CALL TOOLTEST h5diff_700.txt "-v1 h5diff_attr1.h5 h5diff_attr2.h5"
+$ CALL TOOLTEST h5diff_701.txt "-v2 h5diff_attr1.h5 h5diff_attr2.h5"
+$ CALL TOOLTEST h5diff_702.txt "--verbose=1 h5diff_attr1.h5 h5diff_attr2.h5"
+$ CALL TOOLTEST h5diff_703.txt "--verbose=2 h5diff_attr1.h5 h5diff_attr2.h5"
+$!
+$!# same attr number , all same attr name
+$ CALL TOOLTEST h5diff_704.txt "-v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /g"
+$!
+$!# same attr number , some same attr name
+$ CALL TOOLTEST h5diff_705.txt "-v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /dset"
+$!
+$!# same attr number , all different attr name
+$ CALL TOOLTEST h5diff_706.txt "-v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /ntype"
+$!
+$!# different attr number , same attr name (intersected)
+$ CALL TOOLTEST h5diff_707.txt "-v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /g2"
+$!
+$!# different attr number , all different attr name 
+$ CALL TOOLTEST h5diff_708.txt "-v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /g3"
+$!
+$!# when no attributes exist in both objects
+$ CALL TOOLTEST h5diff_709.txt "-v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5 /g4"
+$!
+$!# file vs file
+$ CALL TOOLTEST h5diff_710.txt "-v2 h5diff_attr_v_level1.h5 h5diff_attr_v_level2.h5"
+$!
 $!# ##############################################################################
 $!# 8.  all dataset datatypes
 $!# ##############################################################################
@@ -269,7 +323,238 @@ $! 11. floating point comparison
 $ CALL TOOLTEST h5diff_101.txt "-v h5diff_basic1.h5 h5diff_basic1.h5 g1/d1  g1/d2"
 $ CALL TOOLTEST h5diff_102.txt "-v h5diff_basic1.h5 h5diff_basic1.h5 g1/fp1  g1/fp2"
 $!
+$!# with --use-system-epsilon for double value 
+$ CALL TOOLTEST h5diff_103.txt "-v --use-system-epsilon h5diff_basic1.h5 h5diff_basic1.h5 g1/d1  g1/d2"
+
+$!# with --use-system-epsilon for float value
+$ CALL TOOLTEST h5diff_104.txt "-v --use-system-epsilon h5diff_basic1.h5 h5diff_basic1.h5 g1/fp1 g1/fp2"
+
+
+$!# not comparable -c flag
+$ CALL TOOLTEST h5diff_200.txt "h5diff_basic2.h5 h5diff_basic2.h5 g2/dset1  g2/dset2"
+$ CALL TOOLTEST h5diff_201.txt "-c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset1  g2/dset2"
+$ CALL TOOLTEST h5diff_202.txt "-c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset2  g2/dset3"
+$ CALL TOOLTEST h5diff_203.txt "-c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset3  g2/dset4"
+$ CALL TOOLTEST h5diff_204.txt "-c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset4  g2/dset5"
+$ CALL TOOLTEST h5diff_205.txt "-c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset5  g2/dset6"
+
+$!# not comparable in compound
+$ CALL TOOLTEST h5diff_206.txt "-c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset7  g2/dset8"
+$ CALL TOOLTEST h5diff_207.txt "-c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset8  g2/dset9"
+
+$!# not comparable in dataspace of zero dimension size
+$ CALL TOOLTEST h5diff_208.txt "-c h5diff_dset_zero_dim_size1.h5 h5diff_dset_zero_dim_size2.h5"
+$!
+$!# non-comparable dataset with comparable attribute, and other comparable datasets.
+$!# All the comparables should display differences.
+$ CALL TOOLTEST h5diff_220.txt "-c non_comparables1.h5 non_comparables2.h5 /g1"
+$!
+$!# comparable dataset with non-comparable attribute and other comparable attributes.
+$!# All the comparables should display differences.
+$ CALL TOOLTEST h5diff_221.txt "-c non_comparables1.h5 non_comparables2.h5 /g2"
+$!
+$!# entire file
+$!# All the comparables should display differences.
+$ CALL TOOLTEST h5diff_222.txt "-c non_comparables1.h5 non_comparables2.h5"
+$!
+$!# ##############################################################################
+$!# # Links compare without --follow-symlinks nor --no-dangling-links
+$!# ##############################################################################
+$!# test for bug1749
+$ CALL TOOLTEST h5diff_300.txt "-v h5diff_links.h5 h5diff_links.h5 /link_g1 /link_g2"
+$!
+$!# ##############################################################################
+$!# # Links compare with --follow-symlinks Only
+$!# ##############################################################################
+$!# soft links file to file
+$ CALL TOOLTEST h5diff_400.txt "--follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5"
+$!
+$!# softlink vs dset"
+$ CALL TOOLTEST h5diff_401.txt "--follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_dset1_1 /target_dset2"
+$!# dset vs softlink"
+$ CALL TOOLTEST h5diff_402.txt "--follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5 /target_dset2 /softlink_dset1_1"
+$!# softlink vs softlink"
+$ CALL TOOLTEST h5diff_403.txt "--follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_dset1_1 /softlink_dset2"
+$!# extlink vs extlink (FILE)"
+$ CALL TOOLTEST h5diff_404.txt "--follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5"
+$!
+$!# extlink vs dset"
+$ CALL TOOLTEST h5diff_405.txt "--follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_trg.h5 /ext_link_dset1 /target_group2/x_dset"
+$!# dset vs extlink"
+$ CALL TOOLTEST h5diff_406.txt "--follow-symlinks -v h5diff_extlink_trg.h5 h5diff_extlink_src.h5 /target_group2/x_dset /ext_link_dset1"
+$!# extlink vs extlink"
+$ CALL TOOLTEST h5diff_407.txt "--follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_dset1 /ext_link_dset2"
+$!# softlink vs extlink"
+$ CALL TOOLTEST h5diff_408.txt "--follow-symlinks -v h5diff_softlinks.h5 h5diff_extlink_src.h5 /softlink_dset1_1 /ext_link_dset2"
+$!# extlink vs softlink "
+$ CALL TOOLTEST h5diff_409.txt "--follow-symlinks -v h5diff_extlink_src.h5 h5diff_softlinks.h5 /ext_link_dset2 /softlink_dset1_1"
+$!# linked_softlink vs linked_softlink (FILE)"
+$ CALL TOOLTEST h5diff_410.txt "--follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5"
+$!
+$!# dset2 vs linked_softlink_dset1"
+$ CALL TOOLTEST h5diff_411.txt "--follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /target_dset2 /softlink1_to_slink2"
+$!# linked_softlink_dset1 vs dset2"
+$ CALL TOOLTEST h5diff_412.txt "--follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /softlink1_to_slink2 /target_dset2"
+$!# linked_softlink_to_dset1 vs linked_softlink_to_dset2"
+$ CALL TOOLTEST h5diff_413.txt "--follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /softlink1_to_slink2 /softlink2_to_slink2"
+$!# group vs linked_softlink_group1"
+$ CALL TOOLTEST h5diff_414.txt "--follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /target_group /softlink3_to_slink2"
+$!
+$!# linked_softlink_group1 vs group"
+$ CALL TOOLTEST h5diff_415.txt "--follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /softlink3_to_slink2 /target_group"
+$!
+$!# linked_softlink_to_group1 vs linked_softlink_to_group2"
+$ CALL TOOLTEST h5diff_416.txt "--follow-symlinks -v h5diff_linked_softlink.h5 h5diff_linked_softlink.h5 /softlink3_to_slink2 /softlink4_to_slink2"
+$!
+$!# non-exist-softlink vs softlink"
+$ CALL TOOLTEST h5diff_417.txt "--follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_noexist /softlink_dset2"
+$!
+$!# softlink vs non-exist-softlink"
+$ CALL TOOLTEST h5diff_418.txt "--follow-symlinks -v h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_dset2 /softlink_noexist"
+$!
+$!# non-exist-extlink_file vs extlink"
+$ CALL TOOLTEST h5diff_419.txt "--follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_noexist2 /ext_link_dset2"
+$!
+$!# exlink vs non-exist-extlink_file"
+$ CALL TOOLTEST h5diff_420.txt "--follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_dset2 /ext_link_noexist2"
+$!
+$!# extlink vs non-exist-extlink_obj"
+$ CALL TOOLTEST h5diff_421.txt "--follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_dset2 /ext_link_noexist1"
+$!
+$!# non-exist-extlink_obj vs extlink"
+$ CALL TOOLTEST h5diff_422.txt "--follow-symlinks -v h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_noexist1 /ext_link_dset2"
+$!
+$!# extlink_to_softlink_to_dset1 vs dset2"
+$ CALL TOOLTEST h5diff_423.txt "--follow-symlinks -v h5diff_ext2softlink_src.h5 h5diff_ext2softlink_trg.h5 /ext_link_to_slink1 /dset2"
+$!
+$!# dset2 vs extlink_to_softlink_to_dset1"
+$ CALL TOOLTEST h5diff_424.txt "--follow-symlinks -v h5diff_ext2softlink_trg.h5 h5diff_ext2softlink_src.h5 /dset2 /ext_link_to_slink1"
+$!
+$!# extlink_to_softlink_to_dset1 vs extlink_to_softlink_to_dset2"
+$ CALL TOOLTEST h5diff_425.txt "--follow-symlinks -v h5diff_ext2softlink_src.h5 h5diff_ext2softlink_src.h5 /ext_link_to_slink1 /ext_link_to_slink2"
+$!
+$!# ##############################################################################
+$!# # Dangling links compare (--follow-symlinks and --no-dangling-links)
+$!# ##############################################################################
+$!# dangling links --follow-symlinks (FILE to FILE)
+$ CALL TOOLTEST h5diff_450.txt  "--follow-symlinks -v h5diff_danglelinks1.h5 h5diff_danglelinks2.h5"
+
+$!# dangling links --follow-symlinks and --no-dangling-links (FILE to FILE)
+$ CALL TOOLTEST h5diff_451.txt  "--follow-symlinks -v --no-dangling-links  h5diff_danglelinks1.h5 h5diff_danglelinks2.h5"
+
+$!# try --no-dangling-links without --follow-symlinks options
+$ CALL TOOLTEST h5diff_452.txt  "--no-dangling-links  h5diff_softlinks.h5 h5diff_softlinks.h5"
+
+$!# dangling link found for soft links (FILE to FILE)
+$ CALL TOOLTEST h5diff_453.txt  "--follow-symlinks -v --no-dangling-links  h5diff_softlinks.h5 h5diff_softlinks.h5"
+
+$!# dangling link found for soft links (obj to obj)
+$ CALL TOOLTEST h5diff_454.txt  "--follow-symlinks -v --no-dangling-links  h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_dset2 /softlink_noexist" 
+$!# dangling link found for soft links (obj to obj) Both dangle links
+$ CALL TOOLTEST h5diff_455.txt  "--follow-symlinks -v --no-dangling-links  h5diff_softlinks.h5 h5diff_softlinks.h5 /softlink_noexist /softlink_noexist" 
+$!# dangling link found for ext links (FILE to FILE)
+$ CALL TOOLTEST h5diff_456.txt  "--follow-symlinks -v --no-dangling-links  h5diff_extlink_src.h5 h5diff_extlink_src.h5" 
+$!# dangling link found for ext links (obj to obj). target file exist
+$ CALL TOOLTEST h5diff_457.txt  "--follow-symlinks -v --no-dangling-links  h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_dset1 /ext_link_noexist1" 
+$!# dangling link found for ext links (obj to obj). target file NOT exist
+$ CALL TOOLTEST h5diff_458.txt  "--follow-symlinks -v --no-dangling-links  h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_dset1 /ext_link_noexist2"  
+$!# dangling link found for ext links (obj to obj). Both dangle links
+$ CALL TOOLTEST h5diff_459.txt  "--follow-symlinks -v --no-dangling-links  h5diff_extlink_src.h5 h5diff_extlink_src.h5 /ext_link_noexist1 /ext_link_noexist2"
+$!
+$!# ##############################################################################
+$!# # test for group diff recursivly
+$!# ##############################################################################
+$!# root 
+$ CALL TOOLTEST h5diff_500.txt "-v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 / /"
+$ CALL TOOLTEST h5diff_501.txt "-v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 / /"
+
+$!# root vs group (It doesn't work on VMS.  Debug it in the future)
+$! CALL TOOLTEST h5diff_502.txt "-v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 / /grp1/grp2/grp3"
+
+$!# group vs group (same name and structure)
+$ CALL TOOLTEST h5diff_503.txt "-v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1 /grp1"
+
+$!# group vs group (different name and structure)
+$ CALL TOOLTEST h5diff_504.txt "-v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1/grp2 /grp1/grp2/grp3"
+
+$!# groups vs soft-link
+$ CALL TOOLTEST h5diff_505.txt "-v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1 /slink_grp1"
+$ CALL TOOLTEST h5diff_506.txt "-v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1/grp2 /slink_grp2"
+
+$!# groups vs ext-link
+$ CALL TOOLTEST h5diff_507.txt "-v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1 /elink_grp1" 
+$ CALL TOOLTEST h5diff_508.txt "-v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp1 /elink_grp1"
+
+$!# soft-link vs ext-link 
+$ CALL TOOLTEST h5diff_509.txt "-v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /slink_grp1 /elink_grp1TOOLTEST h5diff_510.txt -v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /slink_grp1 /elink_grp1"
+
+$!# circled ext links
+$ CALL TOOLTEST h5diff_511.txt "-v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp10 /grp11"
+$ CALL TOOLTEST h5diff_512.txt "-v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /grp10 /grp11"
+
+$!# circled soft2ext-link vs soft2ext-link
+$ CALL TOOLTEST h5diff_513.txt "-v h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /slink_grp10 /slink_grp11"
+$ CALL TOOLTEST h5diff_514.txt "-v --follow-symlinks h5diff_grp_recurse1.h5 h5diff_grp_recurse2.h5 /slink_grp10 /slink_grp11"
+$!
+$!###############################################################################
+$!# Test for group recursive diff via multi-linked external links 
+$!# With follow-symlinks, file h5diff_grp_recurse_ext1.h5 and h5diff_grp_recurse_ext2-1.h5 should
+$!# be same with the external links.
+$!###############################################################################
+$!# file vs file
+$ CALL TOOLTEST h5diff_515.txt "-v h5diff_grp_recurse_ext1.h5 h5diff_grp_recurse_ext2-1.h5"
+$ CALL TOOLTEST h5diff_516.txt "-v --follow-symlinks h5diff_grp_recurse_ext1.h5 h5diff_grp_recurse_ext2-1.h5"
+$!# group vs group
+$ CALL TOOLTEST h5diff_517.txt "-v h5diff_grp_recurse_ext1.h5 h5diff_grp_recurse_ext2-1.h5 /g1"
+$ CALL TOOLTEST h5diff_518.txt "-v --follow-symlinks h5diff_grp_recurse_ext1.h5 h5diff_grp_recurse_ext2-1.h5 /g1"
+
+$!# ##############################################################################
+$!# # Exclude objects (--exclude-path)
+$!# ##############################################################################
+$!#
+$!# Same structure, same names and different value.
+$!#
+$!# Exclude the object with different value. Expect return - same
+$ CALL TOOLTEST h5diff_480.txt "-v --exclude-path /group1/dset3 h5diff_exclude1-1.h5 h5diff_exclude1-2.h5"
+$!# Verify different by not excluding. Expect return - diff
+$ CALL TOOLTEST h5diff_481.txt "-v h5diff_exclude1-1.h5 h5diff_exclude1-2.h5"
+
+$!#
+$!# Different structure, different names. 
+$!#
+$!# Exclude all the different objects. Expect return - sameTOOLTEST h5diff_482.txt -v --exclude-path "/group1" --exclude-path "/dset1" h5diff_exclude2-1.h5 h5diff_exclude2-2.h5
+$!# Exclude only some different objects. Expect return - diff
+$ CALL TOOLTEST h5diff_483.txt "-v --exclude-path "/group1" h5diff_exclude2-1.h5 h5diff_exclude2-2.h5"
+
+$!# Exclude from group compare
+$ CALL TOOLTEST h5diff_484.txt "-v --exclude-path "/dset3" h5diff_exclude1-1.h5 h5diff_exclude1-2.h5 /group1"
+
+$!# ##############################################################################
+$!# # diff various multiple vlen and fixed strings in a compound type dataset
+$!# ############################################################################## 
+$ CALL TOOLTEST h5diff_530.txt "-v  h5diff_comp_vl_strs.h5 h5diff_comp_vl_strs.h5 /group /group_copy"
+
+$!# ##############################################################################
+$!# # Test container types (array,vlen) with multiple nested compound types
+$!# # Complex compound types in dataset and attribute
+$!# ##############################################################################
+$ CALL TOOLTEST h5diff_540.txt "-v compounds_array_vlen1.h5 compounds_array_vlen2.h5"
+$!
+$!# ##############################################################################
+$!# # Test mutually exclusive options 
+$!# ##############################################################################
+$!# Test with -d , -p and --use-system-epsilon. 
+$ CALL TOOLTEST h5diff_640.txt "-v -d 5 -p """0.05""" --use-system-epsilon h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4"
+$ CALL TOOLTEST h5diff_641.txt "-v -d 5 -p """0.05""" h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4"
+$ CALL TOOLTEST h5diff_642.txt "-v -p """0.05""" -d 5 h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4"
+$ CALL TOOLTEST h5diff_643.txt "-v -d 5 --use-system-epsilon h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4"
+$ CALL TOOLTEST h5diff_644.txt "-v --use-system-epsilon -d 5 h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4"
+$ CALL TOOLTEST h5diff_645.txt "-v -p """0.05""" --use-system-epsilon h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4"
+$ CALL TOOLTEST h5diff_646.txt "-v --use-system-epsilon -p """0.05""" h5diff_basic1.h5 h5diff_basic2.h5 /g1/dset3 /g1/dset4"
 $!
+$!# ##############################################################################
+$!# # END
+$!# ##############################################################################
 $!
 $TOOLTEST: SUBROUTINE
 $
diff --git a/vms/tools/h5dump/check_h5dump.com b/vms/tools/h5dump/check_h5dump.com
index 7d08a45..e6c81ee 100644
--- a/vms/tools/h5dump/check_h5dump.com
+++ b/vms/tools/h5dump/check_h5dump.com
@@ -37,28 +37,34 @@ $ ! h5dump tests
 $ !
 $
 $
-$ 
+$ ! Test for signed/unsigned datasets 
+$ CALL TOOLTEST packedbits.ddl "packedbits.h5"
 $ ! Test for displaying groups
 $ CALL TOOLTEST tgroup-1.ddl "tgroup.h5"
 $ ! Test for displaying the selected groups
-$ CALL TOOLTEST tgroup-2.ddl "--group=/g2 --group / -g /y tgroup.h5"
+$ ! Commented out due to the difference of printing format.
+$ ! CALL TOOLTEST tgroup-2.ddl "--group=/g2 --group / -g /y tgroup.h5"
 $ ! Test for displaying simple space datasets
 $ CALL TOOLTEST tdset-1.ddl "tdset.h5"
 $ ! Test for displaying selected datasets
-$ CALL TOOLTEST tdset-2.ddl "-"""H""" -d dset1 -d /dset2 --dataset=dset3 tdset.h5"
+$ ! Commented out due to the difference of printing format.
+$ ! CALL TOOLTEST tdset-2.ddl "-"""H""" -d dset1 -d /dset2 --dataset=dset3 tdset.h5"
 $ ! Test for displaying attributes
 $ CALL TOOLTEST tattr-1.ddl "tattr.h5"
 $ ! Test for displaying the selected attributes of string type and scalar space
 $ CALL TOOLTEST tattr-2.ddl "-a /attr1 --attribute /attr4 --attribute=/attr5 tattr.h5"
 $ ! Test for header and error messages
-$ CALL TOOLTEST tattr-3.ddl "--header -a /attr2 --attribute=/attr tattr.h5"
+$ ! Commented out due to the difference of printing format.
+$ ! CALL TOOLTEST tattr-3.ddl "--header -a /attr2 --attribute=/attr tattr.h5"
 $ ! Test for displaying attributes in shared datatype (also in group and dataset)
 $ CALL TOOLTEST tnamed_dtype_attr.ddl "tnamed_dtype_attr.h5"
 $
 $ ! Test for displaying soft links
 $ CALL TOOLTEST tslink-1.ddl "tslink.h5"
+$ CALL TOOLTEST tudlink-1.ddl "tudlink.h5"
 $ ! Test for displaying the selected link
 $ CALL TOOLTEST tslink-2.ddl "-l slink2 tslink.h5"
+$ CALL TOOLTEST tudlink-2.ddl "-l udlink2 tudlink.h5"
 $
 $ ! Tests for hard links
 $ CALL TOOLTEST thlink-1.ddl "thlink.h5"
@@ -106,12 +112,15 @@ $ CALL TOOLTEST tvlstr.ddl "tvlstr.h5"
 $
 $ ! Test for files with array data
 $ CALL TOOLTEST tarray1.ddl "tarray1.h5"
+$ ! Added for bug# 2092 - tarray1_big.h
+$ CALL TOOLTEST tarray1_big.ddl "-"""R""" tarray1_big.h5"
 $ CALL TOOLTEST tarray2.ddl "tarray2.h5"
 $ CALL TOOLTEST tarray3.ddl "tarray3.h5"
 $ CALL TOOLTEST tarray4.ddl "tarray4.h5"
 $ CALL TOOLTEST tarray5.ddl "tarray5.h5"
 $ CALL TOOLTEST tarray6.ddl "tarray6.h5"
 $ CALL TOOLTEST tarray7.ddl "tarray7.h5"
+$ CALL TOOLTEST tarray8.ddl "tarray8.h5"
 $
 $ ! Test for files with empty data
 $ CALL TOOLTEST tempty.ddl "tempty.h5"
@@ -144,7 +153,7 @@ $ CALL TOOLTEST tchar1.ddl "-r tchar.h5"
 $
 $ ! Test failure handling
 $ ! Missing file name
-$ CALL TOOLTEST "tnofilename-with-packed-bits.ddl"
+$ CALL TOOLTEST "tnofilename.ddl"
 $
 $ ! rev. 2004
 $
@@ -183,14 +192,39 @@ $
 $ ! Array indices print/not print
 $ CALL TOOLTEST tindicesyes.ddl "taindices.h5"
 $ CALL TOOLTEST tindicesno.ddl "-y taindices.h5"
+$
+$ ! Array indices with subsetting
+$ ! 1D case
+$ CALL TOOLTEST tindicessub1.ddl "-d 1d -s 1 -"""S""" 10 -c 2 -k 3 taindices.h5"
+$ ! 2D case
+$ CALL TOOLTEST tindicessub2.ddl "-d 2d -s 1,2 -"""S""" 3,3 -c 3,2 -k 2,2 taindices.h5"
+$ ! 3D case
+$ CALL TOOLTEST tindicessub3.ddl "-d 3d -s 0,1,2 -"""S""" 1,3,3 -c 2,2,2 -k 1,2,2 taindices.h5"
+$ ! 4D case
+$ CALL TOOLTEST tindicessub4.ddl "-d 4d -s 0,0,1,2 -c 2,2,3,2 -"""S""" 1,1,3,3 -k 1,1,2,2 taindices.h5"
+$
+$ ! Exceed the dimensions for subsetting
+$ CALL TOOLTEST texceedsubstart.ddl "-d 1d -s 1,3 taindices.h5"
+$ CALL TOOLTEST texceedsubcount.ddl "-d 1d -c 1,3 taindices.h5"
+$ CALL TOOLTEST texceedsubstride.ddl "-d 1d -"""S""" 1,3 taindices.h5"
+$ CALL TOOLTEST texceedsubblock.ddl "-d 1d -k 1,3 taindices.h5"
+
 $ ! User defined
 $ CALL TOOLTEST tuserfilter.ddl "-"""H"""  -p -d myfilter  tfilters.h5"
-$    
+$ ! Test for displaying objects with very long names. The error message says:
+$ ! %DIFF-F-READERR, error reading DISK$USER:[HDFGROUP.1_8_VMS_9_30.TOOLS.TESTFILES]TLONGLINKS.DDL;1
+$ ! -RMS-W-RTB, 66573 byte record too large for user's buffer
+$ ! %RMS-E-EOF, end of file detected 
+$! CALL TOOLTEST tlonglinks.ddl "tlonglinks.h5"
+$ ! Dimensions over 4GB, print boundary
+$ CALL TOOLTEST tbigdims.ddl "-d dset4gb -s 4294967284 -c 22 tbigdims.h5"
+$ ! Hyperslab read
+$ CALL TOOLTEST thyperslab.ddl "thyperslab.h5"
 $ ! Test for displaying dataset and attribute of null space
 $ CALL TOOLTEST tnullspace.ddl "tnullspace.h5"
 $
-$ ! Test for displaying objects with very long names
-$ !CALL TOOLTEST tlonglinks.ddl "tlonglinks.h5"
+$ ! Test for displaying dataset and attribute of space with 0 dimension size
+$ CALL TOOLTEST zerodim.ddl "zerodim.h5"
 $
 $ ! Test for long double (some systems do not have long double)
 $ ! CALL TOOLTEST tldouble.ddl "tldouble.h5"
@@ -205,6 +239,9 @@ $ CALL TOOLTEST1 tbin4.ddl "-d double   -o out4.bin -b """FILE""" tbinary.h5"
 $
 $ ! Test for dataset region references
 $ CALL TOOLTEST tdatareg.ddl "tdatareg.h5"
+$ CALL TOOLTEST tdataregR.ddl "-"""R""" tdatareg.h5"
+$ CALL TOOLTEST tattrreg.ddl "tattrreg.h5"
+$ CALL TOOLTEST tattrregR.ddl "-"""R""" tattrreg.h5"
 $
 $ ! tests for group creation order "1" tracked, "2" name, root tracked
 $ CALL TOOLTEST tordergr1.ddl "--group=1 --sort_by=creation_order --sort_order=ascending tordergr.h5"
@@ -219,6 +256,18 @@ $ CALL TOOLTEST torderattr2.ddl "-"""H""" --sort_by=name --sort_order=descending
 $ CALL TOOLTEST torderattr3.ddl "-"""H""" --sort_by=creation_order --sort_order=ascending torderattr.h5"
 $ CALL TOOLTEST torderattr4.ddl "-"""H""" --sort_by=creation_order --sort_order=descending torderattr.h5"
 $
+$ ! Test for floating point user defined printf format
+$ CALL TOOLTEST tfpformat.ddl "-m %.7f tfpformat.h5"
+$ ! Test for traversal of external links
+$ CALL TOOLTEST textlinksrc.ddl "textlinksrc.h5"
+$ CALL TOOLTEST textlinkfar.ddl "textlinkfar.h5"
+$ ! Test for danglng external links 
+$ CALL TOOLTEST textlink.ddl "textlink.h5"
+$ ! Test for error stack display (BZ2048)
+$ CALL TOOLTEST filter_fail.ddl "--enable-error-stack filter_fail.h5"
+$ ! Test for -o -y for dataset with attributes
+$ CALL TOOLTEST tall-6.ddl "-y -o data -d /g1/g1.1/dset1.1.1 tall.h5"
+$
 $ ! Test for dataset packed bits
 $ ! Limits:
 $ ! Maximum number of packed bits is 8 (for now).
@@ -227,8 +276,45 @@ $ ! Maximun Offset is 7 (Maximum size - 1).
 $ ! Maximum Offset+Length is 8 (Maximum size).
 $ ! Test Normal operation on both signed and unsigned int datasets.
 $ ! Their rawdata output should be the same.
+$ CALL TOOLTEST tpbitsSignedWhole.ddl "-d /"""DS08BITS""" -"""M""" 0,8 packedbits.h5"
+$ CALL TOOLTEST tpbitsUnsignedWhole.ddl "-d /"""DU08BITS""" -"""M""" 0,8 packedbits.h5"
+$ CALL TOOLTEST tpbitsSignedIntWhole.ddl "-d /"""DS16BITS""" -"""M""" 0,16 packedbits.h5"
+$ CALL TOOLTEST tpbitsUnsignedIntWhole.ddl "-d /"""DU16BITS""" -"""M""" 0,16 packedbits.h5"
+$ CALL TOOLTEST tpbitsSignedLongWhole.ddl "-d /"""DS32BITS""" -"""M""" 0,32 packedbits.h5"
+$ CALL TOOLTEST tpbitsUnsignedLongWhole.ddl "-d /"""DU32BITS""" -"""M""" 0,32 packedbits.h5"
+$ CALL TOOLTEST tpbitsSignedLongLongWhole.ddl "-d /"""DS64BITS""" -"""M""" 0,64 packedbits.h5"
+$ CALL TOOLTEST tpbitsUnsignedLongLongWhole.ddl "-d /"""DU64BITS""" -"""M""" 0,64 packedbits.h5"
+$ CALL TOOLTEST tpbitsSignedLongLongWhole63.ddl "-d /"""DS64BITS""" -"""M""" 0,63 packedbits.h5"
+$ CALL TOOLTEST tpbitsUnsignedLongLongWhole63.ddl "-d /"""DU64BITS""" -"""M""" 0,63 packedbits.h5"
+$ CALL TOOLTEST tpbitsSignedLongLongWhole1.ddl "-d /"""DS64BITS""" -"""M""" 1,63 packedbits.h5"
+$ CALL TOOLTEST tpbitsUnsignedLongLongWhole1.ddl "-d /"""DU64BITS""" -"""M""" 1,63 packedbits.h5"
+$ ! Half sections
+$ CALL TOOLTEST tpbitsSigned4.ddl "-d /"""DS08BITS""" -"""M""" 0,4,4,4 packedbits.h5"
+$ CALL TOOLTEST tpbitsUnsigned4.ddl "-d /"""DU08BITS""" -"""M""" 0,4,4,4 packedbits.h5"
+$ CALL TOOLTEST tpbitsSignedInt8.ddl "-d /"""DS16BITS""" -"""M""" 0,8,8,8 packedbits.h5" 
+$ CALL TOOLTEST tpbitsUnsignedInt8.ddl "-d /"""DU16BITS""" -"""M""" 0,8,8,8 packedbits.h5"
+$ CALL TOOLTEST tpbitsSignedLong16.ddl "-d /"""DS32BITS""" -"""M""" 0,16,16,16 packedbits.h5"
+$ CALL TOOLTEST tpbitsUnsignedLong16.ddl "-d /"""DU32BITS""" -"""M""" 0,16,16,16 packedbits.h5"
+$ CALL TOOLTEST tpbitsSignedLongLong32.ddl "-d /"""DS64BITS""" -"""M""" 0,32,32,32 packedbits.h5"
+$ CALL TOOLTEST tpbitsUnsignedLongLong32.ddl "-d /"""DU64BITS""" -"""M""" 0,32,32,32 packedbits.h5"
+$ ! Quarter sections 
+$ CALL TOOLTEST tpbitsSigned2.ddl "-d /"""DS08BITS""" -"""M""" 0,2,2,2,4,2,6,2 packedbits.h5"
+$ CALL TOOLTEST tpbitsUnsigned2.ddl "-d /"""DU08BITS""" -"""M""" 0,2,2,2,4,2,6,2 packedbits.h5"
+$ CALL TOOLTEST tpbitsSignedInt4.ddl "-d /"""DS16BITS""" -"""M""" 0,4,4,4,8,4,12,4 packedbits.h5"
+$ CALL TOOLTEST tpbitsUnsignedInt4.ddl "-d /"""DU16BITS""" -"""M""" 0,4,4,4,8,4,12,4 packedbits.h5"
+$ CALL TOOLTEST tpbitsSignedLong8.ddl "-d /"""DS32BITS""" -"""M""" 0,8,8,8,16,8,24,8 packedbits.h5"
+$ CALL TOOLTEST tpbitsUnsignedLong8.ddl "-d /"""DU32BITS""" -"""M""" 0,8,8,8,16,8,24,8 packedbits.h5"
+$ CALL TOOLTEST tpbitsSignedLongLong16.ddl "-d /"""DS64BITS""" -"""M""" 0,16,16,16,32,16,48,16 packedbits.h5"
+$ CALL TOOLTEST tpbitsUnsignedLongLong16.ddl "-d /"""DU64BITS""" -"""M""" 0,16,16,16,32,16,48,16 packedbits.h5"
+$ ! Begin and end
 $ CALL TOOLTEST tpbitsSigned.ddl "-d /"""DS08BITS""" -"""M""" 0,2,2,6 packedbits.h5"
 $ CALL TOOLTEST tpbitsUnsigned.ddl "-d /"""DU08BITS""" -"""M""" 0,2,2,6 packedbits.h5"
+$ CALL TOOLTEST tpbitsSignedInt.ddl "-d /"""DS16BITS""" -"""M""" 0,2,10,6 packedbits.h5"
+$ CALL TOOLTEST tpbitsUnsignedInt.ddl "-d /"""DU16BITS""" -"""M""" 0,2,10,6 packedbits.h5"
+$ CALL TOOLTEST tpbitsSignedLong.ddl "-d /"""DS32BITS""" -"""M""" 0,2,26,6 packedbits.h5"
+$ CALL TOOLTEST tpbitsUnsignedLong.ddl "-d /"""DU32BITS""" -"""M""" 0,2,26,6 packedbits.h5"
+$ CALL TOOLTEST tpbitsSignedLongLong.ddl "-d /"""DS64BITS""" -"""M""" 0,2,58,6 packedbits.h5"
+$ CALL TOOLTEST tpbitsUnsignedLongLong.ddl "-d /"""DU64BITS""" -"""M""" 0,2,58,6 packedbits.h5"
 $ ! Overlapped packed bits.
 $ CALL TOOLTEST tpbitsOverlapped.ddl "-d /"""DS08BITS""" -"""M""" 0,1,1,1,2,1,0,3 packedbits.h5"
 $ ! Maximum number of packed bits.
@@ -241,13 +327,19 @@ $ ! Test Error handling.
 $ ! Too many packed bits requested. Max is 8 for now.
 $ CALL TOOLTEST tpbitsMaxExceeded.ddl "-d /"""DS08BITS""" -"""M""" 0,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5"
 $ ! Offset too large. Max is 7 (8-1) for now.
-$ CALL TOOLTEST tpbitsOffsetExceeded.ddl "-d /"""DS08BITS""" -"""M""" 8,1 packedbits.h5"
+$ CALL TOOLTEST tpbitsOffsetExceeded.ddl "-d /"""DS08BITS""" -"""M""" 64,1 packedbits.h5"
+$ CALL TOOLTEST tpbitsCharOffsetExceeded.ddl "-d /"""DS08BITS""" -"""M""" 8,1 packedbits.h5"
+$ CALL TOOLTEST tpbitsIntOffsetExceeded.ddl "-d /"""DS16BITS""" -"""M""" 16,1 packedbits.h5"
+$ CALL TOOLTEST tpbitsLongOffsetExceeded.ddl "-d /"""DS32BITS""" -"""M""" 32,1 packedbits.h5"
 $ ! Bad offset, must not be negative.
 $ CALL TOOLTEST tpbitsOffsetNegative.ddl "-d /"""DS08BITS""" -"""M""" -1,1 packedbits.h5"
 $ ! Bad length, must not be positive.
 $ CALL TOOLTEST tpbitsLengthPositive.ddl "-d /"""DS08BITS""" -"""M""" 4,0 packedbits.h5"
 $ ! Offset+Length is too large. Max is 8 for now.
-$ CALL TOOLTEST tpbitsLengthExceeded.ddl "-d /"""DS08BITS""" -"""M""" 2,7 packedbits.h5"
+$ CALL TOOLTEST tpbitsLengthExceeded.ddl "-d /"""DS08BITS""" -"""M""" 37,28 packedbits.h5"
+$ CALL TOOLTEST tpbitsCharLengthExceeded.ddl "-d /"""DS08BITS""" -"""M""" 2,7 packedbits.h5"
+$ CALL TOOLTEST tpbitsIntLengthExceeded.ddl "-d /"""DS16BITS""" -"""M""" 10,7 packedbits.h5"
+$ CALL TOOLTEST tpbitsLongLengthExceeded.ddl "-d /"""DS32BITS""" -"""M""" 26,7 packedbits.h5"
 $ ! Incomplete pair of packed bits request.
 $ CALL TOOLTEST tpbitsIncomplete.ddl "-d /"""DS08BITS""" -"""M""" 0,2,2,1,0,2,2, packedbits.h5"
 $
@@ -266,9 +358,9 @@ $ !
 $ 
 $ define/nolog sys$output 'actual'
 $ define/nolog sys$error  'actual_err'
-$ write  sys$output "#############################"
-$ write  sys$output "Expected output for 'h5dump ''P2''"
-$ write  sys$output "#############################"
+$! write  sys$output "#############################"
+$! write  sys$output "Expected output for 'h5dump ''P2''"
+$! write  sys$output "#############################"
 $ ON ERROR THEN CONTINUE
 $ h5dump 'P2
 $ deassign sys$output
diff --git a/vms/tools/h5import/check_h5import.com b/vms/tools/h5import/check_h5import.com
index 0348391..88bd76a 100644
--- a/vms/tools/h5import/check_h5import.com
+++ b/vms/tools/h5import/check_h5import.com
@@ -46,65 +46,65 @@ $ ! Run h5importtest to create input files
 $ !
 $ run [.-]h5importtest
 $ !
-$ type sys$input 
+$ type sys$input
                  Testing ASCII I32 rank 3 - Output BE 
-$ CALL TOOLTEST "in32.txt -c textin32.conf -o" test1.h5
+$ CALL TOOLTEST "txtin16.txt -c txtin32.conf -o" txtin32.h5
 $ !
 $ type sys$input 
                 Testing ASCII I16 rank 3 - Output LE - CHUNKED - extended
-$ CALL TOOLTEST  "in16.txt -c textin16.conf -o" test2.h5
+$ CALL TOOLTEST  "txtin16.txt -c txtin16.conf -o" txtin16.h5
 $ !
 $ type sys$input 
                 Testing ASCII I8 - rank 3 - Output I16 LE-Chunked+Extended+Compressed 
-$ CALL TOOLTEST  "in16.txt -c textin8.conf  -o" test3.h5
+$ CALL TOOLTEST  "txtin16.txt -c txtin8.conf  -o" txtin8.h5
 $ !
 $ type sys$input 
                Testing ASCII UI32 - rank 3 - Output BE 
-$ CALL TOOLTEST  "in1.txt -c textuin32.conf -o" test4.h5
+$ CALL TOOLTEST  "txtuin32.txt -c txtuin32.conf -o" txtuin32.h5
 $ !
 $ type sys$input 
                Testing ASCII UI16 - rank 2 - Output LE+Chunked+Compressed 
-$ CALL TOOLTEST  "in1.txt -c textuin16.conf -o" test5.h5
+$ CALL TOOLTEST  "txtuin32.txt -c txtuin16.conf -o" txtuin16.h5
 $ !
 $ type sys$input 
                Testing ASCII F32 - rank 3 - Output LE 
-$ CALL TOOLTEST  "fp1.txt -c textfp32.conf -o" test6.h5
+$ CALL TOOLTEST  "txtfp32.txt -c txtfp32.conf -o" txtfp32.h5
 $ !
 $ type sys$input 
                Testing ASCII F64 - rank 3 - Output BE + CHUNKED+Extended+Compressed 
-$ CALL TOOLTEST  "fp2.txt -c textfp64.conf -o" test7.h5
-$ !
-$ type sys$input 
-               Testing ASCII F64 - rank 1 - INPUT-CLASS TEXTFPE
-$ CALL TOOLTEST  "in64.txt -c textpfe.conf -o" test15.h5
+$ CALL TOOLTEST  "txtfp64.txt -c txtfp64.conf -o" txtfp64.h5
 $ !
 $ type sys$input 
                Testing BINARY F64 - rank 3 - Output LE+CHUNKED+Extended+Compressed 
-$ CALL TOOLTEST  "binfp64.bin -c binfp64.conf -o" test8.h5
+$ CALL TOOLTEST  "binfp64.bin -c binfp64.conf -o" binfp64.h5
 $ !
 $ type sys$input 
                Testing BINARY I16 - rank 3 - Output order LE + CHUNKED + extended 
-$ CALL TOOLTEST  "binin16.bin -c binin16.conf -o" test9.h5
+$ CALL TOOLTEST  "binin16.bin -c binin16.conf -o" binin16.h5
 $ !
 $ type sys$input 
                Testing BINARY I8 - rank 3 - Output I16LE + Chunked+Extended+Compressed 
-$ CALL TOOLTEST  "binin8.bin -c binin8.conf -o" test10.h5
+$ CALL TOOLTEST  "binin8.bin -c binin8.conf -o" binin8.h5
 $ !
 $ type sys$input 
                Testing BINARY I32 - rank 3 - Output BE + CHUNKED 
-$ CALL TOOLTEST  "binin32.bin -c binin32.conf -o" test11.h5
+$ CALL TOOLTEST  "binin32.bin -c binin32.conf -o" binin32.h5
 $ !
 $ type sys$input 
                Testing BINARY UI16 - rank 3 - Output byte BE + CHUNKED 
-$ CALL TOOLTEST  "binuin16.bin -c binuin16.conf -o" test12.h5
+$ CALL TOOLTEST  "binuin16.bin -c binuin16.conf -o" binuin16.h5
 $ !
 $ type sys$input 
                Testing BINARY UI32 - rank 3 - Output LE + CHUNKED 
-$ CALL TOOLTEST  "binuin32.bin -c binuin32.conf -o" test13.h5
+$ CALL TOOLTEST  "binuin32.bin -c binuin32.conf -o" binuin32.h5
 $ !
 $ type sys$input 
                Testing STR
-$ CALL TOOLTEST "str.txt -c textstr.conf -o" test14.h5
+$ CALL TOOLTEST "txtstr.txt -c txtstr.conf -o" txtstr.h5
+$ !
+$ type sys$input 
+               Testing ASCII F64 - rank 1 - INPUT-CLASS TEXTFPE
+$ CALL TOOLTEST  "textpfe64.txt -c textpfe.conf -o" textpfe.h5
 
 $
 $ ! Delete temporary files
diff --git a/vms/tools/h5ls/check_h5ls.com b/vms/tools/h5ls/check_h5ls.com
index e155afa..86fde2e 100644
--- a/vms/tools/h5ls/check_h5ls.com
+++ b/vms/tools/h5ls/check_h5ls.com
@@ -50,9 +50,14 @@ $! test simple command
 $ CALL TOOLTEST tall-1.ls "-w80 tall.h5"
 $ CALL TOOLTEST tall-2.ls "-w80 -r -d tall.h5"
 $ CALL TOOLTEST tgroup.ls "-w80 tgroup.h5"
+$ CALL TOOLTEST tgroup-3.ls "-w80 tgroup.h5/g1"
 
 $! test for displaying groups
 $ CALL TOOLTEST tgroup-1.ls "-w80 -r -g tgroup.h5"
+$ CALL TOOLTEST tgroup-2.ls "-w80 -g tgroup.h5/g1"
+
+$! test for files with groups that have long comments
+$ CALL TOOLTEST tgrp_comments.ls "-w80 -v -g tgrp_comments.h5/glongcomment"
 
 $! test for displaying simple space datasets
 $ CALL TOOLTEST tdset-1.ls "-w80 -r -d tdset.h5"
@@ -60,6 +65,43 @@ $ CALL TOOLTEST tdset-1.ls "-w80 -r -d tdset.h5"
 $! test for displaying soft links
 $ CALL TOOLTEST tslink-1.ls "-w80 -r tslink.h5"
 
+$! test for displaying more soft links with --follow-symlinks
+$ CALL TOOLTEST tsoftlinks-1.ls "--follow-symlinks tsoftlinks.h5"
+$ CALL TOOLTEST tsoftlinks-2.ls "--follow-symlinks -r tsoftlinks.h5"
+$ CALL TOOLTEST tsoftlinks-3.ls "--follow-symlinks tsoftlinks.h5/group1"
+$ CALL TOOLTEST tsoftlinks-4.ls "--follow-symlinks -r tsoftlinks.h5/group1"
+$ CALL TOOLTEST tsoftlinks-5.ls "--follow-symlinks tsoftlinks.h5/soft_dset1"
+        
+$! test for displaying external and user-defined links with --follow-symlinks
+$ CALL TOOLTEST textlink-1.ls "-w80 -r textlink.h5"
+$ CALL TOOLTEST textlinksrc-1.ls "-w80 --follow-symlinks -r textlinksrc.h5"
+$ CALL TOOLTEST textlinksrc-2.ls "-w80 --follow-symlinks -rv textlinksrc.h5/ext_link5"
+$ CALL TOOLTEST textlinksrc-3.ls "-w80 --follow-symlinks -r textlinksrc.h5/ext_link1"
+$ CALL TOOLTEST textlinksrc-4.ls "-w80 -r textlinksrc.h5"
+$ CALL TOOLTEST textlinksrc-5.ls "-w80 -r textlinksrc.h5/ext_link1"
+$ CALL TOOLTEST textlinksrc-6.ls "-w80 --follow-symlinks textlinksrc.h5"
+$ CALL TOOLTEST textlinksrc-7.ls "-w80 --follow-symlinks textlinksrc.h5/ext_link1"
+$ CALL TOOLTEST tudlink-1.ls "-w80 -r tudlink.h5"
+        
+$! test for displaying external links with -E
+$! the option -E will be depriciated but keep it for backward compatibility
+$ CALL TOOLTEST textlinksrc-1-old.ls "-w80 -"""E"""r textlinksrc.h5"
+$ CALL TOOLTEST textlinksrc-2-old.ls "-w80 -"""E"""rv textlinksrc.h5/ext_link5"
+$ CALL TOOLTEST textlinksrc-3-old.ls "-w80 -"""E"""r textlinksrc.h5/ext_link1"
+$ CALL TOOLTEST textlinksrc-6-old.ls "-w80 -"""E""" textlinksrc.h5"
+$ CALL TOOLTEST textlinksrc-7-old.ls "-w80 -"""E""" textlinksrc.h5/ext_link1"
+
+$! tests for no-dangling-links 
+$! if this option is given on dangling link, h5ls should return exit code 1
+$! when used alone , expect to print out help and return exit code 1
+$ CALL TOOLTEST textlinksrc-nodangle-1.ls "-w80 --no-dangling-links textlinksrc.h5"
+$! external dangling link - expected exit code 1
+$ CALL TOOLTEST textlinksrc-nodangle-2.ls "-w80 --follow-symlinks --no-dangling-links textlinksrc.h5"
+$! soft dangling link - expected exit code 1
+$ CALL TOOLTEST tsoftlinks-nodangle-1.ls "-w80 --follow-symlinks --no-dangling-links tsoftlinks.h5"
+$! when used file with no dangling links - expected exit code 0
+$ CALL TOOLTEST thlinks-nodangle-1.ls "-w80 --follow-symlinks --no-dangling-links thlink.h5"
+
 $! tests for hard links
 $ CALL TOOLTEST thlink-1.ls "-w80 thlink.h5"
 
@@ -68,6 +110,9 @@ $ CALL TOOLTEST tcomp-1.ls "-w80 -r -d tcompound.h5"
 
 $!test for the nested compound type
 $ CALL TOOLTEST tnestcomp-1.ls "-w80 -r -d tnestedcomp.h5"
+$ CALL TOOLTEST tnestcomp-2.ls "-w80 -r -d -"""S""" tnestedcomp.h5"
+$ CALL TOOLTEST tnestcomp-3.ls "-w80 -r -d -l tnestedcomp.h5"
+$ CALL TOOLTEST tnestcomp-4.ls "-w80 -r -d -l -"""S""" tnestedcomp.h5"
 
 $! test for loop detection
 $ CALL TOOLTEST tloop-1.ls "-w80 -r -d tloop.h5"
@@ -98,7 +143,16 @@ $! UNIX shell script does replacement on the fly in the actual output
 $! file; I do not know what can I do on VMS EIP 07/27/06
 $ CALL TOOLTEST tattr2.ls "-w80 -v -"""S""" tattr2.h5"
 
-$
+$! tests for error handling.
+$! test for non-existing file
+$ CALL TOOLTEST nosuchfile.ls "nosuchfile.h5"
+
+$! test for variable length data types in verbose mode
+$ CALL TOOLTEST tvldtypes2le.ls "-v tvldtypes1.h5"
+
+$! test for dataset region references data types in verbose mode
+$ CALL TOOLTEST tdataregle.ls "-v tdatareg.h5"
+
 $ 
 $TOOLTEST: SUBROUTINE
 $
@@ -113,9 +167,9 @@ $ ! Run the test and save output in the 'actual' file
 $ !
 $ define/nolog sys$output 'actual'
 $ define/nolog sys$error  'actual_err'
-$ write  sys$output "#############################"
-$ write  sys$output " output for 'h5ls ''P2''"
-$ write  sys$output "#############################"
+$ ! write  sys$output "#############################"
+$ ! write  sys$output " output for 'h5ls ''P2''"
+$ ! write  sys$output "#############################"
 $ ON ERROR THEN CONTINUE
 $ h5ls 'P2
 $ deassign sys$output
diff --git a/windows/fortran/test/libtest_cstubdll/libtest_cstubdll.vcproj b/windows/fortran/test/libtest_cstubdll/libtest_cstubdll.vcproj
index 327cd41..2fdf67e 100644
--- a/windows/fortran/test/libtest_cstubdll/libtest_cstubdll.vcproj
+++ b/windows/fortran/test/libtest_cstubdll/libtest_cstubdll.vcproj
@@ -4,6 +4,7 @@
 	Version="9.00"
 	Name="libtest_cstubdll"
 	ProjectGUID="{1BFA0FE4-B924-4325-9EA1-3CB26BBAE31C}"
+	RootNamespace="libtest_cstubdll"
 	TargetFrameworkVersion="131072"
 	>
 	<Platforms>
@@ -80,7 +81,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="$(OutDir)\libtest_cstubdll.dll"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../fortran/test/libtest_cstubdll/Release/libtest_cstubdll.pdb"
 				RandomizedBaseAddress="1"
@@ -173,7 +174,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="$(OutDir)\libtest_cstubdll.dll"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../fortran/test/libtest_cstubdll/Release/libtest_cstubdll.pdb"
 				RandomizedBaseAddress="1"
@@ -265,7 +266,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="$(OutDir)\libtest_cstubddll.dll"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				GenerateDebugInformation="true"
 				ProgramDatabaseFile=".\../../../../fortran/test/libtest_cstubdll/Debug/libtest_cstubddll.pdb"
@@ -358,7 +359,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="$(OutDir)\libtest_cstubddll.dll"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				GenerateDebugInformation="true"
 				ProgramDatabaseFile=".\../../../../fortran/test/libtest_cstubdll/Debug/libtest_cstubddll.pdb"
diff --git a/windows/fortran/test/libtest_fortran/libtest_cstub.vcproj b/windows/fortran/test/libtest_fortran/libtest_cstub.vcproj
index 5937d86..7517148 100644
--- a/windows/fortran/test/libtest_fortran/libtest_cstub.vcproj
+++ b/windows/fortran/test/libtest_fortran/libtest_cstub.vcproj
@@ -324,48 +324,6 @@
 		<File
 			RelativePath="..\..\..\..\fortran\test\t.c"
 			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					BasicRuntimeChecks="3"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|x64"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					BasicRuntimeChecks="3"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="2"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|x64"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="2"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-				/>
-			</FileConfiguration>
 		</File>
 		<File
 			RelativePath="..\..\..\..\fortran\test\t.h"
diff --git a/windows/proj/hdf5/hdf5.vcproj b/windows/proj/hdf5/hdf5.vcproj
index 3a9da4d..5c67f42 100644
--- a/windows/proj/hdf5/hdf5.vcproj
+++ b/windows/proj/hdf5/hdf5.vcproj
@@ -1,782 +1,790 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9.00"
-	Name="hdf5"
-	ProjectGUID="{26346A09-C500-49E7-963A-D22A8E09AAB7}"
-	RootNamespace="hdf5"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-		<Platform
-			Name="x64"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)"
-			IntermediateDirectory="$(OutDir)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops;..\property_sheets\remove-posix-warnings.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;WIN32;_DEBUG;_WINDOWS"
-				RuntimeLibrary="1"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\..\..\..\proj\hdf5\Debug/hdf5.pch"
-				AssemblerListingLocation=".\..\..\..\proj\hdf5\Debug/"
-				ObjectFile=".\..\..\..\proj\hdf5\Debug/"
-				ProgramDataBaseFileName=".\..\..\..\proj\hdf5\Debug/"
-				BrowseInformation="1"
-				WarningLevel="3"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="$(OutDir)\$(ProjectName)d.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|x64"
-			OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)"
-			IntermediateDirectory="$(OutDir)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops;..\property_sheets\remove-posix-warnings.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				TargetEnvironment="3"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;WIN32;_DEBUG;_WINDOWS"
-				RuntimeLibrary="1"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\..\..\..\proj\hdf5\Debug/hdf5.pch"
-				AssemblerListingLocation=".\..\..\..\proj\hdf5\Debug/"
-				ObjectFile=".\..\..\..\proj\hdf5\Debug/"
-				ProgramDataBaseFileName=".\..\..\..\proj\hdf5\Debug/"
-				BrowseInformation="1"
-				WarningLevel="3"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="$(OutDir)\$(ProjectName)d.lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)"
-			IntermediateDirectory="$(OutDir)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops;..\property_sheets\remove-posix-warnings.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="1"
-				PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;WIN32;NDEBUG;_WINDOWS"
-				StringPooling="true"
-				RuntimeLibrary="0"
-				EnableFunctionLevelLinking="true"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\..\..\..\proj\hdf5\Release/hdf5.pch"
-				AssemblerListingLocation=".\..\..\..\proj\hdf5\Release/"
-				ObjectFile=".\..\..\..\proj\hdf5\Release/"
-				ProgramDataBaseFileName=".\..\..\..\proj\hdf5\Release/"
-				WarningLevel="3"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="$(OutDir)\$(ProjectName).lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|x64"
-			OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)"
-			IntermediateDirectory="$(OutDir)"
-			ConfigurationType="4"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops;..\property_sheets\remove-posix-warnings.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				TargetEnvironment="3"
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="1"
-				PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;WIN32;NDEBUG;_WINDOWS"
-				StringPooling="true"
-				RuntimeLibrary="0"
-				EnableFunctionLevelLinking="true"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\..\..\..\proj\hdf5\Release/hdf5.pch"
-				AssemblerListingLocation=".\..\..\..\proj\hdf5\Release/"
-				ObjectFile=".\..\..\..\proj\hdf5\Release/"
-				ProgramDataBaseFileName=".\..\..\..\proj\hdf5\Release/"
-				WarningLevel="3"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLibrarianTool"
-				OutputFile="$(OutDir)\$(ProjectName).lib"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<Filter
-			Name="source"
-			>
-			<File
-				RelativePath="..\..\..\src\H5.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5A.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Abtree2.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5AC.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Adense.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Adeprec.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Aint.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Atest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5B.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5B2.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5B2cache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5B2dbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5B2hdr.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5B2int.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5B2stat.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5B2test.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Bcache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Bdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5C.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5checksum.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5D.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5dbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dbtree.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dchunk.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dcompact.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dcontig.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ddbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ddeprec.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Defl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dfill.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dint.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dio.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dlayout.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dmpio.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Doh.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dscatgath.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dselect.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dtest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5E.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Edeprec.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Eint.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5F.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Faccum.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FD.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDcore.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDfamily.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDint.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDlog.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDmpi.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDmpio.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDmpiposix.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDmulti.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDsec2.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDspace.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDstdio.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDwindows.c"
-				>
-			</File>
+  ProjectType="Visual C++"
+  Version="9.00"
+  Name="hdf5"
+  ProjectGUID="{26346A09-C500-49E7-963A-D22A8E09AAB7}"
+  RootNamespace="hdf5"
+  TargetFrameworkVersion="131072"
+  >
+  <Platforms>
+    <Platform
+      Name="Win32"
+    />
+    <Platform
+      Name="x64"
+    />
+  </Platforms>
+  <ToolFiles>
+  </ToolFiles>
+  <Configurations>
+    <Configuration
+      Name="Debug|Win32"
+      OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)"
+      IntermediateDirectory="$(OutDir)"
+      ConfigurationType="4"
+      InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops;..\property_sheets\remove-posix-warnings.vsprops"
+      UseOfMFC="0"
+      ATLMinimizesCRunTimeLibraryUsage="false"
+      >
+      <Tool
+        Name="VCPreBuildEventTool"
+      />
+      <Tool
+        Name="VCCustomBuildTool"
+      />
+      <Tool
+        Name="VCXMLDataGeneratorTool"
+      />
+      <Tool
+        Name="VCWebServiceProxyGeneratorTool"
+      />
+      <Tool
+        Name="VCMIDLTool"
+      />
+      <Tool
+        Name="VCCLCompilerTool"
+        Optimization="0"
+        PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;WIN32;_DEBUG;_WINDOWS"
+        RuntimeLibrary="1"
+        UsePrecompiledHeader="0"
+        PrecompiledHeaderFile=".\..\..\..\proj\hdf5\Debug/hdf5.pch"
+        AssemblerListingLocation=".\..\..\..\proj\hdf5\Debug/"
+        ObjectFile=".\..\..\..\proj\hdf5\Debug/"
+        ProgramDataBaseFileName=".\..\..\..\proj\hdf5\Debug/"
+        BrowseInformation="1"
+        WarningLevel="3"
+        SuppressStartupBanner="true"
+        DebugInformationFormat="3"
+      />
+      <Tool
+        Name="VCManagedResourceCompilerTool"
+      />
+      <Tool
+        Name="VCResourceCompilerTool"
+        Culture="1033"
+      />
+      <Tool
+        Name="VCPreLinkEventTool"
+      />
+      <Tool
+        Name="VCLibrarianTool"
+        OutputFile="$(OutDir)\$(ProjectName)d.lib"
+        SuppressStartupBanner="true"
+      />
+      <Tool
+        Name="VCALinkTool"
+      />
+      <Tool
+        Name="VCXDCMakeTool"
+      />
+      <Tool
+        Name="VCBscMakeTool"
+      />
+      <Tool
+        Name="VCFxCopTool"
+      />
+      <Tool
+        Name="VCPostBuildEventTool"
+      />
+    </Configuration>
+    <Configuration
+      Name="Debug|x64"
+      OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)"
+      IntermediateDirectory="$(OutDir)"
+      ConfigurationType="4"
+      InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops;..\property_sheets\remove-posix-warnings.vsprops"
+      UseOfMFC="0"
+      ATLMinimizesCRunTimeLibraryUsage="false"
+      >
+      <Tool
+        Name="VCPreBuildEventTool"
+      />
+      <Tool
+        Name="VCCustomBuildTool"
+      />
+      <Tool
+        Name="VCXMLDataGeneratorTool"
+      />
+      <Tool
+        Name="VCWebServiceProxyGeneratorTool"
+      />
+      <Tool
+        Name="VCMIDLTool"
+        TargetEnvironment="3"
+      />
+      <Tool
+        Name="VCCLCompilerTool"
+        Optimization="0"
+        PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;WIN32;_DEBUG;_WINDOWS"
+        RuntimeLibrary="1"
+        UsePrecompiledHeader="0"
+        PrecompiledHeaderFile=".\..\..\..\proj\hdf5\Debug/hdf5.pch"
+        AssemblerListingLocation=".\..\..\..\proj\hdf5\Debug/"
+        ObjectFile=".\..\..\..\proj\hdf5\Debug/"
+        ProgramDataBaseFileName=".\..\..\..\proj\hdf5\Debug/"
+        BrowseInformation="1"
+        WarningLevel="3"
+        SuppressStartupBanner="true"
+        DebugInformationFormat="3"
+      />
+      <Tool
+        Name="VCManagedResourceCompilerTool"
+      />
+      <Tool
+        Name="VCResourceCompilerTool"
+        Culture="1033"
+      />
+      <Tool
+        Name="VCPreLinkEventTool"
+      />
+      <Tool
+        Name="VCLibrarianTool"
+        OutputFile="$(OutDir)\$(ProjectName)d.lib"
+        SuppressStartupBanner="true"
+      />
+      <Tool
+        Name="VCALinkTool"
+      />
+      <Tool
+        Name="VCXDCMakeTool"
+      />
+      <Tool
+        Name="VCBscMakeTool"
+      />
+      <Tool
+        Name="VCFxCopTool"
+      />
+      <Tool
+        Name="VCPostBuildEventTool"
+      />
+    </Configuration>
+    <Configuration
+      Name="Release|Win32"
+      OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)"
+      IntermediateDirectory="$(OutDir)"
+      ConfigurationType="4"
+      InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops;..\property_sheets\remove-posix-warnings.vsprops"
+      UseOfMFC="0"
+      ATLMinimizesCRunTimeLibraryUsage="false"
+      >
+      <Tool
+        Name="VCPreBuildEventTool"
+      />
+      <Tool
+        Name="VCCustomBuildTool"
+      />
+      <Tool
+        Name="VCXMLDataGeneratorTool"
+      />
+      <Tool
+        Name="VCWebServiceProxyGeneratorTool"
+      />
+      <Tool
+        Name="VCMIDLTool"
+      />
+      <Tool
+        Name="VCCLCompilerTool"
+        Optimization="2"
+        InlineFunctionExpansion="1"
+        PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;WIN32;NDEBUG;_WINDOWS"
+        StringPooling="true"
+        RuntimeLibrary="0"
+        EnableFunctionLevelLinking="true"
+        UsePrecompiledHeader="0"
+        PrecompiledHeaderFile=".\..\..\..\proj\hdf5\Release/hdf5.pch"
+        AssemblerListingLocation=".\..\..\..\proj\hdf5\Release/"
+        ObjectFile=".\..\..\..\proj\hdf5\Release/"
+        ProgramDataBaseFileName=".\..\..\..\proj\hdf5\Release/"
+        WarningLevel="3"
+        SuppressStartupBanner="true"
+      />
+      <Tool
+        Name="VCManagedResourceCompilerTool"
+      />
+      <Tool
+        Name="VCResourceCompilerTool"
+        Culture="1033"
+      />
+      <Tool
+        Name="VCPreLinkEventTool"
+      />
+      <Tool
+        Name="VCLibrarianTool"
+        OutputFile="$(OutDir)\$(ProjectName).lib"
+        SuppressStartupBanner="true"
+      />
+      <Tool
+        Name="VCALinkTool"
+      />
+      <Tool
+        Name="VCXDCMakeTool"
+      />
+      <Tool
+        Name="VCBscMakeTool"
+      />
+      <Tool
+        Name="VCFxCopTool"
+      />
+      <Tool
+        Name="VCPostBuildEventTool"
+      />
+    </Configuration>
+    <Configuration
+      Name="Release|x64"
+      OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)"
+      IntermediateDirectory="$(OutDir)"
+      ConfigurationType="4"
+      InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops;..\property_sheets\remove-posix-warnings.vsprops"
+      UseOfMFC="0"
+      ATLMinimizesCRunTimeLibraryUsage="false"
+      >
+      <Tool
+        Name="VCPreBuildEventTool"
+      />
+      <Tool
+        Name="VCCustomBuildTool"
+      />
+      <Tool
+        Name="VCXMLDataGeneratorTool"
+      />
+      <Tool
+        Name="VCWebServiceProxyGeneratorTool"
+      />
+      <Tool
+        Name="VCMIDLTool"
+        TargetEnvironment="3"
+      />
+      <Tool
+        Name="VCCLCompilerTool"
+        Optimization="2"
+        InlineFunctionExpansion="1"
+        PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;WIN32;NDEBUG;_WINDOWS"
+        StringPooling="true"
+        RuntimeLibrary="0"
+        EnableFunctionLevelLinking="true"
+        UsePrecompiledHeader="0"
+        PrecompiledHeaderFile=".\..\..\..\proj\hdf5\Release/hdf5.pch"
+        AssemblerListingLocation=".\..\..\..\proj\hdf5\Release/"
+        ObjectFile=".\..\..\..\proj\hdf5\Release/"
+        ProgramDataBaseFileName=".\..\..\..\proj\hdf5\Release/"
+        WarningLevel="3"
+        SuppressStartupBanner="true"
+      />
+      <Tool
+        Name="VCManagedResourceCompilerTool"
+      />
+      <Tool
+        Name="VCResourceCompilerTool"
+        Culture="1033"
+      />
+      <Tool
+        Name="VCPreLinkEventTool"
+      />
+      <Tool
+        Name="VCLibrarianTool"
+        OutputFile="$(OutDir)\$(ProjectName).lib"
+        SuppressStartupBanner="true"
+      />
+      <Tool
+        Name="VCALinkTool"
+      />
+      <Tool
+        Name="VCXDCMakeTool"
+      />
+      <Tool
+        Name="VCBscMakeTool"
+      />
+      <Tool
+        Name="VCFxCopTool"
+      />
+      <Tool
+        Name="VCPostBuildEventTool"
+      />
+    </Configuration>
+  </Configurations>
+  <References>
+  </References>
+  <Files>
+    <Filter
+      Name="source"
+      >
+      <File
+        RelativePath="..\..\..\src\H5.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5A.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Abtree2.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5AC.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Adense.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Adeprec.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Aint.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Atest.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5B.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5B2.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5B2cache.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5B2dbg.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5B2hdr.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5B2int.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5B2stat.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5B2test.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Bcache.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Bdbg.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5C.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5checksum.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5D.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5dbg.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dbtree.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dchunk.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dcompact.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dcontig.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Ddbg.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Ddeprec.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Defl.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dfill.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dint.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dio.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dlayout.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dmpio.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Doh.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dscatgath.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dselect.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dtest.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5E.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Edeprec.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Eint.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5F.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Faccum.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FD.c"
+        >
+      </File>
+            <File
+                RelativePath="..\..\..\src\H5Fcwfs.c"
+                >
+            </File>
+      <File
+        RelativePath="..\..\..\src\H5Fdbg.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FDcore.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FDfamily.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FDint.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FDlog.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FDmpi.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FDmpio.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FDmpiposix.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FDmulti.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FDsec2.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FDspace.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FDstdio.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FDwindows.c"
+        >
+      </File>
             <File
                 RelativePath="..\..\..\src\H5Fefc.c"
                 >
             </File>
-			<File
-				RelativePath="..\..\..\src\H5Ffake.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fio.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FL.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fmount.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fmpi.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FO.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fquery.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FS.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FScache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FSdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fsfile.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FSsection.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FSstat.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FStest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fsuper.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fsuper_cache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ftest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5G.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gbtree2.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gcache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gcompact.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gdense.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gdeprec.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gent.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gint.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Glink.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gloc.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gname.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gnode.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gobj.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Goh.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Groot.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gstab.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gtest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gtraverse.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HF.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFbtree2.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFcache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFdblock.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFdtable.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFhdr.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFhuge.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFiblock.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFiter.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFman.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFsection.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFspace.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFstat.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFtest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFtiny.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HG.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HGcache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HGdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HL.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HLcache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HLdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HLint.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HP.c"
-				>
-			</File>
+      <File
+        RelativePath="..\..\..\src\H5Ffake.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Fio.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FL.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Fmount.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Fmpi.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FO.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Fquery.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FS.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FScache.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FSdbg.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Fsfile.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FSsection.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FSstat.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FStest.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Fsuper.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Fsuper_cache.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Ftest.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5G.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gbtree2.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gcache.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gcompact.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gdense.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gdeprec.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gent.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gint.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Glink.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gloc.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gname.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gnode.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gobj.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Goh.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Groot.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gstab.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gtest.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gtraverse.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HF.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HFbtree2.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HFcache.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HFdbg.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HFdblock.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HFdtable.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HFhdr.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HFhuge.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HFiblock.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HFiter.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HFman.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HFsection.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HFspace.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HFstat.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HFtest.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HFtiny.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HG.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HGcache.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HGdbg.c"
+        >
+      </File>
+            <File
+                RelativePath="..\..\..\src\H5HGquery.c"
+                >
+            </File>
+      <File
+        RelativePath="..\..\..\src\H5HL.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HLcache.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HLdbg.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HLint.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HP.c"
+        >
+      </File>
             <File
                 RelativePath="..\..\..\src\H5I.c"
                 >
@@ -785,708 +793,708 @@
                 RelativePath="..\..\..\src\H5Itest.c"
                 >
             </File>
-			<File
-				RelativePath="..\..\..\src\H5L.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Lexternal.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5lib_settings.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MF.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MFaggr.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MFdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MFsection.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MM.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MP.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MPtest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5O.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oainfo.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oalloc.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oattr.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oattribute.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Obogus.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Obtreek.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ocache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ochunk.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ocont.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ocopy.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Odbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Odrvinfo.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Odtype.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oefl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ofill.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oginfo.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Olayout.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Olinfo.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Olink.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Omessage.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Omtime.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oname.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Onull.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Opline.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Orefcount.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Osdspace.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oshared.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oshmesg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ostab.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Otest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ounknown.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5P.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pacpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pdapl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pdcpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pdeprec.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pdxpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pfapl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pfcpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pfmpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pgcpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pint.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Plapl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Plcpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pocpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pocpypl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pstrcpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ptest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5R.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5RC.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Rdeprec.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5RS.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5S.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Sall.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Sdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Shyper.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SL.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SM.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SMbtree2.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SMcache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SMmessage.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Smpio.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SMtest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Snone.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Spoint.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Sselect.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5ST.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Stest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5system.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5T.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tarray.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tbit.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tcommit.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tcompound.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tconv.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tcset.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tdeprec.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tenum.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tfields.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tfixed.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tfloat.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5timer.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tinit.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tnative.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Toffset.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Toh.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Topaque.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Torder.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tpad.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tprecis.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5trace.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tstrpad.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tvisit.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tvlen.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5V.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5WB.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Z.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Zdeflate.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Zfletcher32.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Znbit.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Zscaleoffset.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Zshuffle.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Zszip.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ztrans.c"
-				>
-			</File>
-		</Filter>
-		<Filter
-			Name="header"
-			>
-			<File
-				RelativePath="..\..\..\src\H5ACprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5ACpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Apkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Aprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Apublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Bprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Bpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5BTpkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Cprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Cpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dpkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Epkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Eprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Epublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDpkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gpkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HGprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HGpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HLprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HLpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Iprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ipublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Lprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MFprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MMprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MMpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MPpkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Opublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ppublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5private.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5public.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5RCprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Rpkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Rprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Rpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SHpkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SHprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SHpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SLprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Sprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Spublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tpkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5version.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Vprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5WBprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Zprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Zpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\hdf5.h"
-				>
-			</File>
-		</Filter>
-	</Files>
-	<Globals>
-	</Globals>
+      <File
+        RelativePath="..\..\..\src\H5L.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Lexternal.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5lib_settings.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5MF.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5MFaggr.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5MFdbg.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5MFsection.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5MM.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5MP.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5MPtest.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5O.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Oainfo.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Oalloc.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Oattr.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Oattribute.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Obogus.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Obtreek.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Ocache.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Ochunk.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Ocont.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Ocopy.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Odbg.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Odrvinfo.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Odtype.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Oefl.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Ofill.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Oginfo.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Olayout.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Olinfo.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Olink.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Omessage.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Omtime.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Oname.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Onull.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Opline.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Orefcount.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Osdspace.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Oshared.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Oshmesg.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Ostab.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Otest.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Ounknown.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5P.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Pacpl.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Pdapl.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Pdcpl.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Pdeprec.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Pdxpl.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Pfapl.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Pfcpl.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Pfmpl.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Pgcpl.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Pint.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Plapl.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Plcpl.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Pocpl.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Pocpypl.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Pstrcpl.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Ptest.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5R.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5RC.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Rdeprec.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5RS.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5S.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Sall.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Sdbg.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Shyper.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5SL.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5SM.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5SMbtree2.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5SMcache.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5SMmessage.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Smpio.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5SMtest.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Snone.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Spoint.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Sselect.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5ST.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Stest.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5system.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5T.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tarray.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tbit.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tcommit.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tcompound.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tconv.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tcset.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tdbg.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tdeprec.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tenum.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tfields.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tfixed.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tfloat.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5timer.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tinit.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tnative.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Toffset.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Toh.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Topaque.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Torder.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tpad.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tprecis.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5trace.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tstrpad.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tvisit.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tvlen.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5V.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5WB.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Z.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Zdeflate.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Zfletcher32.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Znbit.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Zscaleoffset.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Zshuffle.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Zszip.c"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Ztrans.c"
+        >
+      </File>
+    </Filter>
+    <Filter
+      Name="header"
+      >
+      <File
+        RelativePath="..\..\..\src\H5ACprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5ACpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Apkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Aprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Apublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Bprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Bpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5BTpkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Cprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Cpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dpkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Epkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Eprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Epublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FDpkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Fprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Fpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gpkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HGprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HGpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HLprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HLpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Iprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Ipublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Lprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5MFprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5MMprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5MMpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5MPpkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Oprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Opublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Pprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Ppublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5private.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5public.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5RCprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Rpkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Rprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Rpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5SHpkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5SHprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5SHpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5SLprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Sprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Spublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tpkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5version.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Vprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5WBprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Zprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Zpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\hdf5.h"
+        >
+      </File>
+    </Filter>
+  </Files>
+  <Globals>
+  </Globals>
 </VisualStudioProject>
diff --git a/windows/proj/hdf5_fortran/hdf5_fortran.vfproj b/windows/proj/hdf5_fortran/hdf5_fortran.vfproj
index 0d3a672..1100be6 100644
--- a/windows/proj/hdf5_fortran/hdf5_fortran.vfproj
+++ b/windows/proj/hdf5_fortran/hdf5_fortran.vfproj
@@ -1,64 +1,75 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <VisualStudioProject ProjectType="typeStaticLibrary" ProjectCreator="Intel Fortran" Keyword="Static Library - Converted from CVF" Version="9.10" ProjectIdGuid="{26F2FDA4-17DC-4E1A-B9AC-124C460A4391}">
-	<Platforms>
-		<Platform Name="Win32"/>
-		<Platform Name="x64"/></Platforms>
-	<Configurations>
-		<Configuration Name="Release|Win32" OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)" IntermediateDirectory="$(OutDir)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)" ConfigurationType="typeStaticLibrary" MustRebuild="true" Command="$(TargetPath)">
-				<Tool Name="VFMidlTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" TypeLibraryName="$(IntDir)/$(InputName).tlb"/>
-				<Tool Name="VFPreBuildEventTool"/>
-				<Tool Name="VFFortranCompilerTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" AdditionalIncludeDirectories="Release/" PreprocessorDefinitions="HDF5F90_WINDOWS" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" AssemblerListingLocation="$(INTDIR)/" RuntimeLibrary="static /threads" CompileOnly="true"/>
-				<Tool Name="VFPostBuildEventTool"/>
-				<Tool Name="VFCustomBuildTool"/>
-				<Tool Name="VFResourceCompilerTool" SwitchesHaveChanged="true" PreprocessorDefinitions="NDEBUG" Culture="rcEnglishUS" ResourceOutputFileName="$(INTDIR)/$(InputName).res"/>
-				<Tool Name="VFPreLinkEventTool"/>
-				<Tool Name="VFLibrarianTool" SwitchesHaveChanged="true" MustRebuild="true" OutputFile="$(OutDir)\$(ProjectName).lib" SuppressStartupBanner="true" LinkLibraryDependencies="true"/></Configuration>
-		<Configuration Name="Debug|Win32" OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)" IntermediateDirectory="$(OutDir)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)" ConfigurationType="typeStaticLibrary" MustRebuild="true" Command="$(TargetPath)">
-				<Tool Name="VFMidlTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" TypeLibraryName="$(IntDir)/$(InputName).tlb"/>
-				<Tool Name="VFPreBuildEventTool"/>
-				<Tool Name="VFFortranCompilerTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" DebugInformationFormat="debugEnabled" Optimization="optimizeDisabled" AdditionalIncludeDirectories="Debug/" PreprocessorDefinitions="HDF5F90_WINDOWS" WarnArgMismatch="true" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" AssemblerListingLocation="$(INTDIR)/" BoundsCheck="true" RuntimeLibrary="rtMultiThreadedDebug" CompileOnly="true"/>
-				<Tool Name="VFPostBuildEventTool"/>
-				<Tool Name="VFCustomBuildTool"/>
-				<Tool Name="VFLibrarianTool" SwitchesHaveChanged="true" MustRebuild="true" OutputFile="$(OutDir)\$(ProjectName)d.lib" SuppressStartupBanner="true" LinkLibraryDependencies="true"/>
-				<Tool Name="VFResourceCompilerTool" SwitchesHaveChanged="true" PreprocessorDefinitions="_DEBUG" Culture="rcEnglishUS" ResourceOutputFileName="$(INTDIR)/$(InputName).res"/>
-				<Tool Name="VFPreLinkEventTool"/></Configuration>
-		<Configuration Name="Release|x64" OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)" IntermediateDirectory="$(OutDir)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)" ConfigurationType="typeStaticLibrary" MustRebuild="true" Command="$(TargetPath)">
-				<Tool Name="VFMidlTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" TypeLibraryName="$(IntDir)/$(InputName).tlb"/>
-				<Tool Name="VFPreBuildEventTool"/>
-				<Tool Name="VFPostBuildEventTool"/>
-				<Tool Name="VFFortranCompilerTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" AdditionalIncludeDirectories="Release/" PreprocessorDefinitions="HDF5F90_WINDOWS" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" AssemblerListingLocation="$(INTDIR)/" RuntimeLibrary="static /threads" CompileOnly="true"/>
-				<Tool Name="VFCustomBuildTool"/>
-				<Tool Name="VFLibrarianTool" SwitchesHaveChanged="true" MustRebuild="true" OutputFile="$(OutDir)\$(ProjectName).lib" SuppressStartupBanner="true" LinkLibraryDependencies="true"/>
-				<Tool Name="VFPreLinkEventTool"/>
-				<Tool Name="VFResourceCompilerTool" SwitchesHaveChanged="true" PreprocessorDefinitions="NDEBUG" Culture="rcEnglishUS" ResourceOutputFileName="$(INTDIR)/$(InputName).res"/></Configuration>
-		<Configuration Name="Debug|x64" OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)" IntermediateDirectory="$(OutDir)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)" ConfigurationType="typeStaticLibrary" MustRebuild="true" Command="$(TargetPath)">
-				<Tool Name="VFMidlTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" TypeLibraryName="$(IntDir)/$(InputName).tlb"/>
-				<Tool Name="VFPreBuildEventTool"/>
-				<Tool Name="VFPostBuildEventTool"/>
-				<Tool Name="VFFortranCompilerTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" DebugInformationFormat="debugEnabled" Optimization="optimizeDisabled" AdditionalIncludeDirectories="Debug/" PreprocessorDefinitions="HDF5F90_WINDOWS" WarnArgMismatch="true" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" AssemblerListingLocation="$(INTDIR)/" BoundsCheck="true" RuntimeLibrary="rtMultiThreadedDebug" CompileOnly="true"/>
-				<Tool Name="VFCustomBuildTool"/>
-				<Tool Name="VFPreLinkEventTool"/>
-				<Tool Name="VFResourceCompilerTool" SwitchesHaveChanged="true" PreprocessorDefinitions="_DEBUG" Culture="rcEnglishUS" ResourceOutputFileName="$(INTDIR)/$(InputName).res"/>
-				<Tool Name="VFLibrarianTool" SwitchesHaveChanged="true" MustRebuild="true" OutputFile="$(OutDir)\$(ProjectName)d.lib" SuppressStartupBanner="true" LinkLibraryDependencies="true"/></Configuration></Configurations>
-	<Files>
-		<Filter Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;f90;for;f;fpp">
-		<File RelativePath="..\..\..\fortran\src\H5_DBLE_InterfaceInclude.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5_ff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Aff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Dff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Eff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5f90global.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Fff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5fortran_types.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Gff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Iff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Lff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Off.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Pff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Rff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Sff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Tff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Zff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\HDF5.f90"/></Filter>
-		<Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl;fi;fd"/></Files>
-	<Globals/></VisualStudioProject>
+  <Platforms>
+    <Platform Name="Win32"/>
+    <Platform Name="x64"/></Platforms>
+  <Configurations>
+    <Configuration Name="Release|Win32" OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)" IntermediateDirectory="$(OutDir)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)" ConfigurationType="typeStaticLibrary" MustRebuild="true" Command="$(TargetPath)">
+        <Tool Name="VFMidlTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" TypeLibraryName="$(IntDir)/$(InputName).tlb"/>
+        <Tool Name="VFPreBuildEventTool"/>
+        <Tool Name="VFFortranCompilerTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" AdditionalIncludeDirectories="Release/" PreprocessorDefinitions="HDF5F90_WINDOWS" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" AssemblerListingLocation="$(INTDIR)/" RuntimeLibrary="static /threads" CompileOnly="true"/>
+        <Tool Name="VFPostBuildEventTool"/>
+        <Tool Name="VFCustomBuildTool"/>
+        <Tool Name="VFResourceCompilerTool" SwitchesHaveChanged="true" PreprocessorDefinitions="NDEBUG" Culture="rcEnglishUS" ResourceOutputFileName="$(INTDIR)/$(InputName).res"/>
+        <Tool Name="VFPreLinkEventTool"/>
+        <Tool Name="VFLibrarianTool" SwitchesHaveChanged="true" MustRebuild="true" OutputFile="$(OutDir)\$(ProjectName).lib" SuppressStartupBanner="true" LinkLibraryDependencies="true"/></Configuration>
+    <Configuration Name="Debug|Win32" OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)" IntermediateDirectory="$(OutDir)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)" ConfigurationType="typeStaticLibrary" MustRebuild="true" Command="$(TargetPath)">
+        <Tool Name="VFMidlTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" TypeLibraryName="$(IntDir)/$(InputName).tlb"/>
+        <Tool Name="VFPreBuildEventTool"/>
+        <Tool Name="VFFortranCompilerTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" DebugInformationFormat="debugEnabled" Optimization="optimizeDisabled" AdditionalIncludeDirectories="Debug/" PreprocessorDefinitions="HDF5F90_WINDOWS" WarnArgMismatch="true" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" AssemblerListingLocation="$(INTDIR)/" BoundsCheck="true" RuntimeLibrary="rtMultiThreadedDebug" CompileOnly="true"/>
+        <Tool Name="VFPostBuildEventTool"/>
+        <Tool Name="VFCustomBuildTool"/>
+        <Tool Name="VFLibrarianTool" SwitchesHaveChanged="true" MustRebuild="true" OutputFile="$(OutDir)\$(ProjectName)d.lib" SuppressStartupBanner="true" LinkLibraryDependencies="true"/>
+        <Tool Name="VFResourceCompilerTool" SwitchesHaveChanged="true" PreprocessorDefinitions="_DEBUG" Culture="rcEnglishUS" ResourceOutputFileName="$(INTDIR)/$(InputName).res"/>
+        <Tool Name="VFPreLinkEventTool"/></Configuration>
+    <Configuration Name="Release|x64" OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)" IntermediateDirectory="$(OutDir)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)" ConfigurationType="typeStaticLibrary" MustRebuild="true" Command="$(TargetPath)">
+        <Tool Name="VFMidlTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" TypeLibraryName="$(IntDir)/$(InputName).tlb"/>
+        <Tool Name="VFPreBuildEventTool"/>
+        <Tool Name="VFPostBuildEventTool"/>
+        <Tool Name="VFFortranCompilerTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" AdditionalIncludeDirectories="Release/" PreprocessorDefinitions="HDF5F90_WINDOWS" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" AssemblerListingLocation="$(INTDIR)/" RuntimeLibrary="static /threads" CompileOnly="true"/>
+        <Tool Name="VFCustomBuildTool"/>
+        <Tool Name="VFLibrarianTool" SwitchesHaveChanged="true" MustRebuild="true" OutputFile="$(OutDir)\$(ProjectName).lib" SuppressStartupBanner="true" LinkLibraryDependencies="true"/>
+        <Tool Name="VFPreLinkEventTool"/>
+        <Tool Name="VFResourceCompilerTool" SwitchesHaveChanged="true" PreprocessorDefinitions="NDEBUG" Culture="rcEnglishUS" ResourceOutputFileName="$(INTDIR)/$(InputName).res"/></Configuration>
+    <Configuration Name="Debug|x64" OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)" IntermediateDirectory="$(OutDir)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)" ConfigurationType="typeStaticLibrary" MustRebuild="true" Command="$(TargetPath)">
+        <Tool Name="VFMidlTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" TypeLibraryName="$(IntDir)/$(InputName).tlb"/>
+        <Tool Name="VFPreBuildEventTool"/>
+        <Tool Name="VFPostBuildEventTool"/>
+        <Tool Name="VFFortranCompilerTool" SwitchesHaveChanged="true" SuppressStartupBanner="true" DebugInformationFormat="debugEnabled" Optimization="optimizeDisabled" AdditionalIncludeDirectories="Debug/" PreprocessorDefinitions="HDF5F90_WINDOWS" WarnArgMismatch="true" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" AssemblerListingLocation="$(INTDIR)/" BoundsCheck="true" RuntimeLibrary="rtMultiThreadedDebug" CompileOnly="true"/>
+        <Tool Name="VFCustomBuildTool"/>
+        <Tool Name="VFPreLinkEventTool"/>
+        <Tool Name="VFResourceCompilerTool" SwitchesHaveChanged="true" PreprocessorDefinitions="_DEBUG" Culture="rcEnglishUS" ResourceOutputFileName="$(INTDIR)/$(InputName).res"/>
+        <Tool Name="VFLibrarianTool" SwitchesHaveChanged="true" MustRebuild="true" OutputFile="$(OutDir)\$(ProjectName)d.lib" SuppressStartupBanner="true" LinkLibraryDependencies="true"/></Configuration></Configurations>
+  <Files>
+    <Filter Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;f90;for;f;fpp">
+    <File RelativePath="..\..\..\fortran\src\H5_DBLE_InterfaceInclude.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5_ff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5_ff_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Aff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Dff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Eff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5f90global.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Fff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5fortran_types.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Gff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Iff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Lff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Off.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Pff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Rff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Sff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Tff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Zff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\HDF5.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Aff_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Dff_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Eff_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Lff_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Off_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Pff_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Rff_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Tff_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5_DBLE_InterfaceInclude.f90"/>
+    </Filter>
+    <Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl;fi;fd"/></Files>
+  <Globals/></VisualStudioProject>
diff --git a/windows/proj/hdf5_fortrandll/hdf5_fortrandll.vfproj b/windows/proj/hdf5_fortrandll/hdf5_fortrandll.vfproj
index 8a2a821..c705a73 100644
--- a/windows/proj/hdf5_fortrandll/hdf5_fortrandll.vfproj
+++ b/windows/proj/hdf5_fortrandll/hdf5_fortrandll.vfproj
@@ -1,65 +1,76 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <VisualStudioProject ProjectType="typeDynamicLibrary" ProjectCreator="Intel Fortran" Keyword="Dll - Converted from CVF" Version="9.10" ProjectIdGuid="{1063E387-0167-411C-85B9-96B043C4BDB3}">
-	<Platforms>
-		<Platform Name="Win32"/>
-		<Platform Name="x64"/></Platforms>
-	<Configurations>
-		<Configuration Name="Debug|Win32" OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)" IntermediateDirectory="$(OutDir)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)" ConfigurationType="typeDynamicLibrary" MustRebuild="true" Command="$(TargetPath)">
-				<Tool Name="VFMidlTool" SwitchesHaveChanged="true" PreprocessorDefinitions="_DEBUG" MkTypLibCompatible="true" SuppressStartupBanner="true" TargetEnvironment="midlTargetWin32" TypeLibraryName="$(OUTDIR)/hdf5_fortrandll.tlb"/>
-				<Tool Name="VFPreBuildEventTool"/>
-				<Tool Name="VFPostBuildEventTool"/>
-				<Tool Name="VFFortranCompilerTool" SwitchesHaveChanged="true" AdditionalOptions="/dll" SuppressStartupBanner="true" DebugInformationFormat="debugEnabled" Optimization="optimizeDisabled" AdditionalIncludeDirectories="Debug/" PreprocessorDefinitions="HDF5F90_WINDOWS,BUILD_HDF5_DLL" FPS4Symbols="true" WarnArgMismatch="true" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" AssemblerListingLocation="$(INTDIR)/" BoundsCheck="true" RuntimeLibrary="rtMultiThreadedDebugDLL" CompileOnly="true"/>
-				<Tool Name="VFCustomBuildTool"/>
-				<Tool Name="VFLinkerTool" SwitchesHaveChanged="true" MustRebuild="true" OutputFile="$(OutDir)\hdf5_fortranddll.dll" LinkIncremental="linkIncrementalYes" SuppressStartupBanner="true" ModuleDefinitionFile="..\..\..\fortran\src\hdf5_fortrandll.def" GenerateDebugInformation="true" SubSystem="subSystemWindows" ImportLibrary="$(TargetDir)$(TargetName).lib" LinkDLL="true" AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib"/>
-				<Tool Name="VFPreLinkEventTool"/>
-				<Tool Name="VFResourceCompilerTool" SwitchesHaveChanged="true" PreprocessorDefinitions="_DEBUG" Culture="rcEnglishUS" ResourceOutputFileName="$(INTDIR)/$(InputName).res"/></Configuration>
-		<Configuration Name="Release|Win32" OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)" IntermediateDirectory="$(OutDir)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)" ConfigurationType="typeDynamicLibrary" MustRebuild="true" Command="$(TargetPath)">
-				<Tool Name="VFMidlTool" SwitchesHaveChanged="true" PreprocessorDefinitions="NDEBUG" MkTypLibCompatible="true" SuppressStartupBanner="true" TargetEnvironment="midlTargetWin32" TypeLibraryName="$(OUTDIR)/hdf5_fortrandll.tlb"/>
-				<Tool Name="VFPreBuildEventTool"/>
-				<Tool Name="VFPostBuildEventTool"/>
-				<Tool Name="VFFortranCompilerTool" SwitchesHaveChanged="true" AdditionalOptions="/dll" SuppressStartupBanner="true" AdditionalIncludeDirectories="Release/" PreprocessorDefinitions="HDF5F90_WINDOWS,BUILD_HDF5_DLL" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" AssemblerListingLocation="$(INTDIR)/" RuntimeLibrary="rtMultiThreadedDLL" CompileOnly="true"/>
-				<Tool Name="VFCustomBuildTool"/>
-				<Tool Name="VFLinkerTool" SwitchesHaveChanged="true" MustRebuild="true" OutputFile="$(OutDir)\hdf5_fortrandll.dll" LinkIncremental="linkIncrementalNo" SuppressStartupBanner="true" ModuleDefinitionFile="..\..\..\fortran\src\hdf5_fortrandll.def" SubSystem="subSystemWindows" ImportLibrary="$(TargetDir)$(TargetName).lib" LinkDLL="true" AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib"/>
-				<Tool Name="VFPreLinkEventTool"/>
-				<Tool Name="VFResourceCompilerTool" SwitchesHaveChanged="true" PreprocessorDefinitions="NDEBUG" Culture="rcEnglishUS" ResourceOutputFileName="$(INTDIR)/$(InputName).res"/></Configuration>
-		<Configuration Name="Debug|x64" OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)" IntermediateDirectory="$(OutDir)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)" ConfigurationType="typeDynamicLibrary" MustRebuild="true" Command="$(TargetPath)">
-				<Tool Name="VFMidlTool" SwitchesHaveChanged="true" PreprocessorDefinitions="_DEBUG" MkTypLibCompatible="true" SuppressStartupBanner="true" TypeLibraryName="$(OUTDIR)/hdf5_fortrandll.tlb"/>
-				<Tool Name="VFPreBuildEventTool"/>
-				<Tool Name="VFFortranCompilerTool" SwitchesHaveChanged="true" AdditionalOptions="/dll" SuppressStartupBanner="true" DebugInformationFormat="debugEnabled" Optimization="optimizeDisabled" AdditionalIncludeDirectories="Debug/" PreprocessorDefinitions="HDF5F90_WINDOWS,BUILD_HDF5_DLL" FPS4Symbols="true" WarnArgMismatch="true" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" AssemblerListingLocation="$(INTDIR)/" BoundsCheck="true" RuntimeLibrary="rtMultiThreadedDebugDLL" CompileOnly="true"/>
-				<Tool Name="VFPostBuildEventTool"/>
-				<Tool Name="VFCustomBuildTool"/>
-				<Tool Name="VFLinkerTool" SwitchesHaveChanged="true" MustRebuild="true" OutputFile="$(OutDir)\hdf5_fortranddll.dll" LinkIncremental="linkIncrementalYes" SuppressStartupBanner="true" ModuleDefinitionFile="..\..\..\fortran\src\hdf5_fortrandll.def" GenerateDebugInformation="true" SubSystem="subSystemWindows" ImportLibrary="$(TargetDir)$(TargetName).lib" LinkDLL="true" AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib"/>
-				<Tool Name="VFResourceCompilerTool" SwitchesHaveChanged="true" PreprocessorDefinitions="_DEBUG" Culture="rcEnglishUS" ResourceOutputFileName="$(INTDIR)/$(InputName).res"/>
-				<Tool Name="VFPreLinkEventTool"/></Configuration>
-		<Configuration Name="Release|x64" OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)" IntermediateDirectory="$(OutDir)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)" ConfigurationType="typeDynamicLibrary" MustRebuild="true" Command="$(TargetPath)">
-				<Tool Name="VFMidlTool" SwitchesHaveChanged="true" PreprocessorDefinitions="NDEBUG" MkTypLibCompatible="true" SuppressStartupBanner="true" TypeLibraryName="$(OUTDIR)/hdf5_fortrandll.tlb"/>
-				<Tool Name="VFPreBuildEventTool"/>
-				<Tool Name="VFFortranCompilerTool" SwitchesHaveChanged="true" AdditionalOptions="/dll" SuppressStartupBanner="true" AdditionalIncludeDirectories="Release/" PreprocessorDefinitions="HDF5F90_WINDOWS,BUILD_HDF5_DLL" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" AssemblerListingLocation="$(INTDIR)/" RuntimeLibrary="rtMultiThreadedDLL" CompileOnly="true"/>
-				<Tool Name="VFPostBuildEventTool"/>
-				<Tool Name="VFCustomBuildTool"/>
-				<Tool Name="VFLinkerTool" SwitchesHaveChanged="true" MustRebuild="true" OutputFile="$(OutDir)\hdf5_fortrandll.dll" LinkIncremental="linkIncrementalNo" SuppressStartupBanner="true" ModuleDefinitionFile="..\..\..\fortran\src\hdf5_fortrandll.def" SubSystem="subSystemWindows" ImportLibrary="$(TargetDir)$(TargetName).lib" LinkDLL="true" AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib"/>
-				<Tool Name="VFResourceCompilerTool" SwitchesHaveChanged="true" PreprocessorDefinitions="NDEBUG" Culture="rcEnglishUS" ResourceOutputFileName="$(INTDIR)/$(InputName).res"/>
-				<Tool Name="VFPreLinkEventTool"/></Configuration></Configurations>
-	<Files>
-		<Filter Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;f90;for;f;fpp">
-		<File RelativePath="..\..\..\fortran\src\H5_DBLE_InterfaceInclude.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5_ff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Aff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Dff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Eff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5f90global.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Fff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5fortran_types.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Gff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Iff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Lff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Off.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Pff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Rff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Sff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Tff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\H5Zff.f90"/>
-		<File RelativePath="..\..\..\fortran\src\HDF5.f90"/></Filter>
-		<Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl;fi;fd"/>
-		<Filter Name="Resource Files" Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"/></Files>
-	<Globals/></VisualStudioProject>
+  <Platforms>
+    <Platform Name="Win32"/>
+    <Platform Name="x64"/></Platforms>
+  <Configurations>
+    <Configuration Name="Debug|Win32" OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)" IntermediateDirectory="$(OutDir)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)" ConfigurationType="typeDynamicLibrary" MustRebuild="true" Command="$(TargetPath)">
+        <Tool Name="VFMidlTool" SwitchesHaveChanged="true" PreprocessorDefinitions="_DEBUG" MkTypLibCompatible="true" SuppressStartupBanner="true" TargetEnvironment="midlTargetWin32" TypeLibraryName="$(OUTDIR)/hdf5_fortrandll.tlb"/>
+        <Tool Name="VFPreBuildEventTool"/>
+        <Tool Name="VFPostBuildEventTool"/>
+        <Tool Name="VFFortranCompilerTool" SwitchesHaveChanged="true" AdditionalOptions="/dll" SuppressStartupBanner="true" DebugInformationFormat="debugEnabled" Optimization="optimizeDisabled" AdditionalIncludeDirectories="Debug/" PreprocessorDefinitions="HDF5F90_WINDOWS,BUILD_HDF5_DLL" FPS4Symbols="true" WarnArgMismatch="true" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" AssemblerListingLocation="$(INTDIR)/" BoundsCheck="true" RuntimeLibrary="rtMultiThreadedDebugDLL" CompileOnly="true"/>
+        <Tool Name="VFCustomBuildTool"/>
+        <Tool Name="VFLinkerTool" SwitchesHaveChanged="true" MustRebuild="true" OutputFile="$(OutDir)\hdf5_fortranddll.dll" LinkIncremental="linkIncrementalYes" SuppressStartupBanner="true" ModuleDefinitionFile="..\..\..\fortran\src\hdf5_fortrandll.def" GenerateDebugInformation="true" SubSystem="subSystemWindows" ImportLibrary="$(TargetDir)$(TargetName).lib" LinkDLL="true" AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib"/>
+        <Tool Name="VFPreLinkEventTool"/>
+        <Tool Name="VFResourceCompilerTool" SwitchesHaveChanged="true" PreprocessorDefinitions="_DEBUG" Culture="rcEnglishUS" ResourceOutputFileName="$(INTDIR)/$(InputName).res"/></Configuration>
+    <Configuration Name="Release|Win32" OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)" IntermediateDirectory="$(OutDir)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)" ConfigurationType="typeDynamicLibrary" MustRebuild="true" Command="$(TargetPath)">
+        <Tool Name="VFMidlTool" SwitchesHaveChanged="true" PreprocessorDefinitions="NDEBUG" MkTypLibCompatible="true" SuppressStartupBanner="true" TargetEnvironment="midlTargetWin32" TypeLibraryName="$(OUTDIR)/hdf5_fortrandll.tlb"/>
+        <Tool Name="VFPreBuildEventTool"/>
+        <Tool Name="VFPostBuildEventTool"/>
+        <Tool Name="VFFortranCompilerTool" SwitchesHaveChanged="true" AdditionalOptions="/dll" SuppressStartupBanner="true" AdditionalIncludeDirectories="Release/" PreprocessorDefinitions="HDF5F90_WINDOWS,BUILD_HDF5_DLL" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" AssemblerListingLocation="$(INTDIR)/" RuntimeLibrary="rtMultiThreadedDLL" CompileOnly="true"/>
+        <Tool Name="VFCustomBuildTool"/>
+        <Tool Name="VFLinkerTool" SwitchesHaveChanged="true" MustRebuild="true" OutputFile="$(OutDir)\hdf5_fortrandll.dll" LinkIncremental="linkIncrementalNo" SuppressStartupBanner="true" ModuleDefinitionFile="..\..\..\fortran\src\hdf5_fortrandll.def" SubSystem="subSystemWindows" ImportLibrary="$(TargetDir)$(TargetName).lib" LinkDLL="true" AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib"/>
+        <Tool Name="VFPreLinkEventTool"/>
+        <Tool Name="VFResourceCompilerTool" SwitchesHaveChanged="true" PreprocessorDefinitions="NDEBUG" Culture="rcEnglishUS" ResourceOutputFileName="$(INTDIR)/$(InputName).res"/></Configuration>
+    <Configuration Name="Debug|x64" OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)" IntermediateDirectory="$(OutDir)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)" ConfigurationType="typeDynamicLibrary" MustRebuild="true" Command="$(TargetPath)">
+        <Tool Name="VFMidlTool" SwitchesHaveChanged="true" PreprocessorDefinitions="_DEBUG" MkTypLibCompatible="true" SuppressStartupBanner="true" TypeLibraryName="$(OUTDIR)/hdf5_fortrandll.tlb"/>
+        <Tool Name="VFPreBuildEventTool"/>
+        <Tool Name="VFFortranCompilerTool" SwitchesHaveChanged="true" AdditionalOptions="/dll" SuppressStartupBanner="true" DebugInformationFormat="debugEnabled" Optimization="optimizeDisabled" AdditionalIncludeDirectories="Debug/" PreprocessorDefinitions="HDF5F90_WINDOWS,BUILD_HDF5_DLL" FPS4Symbols="true" WarnArgMismatch="true" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" AssemblerListingLocation="$(INTDIR)/" BoundsCheck="true" RuntimeLibrary="rtMultiThreadedDebugDLL" CompileOnly="true"/>
+        <Tool Name="VFPostBuildEventTool"/>
+        <Tool Name="VFCustomBuildTool"/>
+        <Tool Name="VFLinkerTool" SwitchesHaveChanged="true" MustRebuild="true" OutputFile="$(OutDir)\hdf5_fortranddll.dll" LinkIncremental="linkIncrementalYes" SuppressStartupBanner="true" ModuleDefinitionFile="..\..\..\fortran\src\hdf5_fortrandll.def" GenerateDebugInformation="true" SubSystem="subSystemWindows" ImportLibrary="$(TargetDir)$(TargetName).lib" LinkDLL="true" AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib"/>
+        <Tool Name="VFResourceCompilerTool" SwitchesHaveChanged="true" PreprocessorDefinitions="_DEBUG" Culture="rcEnglishUS" ResourceOutputFileName="$(INTDIR)/$(InputName).res"/>
+        <Tool Name="VFPreLinkEventTool"/></Configuration>
+    <Configuration Name="Release|x64" OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)" IntermediateDirectory="$(OutDir)" DeleteExtensionsOnClean="*.obj;*.mod;*.pdb;*.asm;*.map;*.dyn;*.dpi;*.tmp;*.log;*.ilk;*.exe;$(TargetPath)" ConfigurationType="typeDynamicLibrary" MustRebuild="true" Command="$(TargetPath)">
+        <Tool Name="VFMidlTool" SwitchesHaveChanged="true" PreprocessorDefinitions="NDEBUG" MkTypLibCompatible="true" SuppressStartupBanner="true" TypeLibraryName="$(OUTDIR)/hdf5_fortrandll.tlb"/>
+        <Tool Name="VFPreBuildEventTool"/>
+        <Tool Name="VFFortranCompilerTool" SwitchesHaveChanged="true" AdditionalOptions="/dll" SuppressStartupBanner="true" AdditionalIncludeDirectories="Release/" PreprocessorDefinitions="HDF5F90_WINDOWS,BUILD_HDF5_DLL" ModulePath="$(INTDIR)/" ObjectFile="$(INTDIR)/" AssemblerListingLocation="$(INTDIR)/" RuntimeLibrary="rtMultiThreadedDLL" CompileOnly="true"/>
+        <Tool Name="VFPostBuildEventTool"/>
+        <Tool Name="VFCustomBuildTool"/>
+        <Tool Name="VFLinkerTool" SwitchesHaveChanged="true" MustRebuild="true" OutputFile="$(OutDir)\hdf5_fortrandll.dll" LinkIncremental="linkIncrementalNo" SuppressStartupBanner="true" ModuleDefinitionFile="..\..\..\fortran\src\hdf5_fortrandll.def" SubSystem="subSystemWindows" ImportLibrary="$(TargetDir)$(TargetName).lib" LinkDLL="true" AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib"/>
+        <Tool Name="VFResourceCompilerTool" SwitchesHaveChanged="true" PreprocessorDefinitions="NDEBUG" Culture="rcEnglishUS" ResourceOutputFileName="$(INTDIR)/$(InputName).res"/>
+        <Tool Name="VFPreLinkEventTool"/></Configuration></Configurations>
+  <Files>
+    <Filter Name="Source Files" Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;f90;for;f;fpp">
+    <File RelativePath="..\..\..\fortran\src\H5_DBLE_InterfaceInclude.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5_ff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5_ff_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Aff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Dff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Eff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5f90global.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Fff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5fortran_types.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Gff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Iff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Lff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Off.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Pff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Rff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Sff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Tff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Zff.f90"/>
+    <File RelativePath="..\..\..\fortran\src\HDF5.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Aff_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Dff_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Eff_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Lff_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Off_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Pff_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Rff_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5Tff_F90.f90"/>
+    <File RelativePath="..\..\..\fortran\src\H5_DBLE_InterfaceInclude.f90"/>
+    </Filter>
+    <Filter Name="Header Files" Filter="h;hpp;hxx;hm;inl;fi;fd"/>
+    <Filter Name="Resource Files" Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"/></Files>
+  <Globals/></VisualStudioProject>
diff --git a/windows/proj/hdf5dll/hdf5dll.vcproj b/windows/proj/hdf5dll/hdf5dll.vcproj
index 13329e7..531b4dc 100644
--- a/windows/proj/hdf5dll/hdf5dll.vcproj
+++ b/windows/proj/hdf5dll/hdf5dll.vcproj
@@ -1,1624 +1,1580 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <VisualStudioProject
-	ProjectType="Visual C++"
-	Version="9.00"
-	Name="hdf5dll"
-	ProjectGUID="{C9535AD9-C61D-4691-A5CE-52EF359892AF}"
-	RootNamespace="hdf5dll"
-	TargetFrameworkVersion="131072"
-	>
-	<Platforms>
-		<Platform
-			Name="Win32"
-		/>
-		<Platform
-			Name="x64"
-		/>
-	</Platforms>
-	<ToolFiles>
-	</ToolFiles>
-	<Configurations>
-		<Configuration
-			Name="Debug|Win32"
-			OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)"
-			IntermediateDirectory="$(OutDir)"
-			ConfigurationType="2"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops;..\property_sheets\remove-posix-warnings.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\../../../proj/hdf5dll/Debug/hdf5dll.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;WIN32;_DEBUG;_WINDOWS;_HDF5DLL_;ZLIB_DLL;_SZDLL_"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\../../../proj/hdf5dll/Debug/hdf5dll.pch"
-				AssemblerListingLocation=".\../../../proj/hdf5dll/Debug/"
-				ObjectFile=".\../../../proj/hdf5dll/Debug/"
-				ProgramDataBaseFileName=".\../../../proj/hdf5dll/Debug/"
-				WarningLevel="3"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
-				OutputFile="$(OutDir)\hdf5ddll.dll"
-				LinkIncremental="0"
-				SuppressStartupBanner="true"
-				ManifestFile="$(TargetPath).intermediate.manifest"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				ImportLibrary="$(TargetDir)$(TargetName).lib"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Debug|x64"
-			OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)"
-			IntermediateDirectory="$(OutDir)"
-			ConfigurationType="2"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops;..\property_sheets\remove-posix-warnings.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;_DEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="3"
-				TypeLibraryName=".\../../../proj/hdf5dll/Debug/hdf5dll.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="0"
-				PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;WIN32;_DEBUG;_WINDOWS;_HDF5DLL_;ZLIB_DLL;_SZDLL_"
-				RuntimeLibrary="3"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\../../../proj/hdf5dll/Debug/hdf5dll.pch"
-				AssemblerListingLocation=".\../../../proj/hdf5dll/Debug/"
-				ObjectFile=".\../../../proj/hdf5dll/Debug/"
-				ProgramDataBaseFileName=".\../../../proj/hdf5dll/Debug/"
-				WarningLevel="3"
-				SuppressStartupBanner="true"
-				DebugInformationFormat="3"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;_DEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
-				OutputFile="$(OutDir)\hdf5ddll.dll"
-				LinkIncremental="0"
-				SuppressStartupBanner="true"
-				ManifestFile="$(TargetPath).intermediate.manifest"
-				GenerateDebugInformation="true"
-				ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				ImportLibrary="$(TargetDir)$(TargetName).lib"
-				TargetMachine="17"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|Win32"
-			OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)"
-			IntermediateDirectory="$(OutDir)"
-			ConfigurationType="2"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops;..\property_sheets\remove-posix-warnings.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="1"
-				TypeLibraryName=".\../../../proj/hdf5dll/Release/hdf5dll.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="1"
-				PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;WIN32;NDEBUG;_WINDOWS;_HDF5DLL_;ZLIB_DLL;_SZDLL_"
-				StringPooling="true"
-				RuntimeLibrary="2"
-				EnableFunctionLevelLinking="true"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\../../../proj/hdf5dll/Release/hdf5dll.pch"
-				AssemblerListingLocation=".\../../../proj/hdf5dll/Release/"
-				ObjectFile=".\../../../proj/hdf5dll/Release/"
-				ProgramDataBaseFileName=".\../../../proj/hdf5dll/Release/"
-				WarningLevel="3"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
-				OutputFile="$(OutDir)\hdf5dll.dll"
-				LinkIncremental="0"
-				SuppressStartupBanner="true"
-				ManifestFile="$(TargetPath).intermediate.manifest"
-				ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				ImportLibrary="$(TargetDir)$(TargetName).lib"
-				TargetMachine="1"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-		<Configuration
-			Name="Release|x64"
-			OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)"
-			IntermediateDirectory="$(OutDir)"
-			ConfigurationType="2"
-			InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops;..\property_sheets\remove-posix-warnings.vsprops"
-			UseOfMFC="0"
-			ATLMinimizesCRunTimeLibraryUsage="false"
-			>
-			<Tool
-				Name="VCPreBuildEventTool"
-			/>
-			<Tool
-				Name="VCCustomBuildTool"
-			/>
-			<Tool
-				Name="VCXMLDataGeneratorTool"
-			/>
-			<Tool
-				Name="VCWebServiceProxyGeneratorTool"
-			/>
-			<Tool
-				Name="VCMIDLTool"
-				PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;NDEBUG"
-				MkTypLibCompatible="true"
-				SuppressStartupBanner="true"
-				TargetEnvironment="3"
-				TypeLibraryName=".\../../../proj/hdf5dll/Release/hdf5dll.tlb"
-				HeaderFileName=""
-			/>
-			<Tool
-				Name="VCCLCompilerTool"
-				Optimization="2"
-				InlineFunctionExpansion="1"
-				PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;WIN32;NDEBUG;_WINDOWS;_HDF5DLL_;ZLIB_DLL;_SZDLL_"
-				StringPooling="true"
-				RuntimeLibrary="2"
-				EnableFunctionLevelLinking="true"
-				UsePrecompiledHeader="0"
-				PrecompiledHeaderFile=".\../../../proj/hdf5dll/Release/hdf5dll.pch"
-				AssemblerListingLocation=".\../../../proj/hdf5dll/Release/"
-				ObjectFile=".\../../../proj/hdf5dll/Release/"
-				ProgramDataBaseFileName=".\../../../proj/hdf5dll/Release/"
-				WarningLevel="3"
-				SuppressStartupBanner="true"
-			/>
-			<Tool
-				Name="VCManagedResourceCompilerTool"
-			/>
-			<Tool
-				Name="VCResourceCompilerTool"
-				PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;NDEBUG"
-				Culture="1033"
-			/>
-			<Tool
-				Name="VCPreLinkEventTool"
-			/>
-			<Tool
-				Name="VCLinkerTool"
-				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
-				OutputFile="$(OutDir)\hdf5dll.dll"
-				LinkIncremental="0"
-				SuppressStartupBanner="true"
-				ManifestFile="$(TargetPath).intermediate.manifest"
-				ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
-				SubSystem="2"
-				RandomizedBaseAddress="1"
-				DataExecutionPrevention="0"
-				ImportLibrary="$(TargetDir)$(TargetName).lib"
-				TargetMachine="17"
-			/>
-			<Tool
-				Name="VCALinkTool"
-			/>
-			<Tool
-				Name="VCManifestTool"
-			/>
-			<Tool
-				Name="VCXDCMakeTool"
-			/>
-			<Tool
-				Name="VCBscMakeTool"
-			/>
-			<Tool
-				Name="VCFxCopTool"
-			/>
-			<Tool
-				Name="VCAppVerifierTool"
-			/>
-			<Tool
-				Name="VCPostBuildEventTool"
-			/>
-		</Configuration>
-	</Configurations>
-	<References>
-	</References>
-	<Files>
-		<Filter
-			Name="source"
-			Filter="*.c"
-			>
-			<File
-				RelativePath="..\..\..\src\H5.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5A.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Abtree2.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5AC.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Adense.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Adeprec.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Aint.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Atest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5B.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5B2.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5B2cache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5B2dbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5B2hdr.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5B2int.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5B2stat.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5B2test.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Bcache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Bdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5C.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5checksum.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5D.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5dbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dbtree.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dchunk.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dcompact.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dcontig.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ddbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ddeprec.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Defl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dfill.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dint.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dio.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dlayout.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dmpio.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Doh.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dscatgath.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dselect.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dtest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5E.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Edeprec.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Eint.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5F.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Faccum.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FD.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDcore.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDfamily.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDint.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDlog.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDmpi.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDmpio.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDmpiposix.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDmulti.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDsec2.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDspace.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDstdio.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDwindows.c"
-				>
-			</File>
+  ProjectType="Visual C++"
+  Version="9.00"
+  Name="hdf5dll"
+  ProjectGUID="{C9535AD9-C61D-4691-A5CE-52EF359892AF}"
+  RootNamespace="hdf5dll"
+  TargetFrameworkVersion="131072"
+  >
+  <Platforms>
+    <Platform
+      Name="Win32"
+    />
+    <Platform
+      Name="x64"
+    />
+  </Platforms>
+  <ToolFiles>
+  </ToolFiles>
+  <Configurations>
+    <Configuration
+      Name="Debug|Win32"
+      OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)"
+      IntermediateDirectory="$(OutDir)"
+      ConfigurationType="2"
+      InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops;..\property_sheets\remove-posix-warnings.vsprops"
+      UseOfMFC="0"
+      ATLMinimizesCRunTimeLibraryUsage="false"
+      >
+      <Tool
+        Name="VCPreBuildEventTool"
+      />
+      <Tool
+        Name="VCCustomBuildTool"
+      />
+      <Tool
+        Name="VCXMLDataGeneratorTool"
+      />
+      <Tool
+        Name="VCWebServiceProxyGeneratorTool"
+      />
+      <Tool
+        Name="VCMIDLTool"
+        PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;_DEBUG"
+        MkTypLibCompatible="true"
+        SuppressStartupBanner="true"
+        TargetEnvironment="1"
+        TypeLibraryName=".\../../../proj/hdf5dll/Debug/hdf5dll.tlb"
+        HeaderFileName=""
+      />
+      <Tool
+        Name="VCCLCompilerTool"
+        Optimization="0"
+        PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;WIN32;_DEBUG;_WINDOWS;_HDF5DLL_;ZLIB_DLL;_SZDLL_"
+        RuntimeLibrary="3"
+        UsePrecompiledHeader="0"
+        PrecompiledHeaderFile=".\../../../proj/hdf5dll/Debug/hdf5dll.pch"
+        AssemblerListingLocation=".\../../../proj/hdf5dll/Debug/"
+        ObjectFile=".\../../../proj/hdf5dll/Debug/"
+        ProgramDataBaseFileName=".\../../../proj/hdf5dll/Debug/"
+        WarningLevel="3"
+        SuppressStartupBanner="true"
+        DebugInformationFormat="3"
+      />
+      <Tool
+        Name="VCManagedResourceCompilerTool"
+      />
+      <Tool
+        Name="VCResourceCompilerTool"
+        PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;_DEBUG"
+        Culture="1033"
+      />
+      <Tool
+        Name="VCPreLinkEventTool"
+      />
+      <Tool
+        Name="VCLinkerTool"
+        AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
+        OutputFile="$(OutDir)\hdf5ddll.dll"
+        LinkIncremental="0"
+        SuppressStartupBanner="true"
+        ManifestFile="$(TargetPath).intermediate.manifest"
+        GenerateDebugInformation="true"
+        ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
+        SubSystem="2"
+        RandomizedBaseAddress="1"
+        DataExecutionPrevention="0"
+        ImportLibrary="$(TargetDir)$(TargetName).lib"
+        TargetMachine="1"
+      />
+      <Tool
+        Name="VCALinkTool"
+      />
+      <Tool
+        Name="VCManifestTool"
+      />
+      <Tool
+        Name="VCXDCMakeTool"
+      />
+      <Tool
+        Name="VCBscMakeTool"
+      />
+      <Tool
+        Name="VCFxCopTool"
+      />
+      <Tool
+        Name="VCAppVerifierTool"
+      />
+      <Tool
+        Name="VCPostBuildEventTool"
+      />
+    </Configuration>
+    <Configuration
+      Name="Debug|x64"
+      OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)"
+      IntermediateDirectory="$(OutDir)"
+      ConfigurationType="2"
+      InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops;..\property_sheets\remove-posix-warnings.vsprops"
+      UseOfMFC="0"
+      ATLMinimizesCRunTimeLibraryUsage="false"
+      >
+      <Tool
+        Name="VCPreBuildEventTool"
+      />
+      <Tool
+        Name="VCCustomBuildTool"
+      />
+      <Tool
+        Name="VCXMLDataGeneratorTool"
+      />
+      <Tool
+        Name="VCWebServiceProxyGeneratorTool"
+      />
+      <Tool
+        Name="VCMIDLTool"
+        PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;_DEBUG"
+        MkTypLibCompatible="true"
+        SuppressStartupBanner="true"
+        TargetEnvironment="3"
+        TypeLibraryName=".\../../../proj/hdf5dll/Debug/hdf5dll.tlb"
+        HeaderFileName=""
+      />
+      <Tool
+        Name="VCCLCompilerTool"
+        Optimization="0"
+        PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;WIN32;_DEBUG;_WINDOWS;_HDF5DLL_;ZLIB_DLL;_SZDLL_"
+        RuntimeLibrary="3"
+        UsePrecompiledHeader="0"
+        PrecompiledHeaderFile=".\../../../proj/hdf5dll/Debug/hdf5dll.pch"
+        AssemblerListingLocation=".\../../../proj/hdf5dll/Debug/"
+        ObjectFile=".\../../../proj/hdf5dll/Debug/"
+        ProgramDataBaseFileName=".\../../../proj/hdf5dll/Debug/"
+        WarningLevel="3"
+        SuppressStartupBanner="true"
+        DebugInformationFormat="3"
+      />
+      <Tool
+        Name="VCManagedResourceCompilerTool"
+      />
+      <Tool
+        Name="VCResourceCompilerTool"
+        PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;_DEBUG"
+        Culture="1033"
+      />
+      <Tool
+        Name="VCPreLinkEventTool"
+      />
+      <Tool
+        Name="VCLinkerTool"
+        AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
+        OutputFile="$(OutDir)\hdf5ddll.dll"
+        LinkIncremental="0"
+        SuppressStartupBanner="true"
+        ManifestFile="$(TargetPath).intermediate.manifest"
+        GenerateDebugInformation="true"
+        ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
+        SubSystem="2"
+        RandomizedBaseAddress="1"
+        DataExecutionPrevention="0"
+        ImportLibrary="$(TargetDir)$(TargetName).lib"
+        TargetMachine="17"
+      />
+      <Tool
+        Name="VCALinkTool"
+      />
+      <Tool
+        Name="VCManifestTool"
+      />
+      <Tool
+        Name="VCXDCMakeTool"
+      />
+      <Tool
+        Name="VCBscMakeTool"
+      />
+      <Tool
+        Name="VCFxCopTool"
+      />
+      <Tool
+        Name="VCAppVerifierTool"
+      />
+      <Tool
+        Name="VCPostBuildEventTool"
+      />
+    </Configuration>
+    <Configuration
+      Name="Release|Win32"
+      OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)"
+      IntermediateDirectory="$(OutDir)"
+      ConfigurationType="2"
+      InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops;..\property_sheets\remove-posix-warnings.vsprops"
+      UseOfMFC="0"
+      ATLMinimizesCRunTimeLibraryUsage="false"
+      >
+      <Tool
+        Name="VCPreBuildEventTool"
+      />
+      <Tool
+        Name="VCCustomBuildTool"
+      />
+      <Tool
+        Name="VCXMLDataGeneratorTool"
+      />
+      <Tool
+        Name="VCWebServiceProxyGeneratorTool"
+      />
+      <Tool
+        Name="VCMIDLTool"
+        PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;NDEBUG"
+        MkTypLibCompatible="true"
+        SuppressStartupBanner="true"
+        TargetEnvironment="1"
+        TypeLibraryName=".\../../../proj/hdf5dll/Release/hdf5dll.tlb"
+        HeaderFileName=""
+      />
+      <Tool
+        Name="VCCLCompilerTool"
+        Optimization="2"
+        InlineFunctionExpansion="1"
+        PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;WIN32;NDEBUG;_WINDOWS;_HDF5DLL_;ZLIB_DLL;_SZDLL_"
+        StringPooling="true"
+        RuntimeLibrary="2"
+        EnableFunctionLevelLinking="true"
+        UsePrecompiledHeader="0"
+        PrecompiledHeaderFile=".\../../../proj/hdf5dll/Release/hdf5dll.pch"
+        AssemblerListingLocation=".\../../../proj/hdf5dll/Release/"
+        ObjectFile=".\../../../proj/hdf5dll/Release/"
+        ProgramDataBaseFileName=".\../../../proj/hdf5dll/Release/"
+        WarningLevel="3"
+        SuppressStartupBanner="true"
+      />
+      <Tool
+        Name="VCManagedResourceCompilerTool"
+      />
+      <Tool
+        Name="VCResourceCompilerTool"
+        PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;NDEBUG"
+        Culture="1033"
+      />
+      <Tool
+        Name="VCPreLinkEventTool"
+      />
+      <Tool
+        Name="VCLinkerTool"
+        AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
+        OutputFile="$(OutDir)\hdf5dll.dll"
+        LinkIncremental="0"
+        SuppressStartupBanner="true"
+        ManifestFile="$(TargetPath).intermediate.manifest"
+        ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
+        SubSystem="2"
+        RandomizedBaseAddress="1"
+        DataExecutionPrevention="0"
+        ImportLibrary="$(TargetDir)$(TargetName).lib"
+        TargetMachine="1"
+      />
+      <Tool
+        Name="VCALinkTool"
+      />
+      <Tool
+        Name="VCManifestTool"
+      />
+      <Tool
+        Name="VCXDCMakeTool"
+      />
+      <Tool
+        Name="VCBscMakeTool"
+      />
+      <Tool
+        Name="VCFxCopTool"
+      />
+      <Tool
+        Name="VCAppVerifierTool"
+      />
+      <Tool
+        Name="VCPostBuildEventTool"
+      />
+    </Configuration>
+    <Configuration
+      Name="Release|x64"
+      OutputDirectory="..\..\..\proj\$(ProjectName)\$(ConfigurationName)"
+      IntermediateDirectory="$(OutDir)"
+      ConfigurationType="2"
+      InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops;..\property_sheets\remove-posix-warnings.vsprops"
+      UseOfMFC="0"
+      ATLMinimizesCRunTimeLibraryUsage="false"
+      >
+      <Tool
+        Name="VCPreBuildEventTool"
+      />
+      <Tool
+        Name="VCCustomBuildTool"
+      />
+      <Tool
+        Name="VCXMLDataGeneratorTool"
+      />
+      <Tool
+        Name="VCWebServiceProxyGeneratorTool"
+      />
+      <Tool
+        Name="VCMIDLTool"
+        PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;NDEBUG"
+        MkTypLibCompatible="true"
+        SuppressStartupBanner="true"
+        TargetEnvironment="3"
+        TypeLibraryName=".\../../../proj/hdf5dll/Release/hdf5dll.tlb"
+        HeaderFileName=""
+      />
+      <Tool
+        Name="VCCLCompilerTool"
+        Optimization="2"
+        InlineFunctionExpansion="1"
+        PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;WIN32;NDEBUG;_WINDOWS;_HDF5DLL_;ZLIB_DLL;_SZDLL_"
+        StringPooling="true"
+        RuntimeLibrary="2"
+        EnableFunctionLevelLinking="true"
+        UsePrecompiledHeader="0"
+        PrecompiledHeaderFile=".\../../../proj/hdf5dll/Release/hdf5dll.pch"
+        AssemblerListingLocation=".\../../../proj/hdf5dll/Release/"
+        ObjectFile=".\../../../proj/hdf5dll/Release/"
+        ProgramDataBaseFileName=".\../../../proj/hdf5dll/Release/"
+        WarningLevel="3"
+        SuppressStartupBanner="true"
+      />
+      <Tool
+        Name="VCManagedResourceCompilerTool"
+      />
+      <Tool
+        Name="VCResourceCompilerTool"
+        PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;NDEBUG"
+        Culture="1033"
+      />
+      <Tool
+        Name="VCPreLinkEventTool"
+      />
+      <Tool
+        Name="VCLinkerTool"
+        AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
+        OutputFile="$(OutDir)\hdf5dll.dll"
+        LinkIncremental="0"
+        SuppressStartupBanner="true"
+        ManifestFile="$(TargetPath).intermediate.manifest"
+        ProgramDatabaseFile="$(TargetDir)$(TargetName).pdb"
+        SubSystem="2"
+        RandomizedBaseAddress="1"
+        DataExecutionPrevention="0"
+        ImportLibrary="$(TargetDir)$(TargetName).lib"
+        TargetMachine="17"
+      />
+      <Tool
+        Name="VCALinkTool"
+      />
+      <Tool
+        Name="VCManifestTool"
+      />
+      <Tool
+        Name="VCXDCMakeTool"
+      />
+      <Tool
+        Name="VCBscMakeTool"
+      />
+      <Tool
+        Name="VCFxCopTool"
+      />
+      <Tool
+        Name="VCAppVerifierTool"
+      />
+      <Tool
+        Name="VCPostBuildEventTool"
+      />
+    </Configuration>
+  </Configurations>
+  <References>
+  </References>
+  <Files>
+    <Filter
+      Name="source"
+      Filter="*.c"
+      >
+            <File
+                RelativePath="..\..\..\src\H5.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5A.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Abtree2.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5AC.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Adense.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Adeprec.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Aint.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Atest.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5B.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5B2.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5B2cache.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5B2dbg.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5B2hdr.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5B2int.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5B2stat.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5B2test.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Bcache.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Bdbg.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5C.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5checksum.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5D.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5dbg.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Dbtree.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Dchunk.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Dcompact.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Dcontig.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Ddbg.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Ddeprec.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Defl.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Dfill.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Dint.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Dio.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Dlayout.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Dmpio.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Doh.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Dscatgath.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Dselect.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Dtest.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5E.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Edeprec.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Eint.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5F.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Faccum.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FD.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Fcwfs.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Fdbg.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FDcore.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FDfamily.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FDint.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FDlog.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FDmpi.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FDmpio.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FDmpiposix.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FDmulti.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FDsec2.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FDspace.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FDstdio.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FDwindows.c"
+                >
+            </File>
             <File
                 RelativePath="..\..\..\src\H5Fefc.c"
                 >
             </File>
-			<File
-				RelativePath="..\..\..\src\H5Ffake.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fio.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FL.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fmount.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fmpi.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FO.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fquery.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FS.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FScache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FSdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fsfile.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FSsection.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FSstat.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FStest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fsuper.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fsuper_cache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ftest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5G.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gbtree2.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gcache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gcompact.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gdense.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gdeprec.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gent.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gint.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Glink.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gloc.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gname.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gnode.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gobj.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Goh.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Groot.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gstab.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gtest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gtraverse.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HF.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFbtree2.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFcache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFdblock.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFdtable.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFhdr.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFhuge.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFiblock.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFiter.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFman.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFsection.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFspace.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFstat.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFtest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HFtiny.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HG.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HGcache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HGdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HL.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HLcache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HLdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HLint.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HP.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5I.c"
-				>
-			</File>
             <File
-                RelativePath="..\..\..\src\H5Itest.c"
+                RelativePath="..\..\..\src\H5Ffake.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Fio.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FL.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Fmount.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Fmpi.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FO.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Fquery.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FS.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FScache.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FSdbg.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Fsfile.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FSsection.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FSstat.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5FStest.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Fsuper.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Fsuper_cache.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Ftest.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5G.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Gbtree2.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Gcache.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Gcompact.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Gdense.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Gdeprec.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Gent.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Gint.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Glink.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Gloc.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Gname.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Gnode.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Gobj.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Goh.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Groot.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Gstab.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Gtest.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Gtraverse.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HF.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HFbtree2.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HFcache.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HFdbg.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HFdblock.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HFdtable.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HFhdr.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HFhuge.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HFiblock.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HFiter.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HFman.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HFsection.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HFspace.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HFstat.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HFtest.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HFtiny.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HG.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HGcache.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HGdbg.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HGquery.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HL.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HLcache.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HLdbg.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HLint.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5HP.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5I.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Itest.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5L.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Lexternal.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5lib_settings.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5MF.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5MFaggr.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5MFdbg.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5MFsection.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5MM.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5MP.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5MPtest.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5O.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Oainfo.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Oalloc.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Oattr.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Oattribute.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Obogus.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Obtreek.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Ocache.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Ochunk.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Ocont.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Ocopy.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Odbg.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Odrvinfo.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Odtype.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Oefl.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Ofill.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Oginfo.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Olayout.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Olinfo.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Olink.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Omessage.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Omtime.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Oname.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Onull.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Opline.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Orefcount.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Osdspace.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Oshared.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Oshmesg.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Ostab.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Otest.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Ounknown.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5P.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Pacpl.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Pdapl.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Pdcpl.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Pdeprec.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Pdxpl.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Pfapl.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Pfcpl.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Pfmpl.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Pgcpl.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Pint.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Plapl.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Plcpl.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Pocpl.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Pocpypl.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Pstrcpl.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Ptest.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5R.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5RC.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Rdeprec.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5RS.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5S.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Sall.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Sdbg.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Shyper.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5SL.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5SM.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5SMbtree2.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5SMcache.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5SMmessage.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Smpio.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5SMtest.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Snone.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Spoint.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Sselect.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5ST.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Stest.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5system.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5T.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tarray.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tbit.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tcommit.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tcompound.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tconv.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tcset.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tdbg.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tdeprec.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tenum.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tfields.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tfixed.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tfloat.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5timer.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tinit.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tnative.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Toffset.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Toh.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Topaque.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Torder.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tpad.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tprecis.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5trace.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tstrpad.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tvisit.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Tvlen.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5V.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5WB.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Z.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Zdeflate.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Zfletcher32.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Znbit.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Zscaleoffset.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Zshuffle.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Zszip.c"
+                >
+            </File>
+            <File
+                RelativePath="..\..\..\src\H5Ztrans.c"
                 >
             </File>
-			<File
-				RelativePath="..\..\..\src\H5L.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Lexternal.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5lib_settings.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MF.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MFaggr.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MFdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MFsection.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MM.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MP.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MPtest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5O.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oainfo.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oalloc.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oattr.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oattribute.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Obogus.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Obtreek.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ocache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ochunk.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ocont.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ocopy.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Odbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Odrvinfo.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Odtype.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oefl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ofill.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oginfo.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Olayout.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Olinfo.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Olink.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Omessage.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Omtime.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oname.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Onull.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Opline.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Orefcount.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Osdspace.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oshared.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oshmesg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ostab.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Otest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ounknown.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5P.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pacpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pdapl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pdcpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pdeprec.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pdxpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pfapl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pfcpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pfmpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pgcpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pint.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Plapl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Plcpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pocpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pocpypl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pstrcpl.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ptest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5R.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5RC.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Rdeprec.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5RS.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5S.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Sall.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Sdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Shyper.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SL.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SM.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SMbtree2.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SMcache.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SMmessage.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Smpio.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SMtest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Snone.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Spoint.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Sselect.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5ST.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Stest.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5system.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5T.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tarray.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tbit.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tcommit.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tcompound.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tconv.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tcset.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tdbg.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tdeprec.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tenum.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tfields.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tfixed.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tfloat.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5timer.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tinit.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tnative.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Toffset.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Toh.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Topaque.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Torder.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tpad.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tprecis.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5trace.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tstrpad.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tvisit.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tvlen.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5V.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5WB.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Z.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Zdeflate.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Zfletcher32.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Znbit.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Zscaleoffset.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Zshuffle.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Zszip.c"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ztrans.c"
-				>
-			</File>
-		</Filter>
-		<Filter
-			Name="header"
-			Filter="*.h"
-			>
-			<File
-				RelativePath="..\..\..\src\H5ACprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5ACpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Apkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Aprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Apublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Bprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Bpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5BTpkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Cprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Cpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dpkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Dpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Epkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Eprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Epublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5FDpkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Fpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gpkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Gpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HGprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HGpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HLprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5HLpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Iprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ipublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MFprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MMprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5MMpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Oprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Opublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Pprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Ppublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5private.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5public.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5RCprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Rpkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Rprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Rpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SHpkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SHprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SHpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5SLprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Sprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Spublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tpkg.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Tpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5version.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Vprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5WBprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Zprivate.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\H5Zpublic.h"
-				>
-			</File>
-			<File
-				RelativePath="..\..\..\src\hdf5.h"
-				>
-			</File>
-		</Filter>
-		<File
-			RelativePath="..\..\..\src\H5Faccum.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\..\src\H5FDint.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\..\src\H5Fio.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\..\src\H5Fmpi.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\..\src\H5Fquery.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\..\src\H5FSstat.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\..\src\H5FStest.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\..\src\H5Gcache.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\..\src\H5HGcache.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\..\src\H5HLcache.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\..\src\H5MFaggr.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\..\src\H5MFdbg.c"
-			>
-		</File>
-		<File
-			RelativePath="..\..\..\src\H5MFsection.c"
-			>
-		</File>
-	</Files>
-	<Globals>
-	</Globals>
+    </Filter>
+    <Filter
+      Name="header"
+      Filter="*.h"
+      >
+      <File
+        RelativePath="..\..\..\src\H5ACprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5ACpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Apkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Aprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Apublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Bprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Bpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5BTpkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Cprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Cpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dpkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Dpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Epkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Eprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Epublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5FDpkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Fprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Fpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gpkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Gpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HGprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HGpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HLprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5HLpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Iprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Ipublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5MFprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5MMprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5MMpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Oprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Opublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Pprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Ppublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5private.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5public.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5RCprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Rpkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Rprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Rpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5SHpkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5SHprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5SHpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5SLprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Sprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Spublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tpkg.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Tpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5version.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Vprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5WBprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Zprivate.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\H5Zpublic.h"
+        >
+      </File>
+      <File
+        RelativePath="..\..\..\src\hdf5.h"
+        >
+      </File>
+    </Filter>
+  </Files>
+  <Globals>
+  </Globals>
 </VisualStudioProject>
diff --git a/windows/src/H5pubconf.h b/windows/src/H5pubconf.h
index 03962a7..3ac9b14 100755
--- a/windows/src/H5pubconf.h
+++ b/windows/src/H5pubconf.h
@@ -1,24 +1,43 @@
-/* windows/src/H5pubconf.h. Adapted from generated Linux src/H5pubconf.h   */
-/* src/H5config.h.  Generated from H5config.h.in by configure.  */
-/* src/H5config.h.in.  Generated from configure.in by autoheader.  */
-
-/*
- * Windows Specific Definitions
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Copyright by The HDF Group.                                               *
+ * Copyright by the Board of Trustees of the University of Illinois.         *
+ * All rights reserved.                                                      *
+ *                                                                           *
+ * This file is part of HDF5.  The full HDF5 copyright notice, including     *
+ * terms governing use, modification, and redistribution, is contained in    *
+ * the files COPYING and Copyright.html.  COPYING can be found at the root   *
+ * of the source code distribution tree; Copyright.html can be found at the  *
+ * root level of an installed copy of the electronic HDF5 document set and   *
+ * is linked from the top-level documents page.  It can also be found at     *
+ * http://hdfgroup.org/HDF5/doc/Copyright.html.  If you do not have          *
+ * access to either file, you may request a copy from help at hdfgroup.org.     *
+ * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+ 
+/* NOTE: This file is created by hand from the Linux src/H5pubconf.h file.
+ * Most Windows builds are handled by CMake which generates its own 
+ * H5pubconf.h file so this file can easily get out of date.  Please notify
+ * Dana Robinson <derobins at hdfgroup.org> if the settings here have issues.
  */
 
+/********************************
+ * Windows Specific Definitions *
+ ********************************/
+
 /* Define if the Windows virtual file driver should be compiled */
 #define H5_HAVE_WINDOWS 1
 
-/* Define if the Windows virtual file driver should use buffered IO functions */
-/* #undef WINDOWS_USE_STDIO */
+/* Define if on the Windows platform */
+#define H5_HAVE_WIN32_API 1
 
-/* Define the maximum write size for the Windows file driver.  Larger writes
-   will be split into many writes.  Safe values are 1 <= WINDOWS_MAX_BUF <= 2GB-1. */
-#define WINDOWS_MAX_BUF (1024 * 1024 * 1024)
+/* Define if using a Windows compiler (i.e. Visual Studio) */
+#define H5_HAVE_VISUAL_STUDIO 1
 
-/*
- * End of Windows Specific Definitions
- */
+/***************************************
+ * End of Windows Specific Definitions *
+ ***************************************/
+
+/* Define if building universal (internal helper macro) */
+/* #undef H5_AC_APPLE_UNIVERSAL_BUILD */
  
 /* Define if your system generates wrong code for log2 routine. */
 /* #undef H5_BAD_LOG2_CODE_GENERATED */
@@ -35,7 +54,7 @@
 #define H5_CXX_HAVE_OFFSETOF 1
 
 /* Define the default virtual file driver to compile */
-#define H5_DEFAULT_VFD H5FD_WINDOWS
+#define H5_DEFAULT_VFD H5FD_SEC2
 
 /* Define if `dev_t' is a scalar */
 #define H5_DEV_T_IS_SCALAR 1
@@ -68,7 +87,7 @@
 
 /* Define if your system has right maximum convert floating-point to unsigned
    long long values. */
-/* #undef H5_FP_TO_ULLONG_RIGHT_MAXIMUM 1 */
+/* #undef H5_FP_TO_ULLONG_RIGHT_MAXIMUM */
 
 /* Define if gettimeofday() populates the tz pointer passed in */
 #define H5_GETTIMEOFDAY_GIVES_TZ 1
@@ -82,6 +101,16 @@
 /* Define to 1 if you have the `BSDgettimeofday' function. */
 /* #undef H5_HAVE_BSDGETTIMEOFDAY */
 
+/* Define if the compiler understands C99 designated initialization of structs
+   and unions */
+/* #undef H5_HAVE_C99_DESIGNATED_INITIALIZER */
+
+/* Define if the compiler understand the __func__ keyword */
+/* #undef H5_HAVE_C99_FUNC */
+
+/* Define to 1 if you have the `clock_gettime' function. */
+/* #undef H5_HAVE_CLOCK_GETTIME */
+
 /* Define if the function stack tracing code is to be compiled in */
 /* #undef H5_HAVE_CODESTACK */
 
@@ -101,6 +130,9 @@
 /* Define to 1 if you have the <dmalloc.h> header file. */
 /* #undef H5_HAVE_DMALLOC_H */
 
+/* Define if library information should be embedded in the executables */
+/* #undef H5_HAVE_EMBEDDED_LIBINFO */
+
 /* Define to 1 if you have the <features.h> header file. */
 /* #undef H5_HAVE_FEATURES_H */
 
@@ -131,18 +163,24 @@
 /* Define to 1 if you have the `frexpl' function. */
 /* #undef H5_HAVE_FREXPL */
 
-/* Define to 1 if you have the `fseek64' function. */
-/* #undef H5_HAVE_FSEEK64 */
-
 /* Define to 1 if you have the `fseeko' function. */
 /* #undef H5_HAVE_FSEEKO */
 
+/* Define to 1 if you have the `fseek64' function. */
+/* #undef H5_HAVE_FSEEKO64 */
+
 /* Define to 1 if you have the `fstat64' function. */
 /* #undef H5_HAVE_FSTAT64 */
 
 /* Define to 1 if you have the `ftello' function. */
 /* #undef H5_HAVE_FTELLO */
 
+/* Define to 1 if you have the `ftello64' function. */
+/* #undef H5_HAVE_FTELLO64 */
+
+/* Define to 1 if you have the `ftruncate64' function. */
+/* #undef H5_HAVE_FTRUNCATE64 */
+
 /* Define if the compiler understand the __FUNCTION__ keyword */
 #define H5_HAVE_FUNCTION 1
 
@@ -156,7 +194,7 @@
 /* #undef H5_HAVE_GETPWUID */
 
 /* Define to 1 if you have the `getrusage' function. */
-/* #define H5_HAVE_GETRUSAGE 1 */
+/* #undef H5_HAVE_GETRUSAGE */
 
 /* Define to 1 if you have the `gettextinfo' function. */
 /* #undef H5_HAVE_GETTEXTINFO */
@@ -173,9 +211,6 @@
 /* Define to 1 if you have the <gpfs.h> header file. */
 /* #undef H5_HAVE_GPFS_H */
 
-/* Define if h5dump packed bits feature is enabled */
-#define H5_HAVE_H5DUMP_PACKED_BITS
-
 /* Define if library will contain instrumentation to detect correct
    optimization operation */
 /* #undef H5_HAVE_INSTRUMENTED_LIBRARY */
@@ -231,8 +266,14 @@
 /* Define to 1 if you have the `lseek64' function. */
 /* #undef H5_HAVE_LSEEK64 */
 
+/* Define to 1 if you have the `lstat' function. */
+/* #undef H5_HAVE_LSTAT */
+
+/* Define to 1 if you have the <mach/mach_time.h> header file. */
+/* #undef H5_HAVE_MACH_MACH_TIME_H */
+
 /* Define to 1 if you have the <memory.h> header file. */
-#define H5_HAVE_MEMORY_H 1
+/* #undef H5_HAVE_MEMORY_H */
 
 /* Define if we have MPE support */
 /* #undef H5_HAVE_MPE */
@@ -267,15 +308,18 @@
 /* Define to 1 if you have the `setsysinfo' function. */
 /* #undef H5_HAVE_SETSYSINFO */
 
-/* Define to 1 if you have the `sigaction' function. */
-/* #undef H5_HAVE_SIGACTION */
-
 /* Define to 1 if you have the `siglongjmp' function. */
 /* #undef H5_HAVE_SIGLONGJMP */
 
 /* Define to 1 if you have the `signal' function. */
 #define H5_HAVE_SIGNAL 1
 
+/* Define to 1 if you have the `sigprocmask' function. */
+/* #undef H5_HAVE_SIGPROCMASK */
+
+/* Define to 1 if you have the `sigsetjmp' function. */
+/* #undef H5_HAVE_SIGSETJMP */
+
 /* Define to 1 if you have the `snprintf' function. */
 /* #undef H5_HAVE_SNPRINTF */
 
@@ -318,6 +362,9 @@
 /* Define if `struct videoconfig' is defined */
 /* #undef H5_HAVE_STRUCT_VIDEOCONFIG */
 
+/* Define to 1 if you have the `symlink' function. */
+/* #undef H5_HAVE_SYMLINK */
+
 /* Define to 1 if you have the `system' function. */
 #define H5_HAVE_SYSTEM 1
 
@@ -431,6 +478,10 @@
    values correctly. */
 #define H5_LDOUBLE_TO_LLONG_ACCURATE 1
 
+/* Define if your system converts long double to (unsigned) long values with
+   special algorithm. */
+/* #undef H5_LDOUBLE_TO_LONG_SPECIAL */
+
 /* Define if your system can convert long double to unsigned int values
    correctly. */
 #define H5_LDOUBLE_TO_UINT_ACCURATE 1
@@ -442,6 +493,10 @@
    values correctly. */
 #define H5_LLONG_TO_LDOUBLE_CORRECT 1
 
+/* Define if your system can convert (unsigned) long to long double values
+   with special algorithm. */
+/* #undef H5_LONG_TO_LDOUBLE_SPECIAL */
+
 /* Define to the sub-directory in which libtool stores uninstalled libraries.
    */
 #define H5_LT_OBJDIR ".libs/"
@@ -449,17 +504,10 @@
 /* Define if the metadata trace file code is to be compiled in */
 /* #undef H5_METADATA_TRACE_FILE */
 
-/* Define if your system can handle complicated MPI derived datatype
-   correctly. */
-#define H5_MPI_COMPLEX_DERIVED_DATATYPE_WORKS 1
-
 /* Define if your system's `MPI_File_set_size' function works for files over
    2GB. */
 #define H5_MPI_FILE_SET_SIZE_BIG 1
 
-/* Define if your system can handle special collective IO properly. */
-#define H5_MPI_SPECIAL_COLLECTIVE_IO_WORKS 1
-
 /* Define if we can violate pointer alignment restrictions */
 #define H5_NO_ALIGNMENT_RESTRICTIONS 1
 
@@ -479,13 +527,16 @@
 #define H5_PACKAGE_NAME "HDF5"
 
 /* Define to the full name and version of this package. */
-#define H5_PACKAGE_STRING "HDF5 1.8.7"
+#define H5_PACKAGE_STRING "HDF5 1.8.8"
 
 /* Define to the one symbol short name of this package. */
 #define H5_PACKAGE_TARNAME "hdf5"
 
+/* Define to the home page for this package. */
+#define H5_PACKAGE_URL ""
+
 /* Define to the version of this package. */
-#define H5_PACKAGE_VERSION "1.8.7"
+#define H5_PACKAGE_VERSION "1.8.8"
 
 /* Width for printf() for type `long long' or `__int64', use `ll' */
 #define H5_PRINTF_LL_WIDTH "I64"
@@ -553,6 +604,13 @@
 /* The size of `off_t', as computed by sizeof. */
 #define H5_SIZEOF_OFF_T 4
 
+/* The size of `ptrdiff_t', as computed by sizeof. */
+#ifndef _WIN64
+#define H5_SIZEOF_PTRDIFF_T 4
+#else
+#define H5_SIZEOF_PTRDIFF_T 8
+#endif /* _WIN64 */
+
 /* The size of `short', as computed by sizeof. */
 #define H5_SIZEOF_SHORT 2
 
@@ -602,6 +660,9 @@
 /* The size of `uint_least8_t', as computed by sizeof. */
 #define H5_SIZEOF_UINT_LEAST8_T 0
 
+/* The size of `unsigned', as computed by sizeof. */
+#define H5_SIZEOF_UNSIGNED 4
+
 /* The size of `__int64', as computed by sizeof. */
 #define H5_SIZEOF___INT64 8
 
@@ -629,6 +690,10 @@
    correct precision. */
 #define H5_ULLONG_TO_LDOUBLE_PRECISION 1
 
+/* Define if your system accurately converting unsigned long to float values.
+   */
+/* #undef H5_ULONG_TO_FLOAT_ACCURATE */
+
 /* Define if your system can accurately convert unsigned (long) long values to
    floating-point values. */
 /* #undef H5_ULONG_TO_FP_BOTTOM_BIT_ACCURATE */
@@ -642,7 +707,7 @@
 /* #undef H5_USING_MEMCHECKER */
 
 /* Version number of package */
-#define H5_VERSION "1.8.7"
+#define H5_VERSION "1.8.8"
 
 /* Define if vsnprintf() returns the correct value for formatted strings that
    don't fit into size allowed */
@@ -658,6 +723,12 @@
    first (like Motorola and SPARC, unlike Intel and VAX). */
 /* #undef H5_WORDS_BIGENDIAN */
 
+/* Number of bits in a file offset, on hosts where this is settable. */
+/* #undef H5__FILE_OFFSET_BITS */
+
+/* Define for large files, on AIX-style hosts. */
+/* #undef H5__LARGE_FILES */
+
 /* Define to empty if `const' does not conform to ANSI C. */
 /* #undef H5_const */
 
@@ -670,8 +741,15 @@
 /* Define to `long int' if <sys/types.h> does not define. */
 /* #undef H5_off_t */
 
+/* Define to `long' if <sys/types.h> does not define. */
+/* #undef H5_ptrdiff_t */
+
 /* Define to `unsigned long' if <sys/types.h> does not define. */
 /* #undef H5_size_t */
 
 /* Define to `long' if <sys/types.h> does not define. */
+#ifndef _WIN64
 #define H5_ssize_t long
+#else
+#define H5_ssize_t long long
+#endif /* _WIN64 */
diff --git a/windows/tools/h5copy/testh5copy.bat b/windows/tools/h5copy/testh5copy.bat
index 7d74edb..c14b505 100644
--- a/windows/tools/h5copy/testh5copy.bat
+++ b/windows/tools/h5copy/testh5copy.bat
@@ -429,7 +429,7 @@ rem <none>
     )
 
     exit /b
-     
+   
 rem ##############################################################################
 rem ###           T H E   T E S T S                                            ###
 rem ##############################################################################
diff --git a/windows/tools/h5diff/testh5diff.bat b/windows/tools/h5diff/testh5diff.bat
index 9b73b60..b25cbde 100644
--- a/windows/tools/h5diff/testh5diff.bat
+++ b/windows/tools/h5diff/testh5diff.bat
@@ -59,6 +59,8 @@ set srcexclude1_2=h5diff_exclude1-2.h5
 set srcexclude2_1=h5diff_exclude2-1.h5
 set srcexclude2_2=h5diff_exclude2-2.h5
 set src_comp_vl_strs=h5diff_comp_vl_strs.h5
+set src_COMPS_ARRAY_VLEN1=compounds_array_vlen1.h5
+set src_COMPS_ARRAY_VLEN2=compounds_array_vlen2.h5
 set src_ATTR_VERBOSE_LEVEL_FILE1=h5diff_attr_v_level1.h5
 set src_ATTR_VERBOSE_LEVEL_FILE2=h5diff_attr_v_level2.h5
 
@@ -93,6 +95,8 @@ set exclude1_2=%indir%\h5diff_exclude1-2.h5
 set exclude2_1=%indir%\h5diff_exclude2-1.h5
 set exclude2_2=%indir%\h5diff_exclude2-2.h5
 set comp_vl_strs=%indir%\h5diff_comp_vl_strs.h5
+set COMPS_ARRAY_VLEN1=%indir%\compounds_array_vlen1.h5
+set COMPS_ARRAY_VLEN2=%indir%\compounds_array_vlen2.h5
 set ATTR_VERBOSE_LEVEL_FILE1=%indir%\h5diff_attr_v_level1.h5
 set ATTR_VERBOSE_LEVEL_FILE2=%indir%\h5diff_attr_v_level2.h5
 
@@ -194,15 +198,11 @@ rem
     
     rem Run test.
     (
-        rem echo.#############################
-        rem rem Remove quotes here, because Linux 'echo' command strips them
-        rem echo.Expected output for 'h5diff %params:"=%'
-        rem echo.#############################
         pushd testfiles
         %h5diff_bin% %params%
         popd
     ) > %actual% 2> %actual_err%
-	set EXIT_CODE=!errorlevel!
+  set EXIT_CODE=!errorlevel!
     rem save actual and actual_err in case they are needed later.
     copy /y %actual% %actual_sav% > nul
     call :stdout_filter %actual%
@@ -297,12 +297,12 @@ rem ############################################################################
     call :tooltest h5diff_17.txt -v %file1% %file2% 
 
     rem 1.71 test 32-bit INFINITY
-    call :testing %h5diff% -v %srcfile1% %srcfile1% /g1/fp19
-    call :tooltest h5diff_171.txt -v %file1% %file1% /g1/fp19 
+    call :testing %h5diff% -v %srcfile1% %srcfile1% /g1/fp19 /g1/fp19_COPY
+    call :tooltest h5diff_171.txt -v %file1% %file1% /g1/fp19 /g1/fp19_COPY
 
     rem 1.72 test 64-bit INFINITY
-    call :testing %h5diff% -v %srcfile1% %srcfile1% /g1/fp20
-    call :tooltest h5diff_172.txt -v %file1% %file1% /g1/fp20 
+    call :testing %h5diff% -v %srcfile1% %srcfile1% /g1/fp20 /g1/fp20_COPY
+    call :tooltest h5diff_172.txt -v %file1% %file1% /g1/fp20 /g1/fp20_COPY
 
     rem 1.8 quiet mode 
     call :testing %h5diff% -q %srcfile1% %srcfile2%
@@ -523,11 +523,21 @@ rem ############################################################################
     call :testing %h5diff% -n 1 %srcfile1% %srcfile2%  g1/dset3 g1/dset4
     call :tooltest h5diff_628.txt -n 1 %file1% %file2% g1/dset3 g1/dset4
 
-	rem This is disabled on *nix platforms
+  rem This is disabled on *nix platforms
     rem 6.29  non valid files
     call :testing %h5diff% file1.h6 file2.h6
     call :tooltest h5diff_629.txt file1.h6 file2.h6
 
+    rem ######################################################################
+    rem # NaN
+    rem ######################################################################
+    rem 6.30: test (NaN == NaN) must be true based on our documentation -- XCAO
+    call :testing %h5diff% -v -d "0.0001" %srcfile1% %srcfile1% g1/fp18 g1/fp18_COPY
+    call :tooltest h5diff_630.txt -v -d "0.0001" %file1% %file1% g1/fp18 g1/fp18_COPY
+    call :testing %h5diff% -v --use-system-epsilon %srcfile1% %srcfile1% g1/fp18 g1/fp18_COPY
+    call :tooltest h5diff_631.txt -v --use-system-epsilon %file1% %file1% g1/fp18 g1/fp18_COPY
+
+
     rem ########################################################################
     rem 7.  attributes
     rem ########################################################################
@@ -622,145 +632,145 @@ rem ############################################################################
     call :results -SKIP-
 
     rem   New option added #1368(E1)  - ADB 2/5/2009
-	rem not compable -c flag
-	call :testing %h5diff% %srcfile2% %srcfile2% g2/dset1  g2/dset2
+  rem not compable -c flag
+  call :testing %h5diff% %srcfile2% %srcfile2% g2/dset1  g2/dset2
     call :tooltest h5diff_200.txt %file2% %file2% g2/dset1  g2/dset2 
 
-	call :testing %h5diff% -c %srcfile2% %srcfile2% g2/dset1  g2/dset2
+  call :testing %h5diff% -c %srcfile2% %srcfile2% g2/dset1  g2/dset2
     call :tooltest h5diff_201.txt -c %file2% %file2% g2/dset1  g2/dset2 
 
-	call :testing %h5diff% -c %srcfile2% %srcfile2% g2/dset2  g2/dset3
+  call :testing %h5diff% -c %srcfile2% %srcfile2% g2/dset2  g2/dset3
     call :tooltest h5diff_202.txt -c %file2% %file2% g2/dset2  g2/dset3
 
-	call :testing %h5diff% -c %srcfile2% %srcfile2% g2/dset3  g2/dset4
+  call :testing %h5diff% -c %srcfile2% %srcfile2% g2/dset3  g2/dset4
     call :tooltest h5diff_203.txt -c %file2% %file2% g2/dset3  g2/dset4
 
-	call :testing %h5diff% -c %srcfile2% %srcfile2% g2/dset4  g2/dset5
+  call :testing %h5diff% -c %srcfile2% %srcfile2% g2/dset4  g2/dset5
     call :tooltest h5diff_204.txt -c %file2% %file2% g2/dset4  g2/dset5
 
-	call :testing %h5diff% -c %srcfile2% %srcfile2% g2/dset5  g2/dset6
+  call :testing %h5diff% -c %srcfile2% %srcfile2% g2/dset5  g2/dset6
     call :tooltest h5diff_205.txt -c %file2% %file2% g2/dset5  g2/dset6
-	
+  
     rem   New option added - ADB 2/11/2009
-	rem # not comparable in compound
-	call :testing %h5diff% -c %srcfile2% %srcfile2% g2/dset7  g2/dset8
+  rem # not comparable in compound
+  call :testing %h5diff% -c %srcfile2% %srcfile2% g2/dset7  g2/dset8
     call :tooltest h5diff_206.txt -c %file2% %file2% g2/dset7  g2/dset8
 
-	call :testing %h5diff% -c %srcfile2% %srcfile2% g2/dset8  g2/dset9
+  call :testing %h5diff% -c %srcfile2% %srcfile2% g2/dset8  g2/dset9
     call :tooltest h5diff_207.txt -c %file2% %file2% g2/dset8  g2/dset9
 
     rem #######################################################################
     rem # Links compare without --follow-symlinks nor --no-dangling-links
     rem #######################################################################
     rem test for bug1749
-	call :testing %h5diff% -v %srcfile12% %srcfile12% /link_g1 /link_g2
+  call :testing %h5diff% -v %srcfile12% %srcfile12% /link_g1 /link_g2
     call :tooltest h5diff_300.txt -v %file12% %file12% /link_g1 /link_g2
 
     rem #######################################################################
     rem # Links compare with --follow-symlinks Only
     rem #######################################################################
     rem soft links file to file
-	call :testing %h5diff% --follow-symlinks -v  %srcfile13% %srcfile13%
+  call :testing %h5diff% --follow-symlinks -v  %srcfile13% %srcfile13%
     call :tooltest h5diff_400.txt --follow-symlinks -v %file13% %file13% 
 
     rem softlink vs dset"
-	call :testing %h5diff% --follow-symlinks -v %srcfile13% %srcfile13% /softlink_dset1_1 /target_dset2
+  call :testing %h5diff% --follow-symlinks -v %srcfile13% %srcfile13% /softlink_dset1_1 /target_dset2
     call :tooltest h5diff_401.txt --follow-symlinks -v %file13% %file13% /softlink_dset1_1 /target_dset2
 
     rem dset vs softlink"
-	call :testing %h5diff% --follow-symlinks -v %srcfile13% %srcfile13% /target_dset2 /softlink_dset1_1
+  call :testing %h5diff% --follow-symlinks -v %srcfile13% %srcfile13% /target_dset2 /softlink_dset1_1
     call :tooltest h5diff_402.txt --follow-symlinks -v %file13% %file13% /target_dset2 /softlink_dset1_1
 
     rem softlink vs softlink"
-	call :testing %h5diff% --follow-symlinks -v %srcfile13% %srcfile13% /softlink_dset1_1 /softlink_dset2
+  call :testing %h5diff% --follow-symlinks -v %srcfile13% %srcfile13% /softlink_dset1_1 /softlink_dset2
     call :tooltest h5diff_403.txt --follow-symlinks -v %file13% %file13% /softlink_dset1_1 /softlink_dset2
 
     rem extlink vs extlink (FILE)"
-	call :testing %h5diff% --follow-symlinks -v %srcfile15% %srcfile15%
+  call :testing %h5diff% --follow-symlinks -v %srcfile15% %srcfile15%
     call :tooltest h5diff_404.txt --follow-symlinks -v %file15% %file15%
 
     rem extlink vs dset"
-	call :testing %h5diff% --follow-symlinks -v %srcfile15% %srcfile16% /ext_link_dset1 /target_group2/x_dset
+  call :testing %h5diff% --follow-symlinks -v %srcfile15% %srcfile16% /ext_link_dset1 /target_group2/x_dset
     call :tooltest h5diff_405.txt --follow-symlinks -v %file15% %file16% /ext_link_dset1 /target_group2/x_dset
 
     rem dset vs extlink"
-	call :testing %h5diff% --follow-symlinks -v %srcfile16% %srcfile15% /target_group2/x_dset /ext_link_dset1
+  call :testing %h5diff% --follow-symlinks -v %srcfile16% %srcfile15% /target_group2/x_dset /ext_link_dset1
     call :tooltest h5diff_406.txt --follow-symlinks -v %file16% %file15% /target_group2/x_dset /ext_link_dset1
 
     rem extlink vs extlink"
-	call :testing %h5diff% --follow-symlinks -v %srcfile15% %srcfile15% /ext_link_dset1 /ext_link_dset2
+  call :testing %h5diff% --follow-symlinks -v %srcfile15% %srcfile15% /ext_link_dset1 /ext_link_dset2
     call :tooltest h5diff_407.txt --follow-symlinks -v %file15% %file15% /ext_link_dset1 /ext_link_dset2
 
     rem softlink vs extlink"
-	call :testing %h5diff% --follow-symlinks -v %srcfile13% %srcfile15% /softlink_dset1_1 /ext_link_dset2
+  call :testing %h5diff% --follow-symlinks -v %srcfile13% %srcfile15% /softlink_dset1_1 /ext_link_dset2
     call :tooltest h5diff_408.txt --follow-symlinks -v %file13% %file15% /softlink_dset1_1 /ext_link_dset2
 
     rem extlink vs softlink "
-	call :testing %h5diff% --follow-symlinks -v %srcfile15% %srcfile13% /ext_link_dset2 /softlink_dset1_1
+  call :testing %h5diff% --follow-symlinks -v %srcfile15% %srcfile13% /ext_link_dset2 /softlink_dset1_1
     call :tooltest h5diff_409.txt --follow-symlinks -v %file15% %file13% /ext_link_dset2 /softlink_dset1_1
 
     rem linked_softlink vs linked_softlink (FILE)"
-	call :testing %h5diff% --follow-symlinks -v %srcfile14% %srcfile14%
+  call :testing %h5diff% --follow-symlinks -v %srcfile14% %srcfile14%
     call :tooltest h5diff_410.txt --follow-symlinks -v %file14% %file14%
 
     rem dset2 vs linked_softlink_dset1"
-	call :testing %h5diff% --follow-symlinks -v %srcfile14% %srcfile14% /target_dset2 /softlink1_to_slink2
+  call :testing %h5diff% --follow-symlinks -v %srcfile14% %srcfile14% /target_dset2 /softlink1_to_slink2
     call :tooltest h5diff_411.txt --follow-symlinks -v %file14% %file14% /target_dset2 /softlink1_to_slink2
 
     rem    rem linked_softlink_dset1 vs dset2"
-	call :testing %h5diff% --follow-symlinks -v %srcfile14% %srcfile14% /softlink1_to_slink2 /target_dset2
+  call :testing %h5diff% --follow-symlinks -v %srcfile14% %srcfile14% /softlink1_to_slink2 /target_dset2
     call :tooltest h5diff_412.txt --follow-symlinks -v %file14% %file14% /softlink1_to_slink2 /target_dset2
 
     rem linked_softlink_to_dset1 vs linked_softlink_to_dset2"
-	call :testing %h5diff% --follow-symlinks -v %srcfile14% %srcfile14% /softlink1_to_slink2 /softlink2_to_slink2
+  call :testing %h5diff% --follow-symlinks -v %srcfile14% %srcfile14% /softlink1_to_slink2 /softlink2_to_slink2
     call :tooltest h5diff_413.txt --follow-symlinks -v %file14% %file14% /softlink1_to_slink2 /softlink2_to_slink2
 
     rem group vs linked_softlink_group1"
-	call :testing %h5diff% --follow-symlinks -v %srcfile14% %srcfile14% /target_group /softlink3_to_slink2
+  call :testing %h5diff% --follow-symlinks -v %srcfile14% %srcfile14% /target_group /softlink3_to_slink2
     call :tooltest h5diff_414.txt --follow-symlinks -v %file14% %file14% /target_group /softlink3_to_slink2
 
     rem linked_softlink_group1 vs group"
-	call :testing %h5diff% --follow-symlinks -v %srcfile14% %srcfile14% /softlink3_to_slink2 /target_group
+  call :testing %h5diff% --follow-symlinks -v %srcfile14% %srcfile14% /softlink3_to_slink2 /target_group
     call :tooltest h5diff_415.txt --follow-symlinks -v %file14% %file14% /softlink3_to_slink2 /target_group
 
     rem linked_softlink_to_group1 vs linked_softlink_to_group2"
-	call :testing %h5diff% --follow-symlinks -v %srcfile14% %srcfile14% /softlink3_to_slink2 /softlink4_to_slink2
+  call :testing %h5diff% --follow-symlinks -v %srcfile14% %srcfile14% /softlink3_to_slink2 /softlink4_to_slink2
     call :tooltest h5diff_416.txt --follow-symlinks -v %file14% %file14% /softlink3_to_slink2 /softlink4_to_slink2
 
     rem non-exist-softlink vs softlink"
-	call :testing %h5diff% --follow-symlinks -v %srcfile13% %srcfile13% /softlink_noexist /softlink_dset2
+  call :testing %h5diff% --follow-symlinks -v %srcfile13% %srcfile13% /softlink_noexist /softlink_dset2
     call :tooltest h5diff_417.txt --follow-symlinks -v %file13% %file13% /softlink_noexist /softlink_dset2
 
     rem softlink vs non-exist-softlink"
-	call :testing %h5diff% --follow-symlinks -v %srcfile13% %srcfile13% /softlink_dset2 /softlink_noexist
+  call :testing %h5diff% --follow-symlinks -v %srcfile13% %srcfile13% /softlink_dset2 /softlink_noexist
     call :tooltest h5diff_418.txt --follow-symlinks -v %file13% %file13% /softlink_dset2 /softlink_noexist
 
     rem non-exist-extlink_file vs extlink"
-	call :testing %h5diff% --follow-symlinks -v %srcfile15% %srcfile15% /ext_link_noexist2 /ext_link_dset2
+  call :testing %h5diff% --follow-symlinks -v %srcfile15% %srcfile15% /ext_link_noexist2 /ext_link_dset2
     call :tooltest h5diff_419.txt --follow-symlinks -v %file15% %file15% /ext_link_noexist2 /ext_link_dset2
 
     rem exlink vs non-exist-extlink_file"
-	call :testing %h5diff% --follow-symlinks -v %srcfile15% %srcfile15% /ext_link_dset2 /ext_link_noexist2
+  call :testing %h5diff% --follow-symlinks -v %srcfile15% %srcfile15% /ext_link_dset2 /ext_link_noexist2
     call :tooltest h5diff_420.txt --follow-symlinks -v %file15% %file15% /ext_link_dset2 /ext_link_noexist2
 
     rem extlink vs non-exist-extlink_obj"
-	call :testing %h5diff% --follow-symlinks -v %srcfile15% %srcfile15% /ext_link_dset2 /ext_link_noexist1
+  call :testing %h5diff% --follow-symlinks -v %srcfile15% %srcfile15% /ext_link_dset2 /ext_link_noexist1
     call :tooltest h5diff_421.txt --follow-symlinks -v %file15% %file15% /ext_link_dset2 /ext_link_noexist1
 
     rem non-exist-extlink_obj vs extlink"
-	call :testing %h5diff% --follow-symlinks -v %srcfile15% %srcfile15% /ext_link_noexist1 /ext_link_dset2
+  call :testing %h5diff% --follow-symlinks -v %srcfile15% %srcfile15% /ext_link_noexist1 /ext_link_dset2
     call :tooltest h5diff_422.txt --follow-symlinks -v %file15% %file15% /ext_link_noexist1 /ext_link_dset2
 
     rem extlink_to_softlink_to_dset1 vs dset2"
-	call :testing %h5diff% --follow-symlinks -v %srcfile17% %srcfile18% /ext_link_to_slink1 /dset2
+  call :testing %h5diff% --follow-symlinks -v %srcfile17% %srcfile18% /ext_link_to_slink1 /dset2
     call :tooltest h5diff_423.txt --follow-symlinks -v %file17% %file18% /ext_link_to_slink1 /dset2
 
     rem dset2 vs extlink_to_softlink_to_dset1"
-	call :testing %h5diff% --follow-symlinks -v %srcfile18% %srcfile17% /dset2 /ext_link_to_slink1
+  call :testing %h5diff% --follow-symlinks -v %srcfile18% %srcfile17% /dset2 /ext_link_to_slink1
     call :tooltest h5diff_424.txt --follow-symlinks -v %file18% %file17% /dset2 /ext_link_to_slink1
 
     rem extlink_to_softlink_to_dset1 vs extlink_to_softlink_to_dset2"
-	call :testing %h5diff% --follow-symlinks -v %srcfile17% %srcfile17% /ext_link_to_slink1 /ext_link_to_slink2
+  call :testing %h5diff% --follow-symlinks -v %srcfile17% %srcfile17% /ext_link_to_slink1 /ext_link_to_slink2
     call :tooltest h5diff_425.txt --follow-symlinks -v %file17% %file17% /ext_link_to_slink1 /ext_link_to_slink2
 
 
@@ -768,43 +778,43 @@ rem ############################################################################
     rem # Dangling links compare (--follow-symlinks and --no-dangling-links)
     rem #######################################################################
     rem dangling links --follow-symlinks (FILE to FILE)
-	call :testing %h5diff% --follow-symlinks -v %srclnkfile1% %srclnkfile2%
+  call :testing %h5diff% --follow-symlinks -v %srclnkfile1% %srclnkfile2%
     call :tooltest h5diff_450.txt --follow-symlinks -v %lnkfile1% %lnkfile2%
 
     rem dangling links --follow-symlinks and --no-dangling-links (FILE to FILE)
-	call :testing %h5diff% --follow-symlinks -v --no-dangling-links  %srclnkfile1% %srclnkfile2%
+  call :testing %h5diff% --follow-symlinks -v --no-dangling-links  %srclnkfile1% %srclnkfile2%
     call :tooltest h5diff_451.txt --follow-symlinks -v --no-dangling-links  %lnkfile1% %lnkfile2% 
 
     rem try --no-dangling-links without --follow-symlinks options
-	call :testing %h5diff%  --no-dangling-links %srcfile13% %srcfile13% 
+  call :testing %h5diff%  --no-dangling-links %srcfile13% %srcfile13% 
     call :tooltest h5diff_452.txt  --no-dangling-links %file13% %file13% 
 
     rem dangling link found for soft links (FILE to FILE)
-	call :testing %h5diff% --follow-symlinks -v --no-dangling-links %srcfile13% %srcfile13%
+  call :testing %h5diff% --follow-symlinks -v --no-dangling-links %srcfile13% %srcfile13%
     call :tooltest h5diff_453.txt --follow-symlinks -v --no-dangling-links %file13% %file13% 
 
     rem dangling link found for soft links (obj to obj)
-	call :testing %h5diff% --follow-symlinks -v --no-dangling-links %srcfile13% %srcfile13% /softlink_dset2 /softlink_noexist
+  call :testing %h5diff% --follow-symlinks -v --no-dangling-links %srcfile13% %srcfile13% /softlink_dset2 /softlink_noexist
     call :tooltest h5diff_454.txt --follow-symlinks -v --no-dangling-links %file13% %file13% /softlink_dset2 /softlink_noexist
 
     rem dangling link found for soft links (obj to obj) Both dangle links
-	call :testing %h5diff% --follow-symlinks -v --no-dangling-links %srcfile13% %srcfile13% /softlink_noexist /softlink_noexist
+  call :testing %h5diff% --follow-symlinks -v --no-dangling-links %srcfile13% %srcfile13% /softlink_noexist /softlink_noexist
     call :tooltest h5diff_455.txt --follow-symlinks -v --no-dangling-links %file13% %file13% /softlink_noexist /softlink_noexist
 
     rem dangling link found for ext links (FILE to FILE)
-	call :testing %h5diff% --follow-symlinks -v --no-dangling-links %srcfile15% %srcfile15%
+  call :testing %h5diff% --follow-symlinks -v --no-dangling-links %srcfile15% %srcfile15%
     call :tooltest h5diff_456.txt --follow-symlinks -v --no-dangling-links %file15% %file15%
 
     rem dangling link found for ext links (obj to obj). target file exist
-	call :testing %h5diff% --follow-symlinks -v --no-dangling-links %srcfile15% %srcfile15% /ext_link_dset1 /ext_link_noexist1
+  call :testing %h5diff% --follow-symlinks -v --no-dangling-links %srcfile15% %srcfile15% /ext_link_dset1 /ext_link_noexist1
     call :tooltest h5diff_457.txt --follow-symlinks -v --no-dangling-links %file15% %file15% /ext_link_dset1 /ext_link_noexist1
 
     rem dangling link found for ext links (obj to obj). target file NOT exist
-	call :testing %h5diff% --follow-symlinks -v --no-dangling-links %srcfile15% %srcfile15% /ext_link_dset1 /ext_link_noexist2
+  call :testing %h5diff% --follow-symlinks -v --no-dangling-links %srcfile15% %srcfile15% /ext_link_dset1 /ext_link_noexist2
     call :tooltest h5diff_458.txt --follow-symlinks -v --no-dangling-links %file15% %file15% /ext_link_dset1 /ext_link_noexist2
 
     rem dangling link found for ext links (obj to obj). Both dangle links
-	call :testing %h5diff% --follow-symlinks -v --no-dangling-links %srcfile15% %srcfile15% /ext_link_noexist1 /ext_link_noexist2
+  call :testing %h5diff% --follow-symlinks -v --no-dangling-links %srcfile15% %srcfile15% /ext_link_noexist1 /ext_link_noexist2
     call :tooltest h5diff_459.txt --follow-symlinks -v --no-dangling-links %file15% %file15% /ext_link_noexist1 /ext_link_noexist2
 
     rem ########################################################################
@@ -812,57 +822,57 @@ rem ############################################################################
     rem ########################################################################
     rem root 
     call :testing %h5diff% -v %src_grp_recurse1% %src_grp_recurse2% / /
-	call :tooltest h5diff_500.txt -v %grp_recurse1% %grp_recurse2% / /
+  call :tooltest h5diff_500.txt -v %grp_recurse1% %grp_recurse2% / /
 
     call :testing %h5diff% -v --follow-symlinks %src_grp_recurse1% %src_grp_recurse2% / /
-	call :tooltest h5diff_501.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% / /
+  call :tooltest h5diff_501.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% / /
 
     rem root vs group
     call :testing %h5diff% -v %src_grp_recurse1% %src_grp_recurse2% / /grp1/grp2/grp3
-	call :tooltest h5diff_502.txt -v %grp_recurse1% %grp_recurse2% / /grp1/grp2/grp3
+  call :tooltest h5diff_502.txt -v %grp_recurse1% %grp_recurse2% / /grp1/grp2/grp3
 
     rem group vs group (same name and structure)
     call :testing %h5diff% -v %src_grp_recurse1% %src_grp_recurse2% /grp1 /grp1
-	call :tooltest h5diff_503.txt -v %grp_recurse1% %grp_recurse2% /grp1 /grp1
+  call :tooltest h5diff_503.txt -v %grp_recurse1% %grp_recurse2% /grp1 /grp1
 
     rem group vs group (different name and structure)
     call :testing %h5diff% -v %src_grp_recurse1% %src_grp_recurse2% /grp1/grp2 /grp1/grp2/grp3
-	call :tooltest h5diff_504.txt -v %grp_recurse1% %grp_recurse2% /grp1/grp2 /grp1/grp2/grp3
+  call :tooltest h5diff_504.txt -v %grp_recurse1% %grp_recurse2% /grp1/grp2 /grp1/grp2/grp3
 
     rem groups vs soft-link
     call :testing %h5diff%
-	call :tooltest h5diff_505.txt -v %grp_recurse1% %grp_recurse2% /grp1 /slink_grp1
+  call :tooltest h5diff_505.txt -v %grp_recurse1% %grp_recurse2% /grp1 /slink_grp1
 
     call :testing %h5diff% -v --follow-symlinks %src_grp_recurse1% %src_grp_recurse2% /grp1/grp2 /slink_grp2
-	call :tooltest h5diff_506.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% /grp1/grp2 /slink_grp2
+  call :tooltest h5diff_506.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% /grp1/grp2 /slink_grp2
 
     rem groups vs ext-link
     call :testing %h5diff% -v %src_grp_recurse1% %src_grp_recurse2% /grp1 /elink_grp1
-	call :tooltest h5diff_507.txt -v %grp_recurse1% %grp_recurse2% /grp1 /elink_grp1
+  call :tooltest h5diff_507.txt -v %grp_recurse1% %grp_recurse2% /grp1 /elink_grp1
 
     call :testing %h5diff% -v --follow-symlinks %src_grp_recurse1% %src_grp_recurse2% /grp1 /elink_grp1
-	call :tooltest h5diff_508.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% /grp1 /elink_grp1
+  call :tooltest h5diff_508.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% /grp1 /elink_grp1
 
     rem soft-link vs ext-link
     call :testing %h5diff% -v %src_grp_recurse1% %src_grp_recurse2% /slink_grp1 /elink_grp1
-	call :tooltest h5diff_509.txt -v %grp_recurse1% %grp_recurse2% /slink_grp1 /elink_grp1
+  call :tooltest h5diff_509.txt -v %grp_recurse1% %grp_recurse2% /slink_grp1 /elink_grp1
 
     call :testing %h5diff% -v --follow-symlinks %src_grp_recurse1% %src_grp_recurse2% /slink_grp1 /elink_grp1
-	call :tooltest h5diff_510.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% /slink_grp1 /elink_grp1
+  call :tooltest h5diff_510.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% /slink_grp1 /elink_grp1
 
     rem circled ext links
     call :testing %h5diff% -v %src_grp_recurse1% %src_grp_recurse2% /grp10 /grp11
-	call :tooltest h5diff_511.txt -v %grp_recurse1% %grp_recurse2% /grp10 /grp11
+  call :tooltest h5diff_511.txt -v %grp_recurse1% %grp_recurse2% /grp10 /grp11
 
     call :testing %h5diff% -v --follow-symlinks %src_grp_recurse1% %src_grp_recurse2% /grp10 /grp11
-	call :tooltest h5diff_512.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% /grp10 /grp11
+  call :tooltest h5diff_512.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% /grp10 /grp11
 
     rem circled soft2ext-link vs soft2ext-link
     call :testing %h5diff% -v %src_grp_recurse1% %src_grp_recurse2% /slink_grp10 /slink_grp11
-	call :tooltest h5diff_513.txt -v %grp_recurse1% %grp_recurse2% /slink_grp10 /slink_grp11
+  call :tooltest h5diff_513.txt -v %grp_recurse1% %grp_recurse2% /slink_grp10 /slink_grp11
 
     call :testing %h5diff% -v --follow-symlinks %src_grp_recurse1% %src_grp_recurse2% /slink_grp10 /slink_grp11
-	call :tooltest h5diff_514.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% /slink_grp10 /slink_grp11
+  call :tooltest h5diff_514.txt -v --follow-symlinks %grp_recurse1% %grp_recurse2% /slink_grp10 /slink_grp11
 
     rem ######################################################################
     rem # Test for group recursive diff via multi-linked external links 
@@ -884,9 +894,9 @@ rem ############################################################################
     call :tooltest h5diff_518.txt -v --follow-symlinks %grp_recurse1_ext% %grp_recurse2_ext1% /g1
 
 
-    rem ##############################################################################
+    rem #######################################################################
     rem # Exclude objects (--exclude-path)
-    rem ##############################################################################
+    rem #######################################################################
     rem #-------------------------------------------------
     rem # Same structure, same names and different value.
 
@@ -913,13 +923,46 @@ rem ############################################################################
     call :testing %h5diff% -v --exclude-path "/dset3" %srcexclude1_1% %srcexclude1_2% /group1
     call :tooltest h5diff_484.txt -v --exclude-path "/dset3"  %exclude1_1% %exclude1_2% /group1
 
-    rem ##############################################################################
+    rem #######################################################################
     rem # diff various multiple vlen and fixed strings in a compound type dataset
-    rem ##############################################################################
-    call :testing %h5diff% -v %src_comp_vl_strs% %src_comp_vl_strs%
-    call :tooltest h5diff_530.txt -v  %comp_vl_strs% %comp_vl_strs%
+    rem #######################################################################
+    call :testing %h5diff% -v %src_comp_vl_strs% %src_comp_vl_strs% /group /group_copy
+    call :tooltest h5diff_530.txt -v  %comp_vl_strs% %comp_vl_strs% /group /group_copy
+
+    rem # #####################################################################
+    rem # # Test container types (array,vlen) with multiple nested compound types
+    rem # # Complex compound types in dataset and attribute
+    rem # #####################################################################
+    call :testing %h5diff% -v %src_COMPS_ARRAY_VLEN1% %src_COMPS_ARRAY_VLEN2%
+    call :tooltest h5diff_540.txt -v %COMPS_ARRAY_VLEN1% %COMPS_ARRAY_VLEN2%
+
+    rem #######################################################################
+    rem # Test mutually exclusive options 
+    rem #######################################################################
+
+    rem ------------------------------------------------------
+    rem Test with -d , -p and --use-system-epsilon. 
+    call :testing %h5diff% -v -d 5 -p 0.05 --use-system-epsilon %srcfile1% %srcfile2% /g1/dset3 /g1/dset4
+    call :tooltest h5diff_640.txt -v -d 5 -p 0.05 --use-system-epsilon %file1% %file2% /g1/dset3 /g1/dset4
+
+    call :testing %h5diff% -v -d 5 -p 0.05 %srcfile1% %srcfile2% /g1/dset3 /g1/dset4
+    call :tooltest h5diff_641.txt -v -d 5 -p 0.05 %file1% %file2% /g1/dset3 /g1/dset4
+
+    call :testing %h5diff% -v -p 0.05 -d 5 %srcfile1% %srcfile2% /g1/dset3 /g1/dset4
+    call :tooltest h5diff_642.txt -v -p 0.05 -d 5 %file1% %file2% /g1/dset3 /g1/dset4
+
+    call :testing %h5diff% -v -d 5 --use-system-epsilon %srcfile1% %srcfile2% /g1/dset3 /g1/dset4
+    call :tooltest h5diff_643.txt -v -d 5 --use-system-epsilon %file1% %file2% /g1/dset3 /g1/dset4
+
+    call :testing %h5diff% -v --use-system-epsilon -d 5 %srcfile1% %srcfile2% /g1/dset3 /g1/dset4
+    call :tooltest h5diff_644.txt -v --use-system-epsilon -d 5 %file1% %file2% /g1/dset3 /g1/dset4
+
+    call :testing %h5diff% -v -p 0.05 --use-system-epsilon %srcfile1% %srcfile2% /g1/dset3 /g1/dset4
+    call :tooltest h5diff_645.txt -v -p 0.05 --use-system-epsilon %file1% %file2% /g1/dset3 /g1/dset4
 
-	
+    call :testing %h5diff% -v --use-system-epsilon -p 0.05 %srcfile1% %srcfile2% /g1/dset3 /g1/dset4
+    call :tooltest h5diff_646.txt -v --use-system-epsilon -p 0.05 %file1% %file2% /g1/dset3 /g1/dset4
+  
     rem #######################################################################
     rem # END
     rem #######################################################################
diff --git a/windows/tools/h5dump/testh5dump.bat b/windows/tools/h5dump/testh5dump.bat
index 1807113..c41e4b2 100644
--- a/windows/tools/h5dump/testh5dump.bat
+++ b/windows/tools/h5dump/testh5dump.bat
@@ -33,8 +33,6 @@ call :detect_filter fletcher32
 call :detect_filter nbit
 call :detect_filter scaleoffset
 
-call :detect_packedbits
-
 rem The tool name
 set dumper=h5dump%2
 rem The path of the tool library
@@ -111,10 +109,6 @@ rem
         rem We need to replace PERCENT here with "%" for tests that use percents
         rem Also remove quotes here, because Linux 'echo' command strips them.
         rem --SJW 8/24/07
-        set params_echo=!params:PERCENT=%%!
-        echo.#############################
-        echo.Expected output for 'h5dump !params_echo:"=!'
-        echo.#############################
         pushd %CD%\..\testfiles
         %dumper_bin% !params:PERCENT=%%!
         popd
@@ -293,16 +287,6 @@ rem --SJW 9/4/07
     
     exit /b
 
-:detect_packedbits
-    findstr /b /i /c:"#define H5_HAVE_H5DUMP_PACKED_BITS" %h5pubconf% > nul
-    if %errorlevel% equ 0 (
-        set Have_Packed_Bits=yes
-    ) else (
-        set Have_Packed_Bits=no
-    )
-    
-    exit /b
-
 
 rem ############################################################################
 rem ############################################################################
@@ -311,6 +295,9 @@ rem ############################################################################
 rem ############################################################################
 :main
 
+    rem test for signed/unsigned datasets
+    call :tooltest packedbits.ddl packedbits.h5
+
     rem test for displaying groups
     call :tooltest tgroup-1.ddl tgroup.h5
     rem test for displaying the selected groups
@@ -427,11 +414,7 @@ rem ############################################################################
 
     rem test failure handling
     rem Missing file name
-	if "%Have_Packed_Bits%"=="yes" (
-		call :tooltest tnofilename-with-packed-bits.ddl 
-	) else (
-		call :tooltest tnofilename.ddl 
-	)
+    call :tooltest tnofilename.ddl 
 
     rem rev. 2004
 
@@ -581,11 +564,11 @@ rem ############################################################################
     call :tooltest1   tbin1.ddl -d integer -o out1.bin  -b     tbinary.h5
     call :importtest out1.bin -c out3.h5import -o out1.h5
     call :difftest tbinary.h5 out1.h5 /integer /integer
-
-    call :tooltest1   tbin2.ddl -b BE -d float  -o out2.bin      tbinary.h5
-
+    
+    call :tooltest1 tbin2.ddl -b BE -d float -o out2.bin tbinary.h5
+    
     rem the NATIVE test can be validated with h5import/h5diff
-    call :tooltest1   tbin3.ddl -d integer -o out3.bin -b NATIVE tbinary.h5
+    call :tooltest1 tbin3.ddl -d integer -o out3.bin -b NATIVE tbinary.h5
     call :importtest out3.bin -c out3.h5import -o out3.h5
     call :difftest tbinary.h5 out3.h5 /integer /integer
 
@@ -596,7 +579,7 @@ rem ############################################################################
         for /l %%a in (1,1,4) do del /f %testdir%\out%%a.bin
         del /f %testdir%\out3.h5
     )
-    
+
     rem test for dataset region references 
     call :tooltest tdatareg.ddl tdatareg.h5
     call :tooltest tdataregR.ddl -R tdatareg.h5
@@ -621,97 +604,91 @@ rem ############################################################################
     rem Note: Make sure to use PERCENT rather than "%", because Windows needs
     rem to handle it specially.  --SJW 5/12/08
     call :tooltest tfpformat.ddl -m PERCENT.7f tfpformat.h5
-    
+
     rem tests for traversal of external links
     call :tooltest textlinksrc.ddl textlinksrc.h5
     call :tooltest textlinkfar.ddl textlinkfar.h5
 
     rem test for dangling external links
     call :tooltest textlink.ddl textlink.h5
-    
-    rem tests for traversal of external links
-    call :tooltest textlinksrc.ddl textlinksrc.h5
-    call :tooltest textlinkfar.ddl textlinkfar.h5
-
-	if "%Have_Packed_Bits%"=="yes" (
-		rem test for dataset packed bits 
-		rem Set up xCMD to test or skip.
-        rem Limits:
-        rem Maximum number of packed bits is 8 (for now).
-        rem Maximum integer size is 64 (for now).
-        rem Maximun Offset is 63 (Maximum size - 1).
-        rem Maximum Offset+Length is 64 (Maximum size).
-        rem Tests:
-        rem Normal operation on both signed and unsigned int datasets.
-        rem Sanity check
-        rem Their rawdata output should be the same.
-        call :tooltest tpbitsSignedWhole.ddl -d /DS08BITS -M 0,8 packedbits.h5
-        call :tooltest tpbitsUnsignedWhole.ddl -d /DU08BITS -M 0,8 packedbits.h5
-        call :tooltest tpbitsSignedIntWhole.ddl -d /DS16BITS -M 0,16 packedbits.h5
-        call :tooltest tpbitsUnsignedIntWhole.ddl -d /DU16BITS -M 0,16 packedbits.h5
-        call :tooltest tpbitsSignedLongWhole.ddl -d /DS32BITS -M 0,32 packedbits.h5
-        call :tooltest tpbitsUnsignedLongWhole.ddl -d /DU32BITS -M 0,32 packedbits.h5
-        call :tooltest tpbitsSignedLongLongWhole.ddl -d /DS64BITS -M 0,64 packedbits.h5
-        call :tooltest tpbitsUnsignedLongLongWhole.ddl -d /DU64BITS -M 0,64 packedbits.h5
-        call :tooltest tpbitsSignedLongLongWhole63.ddl -d /DS64BITS -M 0,63 packedbits.h5
-        call :tooltest tpbitsUnsignedLongLongWhole63.ddl -d /DU64BITS -M 0,63 packedbits.h5
-        call :tooltest tpbitsSignedLongLongWhole1.ddl -d /DS64BITS -M 1,63 packedbits.h5
-        call :tooltest tpbitsUnsignedLongLongWhole1.ddl -d /DU64BITS -M 1,63 packedbits.h5
-        rem Half sections
-        call :tooltest tpbitsSigned4.ddl -d /DS08BITS -M 0,4,4,4 packedbits.h5
-        call :tooltest tpbitsUnsigned4.ddl -d /DU08BITS -M 0,4,4,4 packedbits.h5
-        call :tooltest tpbitsSignedInt8.ddl -d /DS16BITS -M 0,8,8,8 packedbits.h5
-        call :tooltest tpbitsUnsignedInt8.ddl -d /DU16BITS -M 0,8,8,8 packedbits.h5
-        call :tooltest tpbitsSignedLong16.ddl -d /DS32BITS -M 0,16,16,16 packedbits.h5
-        call :tooltest tpbitsUnsignedLong16.ddl -d /DU32BITS -M 0,16,16,16 packedbits.h5
-        call :tooltest tpbitsSignedLongLong32.ddl -d /DS64BITS -M 0,32,32,32 packedbits.h5
-        call :tooltest tpbitsUnsignedLongLong32.ddl -d /DU64BITS -M 0,32,32,32 packedbits.h5
-        rem Quarter sections
-        call :tooltest tpbitsSigned2.ddl -d /DS08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5
-        call :tooltest tpbitsUnsigned2.ddl -d /DU08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5
-        call :tooltest tpbitsSignedInt4.ddl -d /DS16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5
-        call :tooltest tpbitsUnsignedInt4.ddl -d /DU16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5
-        call :tooltest tpbitsSignedLong8.ddl -d /DS32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5
-        call :tooltest tpbitsUnsignedLong8.ddl -d /DU32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5
-        call :tooltest tpbitsSignedLongLong16.ddl -d /DS64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5
-        call :tooltest tpbitsUnsignedLongLong16.ddl -d /DU64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5
-        rem Begin and End
-        call :tooltest tpbitsSigned.ddl -d /DS08BITS -M 0,2,2,6 packedbits.h5
-        call :tooltest tpbitsUnsigned.ddl -d /DU08BITS -M 0,2,2,6 packedbits.h5
-        call :tooltest tpbitsSignedInt.ddl -d /DS16BITS -M 0,2,10,6 packedbits.h5
-        call :tooltest tpbitsUnsignedInt.ddl -d /DU16BITS -M 0,2,10,6 packedbits.h5
-        call :tooltest tpbitsSignedLong.ddl -d /DS32BITS -M 0,2,26,6 packedbits.h5
-        call :tooltest tpbitsUnsignedLong.ddl -d /DU32BITS -M 0,2,26,6 packedbits.h5
-        call :tooltest tpbitsSignedLongLong.ddl -d /DS64BITS -M 0,2,58,6 packedbits.h5
-        call :tooltest tpbitsUnsignedLongLong.ddl -d /DU64BITS -M 0,2,58,6 packedbits.h5
-        rem Overlapped packed bits.
-        call :tooltest tpbitsOverlapped.ddl -d /DS08BITS -M 0,1,1,1,2,1,0,3 packedbits.h5
-        rem Maximum number of packed bits.
-        call :tooltest tpbitsMax.ddl -d /DS08BITS -M 0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5
-        rem Compound type.
-        call :tooltest tpbitsCompound.ddl -d /dset1 -M 0,1,1,1 tcompound.h5
-        rem Array type.
-        call :tooltest tpbitsArray.ddl -d /Dataset1 -M 0,1,1,1 tarray1.h5
-        rem Test Error handling.
-        rem Too many packed bits requested. Max is 8 for now.
-        call :tooltest tpbitsMaxExceeded.ddl -d /DS08BITS -M 0,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5
-        rem Offset too large. Max is 7 (8-1) for now.
-        call :tooltest tpbitsOffsetExceeded.ddl -d /DS08BITS -M 64,1 packedbits.h5
-        call :tooltest tpbitsCharOffsetExceeded.ddl -d /DS08BITS -M 8,1 packedbits.h5
-        call :tooltest tpbitsIntOffsetExceeded.ddl -d /DS16BITS -M 16,1 packedbits.h5
-        call :tooltest tpbitsLongOffsetExceeded.ddl -d /DS32BITS -M 32,1 packedbits.h5
-        rem Bad offset, must not be negative.
-        call :tooltest tpbitsOffsetNegative.ddl -d /DS08BITS -M -1,1 packedbits.h5
-        rem Bad length, must not be positive.
-        call :tooltest tpbitsLengthPositive.ddl -d /DS08BITS -M 4,0 packedbits.h5
-        rem Offset+Length is too large. Max is 8 for now.
-        call :tooltest tpbitsLengthExceeded.ddl -d /DS08BITS -M 37,28 packedbits.h5
-        call :tooltest tpbitsCharLengthExceeded.ddl -d /DS08BITS -M 2,7 packedbits.h5
-        call :tooltest tpbitsIntLengthExceeded.ddl -d /DS16BITS -M 10,7 packedbits.h5
-        call :tooltest tpbitsLongLengthExceeded.ddl -d /DS32BITS -M 26,7 packedbits.h5
-        rem Incomplete pair of packed bits request.
-        call :tooltest tpbitsIncomplete.ddl -d /DS08BITS -M 0,2,2,1,0,2,2, packedbits.h5
-	)
+
+  rem test for dataset packed bits 
+  rem Set up xCMD to test or skip.
+    rem Limits:
+    rem Maximum number of packed bits is 8 (for now).
+    rem Maximum integer size is 64 (for now).
+    rem Maximun Offset is 63 (Maximum size - 1).
+    rem Maximum Offset+Length is 64 (Maximum size).
+    rem Tests:
+    rem Normal operation on both signed and unsigned int datasets.
+    rem Sanity check
+    rem Their rawdata output should be the same.
+    call :tooltest tpbitsSignedWhole.ddl -d /DS08BITS -M 0,8 packedbits.h5
+    call :tooltest tpbitsUnsignedWhole.ddl -d /DU08BITS -M 0,8 packedbits.h5
+    call :tooltest tpbitsSignedIntWhole.ddl -d /DS16BITS -M 0,16 packedbits.h5
+    call :tooltest tpbitsUnsignedIntWhole.ddl -d /DU16BITS -M 0,16 packedbits.h5
+    call :tooltest tpbitsSignedLongWhole.ddl -d /DS32BITS -M 0,32 packedbits.h5
+    call :tooltest tpbitsUnsignedLongWhole.ddl -d /DU32BITS -M 0,32 packedbits.h5
+    call :tooltest tpbitsSignedLongLongWhole.ddl -d /DS64BITS -M 0,64 packedbits.h5
+    call :tooltest tpbitsUnsignedLongLongWhole.ddl -d /DU64BITS -M 0,64 packedbits.h5
+    call :tooltest tpbitsSignedLongLongWhole63.ddl -d /DS64BITS -M 0,63 packedbits.h5
+    call :tooltest tpbitsUnsignedLongLongWhole63.ddl -d /DU64BITS -M 0,63 packedbits.h5
+    call :tooltest tpbitsSignedLongLongWhole1.ddl -d /DS64BITS -M 1,63 packedbits.h5
+    call :tooltest tpbitsUnsignedLongLongWhole1.ddl -d /DU64BITS -M 1,63 packedbits.h5
+    rem Half sections
+    call :tooltest tpbitsSigned4.ddl -d /DS08BITS -M 0,4,4,4 packedbits.h5
+    call :tooltest tpbitsUnsigned4.ddl -d /DU08BITS -M 0,4,4,4 packedbits.h5
+    call :tooltest tpbitsSignedInt8.ddl -d /DS16BITS -M 0,8,8,8 packedbits.h5
+    call :tooltest tpbitsUnsignedInt8.ddl -d /DU16BITS -M 0,8,8,8 packedbits.h5
+    call :tooltest tpbitsSignedLong16.ddl -d /DS32BITS -M 0,16,16,16 packedbits.h5
+    call :tooltest tpbitsUnsignedLong16.ddl -d /DU32BITS -M 0,16,16,16 packedbits.h5
+    call :tooltest tpbitsSignedLongLong32.ddl -d /DS64BITS -M 0,32,32,32 packedbits.h5
+    call :tooltest tpbitsUnsignedLongLong32.ddl -d /DU64BITS -M 0,32,32,32 packedbits.h5
+    rem Quarter sections
+    call :tooltest tpbitsSigned2.ddl -d /DS08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5
+    call :tooltest tpbitsUnsigned2.ddl -d /DU08BITS -M 0,2,2,2,4,2,6,2 packedbits.h5
+    call :tooltest tpbitsSignedInt4.ddl -d /DS16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5
+    call :tooltest tpbitsUnsignedInt4.ddl -d /DU16BITS -M 0,4,4,4,8,4,12,4 packedbits.h5
+    call :tooltest tpbitsSignedLong8.ddl -d /DS32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5
+    call :tooltest tpbitsUnsignedLong8.ddl -d /DU32BITS -M 0,8,8,8,16,8,24,8 packedbits.h5
+    call :tooltest tpbitsSignedLongLong16.ddl -d /DS64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5
+    call :tooltest tpbitsUnsignedLongLong16.ddl -d /DU64BITS -M 0,16,16,16,32,16,48,16 packedbits.h5
+    rem Begin and End
+    call :tooltest tpbitsSigned.ddl -d /DS08BITS -M 0,2,2,6 packedbits.h5
+    call :tooltest tpbitsUnsigned.ddl -d /DU08BITS -M 0,2,2,6 packedbits.h5
+    call :tooltest tpbitsSignedInt.ddl -d /DS16BITS -M 0,2,10,6 packedbits.h5
+    call :tooltest tpbitsUnsignedInt.ddl -d /DU16BITS -M 0,2,10,6 packedbits.h5
+    call :tooltest tpbitsSignedLong.ddl -d /DS32BITS -M 0,2,26,6 packedbits.h5
+    call :tooltest tpbitsUnsignedLong.ddl -d /DU32BITS -M 0,2,26,6 packedbits.h5
+    call :tooltest tpbitsSignedLongLong.ddl -d /DS64BITS -M 0,2,58,6 packedbits.h5
+    call :tooltest tpbitsUnsignedLongLong.ddl -d /DU64BITS -M 0,2,58,6 packedbits.h5
+    rem Overlapped packed bits.
+    call :tooltest tpbitsOverlapped.ddl -d /DS08BITS -M 0,1,1,1,2,1,0,3 packedbits.h5
+    rem Maximum number of packed bits.
+    call :tooltest tpbitsMax.ddl -d /DS08BITS -M 0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5
+    rem Compound type.
+    call :tooltest tpbitsCompound.ddl -d /dset1 -M 0,1,1,1 tcompound.h5
+    rem Array type.
+    call :tooltest tpbitsArray.ddl -d /Dataset1 -M 0,1,1,1 tarray1.h5
+    rem Test Error handling.
+    rem Too many packed bits requested. Max is 8 for now.
+    call :tooltest tpbitsMaxExceeded.ddl -d /DS08BITS -M 0,1,0,1,1,1,2,1,3,1,4,1,5,1,6,1,7,1 packedbits.h5
+    rem Offset too large. Max is 7 (8-1) for now.
+    call :tooltest tpbitsOffsetExceeded.ddl -d /DS08BITS -M 64,1 packedbits.h5
+    call :tooltest tpbitsCharOffsetExceeded.ddl -d /DS08BITS -M 8,1 packedbits.h5
+    call :tooltest tpbitsIntOffsetExceeded.ddl -d /DS16BITS -M 16,1 packedbits.h5
+    call :tooltest tpbitsLongOffsetExceeded.ddl -d /DS32BITS -M 32,1 packedbits.h5
+    rem Bad offset, must not be negative.
+    call :tooltest tpbitsOffsetNegative.ddl -d /DS08BITS -M -1,1 packedbits.h5
+    rem Bad length, must not be positive.
+    call :tooltest tpbitsLengthPositive.ddl -d /DS08BITS -M 4,0 packedbits.h5
+    rem Offset+Length is too large. Max is 8 for now.
+    call :tooltest tpbitsLengthExceeded.ddl -d /DS08BITS -M 37,28 packedbits.h5
+    call :tooltest tpbitsCharLengthExceeded.ddl -d /DS08BITS -M 2,7 packedbits.h5
+    call :tooltest tpbitsIntLengthExceeded.ddl -d /DS16BITS -M 10,7 packedbits.h5
+    call :tooltest tpbitsLongLengthExceeded.ddl -d /DS32BITS -M 26,7 packedbits.h5
+    rem Incomplete pair of packed bits request.
+    call :tooltest tpbitsIncomplete.ddl -d /DS08BITS -M 0,2,2,1,0,2,2, packedbits.h5
     
     if %nerrors% equ 0 (
         echo.All %dumper% tests passed.
diff --git a/windows/tools/h5dump/testh5dumpxml.bat b/windows/tools/h5dump/testh5dumpxml.bat
index 63356aa..22c13ae 100644
--- a/windows/tools/h5dump/testh5dumpxml.bat
+++ b/windows/tools/h5dump/testh5dumpxml.bat
@@ -77,9 +77,6 @@ rem
     (
         rem Remove quotes here, because Linux 'echo' command strips them.
         rem --SJW 8/24/07
-        echo.#############################
-        echo.Expected output for 'h5dump !params:"=!'
-        echo.#############################
         pushd %CD%\..\testfiles
         %dumper_bin% !params!
         popd
diff --git a/windows/tools/h5import/h5importtestutil.bat b/windows/tools/h5import/h5importtestutil.bat
index c13da4d..6ac8077 100644
--- a/windows/tools/h5import/h5importtestutil.bat
+++ b/windows/tools/h5import/h5importtestutil.bat
@@ -104,49 +104,52 @@ goto main
     rem On Windows, echo gives a carriage return, so we store the TESTING params
     rem and call TESTING from TOOLTEST.  --SJW 8/27/07
     set testing=ASCII I32 rank 3 - Output BE 
-    call :tooltest %srcdir%\testfiles\in32.txt -c %srcdir%\testfiles\textin32.conf -o test1.h5
+    call :tooltest %srcdir%\testfiles\txtin16.txt -c %srcdir%\testfiles\txtin32.conf -o txtin32.h5
 
     set testing=ASCII I16 rank 3 - Output LE - CHUNKED - extended
-    call :tooltest %srcdir%\testfiles\in16.txt -c %srcdir%\testfiles\textin16.conf -o test2.h5
+    call :tooltest %srcdir%\testfiles\txtin16.txt -c %srcdir%\testfiles\txtin16.conf -o txtin16.h5
 
     set testing=ASCII I8 - rank 3 - Output I16 LE-Chunked+Extended+Compressed
-    call :tooltest %srcdir%\testfiles\in16.txt -c %srcdir%\testfiles\textin8.conf  -o test3.h5
+    call :tooltest %srcdir%\testfiles\txtin16.txt -c %srcdir%\testfiles\txtin8.conf  -o txtin8.h5
 
     set testing=ASCII UI32 - rank 3 - Output BE
-    call :tooltest %srcdir%\testfiles\in1.txt -c %srcdir%\testfiles\textuin32.conf -o test4.h5
+    call :tooltest %srcdir%\testfiles\txtin32.txt -c %srcdir%\testfiles\txtuin32.conf -o txtuin32.h5
 
     set testing=ASCII UI16 - rank 2 - Output LE+Chunked+Compressed
-    call :tooltest %srcdir%\testfiles\in1.txt -c %srcdir%\testfiles\textuin16.conf -o test5.h5
+    call :tooltest %srcdir%\testfiles\txtuin32.txt -c %srcdir%\testfiles\txtuin16.conf -o txtuin16.h5
 
     set testing=ASCII F32 - rank 3 - Output LE
-    call :tooltest %srcdir%\testfiles\fp1.txt -c %srcdir%\testfiles\textfp32.conf -o test6.h5
+    call :tooltest %srcdir%\testfiles\txtfp32.txt -c %srcdir%\testfiles\txtfp32.conf -o txtfp32.h5
 
     set testing=ASCII F64 - rank 3 - Output BE + CHUNKED+Extended+Compressed
-    call :tooltest %srcdir%\testfiles\fp2.txt -c %srcdir%\testfiles\textfp64.conf -o test7.h5
+    call :tooltest %srcdir%\testfiles\txtfp64.txt -c %srcdir%\testfiles\txtfp64.conf -o txtfp64.h5
 
     set testing=BINARY F64 - rank 3 - Output LE+CHUNKED+Extended+Compressed
-    call :tooltest binfp64.bin -c %srcdir%\testfiles\binfp64.conf -o test8.h5
+    call :tooltest binfp64.bin -c %srcdir%\testfiles\binfp64.conf -o binfp64.h5
 
     set testing=BINARY I16 - rank 3 - Output order LE + CHUNKED + extended
-    call :tooltest binin16.bin -c %srcdir%\testfiles\binin16.conf -o test9.h5
+    call :tooltest binin16.bin -c %srcdir%\testfiles\binin16.conf -o binin16.h5
 
     set testing=BINARY I8 - rank 3 - Output I16LE + Chunked+Extended+Compressed
-    call :tooltest binin8.bin -c %srcdir%\testfiles\binin8.conf  -o test10.h5
+    call :tooltest binin8.bin -c %srcdir%\testfiles\binin8.conf  -o binin8.h5
 
     set testing=BINARY I32 - rank 3 - Output BE + CHUNKED
-    call :tooltest binin32.bin -c %srcdir%\testfiles\binin32.conf -o test11.h5
+    call :tooltest binin32.bin -c %srcdir%\testfiles\binin32.conf -o binin32.h5
 
     set testing=BINARY UI16 - rank 3 - Output byte BE + CHUNKED
-    call :tooltest binuin16.bin -c %srcdir%\testfiles\binuin16.conf -o test12.h5
+    call :tooltest binuin16.bin -c %srcdir%\testfiles\binuin16.conf -o binuin16.h5
 
     set testing=BINARY UI32 - rank 3 - Output LE + CHUNKED
-    call :tooltest binuin32.bin -c %srcdir%\testfiles\binuin32.conf -o test13.h5
+    call :tooltest binuin32.bin -c %srcdir%\testfiles\binuin32.conf -o binuin32.h5
 
     set testing=STR 
-    call :tooltest %srcdir%\testfiles\str.txt -c %srcdir%\testfiles\textstr.conf -o test14.h5
+    call :tooltest %srcdir%\testfiles\txtstr.txt -c %srcdir%\testfiles\txtstr.conf -o txtstr.h5
+
+    set testing=BINARY I8 CR LF EOF
+    call :tooltest binin8w.bin -c %srcdir%\testfiles\binin8w.conf -o binin8w.h5
     
     set testing=ASCII F64 - rank 1 - INPUT-CLASS TEXTFPE 
-    call :tooltest %srcdir%\testfiles\in64.txt -c %srcdir%\testfiles\textpfe.conf -o test15.h5
+    call :tooltest %srcdir%\testfiles\textpfe64.txt -c %srcdir%\testfiles\textpfe.conf -o textpfe.h5
 
 
     del /f *.txt *.bin *.h5
diff --git a/windows/tools/h5jam/testh5jam.bat b/windows/tools/h5jam/testh5jam.bat
index d675507..aaefe23 100644
--- a/windows/tools/h5jam/testh5jam.bat
+++ b/windows/tools/h5jam/testh5jam.bat
@@ -19,7 +19,7 @@ rem    Created:  Scott Wegner, 8/27/07
 rem    Modified:
 rem
 
-rem We currently don't build DLL version os h5jam / h5unjam, but the test script
+rem We currently don't build DLL version of h5jam / h5unjam, but the test script
 rem is setup to handle it if we ever decide to.  --SJW 8/27/07
 
 setlocal enabledelayedexpansion
diff --git a/windows/tools/h5ls/testh5ls.bat b/windows/tools/h5ls/testh5ls.bat
index f15274c..8a63cdc 100644
--- a/windows/tools/h5ls/testh5ls.bat
+++ b/windows/tools/h5ls/testh5ls.bat
@@ -87,11 +87,6 @@ rem %2 and on -- argument for the h5ls tool
     rem Stderr is included in stdout so that the diff can detect
     rem any unexpected output from that stream too
     (
-        echo.#############################
-        rem We strip out the parentesis here because echo on Linux does.
-        rem --SJW 8/28/07
-        echo. output for 'h5ls %params:"=%'
-        echo.#############################
         pushd %CD%\..\testfiles
         %h5ls_bin% %params%
         popd
diff --git a/windows/tools/testfiles/binread/binread.vcproj b/windows/tools/testfiles/binread/binread.vcproj
index b66fbd3..428e949 100644
--- a/windows/tools/testfiles/binread/binread.vcproj
+++ b/windows/tools/testfiles/binread/binread.vcproj
@@ -4,6 +4,7 @@
 	Version="9.00"
 	Name="binread"
 	ProjectGUID="{BE9A4A65-F25B-4DCF-8B55-06B3D0C685CB}"
+	RootNamespace="binread"
 	TargetFrameworkVersion="131072"
 	>
 	<Platforms>
@@ -74,7 +75,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/binread/Release/binread.pdb"
 				SubSystem="1"
@@ -162,7 +163,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/binread/Release/binread.pdb"
 				SubSystem="1"
@@ -248,7 +249,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				GenerateDebugInformation="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/binread/Debug/binread.pdb"
@@ -336,7 +337,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				GenerateDebugInformation="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/binread/Debug/binread.pdb"
@@ -371,63 +372,10 @@
 	<References>
 	</References>
 	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;f90;for;f;fpp"
+		<File
+			RelativePath="..\..\..\..\tools\h5dump\binread.c"
 			>
-			<File
-				RelativePath="..\..\..\..\tools\h5dump\binread.c"
-				>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-					/>
-				</FileConfiguration>
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;fi;fd"
-			>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-			>
-		</Filter>
+		</File>
 	</Files>
 	<Globals>
 	</Globals>
diff --git a/windows/tools/testfiles/h5difftst/h5difftst.vcproj b/windows/tools/testfiles/h5difftst/h5difftst.vcproj
index 08d0592..6b0bc49 100644
--- a/windows/tools/testfiles/h5difftst/h5difftst.vcproj
+++ b/windows/tools/testfiles/h5difftst/h5difftst.vcproj
@@ -4,6 +4,7 @@
 	Version="9.00"
 	Name="h5difftst"
 	ProjectGUID="{1F80CDF7-B1CB-4303-B282-A21EDC2BDCB4}"
+	RootNamespace="h5difftst"
 	TargetFrameworkVersion="131072"
 	>
 	<Platforms>
@@ -77,7 +78,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				IgnoreDefaultLibraryNames=""
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5difftst/Release/h5difftst.pdb"
@@ -169,7 +170,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				IgnoreDefaultLibraryNames=""
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5difftst/Release/h5difftst.pdb"
@@ -259,7 +260,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				IgnoreDefaultLibraryNames=""
 				GenerateDebugInformation="true"
@@ -351,7 +352,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				IgnoreDefaultLibraryNames=""
 				GenerateDebugInformation="true"
@@ -394,48 +395,6 @@
 			<File
 				RelativePath="..\..\..\..\tools\h5diff\h5diffgentest.c"
 				>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-					/>
-				</FileConfiguration>
 			</File>
 		</Filter>
 		<Filter
@@ -451,11 +410,6 @@
 				>
 			</File>
 		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-			>
-		</Filter>
 	</Files>
 	<Globals>
 	</Globals>
diff --git a/windows/tools/testfiles/h5dumptst/h5dumptst.vcproj b/windows/tools/testfiles/h5dumptst/h5dumptst.vcproj
index b303afd..6fc9d0a 100644
--- a/windows/tools/testfiles/h5dumptst/h5dumptst.vcproj
+++ b/windows/tools/testfiles/h5dumptst/h5dumptst.vcproj
@@ -4,6 +4,7 @@
 	Version="9.00"
 	Name="h5dumptst"
 	ProjectGUID="{0A33B4FE-A2C9-4B7F-ACEC-D251308182ED}"
+	RootNamespace="h5dumptst"
 	TargetFrameworkVersion="131072"
 	>
 	<Platforms>
@@ -75,7 +76,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				IgnoreDefaultLibraryNames=""
 				GenerateDebugInformation="true"
@@ -166,7 +167,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				IgnoreDefaultLibraryNames=""
 				GenerateDebugInformation="true"
@@ -258,7 +259,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				IgnoreDefaultLibraryNames=""
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5dumptst/Release/h5dumptst.pdb"
@@ -350,7 +351,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				IgnoreDefaultLibraryNames=""
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5dumptst/Release/h5dumptst.pdb"
@@ -388,46 +389,6 @@
 		<File
 			RelativePath="..\..\..\..\tools\h5dump\h5dumpgentest.c"
 			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|x64"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="2"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|x64"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="2"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-				/>
-			</FileConfiguration>
 		</File>
 	</Files>
 	<Globals>
diff --git a/windows/tools/testfiles/h5importtst/h5importtst.vcproj b/windows/tools/testfiles/h5importtst/h5importtst.vcproj
index 3257f3f..81bc060 100644
--- a/windows/tools/testfiles/h5importtst/h5importtst.vcproj
+++ b/windows/tools/testfiles/h5importtst/h5importtst.vcproj
@@ -4,6 +4,7 @@
 	Version="9.00"
 	Name="h5importtst"
 	ProjectGUID="{AF696934-5004-4C1D-90C3-B434E92AFB89}"
+	RootNamespace="h5importtst"
 	TargetFrameworkVersion="131072"
 	>
 	<Platforms>
@@ -75,7 +76,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				GenerateDebugInformation="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5importtst/Debug/h5importtst.pdb"
@@ -165,7 +166,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				GenerateDebugInformation="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5importtst/Debug/h5importtst.pdb"
@@ -255,7 +256,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5importtst/Release/h5importtst.pdb"
 				SubSystem="1"
@@ -345,7 +346,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5importtst/Release/h5importtst.pdb"
 				SubSystem="1"
@@ -382,48 +383,6 @@
 		<File
 			RelativePath="..\..\..\..\tools\h5import\h5importtest.c"
 			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					BasicRuntimeChecks="3"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|x64"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					BasicRuntimeChecks="3"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="2"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|x64"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="2"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-				/>
-			</FileConfiguration>
 		</File>
 	</Files>
 	<Globals>
diff --git a/windows/tools/testfiles/h5jamtst/h5jamtst.vcproj b/windows/tools/testfiles/h5jamtst/h5jamtst.vcproj
index 2da3f5b..44284e1 100644
--- a/windows/tools/testfiles/h5jamtst/h5jamtst.vcproj
+++ b/windows/tools/testfiles/h5jamtst/h5jamtst.vcproj
@@ -4,6 +4,7 @@
 	Version="9.00"
 	Name="h5jamtst"
 	ProjectGUID="{E8896FEE-8601-4AFC-91EA-6F9698574174}"
+	RootNamespace="h5jamtst"
 	TargetFrameworkVersion="131072"
 	>
 	<Platforms>
@@ -76,7 +77,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				IgnoreDefaultLibraryNames=""
 				GenerateDebugInformation="true"
@@ -168,7 +169,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				IgnoreDefaultLibraryNames=""
 				GenerateDebugInformation="true"
@@ -260,7 +261,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5jamtst/Release/h5jamtst.pdb"
 				SubSystem="1"
@@ -351,7 +352,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5jamtst/Release/h5jamtst.pdb"
 				SubSystem="1"
@@ -388,48 +389,6 @@
 		<File
 			RelativePath="..\..\..\..\tools\h5jam\h5jamgentest.c"
 			>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					BasicRuntimeChecks="3"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|x64"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					BasicRuntimeChecks="3"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="2"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|x64"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="2"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-				/>
-			</FileConfiguration>
 		</File>
 	</Files>
 	<Globals>
diff --git a/windows/tools/testfiles/h5repacktst/h5repacktst.vcproj b/windows/tools/testfiles/h5repacktst/h5repacktst.vcproj
index d352135..8f65ad5 100644
--- a/windows/tools/testfiles/h5repacktst/h5repacktst.vcproj
+++ b/windows/tools/testfiles/h5repacktst/h5repacktst.vcproj
@@ -4,6 +4,7 @@
 	Version="9.00"
 	Name="h5repacktst"
 	ProjectGUID="{AC4C582B-B27D-4E57-A59F-6FF0E833C6E5}"
+	RootNamespace="h5repacktst"
 	TargetFrameworkVersion="131072"
 	>
 	<Platforms>
@@ -77,7 +78,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib WS2_32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				IgnoreDefaultLibraryNames=""
 				GenerateDebugInformation="true"
@@ -170,7 +171,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib WS2_32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				IgnoreDefaultLibraryNames=""
 				GenerateDebugInformation="true"
@@ -262,7 +263,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib WS2_32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5repacktst/Release/h5repacktst.pdb"
 				SubSystem="1"
@@ -353,7 +354,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib WS2_32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5repacktst/Release/h5repacktst.pdb"
 				SubSystem="1"
@@ -394,386 +395,34 @@
 			<File
 				RelativePath="..\..\..\..\tools\h5repack\h5repack.c"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-						BrowseInformation="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-						BrowseInformation="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
 				RelativePath="..\..\..\..\tools\h5repack\h5repack_copy.c"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-						BrowseInformation="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-						BrowseInformation="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
 				RelativePath="..\..\..\..\tools\h5repack\h5repack_filters.c"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-						BrowseInformation="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-						BrowseInformation="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
 				RelativePath="..\..\..\..\tools\h5repack\h5repack_opttable.c"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-						BrowseInformation="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-						BrowseInformation="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
 				RelativePath="..\..\..\..\tools\h5repack\h5repack_parse.c"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-						BrowseInformation="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-						BrowseInformation="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
 				RelativePath="..\..\..\..\tools\h5repack\h5repack_refs.c"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-						BrowseInformation="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-						BrowseInformation="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
 				RelativePath="..\..\..\..\tools\h5repack\h5repack_verify.c"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-						BrowseInformation="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-						BrowseInformation="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
 			</File>
 			<File
 				RelativePath="..\..\..\..\tools\h5repack\h5repacktst.c"
 				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-						BrowseInformation="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-						BrowseInformation="1"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
 			</File>
 		</Filter>
 		<Filter
@@ -785,11 +434,6 @@
 				>
 			</File>
 		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-			>
-		</Filter>
 	</Files>
 	<Globals>
 	</Globals>
diff --git a/windows/tools/testfiles/h5repart_gentest/h5repart_gentest.vcproj b/windows/tools/testfiles/h5repart_gentest/h5repart_gentest.vcproj
index 351349b..dbcf62d 100644
--- a/windows/tools/testfiles/h5repart_gentest/h5repart_gentest.vcproj
+++ b/windows/tools/testfiles/h5repart_gentest/h5repart_gentest.vcproj
@@ -4,6 +4,7 @@
 	Version="9.00"
 	Name="h5repart_gentest"
 	ProjectGUID="{EBF7C380-5F58-462D-993D-75B53F83FA81}"
+	RootNamespace="h5repart_gentest"
 	TargetFrameworkVersion="131072"
 	>
 	<Platforms>
@@ -76,7 +77,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				GenerateDebugInformation="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5repart_gentest/Debug/h5repart_gentest.pdb"
@@ -167,7 +168,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				GenerateDebugInformation="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5repart_gentest/Debug/h5repart_gentest.pdb"
@@ -258,7 +259,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5repart_gentest/Release/h5repart_gentest.pdb"
 				SubSystem="1"
@@ -349,7 +350,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5repart_gentest/Release/h5repart_gentest.pdb"
 				SubSystem="1"
@@ -383,67 +384,10 @@
 	<References>
 	</References>
 	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;f90;for;f;fpp"
+		<File
+			RelativePath="..\..\..\..\tools\misc\h5repart_gentest.c"
 			>
-			<File
-				RelativePath="..\..\..\..\tools\misc\h5repart_gentest.c"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;fi;fd"
-			>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-			>
-		</Filter>
+		</File>
 	</Files>
 	<Globals>
 	</Globals>
diff --git a/windows/tools/testfiles/h5reparttst/h5reparttst.vcproj b/windows/tools/testfiles/h5reparttst/h5reparttst.vcproj
index 6c2a092..a01dac7 100644
--- a/windows/tools/testfiles/h5reparttst/h5reparttst.vcproj
+++ b/windows/tools/testfiles/h5reparttst/h5reparttst.vcproj
@@ -4,6 +4,7 @@
 	Version="9.00"
 	Name="h5reparttst"
 	ProjectGUID="{53022A9D-F5B2-407C-9A29-3AC71B3E6DDC}"
+	RootNamespace="h5reparttst"
 	TargetFrameworkVersion="131072"
 	>
 	<Platforms>
@@ -76,7 +77,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				GenerateDebugInformation="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5reparttst/Debug/h5reparttst.pdb"
@@ -167,7 +168,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				GenerateDebugInformation="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5reparttst/Debug/h5reparttst.pdb"
@@ -258,7 +259,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5reparttst/Release/h5reparttst.pdb"
 				SubSystem="1"
@@ -349,7 +350,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/h5reparttst/Release/h5reparttst.pdb"
 				SubSystem="1"
@@ -383,67 +384,10 @@
 	<References>
 	</References>
 	<Files>
-		<Filter
-			Name="Source Files"
-			Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat;f90;for;f;fpp"
+		<File
+			RelativePath="..\..\..\..\tools\misc\repart_test.c"
 			>
-			<File
-				RelativePath="..\..\..\..\tools\misc\repart_test.c"
-				>
-				<FileConfiguration
-					Name="Debug|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Debug|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="0"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-						BasicRuntimeChecks="3"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|Win32"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
-				<FileConfiguration
-					Name="Release|x64"
-					>
-					<Tool
-						Name="VCCLCompilerTool"
-						Optimization="2"
-						AdditionalIncludeDirectories=""
-						PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					/>
-				</FileConfiguration>
-			</File>
-		</Filter>
-		<Filter
-			Name="Header Files"
-			Filter="h;hpp;hxx;hm;inl;fi;fd"
-			>
-		</Filter>
-		<Filter
-			Name="Resource Files"
-			Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
-			>
-		</Filter>
+		</File>
 	</Files>
 	<Globals>
 	</Globals>
diff --git a/windows/tools/testfiles/testh5repack_detect_szip/testh5repack_detect_szip.vcproj b/windows/tools/testfiles/testh5repack_detect_szip/testh5repack_detect_szip.vcproj
index 1025f87..dc6c4ba 100644
--- a/windows/tools/testfiles/testh5repack_detect_szip/testh5repack_detect_szip.vcproj
+++ b/windows/tools/testfiles/testh5repack_detect_szip/testh5repack_detect_szip.vcproj
@@ -4,6 +4,7 @@
 	Version="9.00"
 	Name="testh5repack_detect_szip"
 	ProjectGUID="{5EA5BDAD-3AE9-4BCA-AC1A-93B3B8499C30}"
+	RootNamespace="testh5repack_detect_szip"
 	TargetFrameworkVersion="131072"
 	>
 	<Platforms>
@@ -77,7 +78,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/testh5repack_detect_szip/Release/testh5repack_detect_szip.pdb"
 				SubSystem="1"
@@ -168,7 +169,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/testh5repack_detect_szip/Release/testh5repack_detect_szip.pdb"
 				SubSystem="1"
@@ -257,7 +258,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				IgnoreDefaultLibraryNames=""
 				GenerateDebugInformation="true"
@@ -349,7 +350,7 @@
 				Name="VCLinkerTool"
 				AdditionalDependencies="odbc32.lib odbccp32.lib $(HDF5_EXT_ZLIB) $(HDF5_EXT_SZIP)"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				IgnoreDefaultLibraryNames=""
 				GenerateDebugInformation="true"
@@ -388,48 +389,6 @@
 		<File
 			RelativePath="..\..\..\..\tools\h5repack\testh5repack_detect_szip.c"
 			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="2"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|x64"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="2"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					BasicRuntimeChecks="3"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|x64"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					BasicRuntimeChecks="3"
-				/>
-			</FileConfiguration>
 		</File>
 	</Files>
 	<Globals>
diff --git a/windows/tools/testfiles/testh5repack_detect_szipdll/testh5repack_detect_szipdll.vcproj b/windows/tools/testfiles/testh5repack_detect_szipdll/testh5repack_detect_szipdll.vcproj
index bb8b3dd..00c0808 100644
--- a/windows/tools/testfiles/testh5repack_detect_szipdll/testh5repack_detect_szipdll.vcproj
+++ b/windows/tools/testfiles/testh5repack_detect_szipdll/testh5repack_detect_szipdll.vcproj
@@ -4,6 +4,7 @@
 	Version="9.00"
 	Name="testh5repack_detect_szipdll"
 	ProjectGUID="{E75602FF-F4E6-4F45-AD0D-EA49C0C66DEF}"
+	RootNamespace="testh5repack_detect_szipdll"
 	TargetFrameworkVersion="131072"
 	>
 	<Platforms>
@@ -76,7 +77,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/testh5repack_detect_szipdll/Release/testh5repack_detect_szipdll.pdb"
 				SubSystem="1"
@@ -166,7 +167,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/testh5repack_detect_szipdll/Release/testh5repack_detect_szipdll.pdb"
 				SubSystem="1"
@@ -254,7 +255,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				GenerateDebugInformation="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/testh5repack_detect_szipdll/Debug/testh5repack_detect_szipdll.pdb"
@@ -344,7 +345,7 @@
 			<Tool
 				Name="VCLinkerTool"
 				OutputFile="$(OutDir)\$(ProjectName).exe"
-				LinkIncremental="1"
+				LinkIncremental="0"
 				SuppressStartupBanner="true"
 				GenerateDebugInformation="true"
 				ProgramDatabaseFile=".\../../../../tools/testfiles/testh5repack_detect_szipdll/Debug/testh5repack_detect_szipdll.pdb"
@@ -382,48 +383,6 @@
 		<File
 			RelativePath="..\..\..\..\tools\h5repack\testh5repack_detect_szip.c"
 			>
-			<FileConfiguration
-				Name="Release|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="2"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Release|x64"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="2"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|Win32"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					BasicRuntimeChecks="3"
-				/>
-			</FileConfiguration>
-			<FileConfiguration
-				Name="Debug|x64"
-				>
-				<Tool
-					Name="VCCLCompilerTool"
-					Optimization="0"
-					AdditionalIncludeDirectories=""
-					PreprocessorDefinitions="BIND_TO_CURRENT_VCLIBS_VERSION=1;"
-					BasicRuntimeChecks="3"
-				/>
-			</FileConfiguration>
 		</File>
 	</Files>
 	<Globals>

-- 
Hierarchical Data Format 5 (HDF5)



More information about the Pkg-grass-devel mailing list